Erros
O que significa cada erro e o que fazer. Cada erro tem um estado HTTP, um código estável com que o seu código pode agir e uma mensagem para as pessoas.
Nesta página
Como são os erros
Os erros respondem com um código HTTP e o mesmo envelope JSON, quer sejam erros de chave, de quota ou próprios de uma API. reason é estável: o seu programa pode confiar nele. message destina-se às pessoas: diz exatamente o que aconteceu e como resolver, e pode ser reformulado. details contém o ErrorInfo da Google (o motivo e, em metadata, os factos que o explicam e a ligação docs) e uma ligação Help para a entrada do motivo nesta página.
{
"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" }] }
]
}
}Cada resposta tem também um cabeçalho X-Request-Id: junte-o a qualquer pergunta enviada à assistência. Confie no código e no motivo, nunca nas palavras da mensagem.
Os endereços antigos (/v1/…) devolvem os erros próprios das API numa forma mais antiga, { "error": "message", "code": "no_route" }, e os erros de chave e de plataforma no envelope acima. Os SDK e as bibliotecas cliente leem ambos.
Códigos HTTP
| Código | Significado | O que fazer |
|---|---|---|
| 200 | Feito. | |
| 202 | Em preparação: um pacote offline a ser criado. | Peça de novo após Retry-After segundos. |
| 400 | Falta um parâmetro ou campo, ou está incorreto. | Corrija o pedido. Não o reenvie tal como está. |
| 401 | Sem chave, uma chave que o N-Ways nunca emitiu, ou uma chave eliminada ou regenerada. | O motivo e a mensagem dizem qual. Envie a chave mostrada na consola. |
| 402 | As chamadas gratuitas do mês esgotaram-se e já não há crédito (BILLING_DISABLED). | Adicione crédito na consola e tente de novo. |
| 403 | A chave não tem permissão para isso: a sua organização, o seu projeto ou a própria chave está desligado, ou a chamada sai das suas restrições. | Veja o motivo, abaixo. |
| 404 | Não encontrado: um código postal, lugar ou endereço desconhecido. | Não vale a pena repetir. |
| 422 | Compreendido, mas impossível: não há percurso entre os pontos. | Altere o pedido, ou avise a pessoa. |
| 429 | Demasiados pedidos, ou uma quota esgotada. | Espere o tempo indicado em Retry-After e tente de novo. |
| 503 | A plataforma está desligada de momento (PLATFORM_DISABLED: a sua chave é válida), ou um problema do nosso lado. | Espere o tempo indicado em Retry-After, ou tente de novo espaçando as tentativas. |
| 500, 502 | Um problema do nosso lado. | Tente de novo espaçando as tentativas: após 1, 2, 4, 8 segundos, e depois desista. |
Erros de chave, de plataforma, de quota e de faturação
Quando uma chamada é recusada, a resposta diz exatamente porquê e como resolver. O N-Ways verifica, por esta ordem: a plataforma (ligada), a chave (fornecida, emitida e não revogada), a sua organização e o seu projeto (nem fechados nem suspensos), o estado da chave (não em pausa), as suas restrições (a API, depois o site, a aplicação ou o endereço IP), os seus limites e quotas, e por fim o crédito. O primeiro ponto que falha dá a resposta.
{
"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" }]
}
]
}
}As mensagens estão em inglês. metadata contém sempre docs, e os factos de que o seu código pode precisar: o que foi visto (seen) e o que é permitido (allowed) para as restrições e as API, o limite atingido (cap) com o seu limit e a sua reposição (resetsAt) para os 429, until e suspendReason para as suspensões, why e revokedAt para as chaves revogadas, keyValid quando a plataforma está desligada. Cada recusa traz também X-Request-Id.
| Código | Motivo | Significado e solução |
|---|---|---|
| 503 | PLATFORM_DISABLED | A N-Ways Maps Platform está desligada de momento, para todos. A sua chave é válida (keyValid diz se o N-Ways a conhece): as chamadas voltam a funcionar assim que a plataforma regressar. Espere Retry-After segundos e tente de novo; consulte a página de estado. |
| 401 | API_KEY_MISSING | O pedido não tem chave. Adicione key= ou o cabeçalho X-NWays-Api-Key. |
| 401 | API_KEY_INVALID | O N-Ways nunca emitiu esta chave: um erro de escrita, uma chave cortada ou com caracteres a mais (uma chave é nw_ seguido de 32 letras e algarismos). Copie a chave inteira da consola. |
| 401 | API_KEY_REVOKED | A chave foi eliminada, ou é o valor antigo de uma chave regenerada cujo período de tolerância terminou. A mensagem diz qual e quando. Crie uma nova chave, ou use o novo valor da chave mostrado na consola. |
| 403 | PLATFORM_PREVIEW_ONLY | O N-Ways reservou a plataforma às organizações que convidou, e a sua não é uma delas. A sua chave é válida; para ser convidado, escreva para hello@nways.ng. |
| 403 | ORGANISATION_CLOSED | A sua organização foi fechada (pelo proprietário ou pelo N-Ways): nenhuma das suas chaves funciona. Crie uma nova organização na consola, ou escreva para hello@nways.ng para a reabrir. |
| 403 | ORGANISATION_SUSPENDED | O N-Ways suspendeu a sua organização: todas as suas chaves são recusadas. A mensagem indica até quando (hora de Lagos), se houver um fim, e o motivo dado pelo N-Ways, se tiver optado por o partilhar. As chamadas voltam a funcionar sozinhas a essa hora; caso contrário, escreva para hello@nways.ng. |
| 403 | API_ACCESS_OFF | A sua organização gere as entregas no N-Ways (a consola e o N-Ways Business) sem a API: por isso as suas chaves estão desativadas. Para usar também a API, adicione-a na consola, em Faturação: as suas chamadas à API passam então a ser pagas conforme o uso, além do seu plano mensal. |
| 403 | API_TURNED_OFF | O N-Ways desligou as chaves de API da sua organização; o seu acesso e o seu plano não mudam, e a consola e o N-Ways Business continuam a funcionar. A mensagem dá o motivo registado pelo N-Ways. Escreva para hello@nways.ng para as voltar a ligar. |
| 403 | PROJECT_SUSPENDED | O N-Ways suspendeu o projeto desta chave; os outros projetos da organização continuam a funcionar. A mensagem indica o projeto e dá o motivo. Escreva para hello@nways.ng para o restabelecer. |
| 403 | API_KEY_PAUSED | A chave está em pausa na consola. Retome-a (Chaves → a chave → Retomar): volta a funcionar em 30 segundos. (Antes de 16 de outubro de 2026, este motivo chamava-se API_KEY_DISABLED.) |
| 403 | API_KEY_SERVICE_BLOCKED | A chave não pode chamar esta API: a mensagem indica a API e o que a chave, o seu projeto ou o seu plano permitem (service, allowed). Adicione a API às da chave ou do projeto na consola. Se o seu plano não a incluir, escreva-nos para a adicionar. |
| 403 | API_KEY_HTTP_REFERRER_BLOCKED | A página web não consta das restrições de site da chave, ou o pedido não indicava nenhuma página. A mensagem mostra o site visto e os permitidos. Adicione o endereço dele, ou, se esse site não for seu, alguém copiou a sua chave. |
| 403 | API_KEY_IP_ADDRESS_BLOCKED | O endereço do servidor não consta das restrições de IP da chave. A mensagem mostra o endereço visto e os permitidos. Adicione o seu endereço público (NAT). |
| 403 | API_KEY_ANDROID_APP_BLOCKED | O pacote ou o certificado da aplicação Android não é permitido, ou não foi enviado. A mensagem mostra o que foi visto e o que é permitido. Adicione o SHA-1 de carregamento e o do Play. |
| 403 | API_KEY_IOS_APP_BLOCKED | O bundle ID da aplicação iOS não é permitido, ou não foi enviado. A mensagem mostra o que foi visto e o que é permitido. |
| 429 | RATE_LIMIT_EXCEEDED | Demasiados pedidos neste minuto: o limite da chave para esta API, ou o da sua organização (todas as chaves em conjunto). A mensagem e cap dizem qual; é reposto no fim do minuto: espere Retry-After segundos. |
| 429 | QUOTA_EXCEEDED | Foi atingido um limite diário: o da chave para esta API, ou o da sua organização. A mensagem e cap dizem qual, e quando é reposto (meia-noite em Lagos, UTC+1; resetsAt, Retry-After). Aumente o limite da chave na consola, ou espere. |
| 402 | BILLING_DISABLED | Adicione crédito: as chamadas gratuitas do mês para esta API esgotaram-se e já não há crédito pré-pago. As outras API continuam a funcionar dentro das suas chamadas gratuitas. Adicione crédito na consola (Faturação → Adicionar crédito) e as chamadas recomeçam de imediato. |
| 429 | TEMPORARILY_BLOCKED | Demasiados pedidos recusados vindos da mesma ligação (uma chave errada ou bloqueada enviada uma e outra vez). Corrija a chave e espere Retry-After segundos. |
| 503 | BACKEND_ERROR | Não foi possível verificar as chaves nesse momento (um problema do nosso lado). Tente de novo espaçando as tentativas. |
Desde 16 de outubro de 2026, PARTNER_SUSPENDED passou a ORGANISATION_SUSPENDED, uma organização desativada pelo N-Ways responde ORGANISATION_SUSPENDED e já não PROJECT_SUSPENDED, e as chaves eliminadas ou regeneradas respondem API_KEY_REVOKED e já não API_KEY_INVALID.
As recusas e os pedidos preliminares (preflight) trazem sempre os cabeçalhos CORS da página que faz a chamada, tanto em /maps/v1 como nos endereços antigos (/v1, /tiles, /fonts), para que o seu código (e a nota do SDK Maps no mapa) possa ler o motivo, mesmo quando a plataforma está desligada.
Numa página web, um mapa recusado mostra a nota do SDK Maps: a mensagem do N-Ways, com «What to do», que leva ao motivo nesta página. A consola de programador do navegador indica o mesmo, com o código HTTP.
Os motivos de cada API
Cada operação da referência da API lista os seus próprios motivos. Os que vai encontrar com mais frequência:
| Motivo | Código | API | Significado |
|---|---|---|---|
QUERY_REQUIRED, QUERY_TOO_LONG | 400 | Geocodificação, preenchimento automático | q falta ou ultrapassa 200 caracteres. |
POSTCODE_INVALID | 400 | Geocodificação, percursos | Não é um código postal NIPOST. |
POSTCODE_NOT_FOUND_CHECK | 404 | Geocodificação | Um código postal bem formado que o N-Ways não consegue localizar: confirme-o com o cliente. |
GHANAPOST_INVALID, GHANAPOST_UNKNOWN | 400, 404 | Geocodificação | Não é um endereço GhanaPost GPS; ou é um que o N-Ways não consegue localizar. |
FIELDS_REQUIRED, FIELDS_INVALID | 400 | Lugares | Os detalhes de um lugar exigem fields; ou um nome de campo é desconhecido. |
SESSION_INVALID | 400 | Preenchimento automático | O token de sessão não tem de 8 a 64 letras, algarismos, - ou _. |
TOO_MANY_INTERMEDIATES | 400 | Percursos | Mais de 25 paragens pelo caminho. |
NO_ROUTE, NO_ROAD_ROUTE | 422 | Percursos | Não há percurso: um ponto está demasiado longe de uma estrada, ou do outro lado da água para um carro ou um okada. |
OKADA_BANNED_…, MOTORBIKE_BANNED_…, KEKE_BANNED_…, DANFO_BANNED_…, terminados em _ORIGIN, _DESTINATION, _STOP ou _ROUTE | 422 | Percursos | A lei proíbe este veículo neste trajeto: a partida, a chegada, uma paragem intermédia ou todos os caminhos possíveis estão numa zona de proibição. A mensagem indica a proibição. |
ROUTE_TOO_FAR | 422 | Percursos | Os lugares estão demasiado afastados para um único percurso deste tipo. |
MATRIX_TOO_LARGE, MATRIX_TOO_FAR | 400 | Matriz de percursos | Mais de 50 partidas ou chegadas, ou de 625 pares; ou pontos demasiado afastados. |
STOPS_INVALID, VEHICLES_INVALID | 400 | Otimização de percursos | De 1 a 50 paragens e de 1 a 5 veículos. |
ROUTING_UNAVAILABLE | 503 | Percursos | O motor de percursos está ocupado ou a reiniciar. Tente de novo. |
INVALID_JSON | 400 | Todas | O corpo do pedido não é JSON válido para este ponto de acesso. A mensagem diz onde. |
BODY_TOO_LARGE | 413 | Todas | O corpo do pedido ultrapassa o tamanho permitido para este ponto de acesso. |
NOT_FOUND | 404 | Todas | Este ponto de acesso não existe: verifique o endereço e o método. |
INTERNAL | 500 | Todas | Um problema do nosso lado. Tente de novo espaçando as tentativas; se persistir, envie-nos o X-Request-Id. |
TASK_NOT_FOUND, TASK_ENDED | 404, 409 | Frota | Esta entrega não existe; ou já terminou. |
DELIVERIES_OFF | 403 | Frota | O N-Ways desligou as novas entregas da sua organização (a mensagem diz porquê). As entregas em curso continuam. |
CONTRACTORS_OFF | 403 | Frota | O envio de entregas aos estafetas N-Ways, o convite ou o recrutamento deles está desligado para a sua organização. Os seus próprios estafetas continuam a poder entregar. |
SMART_PRICE_OFF | 403 | Frota | As sugestões de pagamento e o Smart Price estão desligados para a sua organização: envie payMax por sua conta, sem smartPrice. |
WEBHOOKS_OFF | 403 | Frota | Os webhooks estão desligados para a sua organização: nada é enviado, e adicionar ou testar um ponto de acesso é recusado. Os eventos continuam disponíveis para exportação. |
ERP_OFF | 403 | Frota | A sincronização ERP (a exportação de eventos) está desligada para a sua organização. |
ORGANISATION_SUSPENDED | 403 | Frota | O N-Ways suspendeu a sua organização: as novas entregas são recusadas, tal como as suas chaves. As entregas em curso continuam. |
Repetir bem
- Repita apenas os 429 e os 5xx, com esperas crescentes e um pouco de aleatoriedade, para que muitos clientes não repitam todos ao mesmo tempo.
- Nunca reenvie tal como está um pedido que recebeu um 4xx que não seja 429: vai falhar da mesma forma.
- Defina um tempo limite: 10 segundos para a geocodificação e os lugares, 20 para os percursos.
- Guarde em cache o que tem direito a guardar (veja o que pode guardar), para que uma falha curta não pare os seus estafetas.