Science & Math — entry 025 of 28
TLE
The TLE API serves NORAD two-line-element orbital data for tracked satellites, including a continuously updated record for the ISS, in a lightweight Hydra/JSON-LD format. It's a free, keyless single-developer project with no separate documentation site beyond its own browsable endpoints.
The TLE API is a single Hydra/JSON-LD resource collection: `GET /api/tle/{satelliteId}` returns one NORAD two-line-element record by ID, and `GET /api/tle/` returns a paginated collection, optionally narrowed with a `search` query parameter.
GreatAPIs Score
Auth quickstart
- No account or key required — every route answers a plain, unauthenticated GET.
- The collection route needs the trailing slash: `/api/tle?search=iss` 301-redirects (with a `Location` header and an HTML meta-refresh body) to `/api/tle/?search=iss`, confirmed live this run — call the trailing-slash form directly to skip the extra round-trip.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Get the ISS's current orbital elements
GEThttps://tle.ivanstanojevic.me/api/tle/25544
{"@context":"https:\/\/www.w3.org\/ns\/hydra\/context.jsonld","@id":"https:\/\/tle.ivanstanojevic.me\/api\/tle\/25544","@type":"Tle","satelliteId":25544,"name":"ISS (ZARYA)","date":"2026-07-26T09:51:36+00:00","line1":"1 25544U 98067A 26207.41084145 .00010751 00000+0 20166-3 0 9995","line2":"2 25544 51.6317 105.9876 0006941 339.4731 20.5977 15.49181604577830"}Captured byte-for-byte from this run's live probe; line1/line2 are the ISS's current NORAD TLE and are re-fit every few hours, so date/line1/line2 will differ on any later call.
Developer reference
https://tle.ivanstanojevic.me/apiGotchas & limits
- A satellite ID that doesn't exist doesn't 404 with HTML — it returns HTTP 404 with a small JSON body, confirmed live this run against id `999999`: `{"response":{"message":"Unable to find record with id 999999"}}`.
- The collection route paginates via `page`/`page-size` query params, default `page-size` 20 (confirmed live this run via the `parameters` block the response itself echoes back) — it does not return the whole catalogue in one call. The full catalogue was 25,675 satellites (`totalItems`) at probe time.
- `search` does real substring filtering on satellite name, not a no-op: live probes this run against the same collection route returned `totalItems` 12,354 for `search=starlink`, 30 for `search=iss`, and 0 (with an empty `member` array, not an error) for a nonsense term.
- CORS is wide open — a live probe with `Origin: https://example.com` returns `Access-Control-Allow-Origin: *` unconditionally, confirmed this run.