N-Ways
Documentation développeursErreurs

Erreurs

Ce que veut dire chaque erreur et que faire. Chaque erreur a un statut HTTP, un code stable sur lequel votre code peut agir et un message pour les personnes.

Sur cette page

À quoi ressemblent les erreurs

Les erreurs répondent avec un code HTTP et une même enveloppe JSON, qu’il s’agisse d’erreurs de clé, de quota ou propres à une API. reason est stable : votre programme peut s’y fier. message s’adresse aux personnes : il dit exactement ce qui s’est passé et comment y remédier, et peut être reformulé. details contient l’ErrorInfo de Google (le motif et, dans metadata, les faits qui l’expliquent et le lien docs) et un lien Help vers l’entrée du motif sur cette page.

400 Bad Request
{
  "error": {
    "code": 400,
    "status": "INVALID_ARGUMENT",
    "reason": "TOO_MANY_INTERMEDIATES",
    "message": "A route has up to 25 intermediates.",
    "details": [
      { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "TOO_MANY_INTERMEDIATES", "domain": "nways.ng",
        "metadata": { "docs": "https://nways.ng/developers/errors#api-reasons" } },
      { "@type": "type.googleapis.com/google.rpc.Help",
        "links": [{ "description": "TOO_MANY_INTERMEDIATES: what it means and how to fix it", "url": "https://nways.ng/developers/errors#api-reasons" }] }
    ]
  }
}

Chaque réponse a aussi un en-tête X-Request-Id : joignez-le à toute question adressée à l’assistance. Fiez-vous au code et au motif, jamais aux mots du message.

Remarque :

Les anciennes adresses (/v1/…) renvoient les erreurs propres aux API sous une forme plus ancienne, { "error": "message", "code": "no_route" }, et les erreurs de clé et de plateforme dans l’enveloppe ci-dessus. Les SDK et les bibliothèques clientes lisent les deux.

Codes HTTP

CodeSignificationQue faire
200Fait.
202En préparation : un pack hors connexion en cours de création.Redemandez après Retry-After secondes.
400Un paramètre ou un champ manque ou est incorrect.Corrigez la requête. Ne la renvoyez pas telle quelle.
401Pas de clé, une clé que N-Ways n’a jamais émise, ou une clé supprimée ou régénérée.Le motif et le message disent lequel. Envoyez la clé affichée dans la console.
402Les appels gratuits du mois sont épuisés et il ne reste plus de crédit (BILLING_DISABLED).Ajoutez du crédit dans la console, puis réessayez.
403La clé n’a pas le droit de faire cela : son organisation, son projet ou la clé elle-même est coupé, ou l’appel sort de ses restrictions.Voyez le motif, ci-dessous.
404Introuvable : un code postal, un lieu ou une adresse inconnus.Inutile de réessayer.
422Comprise, mais impossible : aucun itinéraire entre les points.Modifiez la requête, ou prévenez la personne.
429Trop de requêtes, ou un quota épuisé.Attendez le temps indiqué par Retry-After, puis réessayez.
503La plateforme est coupée pour l’instant (PLATFORM_DISABLED : votre clé est valable), ou un problème de notre côté.Attendez le temps indiqué par Retry-After, ou réessayez en espaçant les tentatives.
500, 502Un problème de notre côté.Réessayez en espaçant les tentatives : après 1, 2, 4, 8 secondes, puis abandonnez.

Erreurs de clé, de plateforme, de quota et de facturation

Quand un appel est refusé, la réponse dit exactement pourquoi et comment y remédier. N-Ways vérifie, dans cet ordre : la plateforme (allumée), la clé (fournie, émise et non révoquée), son organisation et son projet (ni fermés ni suspendus), l’état de la clé (pas en pause), ses restrictions (l’API, puis le site web, l’application ou l’adresse IP), ses limites et quotas, puis le crédit. Le premier point qui échoue donne la réponse.

403 Forbidden
{
  "error": {
    "code": 403,
    "status": "PERMISSION_DENIED",
    "reason": "API_KEY_PAUSED",
    "message": "The API key nw_8fK2q… (“Checkout”) is paused, so its calls are refused. Resume it in the console (https://map.nways.ng/console, Keys → the key → Resume); it works again within 30 seconds.",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "API_KEY_PAUSED",
        "domain": "nways.ng",
        "metadata": { "docs": "https://nways.ng/developers/errors#api-key-paused", "keyPrefix": "nw_8fK2q" }
      },
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [{ "description": "API_KEY_PAUSED: what it means and how to fix it", "url": "https://nways.ng/developers/errors#api-key-paused" }]
      }
    ]
  }
}

Les messages sont en anglais. metadata contient toujours docs, et les faits dont votre code peut avoir besoin : ce qui a été vu (seen) et ce qui est autorisé (allowed) pour les restrictions et les API, le plafond atteint (cap) avec sa limit et sa remise à zéro (resetsAt) pour les 429, until et suspendReason pour les suspensions, why et revokedAt pour les clés révoquées, keyValid quand la plateforme est coupée. Chaque refus porte aussi X-Request-Id.

CodeMotifSignification et solution
503PLATFORM_DISABLEDLa plateforme N-Ways Maps est coupée pour l’instant, pour tout le monde. Votre clé est valable (keyValid dit si N-Ways la connaît) : les appels refonctionnent dès le retour de la plateforme. Attendez Retry-After secondes et réessayez ; voyez la page d’état.
401API_KEY_MISSINGLa requête n’a pas de clé. Ajoutez key= ou l’en-tête X-NWays-Api-Key.
401API_KEY_INVALIDN-Ways n’a jamais émis cette clé : une faute de frappe, une clé tronquée ou avec des caractères en trop (une clé, c’est nw_ suivi de 32 lettres et chiffres). Copiez la clé entière depuis la console.
401API_KEY_REVOKEDLa clé a été supprimée, ou c’est l’ancienne valeur d’une clé régénérée dont le délai de grâce est écoulé. Le message dit lequel et quand. Créez une nouvelle clé, ou utilisez la nouvelle valeur de la clé affichée dans la console.
403PLATFORM_PREVIEW_ONLYN-Ways a réservé la plateforme aux organisations qu’elle a invitées, et la vôtre n’en fait pas partie. Votre clé est valable ; pour être invité, écrivez à hello@nways.ng.
403ORGANISATION_CLOSEDVotre organisation a été fermée (par son propriétaire ou par N-Ways) : aucune de ses clés ne fonctionne. Créez une nouvelle organisation dans la console, ou écrivez à hello@nways.ng pour la rouvrir.
403ORGANISATION_SUSPENDEDN-Ways a suspendu votre organisation : toutes ses clés sont refusées. Le message indique jusqu’à quand (heure de Lagos), s’il y a une fin, et la raison donnée par N-Ways, si elle a choisi de la partager. Les appels refonctionnent d’eux-mêmes à cette heure-là ; sinon, écrivez à hello@nways.ng.
403API_ACCESS_OFFVotre organisation gère ses livraisons sur N-Ways (la console et N-Ways Business) sans l’API : ses clés sont donc désactivées. Pour utiliser aussi l’API, ajoutez-la dans la console, Facturation : vos appels d’API sont alors payés à l’usage, en plus de votre forfait mensuel.
403API_TURNED_OFFN-Ways a coupé les clés API de votre organisation ; votre accès et votre forfait ne changent pas, et la console et N-Ways Business continuent de fonctionner. Le message donne le motif enregistré par N-Ways. Écrivez à hello@nways.ng pour les faire rallumer.
403PROJECT_SUSPENDEDN-Ways a suspendu le projet de cette clé ; les autres projets de l’organisation continuent de fonctionner. Le message nomme le projet et donne la raison. Écrivez à hello@nways.ng pour le rétablir.
403API_KEY_PAUSEDLa clé est en pause dans la console. Reprenez-la (Clés → la clé → Reprendre) : elle refonctionne sous 30 secondes. (Avant le 16 octobre 2026, ce motif s’appelait API_KEY_DISABLED.)
403API_KEY_SERVICE_BLOCKEDLa clé ne peut pas appeler cette API : le message nomme l’API et ce que la clé, son projet ou votre formule autorisent (service, allowed). Ajoutez l’API à celles de la clé ou du projet dans la console. Si votre formule ne la comprend pas, écrivez-nous pour l’ajouter.
403API_KEY_HTTP_REFERRER_BLOCKEDLa page web ne figure pas dans les restrictions de site web de la clé, ou la requête n’indiquait aucune page. Le message montre le site vu et ceux autorisés. Ajoutez son adresse, ou, si ce site n’est pas le vôtre, quelqu’un a copié votre clé.
403API_KEY_IP_ADDRESS_BLOCKEDL’adresse du serveur ne figure pas dans les restrictions d’IP de la clé. Le message montre l’adresse vue et celles autorisées. Ajoutez votre adresse publique (NAT).
403API_KEY_ANDROID_APP_BLOCKEDLe package ou le certificat de l’application Android n’est pas autorisé, ou n’a pas été envoyé. Le message montre ce qui a été vu et ce qui est autorisé. Ajoutez le SHA-1 d’importation et celui de Play.
403API_KEY_IOS_APP_BLOCKEDLe bundle ID de l’application iOS n’est pas autorisé, ou n’a pas été envoyé. Le message montre ce qui a été vu et ce qui est autorisé.
429RATE_LIMIT_EXCEEDEDTrop de requêtes cette minute : le plafond de la clé pour cette API, ou celui de votre organisation (toutes ses clés ensemble). Le message et cap disent lequel ; il se remet à zéro à la fin de la minute : attendez Retry-After secondes.
429QUOTA_EXCEEDEDUn plafond journalier est atteint : celui de la clé pour cette API, ou celui de votre organisation. Le message et cap disent lequel, et quand il se remet à zéro (minuit à Lagos, UTC+1 ; resetsAt, Retry-After). Relevez le plafond de la clé dans la console, ou attendez.
402BILLING_DISABLEDAjoutez du crédit : les appels gratuits du mois pour cette API sont épuisés et il ne reste plus de crédit prépayé. Les autres API continuent de fonctionner dans la limite de leurs appels gratuits. Ajoutez du crédit dans la console (Facturation → Ajouter du crédit) et les appels reprennent aussitôt.
429TEMPORARILY_BLOCKEDTrop de requêtes refusées venant d’une même connexion (une clé erronée ou bloquée envoyée encore et encore). Corrigez la clé, puis attendez Retry-After secondes.
503BACKEND_ERRORLes clés n’ont pas pu être vérifiées à ce moment-là (un problème de notre côté). Réessayez en espaçant les tentatives.

Depuis le 16 octobre 2026, PARTNER_SUSPENDED devient ORGANISATION_SUSPENDED, une organisation désactivée par N-Ways répond ORGANISATION_SUSPENDED et non plus PROJECT_SUSPENDED, et les clés supprimées ou régénérées répondent API_KEY_REVOKED et non plus API_KEY_INVALID.

Les refus et les requêtes préliminaires (preflight) portent toujours les en-têtes CORS de la page appelante, sur /maps/v1 comme sur les anciennes adresses (/v1, /tiles, /fonts), pour que votre code (et la note du SDK Maps sur la carte) puisse lire le motif, même quand la plateforme est coupée.

Astuce :

Dans une page web, une carte refusée affiche la note du SDK Maps : le message de N-Ways, avec « What to do » qui mène au motif sur cette page. La console de développement du navigateur indique la même chose, avec le code HTTP.

Les motifs de chaque API

Chaque opération de la référence de l’API liste ses propres motifs. Ceux que vous rencontrerez le plus souvent :

MotifCodeAPISignification
QUERY_REQUIRED, QUERY_TOO_LONG400Géocodage, saisie semi-automatiqueq manque ou dépasse 200 caractères.
POSTCODE_INVALID400Géocodage, itinérairesCe n’est pas un code postal NIPOST.
POSTCODE_NOT_FOUND_CHECK404GéocodageUn code postal bien formé que N-Ways ne sait pas situer : vérifiez-le avec le client.
GHANAPOST_INVALID, GHANAPOST_UNKNOWN400, 404GéocodageCe n’est pas une adresse GhanaPost GPS ; ou c’en est une que N-Ways ne sait pas situer.
FIELDS_REQUIRED, FIELDS_INVALID400LieuxLes détails d’un lieu demandent fields ; ou un nom de champ est inconnu.
SESSION_INVALID400Saisie semi-automatiqueLe jeton de session ne fait pas de 8 à 64 lettres, chiffres, - ou _.
TOO_MANY_INTERMEDIATES400ItinérairesPlus de 25 arrêts en chemin.
NO_ROUTE, NO_ROAD_ROUTE422ItinérairesAucun itinéraire : un point est trop loin d’une route, ou de l’autre côté de l’eau pour une voiture ou un okada.
OKADA_BANNED_…, MOTORBIKE_BANNED_…, KEKE_BANNED_…, DANFO_BANNED_…, terminés par _ORIGIN, _DESTINATION, _STOP ou _ROUTE422ItinérairesLa loi interdit ce véhicule sur ce trajet : le départ, l’arrivée, un arrêt intermédiaire ou tous les chemins possibles sont dans une zone d’interdiction. Le message nomme l’interdiction.
ROUTE_TOO_FAR422ItinérairesLes lieux sont trop éloignés pour un seul itinéraire de ce type.
MATRIX_TOO_LARGE, MATRIX_TOO_FAR400Matrice d’itinérairesPlus de 50 départs ou arrivées, ou de 625 paires ; ou des points trop éloignés.
STOPS_INVALID, VEHICLES_INVALID400Optimisation de tournéesDe 1 à 50 arrêts et de 1 à 5 véhicules.
ROUTING_UNAVAILABLE503ItinérairesLe moteur d’itinéraires est occupé ou redémarre. Réessayez.
INVALID_JSON400ToutesLe corps de la requête n’est pas un JSON valide pour ce point d’accès. Le message dit où.
BODY_TOO_LARGE413ToutesLe corps de la requête dépasse la taille permise pour ce point d’accès.
NOT_FOUND404ToutesCe point d’accès n’existe pas : vérifiez l’adresse et la méthode.
INTERNAL500ToutesUn problème de notre côté. Réessayez en espaçant les tentatives ; si cela dure, envoyez-nous le X-Request-Id.
TASK_NOT_FOUND, TASK_ENDED404, 409FlotteCette livraison n’existe pas ; ou elle est terminée.
DELIVERIES_OFF403FlotteN-Ways a coupé les nouvelles livraisons de votre organisation (le message dit pourquoi). Les livraisons en cours continuent.
CONTRACTORS_OFF403FlotteL’envoi de livraisons aux livreurs N-Ways, leur invitation ou leur recrutement est coupé pour votre organisation. Vos propres livreurs peuvent toujours livrer.
SMART_PRICE_OFF403FlotteLes suggestions de paie et Smart Price sont coupés pour votre organisation : envoyez payMax vous-même, sans smartPrice.
WEBHOOKS_OFF403FlotteLes webhooks sont coupés pour votre organisation : rien n’est envoyé, et ajouter ou tester un point d’accès est refusé. Les événements restent disponibles pour l’export.
ERP_OFF403FlotteLa synchro ERP (l’export des événements) est coupée pour votre organisation.
ORGANISATION_SUSPENDED403FlotteN-Ways a suspendu votre organisation : les nouvelles livraisons sont refusées comme ses clés. Les livraisons en cours continuent.

Bien réessayer

  • Ne réessayez que les 429 et les 5xx, avec des attentes croissantes et un peu de hasard, pour que de nombreux clients ne réessaient pas tous en même temps.
  • Ne renvoyez jamais telle quelle une requête qui a reçu un 4xx autre que 429 : elle échouera de la même façon.
  • Fixez un délai d’attente : 10 secondes pour le géocodage et les lieux, 20 pour les itinéraires.
  • Mettez en cache ce que vous avez le droit de garder (voyez ce que vous pouvez conserver), pour qu’une courte panne n’arrête pas vos livreurs.