India API

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.

Base URL https://api.dharun.devNo API key600 requests a minuteThis page as Markdown

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.

ParameterDescription
satqueryCatalogue number or name. Default ISS (25544).
pincodequeryIndian pincode of the observer.
latqueryLatitude, if no pincode. Default New Delhi.
lngqueryLongitude, if no pincode.
daysqueryHow far ahead, 1 to 10. Default 3.
minElevationqueryLowest peak elevation listed, in degrees. Default 10; 0 lists every pass.
visiblequerytrue lists only passes that can be seen with the eye. One of: true, false.
tzqueryIANA 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.

ParameterDescription
idpath, requiredCatalogue 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.

ParameterDescription
qqueryPart of a name, or a catalogue number.
groupqueryLimit 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.