# Open Notify

> Track the International Space Station with Open Notify, the free keyless API behind open-notify.org. Get where the station is right now, who is in space and which spacecraft they are aboard, how far away the station is from any place on Earth and whether it is above the horizon there, or watch it move across several readings to see how fast it is going. There is one action that reports the service's own health as a value rather than failing a step, so a scheduled workflow can tell an outage from an empty answer. No account and no API key: connecting takes one click.

App · Weather & Space · 6 actions. Web page: https://docs.lodol.com/docs/integrations/open-notify

## Actions

### Check service status

Check whether Open Notify is answering, and how quickly. This is the one action that reports a problem as a value instead of failing the step, so a workflow can decide what to do about it. Being asked to slow down is reported separately from being down. No API key required.

**Inputs**: None.

**Outputs**

- `message` (text): What happened, in a sentence.
- `online` (true/false): Whether the service answered with a usable ISS position.
- `rate_limited` (true/false): Whether it asked this workspace to slow down.
- `reachable` (true/false): Whether it answered at all. A service that is reachable but not online is refusing or misreporting rather than down.
- `response_time_ms` (number): How long the answer took, in milliseconds.
- `status_code` (number): The HTTP status it answered with, or empty when it could not be reached.

**Example output**

```json
{
  "message": "Open Notify is up and tracking the ISS.",
  "online": true,
  "rate_limited": false,
  "reachable": true,
  "response_time_ms": 96.5,
  "status_code": 200
}
```

### Get a space report

Get both halves of what Open Notify knows in one step: where the station is, how many people are in space, who they are and which of them are aboard the ISS. Built for a daily post or digest, where two separate steps would describe two different moments. No API key required.

**Inputs**: None.

**Outputs**

- `crafts` (list): The same people grouped by spacecraft.
- `iss` (object): Where the station is right now.
- `iss_crew` (list): The names aboard the ISS specifically, which is the headline of most reports.
- `iss_crew_count` (number): How many of them there are.
- `names` (list): Just their names.
- `number` (number): How many people are in space.
- `people` (list): All of them, each with their spacecraft.

**Example output**

```json
{
  "crafts": [
    {
      "craft": "ISS",
      "names": [
        "Oleg Kononenko",
        "Nikolai Chub",
        "Tracy Caldwell Dyson",
        "Matthew Dominick",
        "Michael Barratt",
        "Jeanette Epps",
        "Alexander Grebenkin",
        "Butch Wilmore",
        "Sunita Williams"
      ],
      "number": 9
    },
    {
      "craft": "Tiangong",
      "names": [
        "Li Guangsu",
        "Li Cong",
        "Ye Guangfu"
      ],
      "number": 3
    }
  ],
  "iss": {
    "latitude": -36.0989,
    "longitude": -64.0851,
    "map_url": "https://maps.google.com/maps?q=-36.0989,-64.0851&z=4",
    "time": "2026-09-16T12:00:00Z",
    "timestamp": 1789560000
  },
  "iss_crew": [
    "Oleg Kononenko",
    "Nikolai Chub",
    "Tracy Caldwell Dyson",
    "Matthew Dominick",
    "Michael Barratt",
    "Jeanette Epps",
    "Alexander Grebenkin",
    "Butch Wilmore",
    "Sunita Williams"
  ],
  "iss_crew_count": 9,
  "names": [
    "Oleg Kononenko",
    "Nikolai Chub",
    "Tracy Caldwell Dyson",
    "Matthew Dominick",
    "Michael Barratt",
    "Jeanette Epps",
    "Alexander Grebenkin",
    "Butch Wilmore",
    "Sunita Williams",
    "Li Guangsu",
    "Li Cong",
    "Ye Guangfu"
  ],
  "number": 12,
  "people": [
    {
      "craft": "ISS",
      "name": "Oleg Kononenko"
    },
    {
      "craft": "ISS",
      "name": "Nikolai Chub"
    },
    {
      "craft": "ISS",
      "name": "Tracy Caldwell Dyson"
    },
    {
      "craft": "ISS",
      "name": "Matthew Dominick"
    },
    {
      "craft": "ISS",
      "name": "Michael Barratt"
    },
    {
      "craft": "ISS",
      "name": "Jeanette Epps"
    },
    {
      "craft": "ISS",
      "name": "Alexander Grebenkin"
    },
    {
      "craft": "ISS",
      "name": "Butch Wilmore"
    },
    {
      "craft": "ISS",
      "name": "Sunita Williams"
    },
    {
      "craft": "Tiangong",
      "name": "Li Guangsu"
    },
    {
      "craft": "Tiangong",
      "name": "Li Cong"
    },
    {
      "craft": "Tiangong",
      "name": "Ye Guangfu"
    }
  ]
}
```

### Get the distance to the ISS

Answer 'is the space station near me?' for a place on the ground: how far away it is in kilometres and miles, which compass direction to look in, and whether it is above the horizon there at all. Open Notify reports only where the station is, never how that relates to anywhere, so the comparison is done here. No API key required.

**Inputs**

- Latitude (`latitude`, number, required): Latitude of the place to measure from, in decimal degrees between -90 and 90. Negative is south of the equator. From -90 to 90.
- Longitude (`longitude`, number, required): Longitude of that place, in decimal degrees between -180 and 180. Negative is west of Greenwich. From -180 to 180.
- Assumed altitude (km) (`altitude_km`, number): The height above the ground to assume for the station, in kilometres. Open Notify reports no altitude, so the figures derived from one assume 420 km, the station's usual operating height. Change it to match a published altitude if you have one. From 100 to 2000. Default: `420.0`.

**Outputs**

- `above_horizon` (true/false): Whether the station is above the horizon from that place, which is whether it could be seen at all. It says nothing about cloud, daylight or whether the station is lit.
- `assumed_altitude_km` (number): The altitude the horizon figure was worked out from. Open Notify publishes none.
- `bearing_degrees` (number): Which way to set off to reach it: degrees clockwise from north.
- `compass_point` (text): The same direction as a compass point, e.g. 'NNE'.
- `distance_km` (number): Distance over the ground from that place to the point below the station, in kilometres.
- `distance_miles` (number): The same distance in miles.
- `horizon_radius_km` (number): How far from the point below it the station stays above the horizon, at the assumed altitude.
- `iss` (object): Where the station is right now.
- `observer_latitude` (number): Latitude of the place measured from.
- `observer_longitude` (number): Longitude of that place.

**Example output**

```json
{
  "above_horizon": false,
  "assumed_altitude_km": 420.0,
  "bearing_degrees": 136.5,
  "compass_point": "SE",
  "distance_km": 10170.9,
  "distance_miles": 6319.9,
  "horizon_radius_km": 2252.4,
  "iss": {
    "latitude": -36.0989,
    "longitude": -64.0851,
    "map_url": "https://maps.google.com/maps?q=-36.0989,-64.0851&z=4",
    "time": "2026-09-16T12:00:00Z",
    "timestamp": 1789560000
  },
  "observer_latitude": 37.7749,
  "observer_longitude": -122.4194
}
```

### Get the ISS position

Get where the International Space Station is right now: the latitude and longitude of the point on the ground directly below it, the instant that position is for, and a map link to open it. The station covers about 28,000 km every hour, so the answer is only good for a few seconds. No API key required.

**Inputs**: None.

**Outputs**

- `latitude` (number): Latitude of the point on the ground directly below the station, in degrees. Negative is south of the equator. The service quotes this as a string; it is published here as a number.
- `longitude` (number): Longitude of that point, in degrees. Negative is west of the Greenwich meridian.
- `map_url` (text): Map link centred on the point below the station.
- `time` (text): The same instant as an ISO 8601 UTC date-time.
- `timestamp` (number): The instant this position is for, in Unix seconds.

**Example output**

```json
{
  "latitude": -36.0989,
  "longitude": -64.0851,
  "map_url": "https://maps.google.com/maps?q=-36.0989,-64.0851&z=4",
  "time": "2026-09-16T12:00:00Z",
  "timestamp": 1789560000
}
```

### Get the people in space

Get who is in space right now, with the spacecraft each person is aboard and a count per craft, so a step can say how many are on the station without counting a list itself. Name a spacecraft to get only its crew. Nobody aboard is an empty result rather than a failed step. No API key required.

**Inputs**

- Spacecraft (`craft`, text): Only return the people aboard this spacecraft, such as ISS or Tiangong. Leave empty for everyone in space. Matching ignores capitalisation.

**Outputs**

- `count` (number): How many people are in the returned list: everyone in space, or everyone aboard the spacecraft asked for.
- `craft` (text): The spacecraft the list was filtered to, or empty when it was not filtered.
- `crafts` (list): Everyone in space grouped by spacecraft. Always covers every craft, so a filter that matched nobody still shows what is crewed.
- `names` (list): Just their names, ready to put in a message.
- `number` (number): How many people are in space altogether, as the service counts them. Unaffected by the spacecraft filter.
- `people` (list): The people, each with their spacecraft.

**Example output**

```json
{
  "count": 12,
  "craft": null,
  "crafts": [
    {
      "craft": "ISS",
      "names": [
        "Oleg Kononenko",
        "Nikolai Chub",
        "Tracy Caldwell Dyson",
        "Matthew Dominick",
        "Michael Barratt",
        "Jeanette Epps",
        "Alexander Grebenkin",
        "Butch Wilmore",
        "Sunita Williams"
      ],
      "number": 9
    },
    {
      "craft": "Tiangong",
      "names": [
        "Li Guangsu",
        "Li Cong",
        "Ye Guangfu"
      ],
      "number": 3
    }
  ],
  "names": [
    "Oleg Kononenko",
    "Nikolai Chub",
    "Tracy Caldwell Dyson",
    "Matthew Dominick",
    "Michael Barratt",
    "Jeanette Epps",
    "Alexander Grebenkin",
    "Butch Wilmore",
    "Sunita Williams",
    "Li Guangsu",
    "Li Cong",
    "Ye Guangfu"
  ],
  "number": 12,
  "people": [
    {
      "craft": "ISS",
      "name": "Oleg Kononenko"
    },
    {
      "craft": "ISS",
      "name": "Nikolai Chub"
    },
    {
      "craft": "ISS",
      "name": "Tracy Caldwell Dyson"
    },
    {
      "craft": "ISS",
      "name": "Matthew Dominick"
    },
    {
      "craft": "ISS",
      "name": "Michael Barratt"
    },
    {
      "craft": "ISS",
      "name": "Jeanette Epps"
    },
    {
      "craft": "ISS",
      "name": "Alexander Grebenkin"
    },
    {
      "craft": "ISS",
      "name": "Butch Wilmore"
    },
    {
      "craft": "ISS",
      "name": "Sunita Williams"
    },
    {
      "craft": "Tiangong",
      "name": "Li Guangsu"
    },
    {
      "craft": "Tiangong",
      "name": "Li Cong"
    },
    {
      "craft": "Tiangong",
      "name": "Ye Guangfu"
    }
  ]
}
```

### Sample the ISS track

Watch the station move: take several positions a few seconds apart and get the path between them, how far it travelled and how fast. Open Notify only ever answers for the present instant, so this step waits between readings at the cadence the service asks for, which is why it takes as long as it does. No API key required.

**Inputs**

- Number of positions (`count`, number): How many readings to take, from 2 to 10. Each one after the first waits out the gap below, so the step takes roughly that gap times one less than this. From 2 to 10. Default: `3`.
- Seconds between positions (`interval_seconds`, number): How long to wait between readings, from 5 to 60 seconds. Open Notify works the position out once a second and asks callers to poll about once every five, so anything shorter is refused. From 5.0 to 60.0. Default: `5.0`.
- Assumed altitude (km) (`altitude_km`, number): The height above the ground to assume for the station, in kilometres. Open Notify reports no altitude, so the figures derived from one assume 420 km, the station's usual operating height. Change it to match a published altitude if you have one. From 100 to 2000. Default: `420.0`.

**Outputs**

- `assumed_altitude_km` (number): The altitude the orbital speed was worked out from. Open Notify publishes none.
- `count` (number): How many readings were taken.
- `elapsed_seconds` (number): Seconds between the first and last reading, measured by the service's own timestamps rather than by this workflow's clock.
- `end_time` (text): When the last reading was for.
- `ground_distance_km` (number): How far the point below the station moved across the Earth over that span.
- `ground_speed_kmh` (number): That distance as a speed, in kilometres per hour: how fast the station's shadow crosses the ground.
- `interval_seconds` (number): The gap asked for between readings.
- `orbital_speed_kmh` (number): How fast the station itself is travelling, which is faster than its shadow because it sweeps a wider circle. Derived from the assumed altitude, so it is an estimate: about 28,000 km/h.
- `positions` (list): The readings, earliest first.
- `start_time` (text): When the first reading was for, as an ISO 8601 UTC date-time.

**Example output**

```json
{
  "assumed_altitude_km": 420.0,
  "count": 2,
  "elapsed_seconds": 5.0,
  "end_time": "2026-09-16T12:00:05Z",
  "ground_distance_km": 36.0,
  "ground_speed_kmh": 25894.8,
  "interval_seconds": 5.0,
  "orbital_speed_kmh": 27601.9,
  "positions": [
    {
      "latitude": -36.0989,
      "longitude": -64.0851,
      "map_url": "https://maps.google.com/maps?q=-36.0989,-64.0851&z=4",
      "time": "2026-09-16T12:00:00Z",
      "timestamp": 1789560000
    },
    {
      "latitude": -35.9129,
      "longitude": -63.758,
      "map_url": "https://maps.google.com/maps?q=-35.9129,-63.758&z=4",
      "time": "2026-09-16T12:00:05Z",
      "timestamp": 1789560005
    }
  ],
  "start_time": "2026-09-16T12:00:00Z"
}
```
