NotebookFirst API call. No orbital-mechanics background needed.

Your first OrbitalWiki API request

Four real requests against a live satellite catalog, with no signup. Read the response envelope, filter a list, search by alias, and find out what your requests cost before you write a loop.

apihttpjsonrate-limitssearch
Runtime
15 min
API requests
4

Download

Jupyter notebook, 20 cells, 14 KBDownload the notebook

.ipynb file. Nothing executes until you run it.

Anonymous callers share 50 requests per day per network. A free account raises that to 1,000 per day. Each notebook states what one full run costs.

How to run it

  1. 1Install the packages listed above, for example: pip install requests pandas matplotlib
  2. 2Open Jupyter (jupyter lab) with the downloaded .ipynb, or upload it to any hosted notebook service.
  3. 3Run the cells top to bottom. No API key is needed; add one in the first cell if you want the higher limit.

What you will learn

  • Make an authenticated-optional HTTP request to a public REST API and parse the JSON.
  • Read the object / data / meta envelope and find the licence and source attribution in it.
  • Use a filter and a page total to answer a counting question without downloading the rows.
  • Read the rate-limit headers and size a script against them before writing a loop.

Before you start

  • Basic Python: variables, functions, dictionaries.
  • No account, no API key, no prior orbital knowledge.

Python packages

pip install requests pandas

Which data

The live OrbitalWiki catalog, not a pinned release. Counts change between runs, so record the access date rather than treating an output as fixed.

Endpoints it calls

Every request the notebook makes, and why. Nothing here is illustrative: these are the calls it runs.

  • GET /api/v1/statsCatalogue totals and object-class composition in one request.
  • GET /api/v1/satellites/{norad_cat_id}One full record, used here for the ISS (25544).
  • GET /api/v1/satellitesA filtered, paginated list; also demonstrates meta.total.
  • GET /api/v1/searchFree-text search that reports why each result matched.
/api/v1/openapi.json →

From the notebook

Excerpts copied verbatim from the file. A test fails if the notebook changes and these do not.

code
stats = get("/stats")["data"]

print("objects tracked:  ", stats["total_objects"])
print("active payloads:  ", stats["active_payloads"])
print("with current OMM: ", stats["with_omm"])
print("last source fetch:", stats["latest_source_fetched_at"])
print()
print("by object class:", stats["by_object_class"])
print("budget:", budget())
markdown
`epoch` is the single most misread field in orbital data. It is the moment the orbital elements describe, *not* the moment you asked. Elements age: propagate a two-week-old element set and your predicted position can be wrong by kilometres. Whenever you use this record for anything, carry the epoch with it.

What you end up with

  • Catalogue totals printed with the honest timestamp note explaining why there is no single "catalog updated at".
  • A pandas DataFrame of geostationary objects with periods you can sanity-check against one sidereal day.
  • Search results annotated with matched_on, showing why "hubble" reaches a record named HST.
  • Your remaining request budget, read from the response headers.

How to cite

Cite the endpoint and the access date, because the catalog is live: "OrbitalWiki, /api/v1/stats, retrieved 2026-08-04, https://www.orbitalwiki.com". The database is ODbL-1.0; the upstream sources named in meta.sources keep their own terms.

Sources