Satellites Catalog
Spacecraft catalog with TLE-based propagation — search, positions, detail, ground track, observer passes.
The satellite suite serves a full spacecraft catalog (60k+ objects), live TLE propagation, and observer-relative pass prediction. Positions are computed in-process using SGP4 over the current TLE set.
Routes
| Method | Path | Purpose |
|---|---|---|
GET | /sat/search?q=&limit= | Search by NORAD id, international designator, name, operator, or constellation. |
GET | /sat/positions | Current positions across the active catalog (filtered + capped). |
GET | /sat/stats | Catalog size, TLE coverage, type/regime breakdown, sync status. |
GET | /sat/{id} | Full detail — identity, orbital elements, current position (geodetic/ECI/ECEF), live TLE. |
GET | /sat/{id}/track?samples= | Ground track over one orbital period as a GeoJSON LineString. |
GET | /sat/{id}/passes?lat=&lon=&alt=&hours=&minElev= | Visibility passes over an observer (AOS/LOS/TCA, azimuth, elevation, range). |
/sat/positions
Returns a GeoJSON FeatureCollection of currently-propagated positions.
| Param | Default | Notes |
|---|---|---|
type | — | Object type (payload, debris, rocket-body, …). |
regime | — | Orbital regime (leo, meo, geo, heo). |
constellation | — | Constellation slug. |
bbox | — | Spatial filter. |
limit | 2000 | Hard max 60000. |
Each feature carries properties.noradId, properties.name, properties.regime,
properties.altitudeKm, properties.velocityKmS, plus the source-of-truth TLE
epoch so consumers can age-out stale propagations.
/sat/{id}
{
"id": "25544",
"name": "ISS (ZARYA)",
"intlDesignator": "1998-067A",
"regime": "leo",
"orbital": { "inclinationDeg": 51.64, "eccentricity": 0.00023, "meanMotion": 15.49 },
"tle": { "line1": "…", "line2": "…", "epoch": "2026-05-27T12:42:11Z" },
"position": {
"geodetic": { "lat": 23.7, "lon": -41.2, "altKm": 423.1 },
"eci": { "x": 4561.2, "y": -3211.4, "z": 4123.1 },
"ecef": { "x": 1234.0, "y": -2310.1, "z": 5870.4 }
}
}/sat/{id}/track
Samples one full orbital period (defaults to 120 samples; range 8–512) and returns a GeoJSON LineString — what the 3D and 2D viewers draw for the active selection.
/sat/{id}/passes
For an observer at (lat, lon, alt), returns the next visibility passes:
| Field | Meaning |
|---|---|
aos | Acquisition of signal (rise above minElev). |
tca | Time of closest approach (max elevation). |
los | Loss of signal. |
azimuthAosDeg / azimuthLosDeg | Rise/set azimuth. |
maxElevationDeg | Pass apex. |
rangeKm series | Slant range at AOS / TCA / LOS. |
Defaults: hours=48, range 1–168; minElev=10°.
Catalog & sync
GET /sat/stats returns counts, TLE coverage percentage, age of the most
recent sync, and breakdowns by object type and orbital regime — useful for
operator dashboards.
Models
3D viewers can fetch satellite glTF/glB assets from
GET /farsight/models/{path} (served from SATELLITE_MODELS_DIR).
Status
All endpoints live on the deployed system.