Docs › Sky and radio
Satellite passes API
When the ISS and amateur radio satellites pass over you, and where they are now.
Pass predictions for the space stations (ISS, Tiangong) and about ninety amateur radio satellites, from any Indian pincode or any latitude and longitude: when each rises, how high it gets and where, when it sets, and whether it can be seen with the eye. Computed with SGP4 from CelesTrak's orbit elements, refreshed a few times a day; the elements themselves are not published here. Pass predictions count as 10 requests against the rate limit.
Passes over a place
GET/v1/sat-pass
Passes from now for the next days, soonest first. Directions are compass points and azimuths in degrees from true north; elevations are degrees above the horizon. A satellite can be named by catalogue number, by name, by the designation in its name's brackets (SO-50, AO-7), or as ISS, CSS or QO-100.
| Parameter | Description |
|---|---|
satquery | Catalogue number or name. Default ISS (25544). |
pincodequery | Indian pincode of the observer. |
latquery | Latitude, if no pincode. Default New Delhi. |
lngquery | Longitude, if no pincode. |
daysquery | How far ahead, 1 to 10. Default 3. |
minElevationquery | Lowest peak elevation listed, in degrees. Default 10; 0 lists every pass. |
visiblequery | true lists only passes that can be seen with the eye. One of: true, false. |
tzquery | IANA time zone for the times. Default Asia/Kolkata. |
curl
curl "https://api.dharun.dev/v1/sat-pass?sat=ISS&pincode=600001"JavaScript
const response = await fetch("https://api.dharun.dev/v1/sat-pass?sat=ISS&pincode=600001");
const body = await response.json();
if (!response.ok) throw new Error(body.error.message);
console.log(body.data);Python
import requests
response = requests.get("https://api.dharun.dev/v1/sat-pass?sat=ISS&pincode=600001", timeout=10)
body = response.json()
if not response.ok:
raise RuntimeError(body["error"]["message"])
print(body["data"])Response, with lists and long text shortened
{
"data": {
"satellite": {
"number": 25544,
"name": "ISS (ZARYA)",
"groups": [
"space stations",
"amateur radio"
],
"periodMinutes": 92.98,
"inclination": 51.633,
"elementsEpoch": "2026-10-13T19:43:22Z"
},
"elementsAgeDays": 0.92,
"place": {
"latitude": 13.0949,
"longitude": 80.287,
"timeZone": "Asia/Kolkata",
"pincode": "600001",
"name": "Chennai"
},
"from": "2026-10-14T23:21:00+05:30",
"until": "2026-10-17T23:21:00+05:30",
"minElevation": 10,
"passes": [
{
"rise": {
"time": "2026-10-15T03:31:20+05:30",
"azimuth": 210.4,
"direction": "SSW",
"elevation": 0,
"rangeKm": 2349
},
"culmination": {
"time": "2026-10-15T03:36:44+05:30",
"azimuth": 127.5,
"direction": "SE",
"elevation": 60.1,
"rangeKm": 482
},
"set": {
"time": "2026-10-15T03:42:11+05:30",
"azimuth": 41.9,
"direction": "NE",
"elevation": -0,
"rangeKm": 2365
},
"durationSeconds": 650,
"visible": {
"from": "2026-10-15T03:42:00+05:30",
"until": "2026-10-15T03:42:10+05:30"
}
},
{
"rise": {
"time": "2026-10-15T13:25:42+05:30",
"azimuth": 341.7,
"direction": "NNW",
"elevation": 0,
"rangeKm": 2358
},
"culmination": {
"time": "2026-10-15T13:30:46+05:30",
"azimuth": 50.2,
"direction": "NE",
"elevation": 21.2,
"rangeKm": 993
},
"set": {
"time": "2026-10-15T13:35:49+05:30",
"azimuth": 118.8,
"direction": "ESE",
"elevation": -0,
"rangeKm": 2355
},
"durationSeconds": 606,
"visible": null
},
{
"rise": {
"time": "2026-10-15T15:02:43+05:30",
"azimuth": 295,
"direction": "WNW",
"elevation": 0,
"rangeKm": 2355
},
"culmination": {
"time": "2026-10-15T15:07:22+05:30",
"azimuth": 236,
"direction": "SW",
"elevation": 13.5,
"rangeKm": 1294
},
"set": {
"time": "2026-10-15T15:12:00+05:30",
"azimuth": 176.6,
"direction": "S",
"elevation": -0,
"rangeKm": 2349
},
"durationSeconds": 556,
"visible": null
}
]
},
"meta": {
"total": 10,
"source": {
"name": "CelesTrak current GP element sets",
"url": "https://celestrak.org/NORAD/elements/",
"licence": "None stated by CelesTrak. USSPACECOM allows redistribution of basic space situational awareness data with credit; only results computed from it are published he…",
"version": "fde424564d41",
"retrieved": "2026-10-14T13:16:38Z",
"attribution": "Orbit elements from CelesTrak (celestrak.org), based on US Space Force data from Space-Track.org."
},
"note": "Passes from now, computed with SGP4 from the satellite's latest orbit elements. Rise and set are when it crosses the horizon (elevation 0°, no refraction); a pa…"
}
}Where a satellite is now
GET/v1/satellites/{id}
The point on Earth below the satellite at the moment of the request, its altitude and speed, whether it is in sunlight, and how old its orbit elements are.
| Parameter | Description |
|---|---|
idpath, required | Catalogue number or name. |
curl
curl "https://api.dharun.dev/v1/satellites/ISS"JavaScript
const response = await fetch("https://api.dharun.dev/v1/satellites/ISS");
const body = await response.json();
if (!response.ok) throw new Error(body.error.message);
console.log(body.data);Python
import requests
response = requests.get("https://api.dharun.dev/v1/satellites/ISS", timeout=10)
body = response.json()
if not response.ok:
raise RuntimeError(body["error"]["message"])
print(body["data"])Response, with lists and long text shortened
{
"data": {
"number": 25544,
"name": "ISS (ZARYA)",
"groups": [
"space stations",
"amateur radio"
],
"periodMinutes": 92.98,
"inclination": 51.633,
"elementsEpoch": "2026-10-13T19:43:22Z",
"at": "2026-10-14T17:51:45Z",
"latitude": 48.6922,
"longitude": -106.4048,
"altitudeKm": 429.5,
"speedKmPerSecond": 7.658,
"sunlit": true,
"elementsAgeDays": 0.92
},
"meta": {
"source": {
"name": "CelesTrak current GP element sets",
"url": "https://celestrak.org/NORAD/elements/",
"licence": "None stated by CelesTrak. USSPACECOM allows redistribution of basic space situational awareness data with credit; only results computed from it are published he…",
"version": "fde424564d41",
"retrieved": "2026-10-14T13:16:38Z",
"attribution": "Orbit elements from CelesTrak (celestrak.org), based on US Space Force data from Space-Track.org."
},
"note": "Where the satellite is at the moment of the request, over the WGS 84 ellipsoid."
}
}Tracked satellites
GET/v1/satellites
Every tracked satellite with its catalogue number, groups, orbital period and inclination.
| Parameter | Description |
|---|---|
qquery | Part of a name, or a catalogue number. |
groupquery | Limit to one group. One of: stations, amateur. |
curl
curl "https://api.dharun.dev/v1/satellites?group=stations"JavaScript
const response = await fetch("https://api.dharun.dev/v1/satellites?group=stations");
const body = await response.json();
if (!response.ok) throw new Error(body.error.message);
console.log(body.data);Python
import requests
response = requests.get("https://api.dharun.dev/v1/satellites?group=stations", timeout=10)
body = response.json()
if not response.ok:
raise RuntimeError(body["error"]["message"])
print(body["data"])Response, with lists and long text shortened
{
"data": [
{
"number": 25544,
"name": "ISS (ZARYA)",
"groups": [
"space stations",
"amateur radio"
],
"periodMinutes": 92.98,
"inclination": 51.633,
"elementsEpoch": "2026-10-13T19:43:22Z"
},
{
"number": 36086,
"name": "POISK",
"groups": [
"space stations"
],
"periodMinutes": 92.98,
"inclination": 51.633,
"elementsEpoch": "2026-10-13T19:43:22Z"
},
{
"number": 48274,
"name": "CSS (TIANHE)",
"groups": [
"space stations"
],
"periodMinutes": 92.31,
"inclination": 41.47,
"elementsEpoch": "2026-10-14T06:49:21Z"
}
],
"meta": {
"total": 18,
"source": {
"name": "CelesTrak current GP element sets",
"url": "https://celestrak.org/NORAD/elements/",
"licence": "None stated by CelesTrak. USSPACECOM allows redistribution of basic space situational awareness data with credit; only results computed from it are published he…",
"version": "fde424564d41",
"retrieved": "2026-10-14T13:16:38Z",
"attribution": "Orbit elements from CelesTrak (celestrak.org), based on US Space Force data from Space-Track.org."
}
}
}Data source
CelesTrak current GP element sets, fde424564d41. Retrieved 2026-10-14T13:16:38Z. Licence: None stated by CelesTrak. USSPACECOM allows redistribution of basic space situational awareness data with credit; only results computed from it are published here. Orbit elements from CelesTrak (celestrak.org), based on US Space Force data from Space-Track.org.
Using an AI assistant? Connect the MCP server and it can call this API by itself.