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.
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 'https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=json'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);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())[
{
"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
| Parameter | Type | Required | Description |
|---|---|---|---|
CATNR | query | Optional | NORAD catalogue number. 25544 is the ISS. 25544 |
NAME | query | Optional | Match satellites by name substring. Returns every match, so expect arrays. STARLINK |
INTDES | query | Optional | International designator, the launch-based identifier such as `1998-067`. 1998-067 |
GROUP | query | Optional | A curated group: `active`, `stations`, `starlink`, `weather`, `gps-ops`, `visual` and many more. stations |
FORMAT | query | Required | `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
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Coordinate Converter
Convert GPS coordinates between decimal degrees, degrees-minutes-seconds and decimal minutes instantly. Paste any format like 40°26'46"N and copy the result.
Maidenhead Grid Locator Converter
Convert latitude and longitude to a Maidenhead QTH locator and back, plus great-circle distance and beam heading between any two grid squares.
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.