> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oeffigo.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Endpunkte

> Alle öffentlichen /v1-Endpunkte mit Parametern und Beispielen.

## GET /v1/health

Kurzer Lebenszeichen-Check für Monitoring: `200`, solange der Dienst gesund ist, sonst `503`.

```bash theme={null}
curl -s https://api.oeffigo.app/v1/health
```

## GET /v1/status

Betriebszustand aller Komponenten – dieselbe Grundlage wie [status.oeffigo.app](https://status.oeffigo.app).

<CodeGroup>
  ```bash Anfrage theme={null}
  curl -s https://api.oeffigo.app/v1/status
  ```

  ```json Antwort theme={null}
  {
    "generatedAt": "2026-07-26T13:25:06.754Z",
    "overall": "operational",
    "components": [
      { "id": "api", "name": "…", "status": "operational" }
    ]
  }
  ```
</CodeGroup>

## GET /v1/history

Pünktlichkeits-Auswertung aus offiziellen Ist-Zeiten: Summen, Tagesverlauf, Linien und ein Wochentag×Stunde-Muster. Gezählt werden einzelne Halte, nicht ganze Fahrten. Ausfälle stammen nur aus ausdrücklichen Meldungen – ein fehlender Datenpunkt gilt nie als Ausfall.

<ParamField query="from" type="ISO-Datum">
  Beginn des Zeitraums.
</ParamField>

<ParamField query="to" type="ISO-Datum">
  Ende des Zeitraums. Höchstens 366 Tage Spanne.
</ParamField>

<ParamField query="line" type="string">
  Auf eine Linie einschränken, z. B. `U1`.
</ParamField>

<ParamField query="source" type="string">
  Auf eine Datenquelle einschränken: `wiener_linien`, `trias`, `stmk_gtfs_rt`.
</ParamField>

<CodeGroup>
  ```bash Anfrage theme={null}
  curl -s "https://api.oeffigo.app/v1/history?from=2026-07-15&to=2026-07-26&line=U1"
  ```

  ```json Antwort theme={null}
  {
    "period": { "from": "2026-07-15", "to": "2026-07-26" },
    "totals": { "onTimeShare": 0.9556, "avgDelayMin": 0.57, "late10Share": 0.007 },
    "officialRealtime": {
      "daily": [ { "day": "2026-07-26", "events": 18109, "on_time_pct": 97.4 } ],
      "lines": [ { "line": "U1", "events": 39970, "on_time_pct": 96 } ],
      "heatmap": [ { "dow": 1, "hour": 8, "avg_delay_min": 0.6 } ]
    }
  }
  ```
</CodeGroup>

`dow` ist ISO: 1 = Montag … 7 = Sonntag.

## GET /v1/predictions

ÖffiGos eigene Verspätungsprognosen. Nur Einträge mit hoher oder mittlerer Sicherheit; kein Eintrag ist älter als acht Minuten.

<Warning>
  **In Entwicklung.** Die Endpunkte antworten, liefern aber keine Prognosen. Ob Prognosen verfügbar sind, meldet `GET /v1/status` in `measurement.predictionsAvailable`.
</Warning>

<Note>
  **Ein Filter ist Pflicht.** Ohne `lat`+`lon`, `line`, `jid` oder `jids` antwortet der Endpunkt mit `400 missing_query`.
</Note>

<ParamField query="lat + lon" type="number">
  Umkreissuche, optional mit `radius`.
</ParamField>

<ParamField query="line" type="string">
  Linienbezeichnung, z. B. `U1`.
</ParamField>

<ParamField query="jid" type="string">
  Eine Fahrt-Referenz.
</ParamField>

<ParamField query="jids" type="string[]">
  Bis zu 40 Fahrt-Referenzen, kommagetrennt.
</ParamField>

<ParamField query="radius" type="int">
  Nur zusammen mit `lat` + `lon`.
</ParamField>

<ParamField query="limit" type="int">
  Höchstens 200. Ersetzt keinen Filter.
</ParamField>

<CodeGroup>
  ```bash Anfrage theme={null}
  curl -s "https://api.oeffigo.app/v1/predictions?line=U1&limit=50"
  ```

  ```json Antwort theme={null}
  {
    "generatedAt": "2026-07-26T13:25:06.754Z",
    "count": 2,
    "predictions": [
      { "jid": "og1.…", "delayMin": 2, "confidence": "high" }
    ]
  }
  ```
</CodeGroup>

## POST /v1/predictions/batch

Viele Fahrt-Referenzen auf einmal. Fahrt-Referenzen sind lang und gehören nicht in eine URL.

```bash theme={null}
curl -s -X POST https://api.oeffigo.app/v1/predictions/batch \
  -H 'content-type: application/json' \
  -d '{"jids":["og1.…","og1.…"]}'
```

## GET /v1/vehicles

Fahrzeuge in einem begrenzten Kartenausschnitt. Einträge sind höchstens acht Minuten alt.

<ParamField query="minLat, minLon, maxLat, maxLon" type="number">
  Kartenausschnitt – alle vier oder keiner.
</ParamField>

<ParamField query="jids" type="string[]">
  Kommagetrennte Fahrt-Referenzen statt eines Ausschnitts.
</ParamField>

<ParamField query="limit" type="number" default="500">
  1 bis 1.000.
</ParamField>

```bash theme={null}
curl -s "https://api.oeffigo.app/v1/vehicles?minLat=48.18&minLon=16.30&maxLat=48.24&maxLon=16.42"
```

<ResponseField name="source" type="string">
  Sagt, was ein leeres Ergebnis bedeutet: `ondemand_live` mit leerer Liste heißt „gerade keine Fahrzeuge“, `ondemand_capped` heißt „vorübergehend nicht verfügbar“.
</ResponseField>

## GET /v1/wiener-linien/metro

Echtzeit der Wiener U-Bahn, gecacht. Nur für Stationen aus einer festen Liste – bewusst kein offener Proxy.

<ParamField query="diva" type="int" required>
  Stationskennung.
</ParamField>

<CodeGroup>
  ```bash Anfrage theme={null}
  curl -s "https://api.oeffigo.app/v1/wiener-linien/metro?diva=60200657"
  ```

  ```json Antwort theme={null}
  {
    "generatedAt": "2026-08-03T19:16:51.814Z",
    "status": "ok",
    "departures": [
      {
        "line": "1",
        "towards": "Stefan-Fadinger-Platz",
        "plannedAt": "2026-08-03T19:23:30.000Z",
        "realAt": "2026-08-03T19:26:50.000Z"
      }
    ]
  }
  ```
</CodeGroup>

Die Verspätung ist die Differenz aus `realAt` und `plannedAt`. Bei `503 source_standby` ist die Quelle bewusst pausiert – versuch es später erneut. Datenquelle: Stadt Wien – data.wien.gv.at, CC BY 4.0.

## GET /v1/announcements

Hinweise, die ÖffiGo ohne App-Update in den Apps ausspielt. Geschlossene und abgelaufene Meldungen sind nicht enthalten.

```bash theme={null}
curl -s https://api.oeffigo.app/v1/announcements
```

<Tip>
  Fahrt-Referenzen (`og1.…`) sind undurchsichtig. Verwende sie nur so, wie du sie bekommst – zerlegen oder selbst bauen funktioniert nicht.
</Tip>
