OnmIAOnmIA API Docs

Pedidos

POST /orders (status confirmed), GET /orders/{id}, busca por external_order_id, PATCH de status e autoridade de estoque.

Envie pedidos do ERP para a OnmIA com POST /integration/v1/orders. Escritas exigem o scope orders:write; leituras, orders:read.

Criar pedido

curl -sS https://api.onmia.com.br/integration/v1/orders \
  -H "X-API-Key: $ONMIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "external_order_id": "ERP-PED-2026-4412",
    "external_display_id": "4412",
    "store_id": "c5745b49-3883-45f9-8dc4-63cc7d9f2611",
    "status": "confirmed",
    "customer": { "name": "Jader Costa", "phone": "5537991129034", "email": null },
    "items": [
      { "external_id": "ERP-7891", "quantity": 2, "unit_price": 17.99 },
      { "external_id": "ERP-8001", "quantity": 1, "unit_price": 32.0 }
    ],
    "delivery_type": "pickup",
    "freight_price": 0,
    "payment_method": "pix",
    "payment_status": "paid",
    "metadata": { "erp_terminal": "PDV-02" }
  }'

Campos do payload

CampoObrigatórioRegras
external_order_idsimChave de idempotência do pedido no ERP.
external_display_idnãoNúmero curto exibível (ex.: número do cupom).
store_idsimUUID; deve estar no escopo da chave (403 FORBIDDEN_STORE).
statusnãoNa criação, somente confirmed é aceito (default).
customer.namesim
customer.phonesimMínimo 8 dígitos; normalizado para E.164 BR sem +.
customer.emailnãoAceita null.
items[]sim1 a 500 itens; quantity > 0 (decimal ok); unit_price >= 0; notes opcional.
delivery_typesimpickup ou delivery.
freight_pricenão>= 0, default 0.
payment_methodsimTexto livre do ERP (ex.: pix, cash, credit_card).
payment_statusnãopending, awaiting, paid, failed, refunded.
change_fornãoTroco para (>= 0, aceita null).
delivery_addressnãoObjeto JSON livre.
metadatanãoObjeto JSON livre, persistido para auditoria.

O unit_price enviado é confiado como está (a venda já aconteceu no seu sistema). A OnmIA localiza o cliente por telefone (tolerante à variação do nono dígito) e cria se não existir — dados de cliente já existente são preservados, o pedido nunca sobrescreve nome/email cadastrados.

Resposta de criação (201):

{
  "order_id": "949e4706-c108-4a6c-b9cd-4e89c043935d",
  "display_number": "#2026-000123",
  "status": "confirmed",
  "external_order_id": "ERP-PED-2026-4412",
  "items_inserted": 2,
  "stock_decremented": false
}

Item sem produto mapeado

Se algum external_id dos itens não existir no catálogo, o pedido retorna 422 UNMAPPED_ITEMS (com details.unmapped_external_ids) e não é criado — sem efeito parcial. Cadastre os produtos via POST /products/bulk antes.

Autoridade de estoque

Por padrão a OnmIA não decrementa estoque ao receber pedido via API — por design, o ERP é a autoridade e envia o saldo novo via PATCH /stock após a venda. Chaves especiais podem ter decremento opt-in (combinado na emissão); nesse modo, estoque insuficiente retorna 400 INSUFFICIENT_STOCK e o pedido não é criado.

Consultar por id

curl -sS https://api.onmia.com.br/integration/v1/orders/$ORDER_ID \
  -H "X-API-Key: $ONMIA_API_KEY"

Retorna o pedido completo (com items). Pedido inexistente, de outro merchant ou de loja fora do escopo: 404 NOT_FOUND (sem vazar existência).

Consultar por external_order_id

curl -sS "https://api.onmia.com.br/integration/v1/orders?external_order_id=ERP-PED-2026-4412" \
  -H "X-API-Key: $ONMIA_API_KEY"

Retorna sempre um array: vazio quando não encontrado, ou 1 elemento (resumo sem items) quando encontrado.

Atualizar status

curl -sS -X PATCH https://api.onmia.com.br/integration/v1/orders/$ORDER_ID/status \
  -H "X-API-Key: $ONMIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "cancelled" }'
{ "order_id": "949e4706-...", "status": "cancelled", "previous_status": "confirmed" }
  • Status v1 aceitos nesta rota: confirmed e cancelled. Outro valor: 400 VALIDATION_ERROR.
  • A transição é validada pela máquina de estados. Transição inválida (ex.: cancelar pedido já entregue): 409 INVALID_TRANSITION. O parceiro não pode pular estados.

On this page