Public satellite pass API

This is a public API for obtaining the pass times of amateur radio satellites.

The satellites are referenced by their NORAD ID, e.g. 25544 is the ISS.
A list of the functioning amateur radio satellites and their IDs can be found on the Amsat site.

Simple next pass of single satellite

Query params: lat, lon, alt
URL: https://api.satellites.calum.org/rest/v1/25544/next-pass?lat=51.2&lon=-2.4&alt=0
Method: GET
Request headers: n/a
Body: n/a

Example request - next ISS pass over Bristol, UK:
https://api.satellites.calum.org/rest/v1/25544/next-pass?lat=51.2&lon=-2.4&alt=0
An example result is:
{
  "losazimuth": 79,
  "norad-id": 25544,
  "name": "ISS",
  "start": "2015-11-09T04:53:34Z",
  "aosazimuth": 201,
  "seconds": 36020,
  "maxel": 15,
  "end": "2015-11-09T05:02:49Z",
  "ms": 24,
  "tca": "2015-11-09T04:58:04Z"
}
Terms: Azimuth, Elevation, AOS (aquisition of signal), TCA (time of closest approach), LOS (loss of signal), seconds (seconds until AOS), ms (milliseconds to process request)

Next passes of one or more satellites

Query params: lat, lon, alt
URL: https://api.satellites.calum.org/rest/v1/multi/next-pass?lat=51.2&lon=-2.4&alt=0
Method: POST
Request headers: Content-Type: application/json
Body: {"norad-ids": ["25544","27607","39444","24278","40909"]}
E.g.
curl -X POST -H "Content-Type: application/json" "https://api.satellites.calum.org/rest/v1/multi/next-pass?lat=51.2&lon=-2.4&alt=0" -d '{"norad-ids": ["25544","27607","39444","24278","40909"]}'
The results are sorted by how soon the satellite will appear.

Status codes

200: Request was processed successfully
400: Request was invalid
404: NORAD ID not found
500: Internal server error.

Sample response

Content-type: application/json
{
  "losazimuth": 79,
  "norad-id": 25544,
  "name": "ISS",
  "start": "2015-11-09T04:53:34Z",
  "aosazimuth": 201,
  "seconds": 36020,
  "maxel": 15,
  "end": "2015-11-09T05:02:49Z",
  "ms": 24,
  "tca": "2015-11-09T04:58:04Z"
}
Terms: Azimuth, Elevation, AOS (aquisition of signal), TCA (time of closest approach), LOS (loss of signal), seconds (seconds until AOS), ms (milliseconds to process request)

Sample Javascript request

var rest = new XMLHttpRequest();
rest.open('post', 'https://api.satellites.calum.org/rest/v1/multi/next-pass?lat=51.2&lon=-2.4&alt=0', true);
rest.setRequestHeader("Content-type", "application/json");
rest.onreadystatechange = function() {
    if (rest.readyState === 0 || rest.readyState === 4) {
        if (rest.status === 200) {
            var json = JSON.parse(rest.responseText);
            console.log('Got ' + json.passes.length + ' passes');
            // Do stuff with it.
        }
    }
}
rest.send('{"norad-ids": ["25544","27607","39444","24278","40909"]}');

Notes

It currently doesn't use any authentication or rate-limiting. Please don't abuse the system - cache whenever possible.
No guarantee of uptime, availability, response times, yadda, yadda. However, I'll do my best.
Please contact me with any suggestions.