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
| Purpose | URL |
|---|---|
| API root | https://www.amsat.org/status/api/v1 |
| Swagger UI | https://www.amsat.org/status/api/docs.php |
| OpenAPI JSON | https://www.amsat.org/status/api/v1/openapi.php |
| Legacy reports | https://www.amsat.org/status/api/v1/sat_info.php?name=AO-91&hours=24 |
| Acknowledgements | https://www.amsat.org/status/api/acknowledgements.php |
Endpoints
GET/catalog.php
Lists satellites with links and optional report statistics. Use name for exact lookup.
| Parameter | Type | Description |
|---|---|---|
name | string | Optional API name, for example AO-91. |
include_stats | boolean | When 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.
| Parameter | Type | Description |
|---|---|---|
name | string | Optional satellite API name. |
hours | integer | Rolling UTC window. Defaults to 72. Maximum 720. |
since | date-time | ISO 8601 lower bound. Overrides hours. |
limit | integer | Maximum records. Defaults to 100. Maximum 500. |
callsign | string | Exact callsign filter. |
grid_square | string | Maidenhead locator filter. |
status | string | Heard, 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.