Autenticação
Header X-API-Key (onmia_<key_id>_<secret>), ordem de validação no servidor, scopes e escopo de loja.
Toda chamada usa o header X-API-Key. Não há Authorization: Bearer.
X-API-Key: onmia_<key_id>_<secret>
Content-Type: application/jsonA chave é emitida pela OnmIA e exibida uma única vez. Envie sempre a chave
completa (prefixo onmia_, key_id e secret) — o servidor faz parse do
formato antes de qualquer consulta; chave malformada retorna
401 INVALID_API_KEY imediatamente.
key_id: 16 caracteres hex (lookup O(1)).secret: 43 caracteres base64url (~256 bits).
Ordem de validação no servidor
Em cada requisição, o servidor avalia nesta ordem:
- Feature flag do ambiente →
503 FEATURE_DISABLEDse desligada. - Parse do header
X-API-Key→401 INVALID_API_KEYse ausente/malformado. - Lookup da chave no banco. Falha de infraestrutura aqui →
503 AUTH_UNAVAILABLE(a API fecha por segurança — fail-closed, nunca deixa passar). - Chave inexistente, inativa ou revogada →
401 INVALID_API_KEY. Não há cache de credencial: a revogação vale já na requisição seguinte. - Comparação de hash em tempo constante (timing-safe).
- Síntese do escopo de loja da chave.
- Rate limit por chave →
429 RATE_LIMITED.
Scopes
| Scope | Permite |
|---|---|
catalog:write | Criar/atualizar catálogo via bulk. |
stock:write | Atualizar estoque e preço por loja. |
orders:write | Criar pedidos e atualizar status. |
orders:read | Consultar pedidos. |
webhooks:manage | Configurar webhooks e ver entregas. |
Chamada sem o scope necessário retorna 403 INSUFFICIENT_SCOPE com
details.required_scope e details.granted_scopes.
Verificação de credencial
O /health não exige scope — é o teste inicial:
curl -sS https://api.onmia.com.br/integration/v1/health \
-H "X-API-Key: $ONMIA_API_KEY"{
"status": "ok",
"merchant_id": "b9e9ad81-0000-0000-0000-000000000000",
"store_ids": [],
"scopes": ["catalog:write", "stock:write", "orders:write", "orders:read", "webhooks:manage"],
"ts": "2026-06-12T12:00:00.000Z"
}Escopo de loja
store_ids: [] significa todas as lojas do merchant. Quando preenchido, a
chave só pode operar aquelas lojas:
- Escritas em loja fora do escopo retornam
403 FORBIDDEN_STORE(nos lotes, por item — uma loja proibida invalida o item inteiro, sem efeito colateral). - Leituras de pedido fora do escopo retornam
404 NOT_FOUND— a API não confirma a existência de recursos fora do seu escopo.
Segurança da chave
Onde guardar a chave
Armazene a chave em cofre de segredos ou variável de ambiente do servidor. Nunca em frontend, app mobile, repositório git, planilha ou log.
- A chave só é exibida uma vez na emissão. A OnmIA armazena apenas o hash — não há como recuperar o valor depois.
- O prefixo da chave (ex.:
onmia_abc123...) é o único trecho seguro para aparecer em dashboards e logs de auditoria. O secret completo, nunca. - Rotação: solicite a emissão de uma nova chave e a revogação da antiga. Como não há cache, a chave revogada morre imediatamente. Troque o segredo no seu lado antes de pedir a revogação.
- Suspeita de vazamento: solicite revogação imediata. A janela de exposição termina no momento da revogação.
- O header
X-API-Keyé redigido (redacted) nos logs do servidor OnmIA.