Documentation

API Reference

Programmatic access to satellite interference analysis and coverage data.

Base URL https://app.vega.space/api/v1

Quick Start

# 1. Authenticate to get an API token
curl -X POST https://app.vega.space/api/v1/auth \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "password": "your-password"}'

# Response: {"token": "YOUR_API_TOKEN", "user": {...}}

# 2. Query interference at a point
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  "https://app.vega.space/api/v1/interference/at_point?\
tracked_satellite_id=84&lat=45.0&lon=-120.0&\
timestamp=2025-12-06T08:05:00Z"

Authentication

All API requests (except health checks) require authentication via Bearer token.

Obtain a Token

POST /api/v1/auth
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "your-password"
}

Response:

{
  "token": "Aha8iPmNDFr76K6jhweaLEHf",
  "user": {
    "id": 1,
    "email": "user@example.com",
    "first_name": "John",
    "last_name": "Doe"
  }
}

Using the Token

Include the token in all subsequent requests:

Authorization: Bearer YOUR_API_TOKEN

Get Current User

GET /api/v1/me

Revoke Token

DELETE /api/v1/auth

Interference Analysis

Enterprise Access Required

These endpoints require an active Enterprise satellite subscription. Returns 403 otherwise.

GET /api/v1/interference/at_point

Returns the interference intensity at a specific geographic coordinate and timestamp.

Parameters

Parameter Type Required Description
tracked_satellite_id integer Yes ID of your tracked satellite
lat float Yes Latitude (-90 to 90 degrees)
lon float Yes Longitude (-180 to 180 degrees)
timestamp string Yes ISO8601 timestamp
frequency_band string No Filter by band (e.g., Ka, Ku). Default: all
include_cell_id boolean No Include HEALPix cell ID in response

Response:

{
  "data": {
    "intensity": 5,
    "timestamp": "2025-12-06T08:05:00Z",
    "risk_level": "low",
    "nside": 64,
    "cell_resolution_deg": 0.9161,
    "frequency_band": "Ka"
  },
  "meta": {
    "request_id": "a702aa12-8922-4e3f-8b27-a6c4748a257f",
    "timestamp": "2025-12-09T10:30:00Z"
  }
}

Response Fields

Field Type Description
intensity integer Number of potentially interfering satellites
timestamp string Snapped timestamp (discrete 60-second intervals)
risk_level string low, moderate, high, severe
nside integer HEALPix resolution parameter
cell_resolution_deg float Approximate cell size in degrees
cell_id integer HEALPix cell ID (only if include_cell_id=true)
GET /api/v1/interference/timeseries

Returns interference intensity over time for a specific geographic coordinate within a time range. Maximum window: 7 days (10,080 data points at 1-minute resolution).

Parameters

Parameter Type Required Description
tracked_satellite_id integer Yes ID of your tracked satellite
lat float Yes Latitude (-90 to 90 degrees)
lon float Yes Longitude (-180 to 180 degrees)
start_time string Yes Start of time range (ISO8601)
end_time string Yes End of time range (ISO8601)
frequency_band string No Filter by band. Default: all

Response:

{
  "data": {
    "lat": 45.0,
    "lon": -120.0,
    "start_time": "2025-12-06T08:00:00Z",
    "end_time": "2025-12-06T08:05:00Z",
    "data_points": 5,
    "nside": 64,
    "cell_resolution_deg": 0.9161,
    "frequency_band": "Ka",
    "timeseries": [
      { "timestamp": "2025-12-06T08:01:00Z", "intensity": 3, "risk_level": "low" },
      { "timestamp": "2025-12-06T08:02:00Z", "intensity": 5, "risk_level": "low" }
    ]
  },
  "meta": {
    "request_id": "c5f8e321-4b2a-4d8f-9c7e-1a2b3c4d5e6f",
    "timestamp": "2025-12-09T10:30:00Z"
  }
}
GET /api/v1/interference/ground_station_timeseries

Returns interference during satellite passes over a specific ground station.

Parameters

Parameter Type Required Description
tracked_satellite_id integer Yes ID of your tracked satellite
ground_station_id integer Yes ID of your ground station
start_time string No Start of time range (ISO8601)
end_time string No End of time range (ISO8601)
GET /api/v1/interference/all_ground_stations

Returns interference at all ground stations on your account for a tracked satellite.

Parameters

Parameter Type Required Description
tracked_satellite_id integer Yes ID of your tracked satellite
start_time string No Start of time range (ISO8601)
end_time string No End of time range (ISO8601)
GET /api/v1/interference/available_frequency_bands

Returns the list of frequency bands that have interference data for a tracked satellite.

Parameters

Parameter Type Required Description
tracked_satellite_id integer Yes ID of your tracked satellite

Response:

{
  "data": {
    "tracked_satellite_id": 84,
    "coverage_analysis_run_id": 875,
    "frequency_bands": [
      {
        "name": "Ka",
        "min_ghz": 26.5,
        "max_ghz": 40.0,
        "range_ghz": "26.5-40.0 GHz"
      },
      {
        "name": "Ku",
        "min_ghz": 12.0,
        "max_ghz": 18.0,
        "range_ghz": "12.0-18.0 GHz"
      },
      { "name": "all", "min_ghz": null, "max_ghz": null }
    ]
  },
  "meta": { "request_id": "...", "timestamp": "..." }
}

Risk Level Thresholds

Level Intensity Range Description
low 0–9 Minimal interference
moderate 10–19 Some potential interference
high 20–29 Significant interference
severe 30+ Critical interference level

Coverage Analysis

GET /api/v1/coverage_analysis_runs/:id

Returns details of a coverage analysis run.

Response:

{
  "id": 875,
  "status": "completed",
  "start_time": "2025-12-06T08:00:00Z",
  "end_time": "2025-12-13T08:00:00Z",
  "mesh_resolution": 64,
  "time_step_seconds": 60,
  "created_at": "2025-12-06T00:00:00Z"
}
GET /api/v1/coverage_analysis_runs/:id/interference_cells

Returns paginated interference cell data for a coverage run.

Parameters

Parameter Default Max Description
page 1 Page number
per_page 100 1,000 Items per page

Response:

{
  "interference_cells": [
    {
      "id": 12345,
      "epoch_index": 0,
      "nside": 64,
      "ipix": 42048,
      "ordering": "NESTED",
      "value": 5
    }
  ],
  "pagination": {
    "current_page": 1,
    "total_pages": 100,
    "total_count": 10000,
    "per_page": 100
  }
}
GET /api/v1/coverage_analysis_runs/:id/interference_cells/by_epoch/:epoch_index

Returns all interference cells for a specific epoch (timestep).

GET /api/v1/coverage_analysis_runs/:id/interference_cells/time_series

Returns interference over time for a specific HEALPix cell.

Parameters

Parameter Type Required Description
ipix integer Yes HEALPix pixel index
nside integer Yes HEALPix resolution parameter

Response:

{
  "ipix": 42048,
  "nside": 64,
  "data_points": 720,
  "time_series": [
    { "epoch_index": 0, "value": 5, "timestamp": "2025-12-06T08:00:00Z" },
    { "epoch_index": 1, "value": 4, "timestamp": "2025-12-06T08:01:00Z" }
  ]
}

Frequency Bands

The following frequency bands are supported. Use the available_frequency_bands endpoint to see which bands have data for a specific satellite.

Band Frequency Range Common Use
VHF 0.03–0.3 GHz Voice, telemetry
UHF 0.3–1.0 GHz Mobile satellite
L 1.0–2.0 GHz GPS, mobile
S 2.0–4.0 GHz Weather radar
C 4.0–8.0 GHz Fixed satellite
X 8.0–12.0 GHz Military, radar
Ku 12.0–18.0 GHz TV broadcast
K 18.0–26.5 GHz Satellite uplink
Ka 26.5–40.0 GHz High-throughput
V 40.0–75.0 GHz High capacity
W 75.0–110.0 GHz Experimental
all All bands Aggregate interference

Cell Resolution

Interference analysis uses HEALPix for spatial discretization. Multiple coordinates within the same cell return identical intensity values.

nside Cell Size Approx. km (equator)
32 1.83° 203 km
64 0.92° 102 km
128 0.46° 51 km
256 0.23° 25 km

Error Handling

HTTP Status Codes

Code Meaning
200 Success
400 Bad Request — invalid parameters
401 Unauthorized — invalid or missing token
403 Forbidden — insufficient permissions (e.g., Enterprise required)
404 Not Found — resource doesn't exist or timestamp outside window
422 Unprocessable Entity — validation error
429 Too Many Requests — rate limit exceeded
500 Internal Server Error

Error Response Format

{
  "error": {
    "code": "TIMESTAMP_OUTSIDE_WINDOW",
    "message": "timestamp outside analysis window",
    "details": {
      "valid_range": {
        "start": "2025-12-06T08:00:00Z",
        "end": "2025-12-13T08:00:00Z"
      }
    }
  },
  "meta": {
    "request_id": "a702aa12-...",
    "timestamp": "2025-12-09T10:30:00Z"
  }
}

The meta.request_id is useful for debugging and support inquiries.

Rate Limits

Endpoint Limit Window
Interference API 100 requests 1 minute
Other API 100 requests 1 hour

When rate limited, you'll receive a 429 response with headers:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1699876543
Retry-After: 45

SDKs & Code Examples

Python

import requests

API_BASE = "https://app.vega.space/api/v1"
TOKEN = "YOUR_API_TOKEN"

headers = {"Authorization": f"Bearer {TOKEN}"}

# Get interference at location
response = requests.get(
    f"{API_BASE}/interference/at_point",
    headers=headers,
    params={
        "tracked_satellite_id": 84,
        "lat": 45.0,
        "lon": -120.0,
        "timestamp": "2025-12-06T08:05:00Z"
    }
)

result = response.json()
data = result["data"]
print(f"Interference: {data['intensity']} satellites")
print(f"Risk level: {data['risk_level']}")
print(f"Request ID: {result['meta']['request_id']}")

JavaScript / Node.js

const API_BASE = 'https://app.vega.space/api/v1';
const TOKEN = 'YOUR_API_TOKEN';

async function getInterference(lat, lon, timestamp, satelliteId) {
  const params = new URLSearchParams({
    tracked_satellite_id: satelliteId,
    lat: lat,
    lon: lon,
    timestamp: timestamp
  });

  const response = await fetch(
    `${API_BASE}/interference/at_point?${params}`,
    { headers: { 'Authorization': `Bearer ${TOKEN}` } }
  );

  return response.json();
}

// Usage
const result = await getInterference(45.0, -120.0, '2025-12-06T08:05:00Z', 84);
const { data, meta } = result;
console.log(`Interference: ${data.intensity} satellites`);
console.log(`Risk level: ${data.risk_level}`);

cURL

# Set your token
export VEGA_TOKEN="YOUR_API_TOKEN"

# Query interference
curl -H "Authorization: Bearer $VEGA_TOKEN" \
  "https://app.vega.space/api/v1/interference/at_point?\
tracked_satellite_id=84&\
lat=45.0&\
lon=-120.0&\
timestamp=2025-12-06T08:05:00Z"

All API responses include an X-Request-Id header for debugging and support inquiries. Contact us if you need help with integration.