Documentação
Integre o seu estoque com a Quobo
A Quobo se conecta ao seu sistema de duas formas: webhooks assinados, que já avisam o seu servidor a cada mudança, e uma API REST para ler e escrever o estoque, que chega em breve. Comece pelos guias abaixo.
O que já está disponível
Webhooks estão no ar, a partir do plano Starter: registre seus endpoints no painel, em Configurações → Webhooks, e a Quobo entrega os eventos assinados ao seu servidor.
A API REST por token (as convenções e endpoints desta documentação) está em breve, a partir do plano Pro. Você já pode gerar um token no painel, mas ele ainda não autentica chamadas.
- WebhooksReceba cada movimentação e mudança de item no seu servidor, com assinatura HMAC.
- Unidades de medidaComo a Quobo mede o estoque: categorias, unidades por pacote e quantidades fracionadas.
- Estoque baixoA cascata de limites que decide quando um item entra em estoque baixo.
- Referência da APITodos os endpoints, parâmetros e modelos de resposta, a partir do OpenAPI.
Base da API
Todos os endpoints ficam sob a versão v1, na base de produção. As respostas são JSON e os identificadores são UUID.
https://api.quobo.com.br/api/v1Autenticação
Quando a API REST estiver disponível, cada requisição levará um token de API no cabeçalho Authorization, no formato Bearer. Você já pode gerar o token em Configurações → Integração na plataforma (ele é exibido uma única vez, no momento da criação), mas o acesso programático que o consome entra a partir do plano Pro. O token pertence à organização e carrega as permissões dela.
curl https://api.quobo.com.br/api/v1/catalog/items \
-H "Authorization: Bearer qbo_seu_token_aqui"Nunca exponha o token no cliente
O token dá acesso total à organização. Use-o apenas do seu servidor, guarde-o em variável de ambiente e revogue-o pela plataforma se suspeitar de vazamento. O front-end e o app nunca precisam dele.
Idempotência
Toda requisição que altera dados (POST, PATCH, PUT, DELETE) exige o cabeçalho Idempotency-Key: um valor único que você gera por operação. Se a mesma chave chegar de novo, a Quobo devolve a resposta já registrada em vez de executar a operação outra vez. Assim uma retentativa de rede não duplica uma movimentação.
curl -X POST https://api.quobo.com.br/api/v1/inventory/movementations \
-H "Authorization: Bearer qbo_seu_token_aqui" \
-H "Idempotency-Key: 8f2b1c9a-3d5e-4a71-9b0c-1e2f3a4b5c6d" \
-H "Content-Type: application/json" \
-d '{ "item_id": "…", "move_type": "entry", "quantity": 10 }'Paginação
As listagens são paginadas por cursor. Envie limit e, para a próxima página, after com o next_cursor da resposta anterior. Quando has_more for false, não há mais páginas.
{
"data": [ /* … itens … */ ],
"next_cursor": "eyJpZCI6IjRm…",
"has_more": true
}Erros
Erros retornam o status HTTP adequado e um corpo com três campos: code (um identificador estável, feito para o seu código decidir o que fazer), message (texto para desenvolvedores, em logs) e details (contexto opcional, como os campos que falharam na validação).
{
"code": "validation_failed",
"message": "Validation failed: Quantity must be greater than 0",
"details": { "quantity": ["must be greater than 0"] }
}Trate o code, não a message
O code é estável entre versões; a message é um texto técnico em inglês, sujeito a mudança, e nunca deve ir para a tela do usuário final. Mapeie cada code para a mensagem que você mostra.
Valores monetários
Dinheiro trafega sempre como número inteiro em centavos, em campos com o sufixo _cents (por exemplo sale_price_cents). Divida por 100 para exibir. Isso evita os erros de arredondamento de ponto flutuante. As quantidades de estoque, por outro lado, aceitam frações (veja unidades de medida).