API Reference
Programmatic access to satellite interference analysis and coverage data.
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.
/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) |
/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"
}
}
/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) |
/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) |
/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
/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"
}
/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
}
}
/api/v1/coverage_analysis_runs/:id/interference_cells/by_epoch/:epoch_index
Returns all interference cells for a specific epoch (timestep).
/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.