BYTETOOLS

CelesTrak API

Free CelesTrak GP API with no key: current orbital elements for every tracked satellite as TLE, JSON, CSV, XML or KVN. Query by NORAD id, name, group or launch designator.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the CelesTrak API?

CelesTrak's General Perturbations API is a free, key-free service returning current orbital elements for tracked Earth satellites. It serves the same underlying data as a classic two-line element set in TLE, JSON, CSV, XML or KVN form, queried by NORAD catalogue number, name, international designator or curated group.

CelesTrak has distributed orbital elements since the 1980s and remains the standard free source, republishing the US Space Force catalogue with curated groupings — active satellites, Starlink, weather, GPS, debris from specific breakup events. The GP endpoint is the modern face of it, and its JSON output is far friendlier than parsing the fixed-column TLE format, while carrying identical information: mean motion, eccentricity, inclination, RAOAN, argument of perigee, mean anomaly, plus the drag term.

Two practicalities. Elements have a short shelf life — the `EPOCH` field is when the fit was valid, and propagating a low-Earth-orbit element set more than a few days from its epoch accumulates kilometres of error, so refetch rather than cache indefinitely. And CelesTrak explicitly asks that you not poll faster than the data updates, which is a few times a day at most; the site publishes rate guidance and will block clients that ignore it. Convert the elements to positions with an SGP4 implementation, which is the propagator these element sets are defined against.

Quick facts

Base URL
https://celestrak.org/NORAD/elements/gp.php
Authentication
No API key or account. CelesTrak is a long-running public service run by Dr T.S. Kelso; it asks users to follow its published request-rate guidance and not to redistribute bulk data as their own.
Rate limit
No hard technical limit, but CelesTrak publishes usage guidelines and blocks abusive clients. Elements update a few times a day, so polling more often than that gains nothing.
Pricing
Free. The underlying catalogue is US government data; CelesTrak's curation and hosting are provided at no charge.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the CelesTrak API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch current orbital elements for the ISS as JSON

GET https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=json

curl
curl 'https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=json'
JavaScript (fetch)
const res = await fetch("https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=json", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
[
  {
    "OBJECT_NAME": "ISS (ZARYA)",
    "OBJECT_ID": "1998-067A",
    "EPOCH": "2026-08-20T18:13:18.964992",
    "MEAN_MOTION": 15.49535659,
    "ECCENTRICITY": 0.00076903,
    "INCLINATION": 51.633,
    "RA_OF_ASC_NODE": 340.5034,
    "ARG_OF_PERICENTER": 67.3286,
    "MEAN_ANOMALY": 292.8515,
    "EPHEMERIS_TYPE": 0,
    "CLASSIFICATION_TYPE": "U",
    "NORAD_CAT_ID": 25544,
    "ELEMENT_SET_NO": 999,
    "REV_AT_EPOCH": 58176,
    "BSTAR": 0.00017760953,
    "MEAN_MOTION_DOT": 9.536e-05,
    "MEAN_MOTION_DDOT": 0
  }
]

Parameters

ParameterTypeRequiredDescription
CATNRqueryOptionalNORAD catalogue number. 25544 is the ISS. 25544
NAMEqueryOptionalMatch satellites by name substring. Returns every match, so expect arrays. STARLINK
INTDESqueryOptionalInternational designator, the launch-based identifier such as `1998-067`. 1998-067
GROUPqueryOptionalA curated group: `active`, `stations`, `starlink`, `weather`, `gps-ops`, `visual` and many more. stations
FORMATqueryRequired`tle`, `3le`, `json`, `json-pretty`, `csv`, `xml` or `kvn`. json

Response fields

OBJECT_NAMEstring
Satellite name from the catalogue.
NORAD_CAT_IDinteger
NORAD catalogue number — the stable identifier for a tracked object.
OBJECT_IDstring
International designator, encoding launch year, launch number and piece.
EPOCHstring
Timestamp the element set was fitted to. Propagation error grows with distance from this moment.
MEAN_MOTIONfloat
Revolutions per day. 15.5 corresponds to a roughly 93-minute low Earth orbit.
INCLINATION / ECCENTRICITY / RA_OF_ASC_NODE / ARG_OF_PERICENTER / MEAN_ANOMALYfloat
The classical orbital elements, in degrees except eccentricity.
BSTARfloat
SGP4 drag term. Larger values mean faster orbital decay.

What you can build with the CelesTrak API

  • Plot a satellite's current position with an SGP4 propagator
  • Predict visible passes over an observing site
  • Track a constellation such as Starlink or the GPS fleet
  • Feed orbital elements into a ground-station scheduling tool
  • Teach orbital mechanics with real, current data

Common errors and how to fix them

Empty array or `No GP data found`

The identifier matched nothing.

Fix: Check the NORAD number, and remember decayed objects drop out of the catalogue. `NAME` matching is substring-based and case-sensitive in practice.

Blocked or throttled

Polling far faster than the data changes.

Fix: Fetch at most a few times a day per object, or pull a whole `GROUP` in one request instead of looping over catalogue numbers.

Positions drift from reality

The element set is being propagated far from its epoch.

Fix: Refetch when `EPOCH` is more than a day or two old for low Earth orbit. TLEs are not long-term ephemerides.

Wrong positions from a generic propagator

TLE elements are only meaningful under SGP4/SDP4.

Fix: Use a proper SGP4 library. Feeding these mean elements into a two-body Keplerian propagator produces plausible-looking but wrong results.

CelesTrak API — frequently asked questions

Is CelesTrak free to use?

Yes, free with no key or account. It is a long-running public service, and the only real obligation is to follow its published request-rate guidance rather than hammering the endpoint.

How often should I refetch orbital elements?

A few times a day at most, and no more often than the catalogue updates. Element sets for low Earth orbit lose accuracy within days of their epoch, so the right pattern is periodic refresh, not high-frequency polling.

What is the difference between TLE and OMM JSON format?

None in content. OMM is the CCSDS standard representation of the same orbital elements in JSON, CSV, XML or KVN, avoiding the fixed-column parsing and implicit decimal points of the legacy TLE text format.

How do I turn orbital elements into a latitude and longitude?

Run them through an SGP4 propagator, which every major language has a library for. The elements are defined relative to that specific model, so a general Keplerian propagator will give you wrong answers.

Tools that pair with this API

CelesTrak is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.