FAQ
Solução de problemas — 503, 401, 403, 422, 409, por que o estoque não baixa e o que fazer quando o webhook não chega.
Respostas para os erros e dúvidas mais comuns na integração. Para o detalhe de cada código, veja a página de Erros.
503 FEATURE_DISABLED em tudo, inclusive /health?
O ambiente ainda não foi habilitado pela OnmIA. Não é problema da sua chave —
enquanto o ambiente está desligado, toda chamada retorna 503. Confirme com o
contato OnmIA o status do go-live.
401 INVALID_API_KEY mas a chave "parece certa"?
- Envie a chave completa no formato
onmia_<key_id>_<secret>no headerX-API-Key— não emAuthorization, semBearer. - Confira espaços e quebras de linha ao copiar do cofre.
- Se a chave foi rotacionada, a antiga morre imediatamente (não há cache de credencial).
403 INSUFFICIENT_SCOPE vs. 403 FORBIDDEN_STORE?
INSUFFICIENT_SCOPE: sua chave não tem a permissão da rota (vejadetails.granted_scopes). Peça à OnmIA o scope que falta.FORBIDDEN_STORE: a chave tem o scope, mas ostore_idenviado está fora da lista de lojas da chave. Confira ostore_idsretornado pelo/health.
Como recebo um pedido novo da OnmIA?
Pelo webhook order.created. Todo pedido criado em qualquer canal (catálogo,
WhatsApp/IA, manual, iFood) dispara o evento com o pedido completo. O ERP não
cria pedidos pela API. Registre o webhook com
events: ["order.created", "order.status_changed"] e trate o evento no seu
endpoint receptor. Ver Pedidos e Webhooks.
404 ao chamar POST /integration/v1/orders?
Esperado: a rota foi removida em v1.1 (e o scope orders:write deixou de
existir). Pare de enviar pedidos; passe a receber via order.created. As
leituras GET /orders/:id e GET /orders?external_order_id= continuam (scope
orders:read).
404 CUSTOMER_NOT_FOUND na fidelidade?
O cliente não existe na OnmIA para o phone/external_id enviado. A fidelidade
é find-only (não cria cliente). Confira o telefone (com/sem nono dígito) ou o
external_id cadastrado. Ver Fidelidade.
422 INSUFFICIENT_BALANCE ao debitar pontos?
O débito é maior que o saldo de pontos do cliente. Cheque o saldo antes via
GET /loyalty/balance e ajuste o valor do débito.
Por que o estoque não baixa quando um pedido é criado?
Design intencional. O ERP é a autoridade de estoque: a venda já decrementou
no seu sistema, então envie o saldo novo via PATCH /stock.
Webhook não chega?
- Confira os requisitos do receptor: HTTPS, host público, sem redirect, resposta 2xx em menos de 10s.
- Consulte
GET /webhooks/:id/deliveriese leiastatus,attempt_count,response_statuselast_error— eles dizem exatamente o que o worker viu (ex.:HTTP 500 do endpoint do parceiro, bloqueio SSRF, timeout). last_errormencionando faixa privada/reservada: seu DNS está resolvendo para IP interno (split-horizon DNS). Exponha um hostname com resolução pública.consecutive_failuresalto emGET /webhooks: seu receptor está derrubando entregas em série; corrija e valide comPOST /webhooks/:id/test.- Entrega
deadnão volta: reconcilie viaGET /orderse siga — novos eventos entram normalmente.
Há também uma página dedicada de Troubleshooting com a tabela de erros comuns e os comandos de diagnóstico.
Assinatura HMAC nunca bate?
99% dos casos: o framework fez parse do JSON e você re-serializou. Capture o
raw body (bytes) antes do middleware de JSON e assine sobre
"<timestamp>.<raw_body>". Detalhes em Webhooks.