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.
POST https://kwoxghmhudacyfplqnwx.supabase.co/functions/v1/route-api
Jede Anfrage braucht zwei Header:
| Header | Wert |
|---|---|
Content-Type | application/json |
x-api-key | Dein 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.
Der Body ist ein JSON-Objekt mit folgenden Feldern:
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
start | Text | ja | Startadresse |
stops | Liste von Text | ja | Zieladressen (1–25) |
returnToStart | true/false | nein | Rückkehr zum Start am Ende (Standard: false) |
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
}
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" }
}
| Feld | Bedeutung |
|---|---|
optimized_order | Stopps in der optimierten Reihenfolge, mit Koordinaten und Rolle (start / stop / return) |
legs | Teilstrecken zwischen je zwei Punkten, mit Distanz (m) und Dauer (s) |
totals | Gesamtstrecke und Gesamtfahrzeit, in Metern/Sekunden und gerundet in km/min |
Fehler kommen als JSON mit Feld error und passendem HTTP-Status:
| Status | Bedeutung |
|---|---|
| 400 | Body ungültig oder Pflichtfeld fehlt |
| 401 | API-Key-Header fehlt |
| 403 | API-Key ungültig oder deaktiviert |
| 429 | Rate-Limit erreicht (Standard: 30 Anfragen/Minute pro Key) |
| 422 | Adresse nicht gefunden oder Routing-Dienst-Fehler |
Es ist keine eigene Zapier-App nötig — Zapier kann die API über den eingebauten Baustein Webhooks by Zapier ansprechen.
POSThttps://kwoxghmhudacyfplqnwx.supabase.co/functions/v1/route-apifalse stellen.{
"start": "Wolfener Str. 32, 12681 Berlin",
"stops": ["Alexanderplatz 1, 10178 Berlin", "Friedrichstr. 100, 10117 Berlin"],
"returnToStart": true
}
Content-Type = application/json und
x-api-key = dein API-Key.totals, legs …) stehen
danach in den Folgeschritten zur Verfügung.In Make (ehemals Integromat) übernimmt das Modul HTTP › Make a request die Anbindung.
https://kwoxghmhudacyfplqnwx.supabase.co/functions/v1/route-apiPOSTContent-Type : application/jsonx-api-key : dein API-KeyRaw, Content type: JSON (application/json)Yes stellen — dann zerlegt Make
die Antwort automatisch in einzelne Felder.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.
select nav_create_api_key('Zapier Produktion');
select id, label, active, rate_limit_per_min, created_at, last_used_at
from nav_api_keys order by created_at desc;
update nav_api_keys set active = false where id = '<key-id>';
select endpoint, stops_count, ok, created_at
from nav_api_usage order by created_at desc limit 50;