Schnellstart
In 3 Schritten einsatzbereit:
1. API-Schlüssel anfordern
Registrieren Sie sich unter portal.napspan.com, um einen kostenlosen API-Schlüssel zu erhalten (14-Tage-Testphase, 1.000 Anfragen/Tag).
2. Erste Anfrage senden
curl -H "X-API-Key: YOUR_API_KEY" \ "https://api.napspan.com/api/v1/events?jurisdiction=WA&limit=5"
3. Antwort verarbeiten
{
"data": [
{
"id": "WA-691391",
"type": "construction",
"severity": "minor",
"title": "Maintenance - US 101",
"description": "Travelers in both directions...",
"latitude": 46.449,
"longitude": -123.872,
"jurisdiction": "WA",
"start_time": "2026-03-23T07:00:00Z"
}
],
"total": 90,
"limit": 5,
"has_more": true
}Authentifizierung
Alle API-Anfragen erfordern einen API-Schlüssel. Übergeben Sie ihn über den X-API-Key-Header (empfohlen) oder den api_key-Query-Parameter.
curl -H "X-API-Key: sk_live_abc123" https://api.napspan.com/api/v1/events
curl "https://api.napspan.com/api/v1/events?api_key=sk_live_abc123"
Fehler & Rate-Limits
Die API liefert Standard-HTTP-Statuscodes zurück. Rate-Limit-Header sind in jeder Antwort enthalten.
| Status | Bedeutung |
|---|---|
| 200 | Erfolgreich |
| 400 | Fehlerhafte Anfrage (fehlende/ungültige Parameter) |
| 401 | Fehlender oder ungültiger API-Schlüssel |
| 403 | Tarif-Limit überschritten (Zuständigkeitsbereich, Funktionssperre, abgelaufene Testphase) |
| 429 | Rate-Limit überschritten — bitte nach Retry-After Sekunden erneut versuchen |
| 500 | Serverfehler — bitte erneut versuchen oder Support kontaktieren |
Ereignisse
Verkehrsereignisse umfassen Vorfälle, Baustellen, Sperrungen, Wetterwarnungen, Beschränkungen und Sonderveranstaltungen in allen aktiven Zuständigkeitsbereichen.
GET /api/v1/events
| Parameter | Typ | Beschreibung |
|---|---|---|
| jurisdiction | string | Filter nach Bundesland-/Provinzcode (z. B. WA, ON) im Free-Tarif erforderlich |
| type | string | Filter nach Ereignistyp: incident, construction, closure, weather, special_event, advisory, restriction |
| severity | string | Filter: minor, moderate, major, critical |
| lat, lng, radius_km | number | Umkreissuche (z. B. lat=47.6&lng=-122.3&radius_km=50) |
| bbox | string | Begrenzungsrahmen: minLng,minLat,maxLng,maxLat |
| limit | int | Ergebnisse pro Seite (Standard 100, Maximum je nach Tarif) |
| offset | int | Paginierungs-Offset |
GET /api/v1/events/geojson Starter+
Gleiche Parameter wie /events, liefert eine GeoJSON FeatureCollection zurück. Content-Type: application/geo+json.
GET /api/v1/events/{id}
Einzelnes Ereignis nach ID. Liefert vollständige Ereignisdetails inklusive Metadaten zurück.
# Ereignisse in der Nähe von Seattle, WA curl -H "X-API-Key: $KEY" \ "https://api.napspan.com/api/v1/events?jurisdiction=WA&lat=47.6&lng=-122.3&radius_km=100"
import requests resp = requests.get("https://api.napspan.com/api/v1/events", params={ "jurisdiction": "WA", "lat": 47.6, "lng": -122.3, "radius_km": 100 }, headers={"X-API-Key": KEY}) events = resp.json()["data"]
const res = await fetch( `https://api.napspan.com/api/v1/events?jurisdiction=WA&lat=47.6&lng=-122.3&radius_km=100`, { headers: { "X-API-Key": KEY } } ); const { data, total } = await res.json();
req, _ := http.NewRequest("GET", "https://api.napspan.com/api/v1/events?jurisdiction=WA&lat=47.6&lng=-122.3&radius_km=100", nil) req.Header.Set("X-API-Key", key) resp, _ := http.DefaultClient.Do(req)
Funktionen
Funktionen (Features) sind Nicht-Ereignis-Daten: Kameras, Wetterstationen, Rastplätze, Schilder, LKW-Parkplätze, EV-Ladestationen und mehr. Alle Typen nutzen denselben Endpunkt — geben Sie den Typ über den type-Parameter an.
GET /api/v1/features?type=
| Parameter | Typ | Beschreibung |
|---|---|---|
| type Erforderlich | string | Funktionstyp (siehe Funktionstypen unten) |
| jurisdiction | string | Filter nach Zuständigkeitscode |
| active | bool | true, um nur aktive Funktionen zurückzugeben |
| lat, lng, radius_km | number | Umkreissuche |
| bbox | string | Begrenzungsrahmen: minLng,minLat,maxLng,maxLat |
| limit, offset | int | Paginierung |
curl -H "X-API-Key: $KEY" \ "https://api.napspan.com/api/v1/features?type=cameras&jurisdiction=CO&lat=39.7&lng=-104.9&radius_km=50"
GET /api/v1/features/{id}/details
Lazy-geladene Details für eine einzelne Funktion. Einige Funktionen (kompakte Map-Layer-Daten) liefern vollständige Eigenschaften nur über diesen Endpunkt zurück.
LKW-Korridor Pro+
Finden Sie alle LKW-Beschränkungen entlang einer Route. Erzeugt einen gepufferten Korridor zwischen zwei Punkten und liefert jede Brückendurchfahrtshöhe, Gewichtsbeschränkung, LKW-Route und Restriktion zurück, die diesen schneidet. Verwendet PostGIS-Geo-Abfragen für eine präzise Großkreis-Pufferung.
GET /api/v1/truck/corridor
| Parameter | Typ | Beschreibung |
|---|---|---|
| from_lat Erforderlich | number | Ausgangs-Breitengrad |
| from_lng Erforderlich | number | Ausgangs-Längengrad |
| to_lat Erforderlich | number | Ziel-Breitengrad |
| to_lng Erforderlich | number | Ziel-Längengrad |
| buffer_km | number | Pufferabstand um Korridor (Standard 5, Maximum 50 km) |
| height | number | Fahrzeughöhe in Metern — filtert Durchfahrtshöhen darunter |
| weight | number | Fahrzeuggewicht in metrischen Tonnen — filtert Gewichtsgrenzen darunter |
| jurisdiction | string | Auf einen Zuständigkeitsbereich beschränken |
| limit | int | Maximale Ergebnisse (Standard 500, Maximum 2000) |
bridge_clearances, bridges, weight_restrictions, truck_restrictions, truck_routes, freight_corridors, truck_parkingcurl -H "X-API-Key: $KEY" \ "https://api.napspan.com/api/v1/truck/corridor?\ from_lat=47.61&from_lng=-122.33&\ to_lat=47.66&to_lng=-117.43&\ buffer_km=10"
{
"corridor": {
"from": [47.61, -122.33],
"to": [47.66, -117.43],
"buffer_km": 10,
"distance_km": 371.2
},
"data": [
{
"id": "US-nbi-WA-531234",
"feature_type": "bridge_clearances",
"name": "I-90 over Snoqualmie River",
"latitude": 47.53,
"longitude": -121.82,
"properties": {
"posting_status": "open",
"year_built": 1969,
"_distance_km": "2.31"
}
},
{
"id": "WA-cvr-R-WA-90-1",
"feature_type": "truck_restrictions",
"name": "Snoqualmie Pass",
"properties": {
"restriction": "Oversize loads require pilot car",
"_distance_km": "0.45"
}
}
],
"total": 142,
"limit": 500
}GET /api/v1/truck/corridor/geojson Pro+ GeoJSON
Gleiche Abfrage, liefert GeoJSON FeatureCollection zurück. Verwenden Sie dies, um Korridor-Ergebnisse direkt auf einer Leaflet- oder Mapbox-Karte darzustellen.
// LKW-Korridor auf Leaflet-Karte darstellen const url = `https://api.napspan.com/api/v1/truck/corridor/geojson` + `?from_lat=47.61&from_lng=-122.33&to_lat=47.66&to_lng=-117.43&buffer_km=10`; fetch(url, { headers: { "X-API-Key": KEY } }) .then(r => r.json()) .then(geojson => { L.geoJSON(geojson, { pointToLayer: (f, ll) => L.circleMarker(ll, { radius: 6 }), onEachFeature: (f, layer) => { layer.bindPopup(`<b>${f.properties.name}</b><br>${f.properties.feature_type}`); } }).addTo(map); });
import requests resp = requests.get("https://api.napspan.com/api/v1/truck/corridor", params={ "from_lat": 47.61, "from_lng": -122.33, "to_lat": 47.66, "to_lng": -117.43, "buffer_km": 10 }, headers={"X-API-Key": KEY}) for feat in resp.json()["data"]: if feat["feature_type"] == "bridge_clearances": print(f"Bridge: {feat['name']} ({feat['properties'].get('posting_status', 'unknown')})")
Analytik Pro+
Historische Analysen und Trends. Alle Endpunkte erfordern den Pro- oder Enterprise-Tarif.
| Endpunkt | Beschreibung |
|---|---|
| /analytics/history/{id} | Lebenszyklus-Zeitleiste eines Ereignisses (erstellt, Statusänderungen, archiviert) |
| /analytics/changes | Feed aktueller Änderungen über alle Ereignisse hinweg |
| /analytics/clearance | Räumungszeiten von Vorfällen (P50/P95 nach Zuständigkeitsbereich) |
| /analytics/corridors | Korridor-Zuverlässigkeit (Ereignishäufigkeit nach Straße) |
| /analytics/trends | Ereignis-Zeitreihen (nach Typ, Schweregrad, Zuständigkeitsbereich) |
| /analytics/hotspots | Geografische Hotspot-Cluster |
| /analytics/weather | Messverlauf von Wetterstationen |
| /analytics/feature-history | Lebenszyklusänderungen von Funktionen |
| /analytics/source-health | Erfolgsraten beim Datenabruf |
| /analytics/fetch-log | Statistiken zu Abrufvorgängen |
Webhooks
Abonnieren Sie Echtzeit-Ereignisänderungen. Wenn ein Verkehrsereignis erstellt wird, seinen Schweregrad ändert oder archiviert wird, sendet die API einen HMAC-SHA256-signierten POST an Ihre Webhook-URL.
Payload-Format
{
"event": "event.created",
"timestamp": "2026-03-25T14:30:00Z",
"data": {
"id": "WA-691391",
"type": "construction",
"severity": "minor",
"jurisdiction": "WA",
"title": "Maintenance - US 101",
"latitude": 46.449,
"longitude": -123.872
}
}Verifizieren Sie den X-NAPSPAN-Signature-Header mittels HMAC-SHA256 mit Ihrem Webhook-Secret. Zustellungen werden mit exponentiellem Backoff erneut versucht (3 Versuche).
Funktionstypen
Übergeben Sie einen dieser Werte als type-Parameter an /features.
Ereignistypen
| Typ | Schweregradbereich | Beschreibung |
|---|---|---|
| incident | moderate–critical | Unfälle, liegengebliebene Fahrzeuge, Gefahren |
| construction | minor–moderate | Straßenarbeiten, Wartung, Asphaltierung |
| closure | major–critical | Vollsperrungen |
| weather | moderate–critical | Wetterbedingte Fahrbahnauswirkungen |
| special_event | minor–moderate | Geplante Veranstaltungen (Paraden, Rennen) |
| advisory | minor–moderate | Reisehinweise, Warnungen |
| restriction | minor–moderate | Gewichts-, Höhen-, Geschwindigkeitsbeschränkungen |
Tarife & Limits
| Limit | Free (14-Tage-Testphase) | Starter (29 $/Monat) | Pro (99 $/Monat) | Enterprise |
|---|---|---|---|---|
| RPM | 60 | 300 | 1.000 | 5.000 |
| Tägliche Anfragen | 1.000 | 50.000 | 500.000 | Unbegrenzt |
| API-Schlüssel | 1 | 3 | 10 | 50 |
| Zuständigkeitsbereiche/Anfrage | 2 | 10 | Unbegrenzt | Unbegrenzt |
| Ergebnisse/Seite | 100 | 500 | 1.000 | Unbegrenzt |
| GeoJSON-Export | Nein | Ja | Ja | Ja |
| Analytik | Nein | Nein | Ja | Ja |
| LKW-Korridor | Nein | Nein | Ja | Ja |
| Datenverzögerung | 15 Min. | Echtzeit | Echtzeit | Echtzeit |