Démarrage rapide
Lancez-vous en 3 étapes :
1. Obtenir une clé API
Inscrivez-vous sur portal.napspan.com pour obtenir une clé API gratuite (essai de 14 jours, 1 000 requêtes/jour).
2. Effectuer votre première requête
curl -H "X-API-Key: YOUR_API_KEY" \ "https://api.napspan.com/api/v1/events?jurisdiction=WA&limit=5"
3. Analyser la réponse
{
"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
}Authentification
Toutes les requêtes API nécessitent une clé API. Transmettez-la via l'en-tête X-API-Key (recommandé) ou le paramètre de requête api_key.
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"
Erreurs & limites de débit
L'API retourne des codes de statut HTTP standard. Les en-têtes de limite de débit sont inclus dans chaque réponse.
| Statut | Signification |
|---|---|
| 200 | Succès |
| 400 | Requête incorrecte (paramètres manquants/invalides) |
| 401 | Clé API manquante ou invalide |
| 403 | Limite du plan dépassée (juridiction, restriction de fonctionnalité, essai expiré) |
| 429 | Limite de débit dépassée — réessayez après Retry-After secondes |
| 500 | Erreur serveur — veuillez réessayer ou contacter le support |
Événements
Les événements de circulation incluent les incidents, travaux, fermetures, alertes météo, restrictions et événements spéciaux dans toutes les juridictions actives.
GET /api/v1/events
| Paramètre | Type | Description |
|---|---|---|
| jurisdiction | string | Filtrer par code d'État/province (ex. WA, ON) obligatoire sur Free |
| type | string | Filtrer par type d'événement : incident, construction, closure, weather, special_event, advisory, restriction |
| severity | string | Filtrer : minor, moderate, major, critical |
| lat, lng, radius_km | number | Recherche par rayon (ex. lat=47.6&lng=-122.3&radius_km=50) |
| bbox | string | Boîte englobante : minLng,minLat,maxLng,maxLat |
| limit | int | Résultats par page (par défaut 100, max selon le plan) |
| offset | int | Décalage de pagination |
GET /api/v1/events/geojson Starter+
Mêmes paramètres que /events, retourne une FeatureCollection GeoJSON. Content-Type : application/geo+json.
GET /api/v1/events/{id}
Événement unique par ID. Retourne le détail complet de l'événement avec ses métadonnées.
# Événements près de 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)
Fonctionnalités
Les fonctionnalités sont des données hors événement : caméras, stations météo, aires de repos, panneaux, stationnement poids lourds, recharge EV, et plus encore. Tous les types partagent le même point de terminaison — spécifiez le type avec le paramètre type.
GET /api/v1/features?type=
| Paramètre | Type | Description |
|---|---|---|
| type obligatoire | string | Type de fonctionnalité (voir Types de fonctionnalités ci-dessous) |
| jurisdiction | string | Filtrer par code de juridiction |
| active | bool | true pour ne retourner que les fonctionnalités actives |
| lat, lng, radius_km | number | Recherche par rayon |
| bbox | string | Boîte englobante : minLng,minLat,maxLng,maxLat |
| limit, offset | int | Pagination |
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
Détail chargé à la demande pour une fonctionnalité unique. Certaines fonctionnalités (données compactes des couches cartographiques) ne retournent leurs propriétés complètes que via ce point de terminaison.
Corridor poids lourds Pro+
Trouvez toutes les restrictions poids lourds le long d'un itinéraire. Trace un corridor avec marge entre deux points et retourne tous les gabarits de pont, restrictions de poids, routes camions et restrictions qui le croisent. Utilise des requêtes spatiales PostGIS pour un calcul précis sur grand cercle.
GET /api/v1/truck/corridor
| Paramètre | Type | Description |
|---|---|---|
| from_lat obligatoire | number | Latitude d'origine |
| from_lng obligatoire | number | Longitude d'origine |
| to_lat obligatoire | number | Latitude de destination |
| to_lng obligatoire | number | Longitude de destination |
| buffer_km | number | Distance de marge autour du corridor (par défaut 5, max 50 km) |
| height | number | Hauteur du véhicule en mètres — filtre les gabarits inférieurs |
| weight | number | Poids du véhicule en tonnes — filtre les limites de poids inférieures |
| jurisdiction | string | Restreindre à une seule juridiction |
| limit | int | Résultats maximum (par défaut 500, max 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
Même requête, retourne une FeatureCollection GeoJSON. Utilisez-la pour afficher les résultats du corridor directement sur une carte Leaflet ou Mapbox.
// Afficher le corridor poids lourds sur une carte Leaflet 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"Pont : {feat['name']} ({feat['properties'].get('posting_status', 'unknown')})")
Analytique Pro+
Analytique historique et tendances. Tous les points de terminaison nécessitent un plan Pro ou Enterprise.
| Point de terminaison | Description |
|---|---|
| /analytics/history/{id} | Chronologie du cycle de vie d'un événement (créé, changements de statut, archivé) |
| /analytics/changes | Flux des changements récents pour tous les événements |
| /analytics/clearance | Temps de résolution des incidents (P50/P95 par juridiction) |
| /analytics/corridors | Fiabilité des corridors (fréquence d'événements par route) |
| /analytics/trends | Séries temporelles d'événements (par type, gravité, juridiction) |
| /analytics/hotspots | Clusters de points chauds géographiques |
| /analytics/weather | Historique des relevés des stations météo |
| /analytics/feature-history | Changements du cycle de vie des fonctionnalités |
| /analytics/source-health | Taux de succès des collectes de sources |
| /analytics/fetch-log | Statistiques des opérations de collecte |
Webhooks
Abonnez-vous aux changements d'événements en temps réel. Lorsqu'un événement de circulation est créé, change de gravité ou est archivé, l'API envoie un POST signé HMAC-SHA256 à votre URL webhook.
Format de la charge utile
{
"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
}
}Vérifiez l'en-tête X-NAPSPAN-Signature en utilisant HMAC-SHA256 avec votre secret webhook. Les livraisons sont relancées avec un délai exponentiel (3 tentatives).
Types de fonctionnalités
Passez l'une de ces valeurs comme paramètre type à /features.
Types d'événements
| Type | Plage de gravité | Description |
|---|---|---|
| incident | moderate–critical | Accidents, véhicules en panne, dangers |
| construction | minor–moderate | Travaux routiers, entretien, revêtement |
| closure | major–critical | Fermetures totales de route |
| weather | moderate–critical | Impacts routiers liés à la météo |
| special_event | minor–moderate | Événements planifiés (défilés, courses) |
| advisory | minor–moderate | Avis de voyage, avertissements |
| restriction | minor–moderate | Restrictions de poids, hauteur, vitesse |
Plans & limites
| Limite | Free (essai 14 jours) | Starter (29 $/mois) | Pro (99 $/mois) | Enterprise |
|---|---|---|---|---|
| RPM | 60 | 300 | 1 000 | 5 000 |
| Requêtes quotidiennes | 1 000 | 50 000 | 500 000 | Illimitées |
| Clés API | 1 | 3 | 10 | 50 |
| Juridictions/requête | 2 | 10 | Illimitées | Illimitées |
| Résultats/page | 100 | 500 | 1 000 | Illimités |
| Export GeoJSON | Non | Oui | Oui | Oui |
| Analytique | Non | Non | Oui | Oui |
| Corridor poids lourds | Non | Non | Oui | Oui |
| Délai des données | 15 min | Temps réel | Temps réel | Temps réel |