AMSAT Satellite Status API

Version 1.0.0 exposes the satellite catalog, recent status reports, report submission, rollups, health checks, and an OpenAPI document for client generation. Responses are JSON, timestamps are UTC, and satellite API names match the status page names.

Base URLs

PurposeURL
API roothttps://www.amsat.org/status/api/v1
Swagger UIhttps://www.amsat.org/status/api/docs.php
OpenAPI JSONhttps://www.amsat.org/status/api/v1/openapi.php
Legacy reportshttps://www.amsat.org/status/api/v1/sat_info.php?name=AO-91&hours=24
Acknowledgementshttps://www.amsat.org/status/api/acknowledgements.php

Endpoints

GET/catalog.php

Lists satellites with links and optional report statistics. Use name for exact lookup.

ParameterTypeDescription
namestringOptional API name, for example AO-91.
include_statsbooleanWhen true, includes report count and latest report timestamp.
curl "https://www.amsat.org/status/api/v1/catalog.php?include_stats=true"

GET/reports.php

Searches recent satellite reports with bounded limits and normalized filters.

ParameterTypeDescription
namestringOptional satellite API name.
hoursintegerRolling UTC window. Defaults to 72. Maximum 720.
sincedate-timeISO 8601 lower bound. Overrides hours.
limitintegerMaximum records. Defaults to 100. Maximum 500.
callsignstringExact callsign filter.
grid_squarestringMaidenhead locator filter.
statusstringHeard, Telemetry Only, Not Heard, or Crew Active.
curl "https://www.amsat.org/status/api/v1/reports.php?name=AO-91&hours=24&limit=25"

POST/reports.php

Submits a public satellite status report using JSON or form data.

curl -X POST "https://www.amsat.org/status/api/v1/reports.php" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "AO-91",
    "report": "Heard",
    "callsign": "N0CALL",
    "grid_square": "EM48",
    "reported_at": "2026-05-23T08:30:00Z"
  }'

Submitting another report for the same satellite, callsign, hour, and 15-minute period replaces the previous one, matching the legacy form behavior.

GET/summary.php

Returns report counts grouped by satellite and report value for a rolling UTC window.

curl "https://www.amsat.org/status/api/v1/summary.php?hours=24"

GET/statuses.php

Lists the canonical report values accepted by POST /reports.php.

curl "https://www.amsat.org/status/api/v1/statuses.php"

GET/health.php

Checks API availability and database connectivity.

curl "https://www.amsat.org/status/api/v1/health.php"

Response Shape

New endpoints return top-level data and optional meta and links. Errors use a stable envelope:

{
  "error": {
    "code": "invalid_parameter",
    "message": "The hours parameter must be an integer.",
    "status": 400
  }
}

Compatibility

/api/v1/satellites.php and /api/v1/sat_info.php remain plain JSON-array endpoints for existing clients and tests. New clients should use /catalog.php and /reports.php.

Acknowledgements

See the API acknowledgements page for contributors who helped design, implement, document, and test this public API.