N-Ways
Documentation développeursVue d’ensemble

Référence de l’API

Chaque point d’accès de la N-Ways Maps Platform, ses paramètres, sa réponse et ses erreurs, générés à partir de nos fichiers OpenAPI.

Sur cette page

N-Ways Maps Platform — Maps, Places and Routes API

La surface partenaire stable de la N-Ways Maps Platform (/maps/v1). Elle fait foi pour la documentation et les bibliothèques clientes ; les tests de contrat du serveur (fichiers de référence, backend/internal/partnerapi/testdata/golden) figent chaque réponse décrite ici.

Authentification. Chaque appel demande une clé d’API partenaire : X-NWays-Api-Key: nw_… (serveurs, applis) ou ?key=nw_… (navigateurs, styles de carte). Les restrictions d’API d’une clé nomment des produits ; sa restriction d’application (sites, identifiants de bundle iOS, package Android + SHA-1, adresses IP de serveurs) dit où elle peut servir. Les applis envoient X-Ios-Bundle-Identifier, ou X-Android-Package et X-Android-Cert. Les clés ne marchent que si N-Ways a activé la plateforme : quand elle est coupée, chaque appel répond 503 PLATFORM_DISABLED (avec Retry-After ; votre clé va bien), et lorsque N-Ways la réserve aux organisations invitées, la clé de toute autre organisation répond 403 PLATFORM_PREVIEW_ONLY.

Produits et facturation (SKU). tiles (tuiles de carte ; SKU tiles par tuile et map_loads par lecture de style), static_maps, geocode (géocodage, inverse, codes postaux, GhanaPost, Plus Codes ; un lot compte chaque code), autocomplete (facturé par session), address_validation, search (lieux ; SKU search de base, places_contact, places_atmosphere selon les champs demandés), routing (SKU routing, et routing_advanced pour les itinéraires avec trafic, okada/keke/danfo/moto/camionnette/bateau/train, plus de 10 étapes ou les tarifs), route_matrix (facturé par élément), route_optimization, fares, traffic. Les polices sont gratuites avec toute clé Maps.

Conventions. Les coordonnées entrent en {"lat": 6.45, "lng": 3.39} (ou lat,lng dans une requête) et sortent en GeoJSON [lng, lat]. Distances en mètres, durées en secondes, montants dans l’unité principale de la devise. lang=en|fr|pt (pt : portugais européen). fields= (une liste séparée par des virgules ; a.b atteint l’intérieur des objets) ne garde que ces champs de chaque résultat et, pour les lieux, fixe le SKU. Dans v1, des champs sont seulement ajoutés ; les changements incompatibles arrivent en /maps/v2 avec 12 mois de recouvrement.

Erreurs. Une seule enveloppe pour les erreurs de clé, de quota et de produit : {"error": {"code": 400, "status": "INVALID_ARGUMENT", "reason": "LAT_LNG_REQUIRED", "message": "…", "details": […]}}. reason est stable (fiez-vous-y) ; message dit exactement ce qui s’est passé et comment corriger ; details contient l’ErrorInfo de Google (la raison, domain: nways.ng, et metadata avec les faits : docs et, selon la raison, ce qui a été vu et ce qui est permis, quel plafond et quand il se réinitialise) et un lien Help vers l’entrée de la raison sur https://nways.ng/developers/errors. Les refus portent les en-têtes CORS de la page appelante, pour que le code du navigateur puisse les lire. Raisons de plateforme, de clé et de quota, dans l’ordre où elles sont vérifiées : PLATFORM_DISABLED (503), API_KEY_MISSING, API_KEY_INVALID (une clé que N-Ways n’a jamais émise), API_KEY_REVOKED (supprimée, ou l’ancienne valeur d’une clé régénérée) (401) ; PLATFORM_PREVIEW_ONLY, ORGANISATION_CLOSED, ORGANISATION_SUSPENDED, API_ACCESS_OFF (l’organisation gère ses livraisons sur N-Ways sans l’API), API_TURNED_OFF (N-Ways a coupé l’API de l’organisation ; le message en donne la raison), PROJECT_SUSPENDED, API_KEY_PAUSED, API_KEY_SERVICE_BLOCKED, API_KEY_HTTP_REFERRER_BLOCKED, API_KEY_IP_ADDRESS_BLOCKED, API_KEY_IOS_APP_BLOCKED, API_KEY_ANDROID_APP_BLOCKED (403) ; RATE_LIMIT_EXCEEDED, QUOTA_EXCEEDED, TEMPORARILY_BLOCKED (429) ; BILLING_DISABLED (402 : l’allocation gratuite du mois est épuisée et il ne reste pas de crédit : ajoutez du crédit dans la console, Facturation) ; BACKEND_ERROR (503). Les raisons propres aux produits sont listées avec chaque opération. Toute opération peut aussi répondre NOT_FOUND (chemin inconnu), INVALID_JSON et BODY_TOO_LARGE (corps de requête), INTERNAL (500 : envoyez le X-Request-Id) et, là où des itinéraires sont calculés, ROUTING_UNAVAILABLE (503, avec Retry-After). Les trajets en okada, moto, keke et danfo que la loi interdit répondent 422 avec OKADA_BANNED_ORIGIN, OKADA_BANNED_DESTINATION, OKADA_BANNED_STOP, OKADA_BANNED_ROUTE ; MOTORBIKE_BANNED_ORIGIN, MOTORBIKE_BANNED_DESTINATION, MOTORBIKE_BANNED_STOP, MOTORBIKE_BANNED_ROUTE ; KEKE_BANNED_ORIGIN, KEKE_BANNED_DESTINATION, KEKE_BANNED_STOP, KEKE_BANNED_ROUTE ; DANFO_BANNED_ORIGIN, DANFO_BANNED_DESTINATION, DANFO_BANNED_STOP, DANFO_BANNED_ROUTE (l’interdiction figure dans le message).

En-têtes. Chaque réponse porte X-Request-Id (envoyez-le au support). Les appels autorisés portent X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset (secondes) ; un 429 et PLATFORM_DISABLED portent Retry-After.

Hôtes. api.nways.ng/maps/v1 pour tout. Les styles hébergés lisent les archives PMTiles et les polices sur le CDN tiles.nways.ng/maps/v1 (/tiles/{tileset}.pmtiles, /tiles/countries.json, /fonts/…, mêmes chemins) : une copie publique, sans clé et sans décompte ; votre clé est vérifiée et le chargement de carte compté à la lecture du style. Les URL .mvt d’une tuile restent sur l’API, avec clé. Quand le moteur d’itinéraires est indisponible, itinéraires, matrices et optimisation répondent 503 ROUTING_UNAVAILABLE avec Retry-After : renvoyez la même requête.

Limites de débit (valeurs par défaut, par clé et par minute) : tiles 6 000, static_maps 600, geocode 600, autocomplete 1 200, address_validation 300, search 600, routing 300, route_matrix 3 000 éléments, route_optimization 60, fares 120, traffic 60.

Attribution. Les réponses issues d’OpenStreetMap portent attribution ; affichez « © les contributeurs d’OpenStreetMap » partout où vous montrez les données (l’ODbL l’exige). Voir https://nways.ng/developers/terms.

Adresse de basehttps://nways.ng/maps/v1
Version1.0.0
Fichier OpenAPIpartner-v1.openapi.yaml · JSON
Points d’accèsDescription
GET /styles/{style}.jsonUn style de carte hébergé (un chargement de carte)
GET /tiles/countries.jsonLes archives de tuiles de chaque pays
GET /tiles/{tileset}.pmtilesLire l’archive PMTiles d’un pays (requêtes par plages)
GET /tiles/{tileset}/{z}/{x}/{y}.mvtUne tuile vectorielle
GET /fonts/{stack}/{range}.pbfGlyphes de police pour les libellés de la carte (gratuit)
GET /staticmapUne image de carte
GET /geocodeRechercher des lieux, des adresses et des codes
GET /reverseCe qui se trouve à un point
GET /postcodes/{code}Un code postal NIPOST
POST /postcodes/batchJusqu’à 100 codes postaux NIPOST à la fois
GET /ghanapost/{code}Une adresse GhanaPost GPS
GET /pluscodes/{code}La zone d’un Plus Code et ce qui s’y trouve
GET /autocompleteSuggestions pendant la saisie (facturées par session)
POST /addresses/validateCette adresse existe-t-elle, où se trouve-t-elle, quelle est sa forme correcte ?
GET /places/nearbyCommerces et lieux près d’un point
GET /places/searchCommerces et lieux par texte
GET /places/{id}Les détails d’un lieu
POST /routes/computeUn itinéraire, avec jusqu’à 25 arrêts intermédiaires
POST /routes/matrixTemps de trajet de plusieurs origines vers plusieurs destinations (par élément)
POST /routes/optimizeQuel véhicule visite quels arrêts, et dans quel ordre
GET /fares/estimateCe que coûte une course
GET /trafficTrafic en direct dans une zone

N-Ways Maps Platform — Fleet and logistics API

La suite logistique de N-Ways Maps Platform (produits partenaires fleet et traffic_feed). Chaque appel exige une clé API partenaire qui inclut le produit ; les clés ne fonctionnent que lorsque N-Ways a activé pour vous l’accès partenaire.

Authentification. Envoyez la clé sous la forme X-NWays-Api-Key: nw_… (serveurs, applications livreur) ou ?key=nw_…. Les appels fleet écrivent vos propres données (véhicules, tâches, webhooks) : utilisez donc une clé restreinte aux adresses IP de vos serveurs ou à votre application livreur (package Android + SHA-1, bundle id iOS). Navigateurs : uniquement la page de suivi publique.

Erreurs. Les erreurs de clé et de quota et les erreurs de produit partagent une seule enveloppe : {"error": {"code": 404, "status": "NOT_FOUND", "reason": "TASK_NOT_FOUND", "message": "…", "details": […]}} (details : l’ErrorInfo de Google avec les faits dans metadata et un lien d’aide vers la raison sur https://nways.ng/developers/errors). Raisons de plateforme et de clé : PLATFORM_DISABLED (503, Retry-After : la plateforme est désactivée, votre clé est valide), PLATFORM_PREVIEW_ONLY, API_KEY_MISSING, API_KEY_INVALID, API_KEY_REVOKED, ORGANISATION_CLOSED, ORGANISATION_SUSPENDED, API_ACCESS_OFF, API_TURNED_OFF, PROJECT_SUSPENDED, API_KEY_PAUSED, API_KEY_SERVICE_BLOCKED, API_KEY_*_BLOCKED, BILLING_DISABLED, RATE_LIMIT_EXCEEDED, QUOTA_EXCEEDED, TEMPORARILY_BLOCKED, BACKEND_ERROR. BILLING_DISABLED est un 402 : le quota gratuit du mois est épuisé et il ne reste plus de crédit (ajoutez du crédit dans la console, Facturation).

Fonctionnalités désactivées par N-Ways. N-Ways peut désactiver une fonctionnalité pour une organisation (403, le message dit pourquoi et qui contacter ; rien d’autre ne change) : DELIVERIES_OFF (nouvelles tâches), CONTRACTORS_OFF (envoi de tâches aux chauffeurs N-Ways, invitation ou recrutement), SMART_PRICE_OFF (suggestions de paie et Smart Price : envoyez vous-même payMax), WEBHOOKS_OFF (aucun envoi de webhook ; ajouter ou tester un point de terminaison est refusé), ERP_OFF (l’export des événements), TRACKERS_OFF (l’ajout de traceurs, leurs positions et alarmes ; les traceurs restent enregistrés). Les nouvelles tâches d’une organisation suspendue sont refusées avec ORGANISATION_SUSPENDED, comme ses clés ; les tâches en cours continuent.

Limites de débit. Valeurs par défaut par clé et par minute : fleet 6 000, traffic_feed 60. Les réponses portent X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Ids. Les véhicules, les conducteurs et les tâches sont désignés par vos propres ids (1 à 64 caractères parmi A–Z a–z 0–9 _ . : -), uniques par projet. Ce que N-Ways crée (webhooks, règles d’alerte et alertes, liens et invitations livreur, preuves, livraisons de webhooks) a un id opaque : un préfixe, _ et 10 lettres ou chiffres (wh_Ub3yH9sLk2, rule_…, alr_…, lnk_…, rin_…, prf_…, dlv_…). Traitez les ids comme des chaînes et ne les décomposez jamais. Les anciennes formes numérotées (wh_12, rule_7, inv_3…) restent acceptées dans les chemins jusqu’au 1er avril 2027. Les heures sont au format RFC 3339 en UTC.

Conditions sur les données. Les positions que vous envoyez sont conservées comme historique de trajets pendant retentionDays (30 par défaut, de 1 à 90), puis supprimées. Les chiffres d’heure d’arrivée estimée et de trafic ne servent qu’au trajet : ils sont effacés à la fin d’une tâche. Vos positions n’alimentent le trafic en direct public de N-Ways que si vous l’acceptez (shareTraffic, désactivé par défaut) ; elles sont alors utilisées de façon anonyme, comme celles de n’importe quel téléphone (une session par véhicule et par jour, jamais vos ids). Le flux de trafic est agrégé sur de nombreux appareils et ne contient jamais de trace.

Adresse de basehttps://nways.ng/maps/v1/fleet
Version1.0.0
Fichier OpenAPIpartner-fleet.openapi.yaml · JSON
Points d’accèsDescription
GET /settingsObtenir les paramètres de flotte du projet
PUT /settingsModifier les paramètres de flotte (les champs omis gardent leur valeur)
GET /driversLister les conducteurs
POST /driversAjouter un conducteur
GET /drivers/{id}Obtenir un conducteur
PATCH /drivers/{id}Modifier un conducteur
DELETE /drivers/{id}Supprimer un conducteur (les véhicules continuent de rouler sans conducteur)
GET /vehiclesLister les véhicules avec leur dernière position connue
POST /vehiclesAjouter un véhicule
GET /vehicles/{id}Obtenir un véhicule et sa dernière position connue
PATCH /vehicles/{id}Modifier un véhicule (driverId "" retire le conducteur)
DELETE /vehicles/{id}Supprimer un véhicule et son historique de trajets
GET /vehicles/{id}/historyL’historique de trajets d’un véhicule (du plus ancien au plus récent)
GET /vehicles/{id}/eventsLa chronologie d’un véhicule selon son traceur (contact mis et coupé, alimentation coupée et rétablie), la plus récente d’abord
POST /locationsEnvoyer des positions (par lots)
GET /tasks/{id}/proofsLa preuve de livraison de la tâche (photos, signatures) et la note du livreur
GET /proofs/{proofId}L’image d’une preuve (JPEG, PNG ou WebP), gardée aussi longtemps que sa tâche
GET /tasksLister les tâches, les plus récentes d’abord
POST /tasksCréer une livraison
GET /tasks/{id}Obtenir une tâche avec son heure d’arrivée estimée en direct
PATCH /tasks/{id}Modifier une livraison
POST /tasks/{id}/assignAssigner (ou réassigner) un véhicule — created|assigned → assigned ; événement task.assigned
POST /tasks/{id}/pickupMarquer comme enlevé — assigned → picked_up
POST /tasks/{id}/completeMarquer comme livré — assigned|picked_up|arriving → completed ; événement task.completed
POST /tasks/{id}/failMarquer comme échoué — tout statut ouvert → failed ; événement task.failed
POST /tasks/{id}/cancelAnnuler — tout statut ouvert → cancelled
POST /tasks/{id}/pin-emailEnvoyer le code PIN de livraison au client par e-mail
GET /whatsapp/numberSi un code PIN de livraison peut aller à un numéro sur WhatsApp
POST /tasks/{id}/areaDéfinir ou effacer la zone propre d’une livraison
GET /placesLister vos lieux de retrait (celui par défaut d’abord)
POST /placesAjouter un lieu de retrait (jusqu’à 200)
GET /places/{placeId}Obtenir un lieu de retrait
PATCH /places/{placeId}Modifier un lieu de retrait
DELETE /places/{placeId}Supprimer un lieu de retrait
GET /customersLister vos clients, dernière livraison d’abord
GET /customers/{customerId}Obtenir un client
DELETE /customers/{customerId}Oublier un client et ses adresses
GET /customers/{customerId}/addressesLister les adresses d’un client, dernière utilisée d’abord
POST /tasks/{id}/shareLe lien de suivi du destinataire (un nouveau s’il a expiré ; aucun une fois la tâche terminée)
GET /webhooksLister les points de réception
POST /webhooksAjouter un point de réception (10 au plus) ; la réponse contient son secret de signature, affiché une seule fois
PATCH /webhooks/{id}Modifier l’url, les events ou le champ active d’un point de réception
DELETE /webhooks/{id}Supprimer un point de réception et son journal d’envois
POST /webhooks/{id}/rotate-secretUn nouveau secret de signature (affiché une seule fois) ; l’ancien cesse aussitôt de fonctionner
POST /webhooks/{id}/testMettre en file un événement ping vers le point de réception
GET /webhooks/{id}/deliveriesLe journal d’envois du point de réception, les plus récents d’abord (conservé 30 jours)
POST /webhooks/{id}/deliveries/{deliveryId}/retryRenvoyer une livraison maintenant (échouée, ou livrée et voulue de nouveau) ; ses tentatives sont gardées
GET /alert-rulesLister les règles d’alerte
POST /alert-rulesAjouter une règle d’alerte (100 au plus)
GET /alert-rules/{ruleId}Obtenir une règle
PATCH /alert-rules/{ruleId}Modifier une règle (le type reste) ; active false la met en pause et résout ses alertes ouvertes
DELETE /alert-rules/{ruleId}Supprimer une règle (ses alertes ouvertes sont résolues)
GET /alert-eventsLes alertes levées, de la plus récente à la plus ancienne
GET /alert-events/{alertId}Obtenir une alerte
POST /alert-events/{alertId}/acknowledgePrendre en compte une alerte ouverte (plus de rappels ; elle reste jusqu’à ce qu’elle cesse ou soit résolue)
POST /alert-events/{alertId}/resolveRésoudre une alerte (envoie asset.alert_resolved)
GET /events/exportTélécharger tous les événements (CSV pour Excel ou Google Sheets, ou JSON)
GET /traffic-feedVitesses routières dans un cadre (produit traffic_feed ; entreprise)
GET /offline/regionsRégions pour lesquelles des packs hors connexion sont produits
GET /offline/packs/{region}Le manifeste du pack d’une région (202 pendant sa production ; redemandez après Retry-After)
GET /offline/packs/{region}/{file}Télécharger un fichier de pack (requêtes Range prises en charge ; ETag = son empreinte)
GET /trackersLister vos traceurs, avec le nombre par état
POST /trackersAjouter un traceur par son IMEI (le premier qui l’ajoute le garde)
GET /trackers/catalogLe catalogue des appareils, les réseaux SIM de votre pays et leurs APN, et où les appareils envoient
POST /trackers/importAjouter plusieurs traceurs depuis un CSV (vérifiez d’abord avec dryRun)
GET /trackers/setup.csvLa fiche des installateurs, les SMS de réglage de chaque traceur dans l’ordre (CSV)
GET /trackers/forwardingLe transfert depuis votre plateforme de suivi, ses adresses et les unités qu’elle envoie
POST /trackers/forwardingActiver le transfert, ou lui donner un nouveau jeton (l’ancien cesse aussitôt)
DELETE /trackers/forwardingDésactiver le transfert (les unités restent listées)
POST /trackers/forwarding/units/{unitId}/addAjouter une unité transférée à vos traceurs (un nouveau véhicule à son nom, sauf si vous en donnez un)
DELETE /trackers/forwarding/units/{unitId}Oublier une unité transférée (elle revient si votre plateforme l’envoie à nouveau)
GET /tracker-transfersVos demandes de transfert de traceurs ici, et les traceurs partis ailleurs
POST /tracker-transfersDemander un traceur qu’une autre organisation détient (propriétaires et administrateurs)
POST /tracker-transfers/{transferId}/startVous faites reconnecter l’appareil maintenant (son SMS de redémarrage) ; une nouvelle connexion dans les 3 minutes le transfère
DELETE /tracker-transfers/{transferId}Retirer une demande
GET /trackers/{trackerId}Obtenir un traceur, ses étapes de configuration et ce qui ne va pas
PATCH /trackers/{trackerId}Modifier un traceur (son véhicule, son modèle, sa SIM)
DELETE /trackers/{trackerId}Retirer un traceur (n’importe qui peut alors l’ajouter)
GET /trackers/{trackerId}/logLe journal de l’appareil (connexions, trames brutes, champs décodés, réponses envoyées, erreurs), du plus ancien au plus récent
GET /trackers/{trackerId}/streamLe journal et l’état de l’appareil au fil de l’eau (server-sent events)
POST /trackers/{trackerId}/virtualFaire rouler un traceur virtuel pour celui-ci (son propre protocole, via la passerelle de N-Ways)
DELETE /trackers/{trackerId}/virtualArrêter son traceur virtuel
GET /trackers/{trackerId}/commandsLes commandes envoyées à un traceur (les 30 dernières), et celles qu’il accepte
POST /trackers/{trackerId}/commandsEnvoyer une commande (propriétaires et administrateurs) ; sa réponse arrive dans le journal de l’appareil
GET /liveChaque véhicule en ce moment, avec son livreur, son état, sa livraison en cours et ses zones
GET /alertsCe qui demande votre attention, le plus urgent d’abord
GET /routesOù va chaque véhicule en livraison
GET /zonesLes zones du projet (des cercles), chacune avec le nombre de véhicules qui s’y trouvent
POST /zonesAjouter une zone (200 au plus par projet)
GET /zones/{id}Obtenir une zone
PATCH /zones/{id}Renommer, déplacer ou redimensionner une zone (lat et lng ensemble)
DELETE /zones/{id}Supprimer une zone
GET /vehicles/{id}/linksLes liens livreur du véhicule (jamais leurs adresses), du plus récent au plus ancien
POST /vehicles/{id}/linksUn lien que le livreur ouvre sur son téléphone pour partager sa position pour ce véhicule (sans application)
DELETE /links/{linkId}Arrêter aussitôt un lien livreur (sa page dit alors qu’il a pris fin)
GET /drivers/{id}/invitesLes invitations du livreur à N-Ways Business (jamais leurs codes), de la plus récente à la plus ancienne
POST /drivers/{id}/invitesInviter le livreur dans N-Ways Business
DELETE /invites/{inviteId}Retirer une invitation (son code ne marche plus)
DELETE /drivers/{id}/appDétacher le compte N-Ways du livreur de ce conducteur

Fichiers

La même référence en fichiers lisibles par une machine, pour générer votre propre client ou l’importer dans un outil d’API. La collection Postman contient chaque requête avec les variables {{apiKey}} et {{baseUrl}}.