Routing API – Dokumentation

Die Skynet Navigator Routing API berechnet zu einer Startadresse und mehreren Zieladressen die optimierte Reihenfolge, die Teilstrecken und die Gesamtwerte. Ein einzelner REST-Endpunkt, ansprechbar aus jedem System — auch aus Zapier und Make.

Interner Status / Test. Diese API nutzt die öffentlichen OpenStreetMap-Dienste (Nominatim und den OSRM-Demoserver). Deren Nutzungsbedingungen erlauben nur nicht-kommerzielle Nutzung mit maximal einer Anfrage pro Sekunde. Die API ist deshalb ausschließlich für den internen Gebrauch und zum Testen freigegeben. Für einen produktiven, an Kunden gerichteten Einsatz muss vorher auf einen eigenen OSRM-Server oder einen bezahlten Routing-Anbieter umgestellt werden.
Inhalt

1. Endpunkt & Authentifizierung

POST   https://kwoxghmhudacyfplqnwx.supabase.co/functions/v1/route-api

Jede Anfrage braucht zwei Header:

HeaderWert
Content-Typeapplication/json
x-api-keyDein API-Key, z. B. sknav_xxxxxxxx…

Den API-Key bekommst du über die SQL-Funktion im Supabase-Projekt (siehe Abschnitt 7). Der Key wird nur als Hash gespeichert — geht er verloren, muss ein neuer erzeugt werden.

2. Anfrage (Request)

Der Body ist ein JSON-Objekt mit folgenden Feldern:

FeldTypPflichtBeschreibung
startTextjaStartadresse
stopsListe von TextjaZieladressen (1–25)
returnToStarttrue/falseneinRückkehr zum Start am Ende (Standard: false)

Beispiel-Anfrage

POST /functions/v1/route-api
Content-Type: application/json
x-api-key: sknav_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

{
  "start": "Wolfener Str. 32, 12681 Berlin",
  "stops": [
    "Alexanderplatz 1, 10178 Berlin",
    "Kurfürstendamm 234, 10719 Berlin",
    "Friedrichstr. 100, 10117 Berlin"
  ],
  "returnToStart": true
}

3. Antwort (Response)

Bei Erfolg (HTTP 200) liefert die API die optimierte Reihenfolge, alle Teilstrecken und die Gesamtwerte:

{
  "ok": true,
  "optimized_order": [
    { "position": 0, "address": "Wolfener Str. 32, 12681 Berlin",
      "resolved_address": "...", "lat": 52.52, "lng": 13.51, "role": "start" },
    { "position": 1, "address": "Alexanderplatz 1, 10178 Berlin",
      "lat": 52.52, "lng": 13.41, "role": "stop" }
  ],
  "legs": [
    { "from": "Wolfener Str. 32...", "to": "Alexanderplatz 1...",
      "distance_m": 9120, "duration_s": 1080 }
  ],
  "totals": {
    "distance_m": 28400, "distance_km": 28.4,
    "duration_s": 3360, "duration_min": 56
  },
  "meta": { "stops_in": 3, "return_to_start": true,
            "source": "OpenStreetMap / OSRM (Demo) — internal use only" }
}
FeldBedeutung
optimized_orderStopps in der optimierten Reihenfolge, mit Koordinaten und Rolle (start / stop / return)
legsTeilstrecken zwischen je zwei Punkten, mit Distanz (m) und Dauer (s)
totalsGesamtstrecke und Gesamtfahrzeit, in Metern/Sekunden und gerundet in km/min

4. Fehler & Limits

Fehler kommen als JSON mit Feld error und passendem HTTP-Status:

StatusBedeutung
400Body ungültig oder Pflichtfeld fehlt
401API-Key-Header fehlt
403API-Key ungültig oder deaktiviert
429Rate-Limit erreicht (Standard: 30 Anfragen/Minute pro Key)
422Adresse nicht gefunden oder Routing-Dienst-Fehler
Verarbeitungsdauer. Jede Adresse wird einzeln geokodiert, mit etwa einer Adresse pro Sekunde (Vorgabe des OpenStreetMap-Dienstes). Eine Anfrage mit 10 Stopps dauert also rund 11 Sekunden. In Zapier/Make ggf. das Zeitlimit des Schritts beachten.

5. Anbindung in Zapier

Es ist keine eigene Zapier-App nötig — Zapier kann die API über den eingebauten Baustein Webhooks by Zapier ansprechen.

  1. Im Zap einen Action-Schritt hinzufügen, App Webhooks by Zapier wählen.
  2. Als Event Custom Request auswählen.
  3. Method: POST
  4. URL: https://kwoxghmhudacyfplqnwx.supabase.co/functions/v1/route-api
  5. Data Pass-Through? auf false stellen.
  6. Data: das JSON eintragen, Adressen ggf. aus vorherigen Schritten einsetzen:
    {
      "start": "Wolfener Str. 32, 12681 Berlin",
      "stops": ["Alexanderplatz 1, 10178 Berlin", "Friedrichstr. 100, 10117 Berlin"],
      "returnToStart": true
    }
  7. Headers: zwei Zeilen anlegen — Content-Type = application/json und x-api-key = dein API-Key.
  8. Testen. Die Antwortfelder (totals, legs …) stehen danach in den Folgeschritten zur Verfügung.

6. Anbindung in Make

In Make (ehemals Integromat) übernimmt das Modul HTTP › Make a request die Anbindung.

  1. Neues Modul HTTP hinzufügen, Make a request wählen.
  2. URL: https://kwoxghmhudacyfplqnwx.supabase.co/functions/v1/route-api
  3. Method: POST
  4. Headers — zwei Einträge:
    • Content-Type : application/json
    • x-api-key : dein API-Key
  5. Body type: Raw, Content type: JSON (application/json)
  6. In das Request-Content-Feld das JSON eintragen (siehe Beispiel oben).
  7. Parse response auf Yes stellen — dann zerlegt Make die Antwort automatisch in einzelne Felder.

7. API-Keys verwalten

API-Keys werden direkt im Supabase-Projekt über den SQL-Editor erzeugt. Der Klartext-Key wird nur einmal angezeigt — danach ist nur noch der Hash gespeichert.

Neuen Key erzeugen

select nav_create_api_key('Zapier Produktion');

Keys auflisten

select id, label, active, rate_limit_per_min, created_at, last_used_at
from nav_api_keys order by created_at desc;

Key deaktivieren

update nav_api_keys set active = false where id = '<key-id>';

Nutzung einsehen

select endpoint, stops_count, ok, created_at
from nav_api_usage order by created_at desc limit 50;