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
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.napspan.com/api/v1/events?jurisdiction=WA&limit=5"

3. Analyser la réponse

Réponse JSON
{
  "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.

En-tête (recommandé)
curl -H "X-API-Key: sk_live_abc123" https://api.napspan.com/api/v1/events
Paramètre de requête
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.

StatutSignification
200Succès
400Requête incorrecte (paramètres manquants/invalides)
401Clé API manquante ou invalide
403Limite du plan dépassée (juridiction, restriction de fonctionnalité, essai expiré)
429Limite de débit dépassée — réessayez après Retry-After secondes
500Erreur 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ètreTypeDescription
jurisdictionstringFiltrer par code d'État/province (ex. WA, ON) obligatoire sur Free
typestringFiltrer par type d'événement : incident, construction, closure, weather, special_event, advisory, restriction
severitystringFiltrer : minor, moderate, major, critical
lat, lng, radius_kmnumberRecherche par rayon (ex. lat=47.6&lng=-122.3&radius_km=50)
bboxstringBoîte englobante : minLng,minLat,maxLng,maxLat
limitintRésultats par page (par défaut 100, max selon le plan)
offsetintDé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ètreTypeDescription
type obligatoirestringType de fonctionnalité (voir Types de fonctionnalités ci-dessous)
jurisdictionstringFiltrer par code de juridiction
activebooltrue pour ne retourner que les fonctionnalités actives
lat, lng, radius_kmnumberRecherche par rayon
bboxstringBoîte englobante : minLng,minLat,maxLng,maxLat
limit, offsetintPagination
Exemple : caméras près de Denver
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ètreTypeDescription
from_lat obligatoirenumberLatitude d'origine
from_lng obligatoirenumberLongitude d'origine
to_lat obligatoirenumberLatitude de destination
to_lng obligatoirenumberLongitude de destination
buffer_kmnumberDistance de marge autour du corridor (par défaut 5, max 50 km)
heightnumberHauteur du véhicule en mètres — filtre les gabarits inférieurs
weightnumberPoids du véhicule en tonnes — filtre les limites de poids inférieures
jurisdictionstringRestreindre à une seule juridiction
limitintRésultats maximum (par défaut 500, max 2000)
Recherche dans : bridge_clearances, bridges, weight_restrictions, truck_restrictions, truck_routes, freight_corridors, truck_parking
Exemple : I-90 Seattle à Spokane
curl -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"
Réponse
{
  "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 terminaisonDescription
/analytics/history/{id}Chronologie du cycle de vie d'un événement (créé, changements de statut, archivé)
/analytics/changesFlux des changements récents pour tous les événements
/analytics/clearanceTemps de résolution des incidents (P50/P95 par juridiction)
/analytics/corridorsFiabilité des corridors (fréquence d'événements par route)
/analytics/trendsSéries temporelles d'événements (par type, gravité, juridiction)
/analytics/hotspotsClusters de points chauds géographiques
/analytics/weatherHistorique des relevés des stations météo
/analytics/feature-historyChangements du cycle de vie des fonctionnalités
/analytics/source-healthTaux de succès des collectes de sources
/analytics/fetch-logStatistiques 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

Corps du POST webhook
{
  "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.

camerasCaptures de caméras de circulation avec URL d'images
weather_stationsCapteurs RWIS : température, vent, humidité, état de la chaussée
rest_areasAires de repos avec équipements (toilettes, wifi, vidange camping-car)
signsPanneaux à messages variables avec texte actuel
road_conditionsÉtat de la surface routière par segment
ev_chargingStations de recharge EV (données NREL)
bridge_clearancesGabarit vertical de pont, capacité de charge, statut d'affichage
truck_restrictionsLimites de hauteur/poids, zones matières dangereuses, permis
weight_restrictionsLimites de poids saisonnières/permanentes (polylignes)
truck_routesItinéraires camions désignés STAA (polylignes)
freight_corridorsCorridors du réseau de fret NHFN (polylignes)
truck_parkingParkings poids lourds avec capacité et équipements
weigh_stationsEmplacements et statut des stations de pesage
traffic_segmentsDonnées des capteurs de flux de circulation (vitesse/volume)
service_vehiclesChasse-neige, véhicules de service DOT (saisonniers)
ferriesTerminaux de ferry et statut des lignes

Types d'événements

TypePlage de gravitéDescription
incidentmoderate–criticalAccidents, véhicules en panne, dangers
constructionminor–moderateTravaux routiers, entretien, revêtement
closuremajor–criticalFermetures totales de route
weathermoderate–criticalImpacts routiers liés à la météo
special_eventminor–moderateÉvénements planifiés (défilés, courses)
advisoryminor–moderateAvis de voyage, avertissements
restrictionminor–moderateRestrictions de poids, hauteur, vitesse

Plans & limites

LimiteFree (essai 14 jours)Starter (29 $/mois)Pro (99 $/mois)Enterprise
RPM603001 0005 000
Requêtes quotidiennes1 00050 000500 000Illimitées
Clés API131050
Juridictions/requête210IllimitéesIllimitées
Résultats/page1005001 000Illimités
Export GeoJSONNonOuiOuiOui
AnalytiqueNonNonOuiOui
Corridor poids lourdsNonNonOuiOui
Délai des données15 minTemps réelTemps réelTemps réel

Obtenir une clé API gratuite