Pedidos
Como funcionam os pedidos na API compatível com a Venddor 1.0, o ciclo de status em letras, o modelo de sub-pedidos e o mapa de todas as rotas da API compatível com a Venddor 1.0.
Um pedido é o registro de uma compra: quem comprou, o que, por quanto, como vai pagar, para onde vai e em que etapa está. Ele nasce no checkout da loja (ou por esta API, quando a venda vem de um ERP, de um PDV ou do atendimento) e acompanha toda a vida da compra: pagamento, separação, envio, entrega, devolução.
Esta seção documenta como operar pedidos pela API compatível com a Venddor 1.0 (/api/v1.0/orders...): o contrato da Venddor 1.0, para clientes escritos para a plataforma antiga. As respostas têm valores em string decimal, datas em Unix timestamp e status em letra.
Como funciona
O ciclo de vida de um pedido
O caminho mais comum numa loja padrão. Pago é um passo opcional entre pendente e enviado (muitos gateways levam o pedido direto a Processando quando o pagamento é aprovado). Cancelado, Falho, Em espera, Reembolsado e Chargeback são os desvios.
code | Letra | Quando acontece |
|---|---|---|
pending | O | O pedido foi recebido e aguarda pagamento ou confirmação. |
processing | P | Pagamento aprovado ou pedido em preparação. |
paid | A | Pagamento confirmado (passo opcional). |
on_hold | H | Parado por alguém da loja, à espera de algo. |
failed | F | Pagamento recusado. O estoque volta. |
shipped | S | O pacote saiu da loja. |
delivered | C | O cliente recebeu. |
completed | K | Concluído, sem pendências de pós-venda. |
cancelled | I | Cancelado. O estoque volta. Pode ser reaberto. |
refunded | R | Dinheiro devolvido. Estado final. |
chargeback | Z | O cliente contestou o pagamento no cartão. |
Essa é a instalação padrão. Cada loja pode renomear, esconder e criar status, e mudar letras. Como mudar o status está em Alterar o status.
O fluxo típico de uma integração (ERP, WMS)
- Buscar pedidos novos
Chame Listar pedidos filtrando pelo status inicial e pela data do último pedido que você processou. Guarde o id de cada pedido: ele é a chave para todo o resto.
- Ler o detalhe
Consultar pedido devolve itens, endereços, pagamento e sub-pedidos. Importe no seu sistema.
- Confirmar a importação e devolver a nota
Grave o código do pedido no ERP e a nota fiscal no pedido (Sincronização com ERP) ou, para observações e rastreio, use Alterar pedido.
- Despachar
Grave o código de rastreio com Alterar pedido (
tracking_number) e depois mude o status para enviado. O cliente recebe o e-mail de envio, se o status estiver configurado para isso. - Tratar exceções
Cancelamentos (Cancelar pedido), devoluções e reembolsos (Reembolsos).
Conceitos-chave
Formato da API
| Item | Como a API trabalha |
|---|---|
| Autenticação | HTTP Basic com e-mail:chave_de_api de um administrador, ou Bearer JWT |
| Permissão | Administrador |
| Ids | UUID em string (decimal em string em /api/...) |
| Dinheiro | String decimal: "49.90" |
| Data | Unix timestamp em segundos (timestamp) |
| Status | Letra: "P" |
| Lista | {"orders":[...],"params":{page,items_per_page,total_items}} |
| Erros | {"message":"...","status":404} |
Autenticação
Um administrador gera uma chave de API para o próprio usuário no painel e você envia Authorization: Basic base64(e-mail:chave) em toda chamada. Authorization: Bearer <JWT> também funciona. Usuário que não é administrador recebe 403. A mesma rota responde com e sem /v1.0 (/api/orders e /api/v1.0/orders), com maiúsculas ou minúsculas e com barra no final.
Token de app. Para apps de terceiros, sem usuário, veja Pedidos por token de app.
Ids
Em /api/v1.0, todo id é um UUID em string (a8a3c7a3-5f15-45a8-a385-4f20fbf8b722). Na forma sem versão (/api/orders), pensada para clientes que esperam o id inteiro da Venddor 1.0, os ids saem como números decimais dentro de uma string ("681822115"), derivados do UUID. Eles também são aceitos na entrada (caminho, query e corpo). Não misture as duas formas no mesmo cliente: escolha uma. O UUID é aceito nas duas rotas.
Dinheiro, datas e fuso
Todo valor é string decimal com ponto e duas casas ("225.00"), exceto o amount do refund, que é inteiro em centavos. As datas são Unix timestamp em segundos (UTC). O filtro de data por dia (time_from/time_to) trabalha em dias inteiros.
Pedido pai e pedidos filhos
Uma compra com itens de sellers diferentes gera um pedido pai (o que o cliente vê) e um pedido por seller (o que o seller cuida). O pai não deve ser alterado à mão: o status dele é calculado a partir dos filhos. Os filhos apontam para o pai em parent_order_id e usam o número do pai mais -V1, -V2... O detalhe do pai (GET /orders/{id}) informa is_parent_order: "Y" e suborder_ids.
Cancelar, reembolsar e excluir
Cancelar muda o status e devolve o estoque; o dinheiro não volta sozinho, só com o reembolso. Reembolsar devolve o pagamento. O DELETE desta API cancela, não apaga o registro. São coisas diferentes: Cancelar pedido, Reembolsos.
Endpoints
Auth: Admin é o administrador (Basic ou Bearer). Seller é o usuário do seller. App é o token de app.
| Método | Rota | O que faz | Auth | Página |
|---|---|---|---|---|
| GET | /api/v1.0/orders | Lista pedidos | Admin | Listar pedidos |
| GET | /api/v1.0/users/{id}/orders | Pedidos de um cliente | Admin | Listar pedidos |
| GET | /api/v1.0/orders/{id} | Consulta um pedido | Admin | Consultar pedido |
| GET | /api/v1.0/orders/{id}/products | Itens do pedido | Admin | Consultar pedido |
| POST | /api/v1.0/orders | Cria pedido | Admin | Criar pedido |
| PUT | /api/v1.0/orders/{id} | Altera dados ou status | Admin | Alterar pedido, Alterar o status |
| GET | /api/v1.0/orders/{id}/status-history | Histórico de status | Admin | Histórico do pedido |
| DELETE | /api/v1.0/orders/{id} | Cancela o pedido | Admin | Cancelar pedido |
| POST | /api/v1.0/orders/{id}/refund | Reembolsa | Admin | Reembolsos |
| PUT | /api/v1.0/extra_order_fields/{order_id} | Grava a nota fiscal do ERP | Admin | Sincronização com ERP |
| PUT | /api/v1.0/orders_ext/{id} | Grava o orderSAP | Admin | Sincronização com ERP |
| GET | /api/v1.0/vendor_orders (vn_orders_list_api) | Pedidos do seller (app) | Seller | App do seller |
| GET, PUT | /api/v1.0/vendor_order/{id} (vn_order_api/{id}) | Pedido do seller (app) | Seller | App do seller |
| GET, POST, PUT, DELETE | /api/v1.0/statuses (/{id}) | Cadastro de status de pedido | Admin | Status de pedido |
| GET, POST, PUT, DELETE | /api/v1.0/shipments (/{id}) | Envios do pedido | Admin | Envios do pedido |
| GET | /api/admin/orders, /api/admin/orders/{id} | Leitura por token de app | App | Token de app |
| PUT | /api/admin/orders/{id}/status | Status por token de app | App | Token de app |
| GET, POST | /api/admin/orders/{id}/shipments | Remessas por token de app | App | Token de app |
Duas rotas da API 1.0 existem só para responder 405 (Method Not Allowed): PUT /api/v1.0/orders (sem id) e POST /api/v1.0/orders/{id}. Elas não fazem parte da integração.
Erros comuns
- Filtrar a lista por nome de status (
status=shipped). A tabela antiga mapeia nomes longos para outras letras (shippedviraP,refundedviraD) e o filtro devolve pedidos errados ou nenhum. Filtre pela letra. - Mudar o status com um nome longo (
{"status":"shipped"}). Nomes fora da tabela antiga virampendingsem erro e o pedido volta para pendente. Mande a letra do cadastro de status da loja. - Presumir que a letra é a inicial do nome:
Cé entregue (não cancelado), cancelado éI. Peça o cadastro da loja ao administrador (padrão na tabela de status da home da seção). - Tratar pai e filhos como pedidos independentes ao somar vendas. A lista traz os dois; somar tudo conta o dinheiro em dobro. Ignore itens com
parent_order_id, ou ignore os pais, mas nunca os dois. - Enviar dinheiro no formato errado. Os valores são string decimal (
"49.90"). Norefund, oamountdo corpo é inteiro em centavos. - Esperar que cancelar estorne o pagamento. O cancelamento só muda o status e devolve o estoque; o reembolso é uma chamada à parte.