Developers
The SatelliteIndex API
Every page on this site is rendered from the public JSON API documented here — there is no private dataset behind it. Free, no key required during the MVP, rate-limited per client.
Basics
Base URL: https://www.satelliteindex.io/api/v1. All endpoints are GET, return application/json encoded in UTF-8, and use UTC ISO-8601 timestamps. Units are kilometres, km/s, kilograms, degrees and minutes. Countries are ISO 3166-1 alpha-2 codes. Numbers aggregated by the database may arrive as strings — parse them as decimals.
Satellites can be addressed by slug (iss-zarya-25544), NORAD catalog number (25544) or COSPAR designator (1998-067A). Internal ids are prefixed ULIDs (sat_…) and are stable; NORAD and COSPAR are source identifiers and are kept as such.
curl -s "https://www.satelliteindex.io/api/v1/satellites/25544" | jq '.data | {name, norad_id, status, orbit_class, live}'Response envelope and pagination
Single resources return { data, meta }; list endpoints add a pagination block. meta.request_id is the id you will find in our server logs if you report a problem; meta.generated_at is the server time of the response (responses may be cached for up to a few minutes).
{
"data": [ … ],
"pagination": { "page": 1, "page_size": 50, "total": 17026, "pages": 341 },
"meta": { "request_id": "b382117229134a57", "generated_at": "2026-09-11T18:17:53Z" }
}Errors use the same envelope with an error object: { "error": { "title", "detail", "status" } } and the matching HTTP status (404 unknown entity, 422 invalid parameter, 429 rate limited, 503 upstream/database unavailable). Paginate with page and page_size (1–200; sitemap feeds allow more).
Endpoints
Satellites
- GET
/satellitesPaginated catalog with filters (status, object_type, orbit_class, mission_type, country, operator, constellation, launch, launch_site, on_orbit, has_gp, launched_after/before, decayed_after, min/max_perigee, tag, q, sort).
curl -s "https://www.satelliteindex.io/api/v1/satellites?status=ACTIVE&orbit_class=LEO&sort=-launch_date&page_size=25" - GET
/satellites/facetsFacet counts (status, object type, orbit class, mission type, country, constellation) for the same filters.
curl -s "https://www.satelliteindex.io/api/v1/satellites/facets?constellation=starlink" - GET
/satellites/{ident}One object by slug, NORAD id or COSPAR id — canonical record, latest elements, live position, provenance, freshness, events, siblings.
curl -s "https://www.satelliteindex.io/api/v1/satellites/25544" - GET
/satellites/{ident}/positionrate bucket: positionGeodetic position (lat, lon, altitude, velocity) at `time` (default now), propagated on demand with SGP4.
curl -s "https://www.satelliteindex.io/api/v1/satellites/25544/position" - GET
/satellites/{ident}/liverate bucket: positionLightweight live position for polling UIs (30 s cache).
curl -s "https://www.satelliteindex.io/api/v1/satellites/25544/live" - GET
/satellites/{ident}/trackGround track: points `before`/`after` now (minutes) every `step` seconds, with a `future` flag.
curl -s "https://www.satelliteindex.io/api/v1/satellites/25544/track?before=45&after=90&step=60" - GET
/satellites/{ident}/orbitOrbital element history (append-only), newest first.
curl -s "https://www.satelliteindex.io/api/v1/satellites/25544/orbit?limit=50" - GET
/satellites/{ident}/historyField change log (status, operator, orbit class…) plus a daily altitude/period/inclination series.
curl -s "https://www.satelliteindex.io/api/v1/satellites/25544/history"
Endpoints
Search
- GET
/searchrate bucket: searchFull-text search across satellites, operators, constellations, countries, launches and launch sites; returns ranked results with hrefs and filter shortcuts.
curl -s "https://www.satelliteindex.io/api/v1/search?q=starlink&limit=10" - GET
/search/suggestrate bucket: searchTypeahead suggestions.
curl -s "https://www.satelliteindex.io/api/v1/search/suggest?q=sent"
Endpoints
Entities
- GET
/constellationsConstellations with fleet counts, growth and activity score.
curl -s "https://www.satelliteindex.io/api/v1/constellations?sort=-active" - GET
/constellations/{slug}Constellation detail: shells, histograms, launches, memberships, match patterns and CelesTrak groups used.
curl -s "https://www.satelliteindex.io/api/v1/constellations/starlink" - GET
/operatorsOperators / organizations with payload counts.
curl -s "https://www.satelliteindex.io/api/v1/operators?sort=-active_payloads" - GET
/operators/{slug}Operator detail: fleet, constellations, launches, distributions.
curl -s "https://www.satelliteindex.io/api/v1/operators/spacex" - GET
/countriesCountries ranked by active payloads, on-orbit objects or debris.
curl -s "https://www.satelliteindex.io/api/v1/countries?sort=active" - GET
/countries/{ident}Country detail by ISO code or slug.
curl -s "https://www.satelliteindex.io/api/v1/countries/CA"
Endpoints
Launches, debris, reentries
- GET
/launchesLaunches derived from international designators, with payload/object counts.
curl -s "https://www.satelliteindex.io/api/v1/launches?year=2026&sort=-launch_date" - GET
/launches/timelineLaunches and payloads per year and month, plus launch sites.
curl -s "https://www.satelliteindex.io/api/v1/launches/timeline" - GET
/launches/{cospar}One launch by designator prefix (YYYY-NNN) with all catalogued objects.
curl -s "https://www.satelliteindex.io/api/v1/launches/1998-067" - GET
/launch-sitesLaunch sites with coordinates and counts.
curl -s "https://www.satelliteindex.io/api/v1/launch-sites" - GET
/launch-sites/{slug}Launch site detail with yearly series and recent launches.
curl -s "https://www.satelliteindex.io/api/v1/launch-sites/kennedy-space-center" - GET
/debrisDebris and rocket-body totals by country, altitude, launch; growth and decay series.
curl -s "https://www.satelliteindex.io/api/v1/debris" - GET
/reentriesRecently decayed objects (paginated), monthly series and a low-perigee watch list.
curl -s "https://www.satelliteindex.io/api/v1/reentries?days=30"
Endpoints
Events and statistics
- GET
/eventsDetected events (launch catalogued, decay, status change, orbit change…) with linked entities.
curl -s "https://www.satelliteindex.io/api/v1/events?type=DECAY&page_size=20" - GET
/events/{event_id}One event.
curl -s "https://www.satelliteindex.io/api/v1/events/evt_…" - GET
/statsLatest global statistics snapshot: totals, by orbit class / object type / mission, yearly series, top entities, orbital buckets, connector state.
curl -s "https://www.satelliteindex.io/api/v1/stats" - GET
/rankingsRanked lists by metric (e.g. active_payloads, debris, launches_365d).
curl -s "https://www.satelliteindex.io/api/v1/rankings?metric=active_payloads&limit=20" - GET
/orbit/densityOrbital density: objects per perigee bucket, 25 km LEO profile, 5° inclination profile. Informational, not a risk metric.
curl -s "https://www.satelliteindex.io/api/v1/orbit/density"
Endpoints
Orbit (batch)
- GET
/orbit/positionsrate bucket: positionsPositions of every tracked object at t0 and t0+step, as compact parallel arrays (see below).
curl -s "https://www.satelliteindex.io/api/v1/orbit/positions?step=60"
Endpoints
Transparency
- GET
/sourcesSource catalog with license, attribution, connectors, snapshot and provenance counts, freshness.
curl -s "https://www.satelliteindex.io/api/v1/sources" - GET
/sources/statusConnector health (last success, schedule, failures, circuit breaker) and orbital element age.
curl -s "https://www.satelliteindex.io/api/v1/sources/status" - GET
/methodologyVersioned metric definitions, constellation rules and owner-code table.
curl -s "https://www.satelliteindex.io/api/v1/methodology" - GET
/healthLiveness + component checks (also at /health without the prefix).
curl -s "https://www.satelliteindex.io/api/v1/health"
Batch positions format
/orbit/positions returns the position of every object in the propagator (tens of thousands) at two instants, t0 and t1 = t0 + step_s, so a client can interpolate smoothly between polls. To keep the payload small the response is a set of parallel arrays rather than one object per satellite: index i of each array describes the same object.
{
"t0": "…", "t1": "…", "step_s": 60, "count": N, "total_tracked": N,
"fields": ["norad", "cls", "mission", "active", "pos", "vel"],
"norad": [25544, …], // NORAD id per object
"cls": [0, …], // index into legend.cls (orbit class)
"mission": [8, …], // index into legend.mission
"active": [1, …], // 1 = ACTIVE status
"pos": [lat0, lon0, alt0, lat1, lon1, alt1, …], // 6 numbers per object (deg, deg, km)
"vel": [v0, v1, …], // km/s at t0 and t1
"legend": { "cls": ["LEO","MEO","GEO","HEO","OTHER"], "mission": [ … ] }
}Positions are derived from the latest element set of each object and inherit its age; check /sources/status for the median element age before relying on them.
Rate limits
Limits are applied per client IP over a sliding 60-second window. Exceeding a bucket returns 429 Too Many Requests with the bucket name in the error detail. Cache responses on your side; most datasets change hourly at most.
| Bucket | Requests / min | Applies to |
|---|---|---|
| default | 600 | every endpoint not listed below |
| search | 120 | /search, /search/suggest |
| position | 240 | /satellites/{ident}/position, /live |
| positions | 60 | /orbit/positions (batch) |
Attribution and terms
If you republish data from this API you must keep the upstream attributions. The orbital elements and catalog come from CelesTrak, whose terms require credit: “Orbital data courtesy of CelesTrak.” Derived values (orbit class, mission type, constellation membership, activity score, density) should be credited to SatelliteIndex with a link to the methodology. The full source list with licenses is on /sources.
SatelliteIndex aggregates public and licensed orbital, governmental, scientific, and operator data from multiple sources. Orbital data courtesy of CelesTrak. Derived classifications (constellation membership, orbit class, mission type) follow the published methodology.
Full terms of use.
Keys and tiers
The API is free during the MVP and requires no key. API keys, higher rate limits and paid tiers for heavy or commercial use will come later; the public endpoints documented here will keep a free tier. If you are building on the API, say hello at contact@spboucher.ai so we can warn you before any breaking change.