Grades de entrega
Cria, lista, consulta e altera pedidos programados de uma cesta fixa.
Quatro rotas para o ciclo de vida de uma grade de entrega: criar, listar, consultar e alterar. Todas só enxergam e mudam grades do cliente do token e exigem o módulo b2b-pricing. Para pausar, retomar, cancelar e ver os pedidos gerados, veja Controlar uma grade.
Listar minhas grades
Devolve todas as grades do cliente, inclusive pausadas, canceladas e concluídas, em ordem de próxima data. Sem paginação e sem filtros. Cada grade vem com as linhas (items).
/api/v1/storefront/b2b/standing-ordersClienteGrades de entrega do cliente logado
Exemplo de requisição
curl "$BASE_URL/api/v1/storefront/b2b/standing-orders" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"standing_orders": [
{
"id": "d2f6a8c0-3b5e-4719-a0c2-8e4f6b1d3a57",
"user_id": "e0d4f8a1-5b2c-4d7e-9a31-6c8f0b2d4e6a",
"name": "Reposição mensal de canetas",
"status": "active",
"frequency": "monthly",
"next_run_on": "2026-11-05",
"ends_on": "2027-10-05",
"occurrences_done": 0,
"on_contract_expired": "pause",
"consecutive_failures": 0,
"anchor_day": 5,
"created_at": "2026-10-11T14:20:00Z",
"updated_at": "2026-10-11T14:20:00Z",
"items": [
{
"id": "0c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 200,
"product_name": "Caneta esferográfica azul (cx 50)",
"sku": "CAN-AZ-50"
}
],
"shipping_address": null
}
]
}Campos da resposta
standing_ordersarrayErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Sem token de cliente no cabeçalho Authorization. | {"error":"missing authorization header"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
Criar uma grade
Uma grade de entrega (standing order, ou pedido programado) é um contrato de recompra: o cliente define uma cesta e uma periodicidade e a plataforma gera um pedido real em cada data, sozinha. O preço não é fixado na criação: é calculado no dia de cada pedido, com as regras e o contrato vigentes. Nada é cobrado ao criar.
/api/v1/storefront/b2b/standing-ordersClientePrograma pedidos recorrentes de uma cesta fixa
Corpo da requisição
namestringobrigatóriofrequencystringobrigatórioweeklybiweeklymonthlymonthly, o dia do mês de next_run_on é mantido, ajustado para o último dia nos meses curtos (31/jan vira 28/fev e volta a 31/mar).next_run_onstringobrigatórioYYYY-MM-DD.itemsarrayobrigatórioCesta fixa. Pelo menos uma linha válida.
product_iduuidobrigatórioquantityintegerobrigatórioends_onstringYYYY-MM-DD. Quando o próximo pedido passaria dessa data, a grade vira completed.occurrences_totalintegercompleted.on_contract_expiredstringpadrão: pausepausecontinue_basepause.contract_iduuidcorporate_account_iduuidpayment_method_iduuidshipping_addressobject{}) o pedido gerado não tem para onde ir.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/b2b/standing-orders" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Reposição mensal de canetas",
"frequency": "monthly",
"next_run_on": "2026-11-05",
"ends_on": "2027-10-05",
"items": [
{
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 200
}
],
"shipping_address": {
"zipcode": "01310-100",
"address": "Avenida Paulista, 1000",
"city": "São Paulo",
"state": "SP"
}
}'Resposta
{
"id": "d2f6a8c0-3b5e-4719-a0c2-8e4f6b1d3a57",
"user_id": "e0d4f8a1-5b2c-4d7e-9a31-6c8f0b2d4e6a",
"name": "Reposição mensal de canetas",
"status": "active",
"frequency": "monthly",
"next_run_on": "2026-11-05",
"ends_on": "2027-10-05",
"occurrences_done": 0,
"on_contract_expired": "pause",
"consecutive_failures": 0,
"anchor_day": 5,
"shipping_address": {
"zipcode": "01310-100",
"address": "Avenida Paulista, 1000",
"city": "São Paulo",
"state": "SP"
},
"created_at": "2026-10-11T14:20:00Z",
"updated_at": "2026-10-11T14:20:00Z",
"items": [
{
"id": "0c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 200,
"product_name": "Caneta esferográfica azul (cx 50)",
"sku": "CAN-AZ-50"
}
]
}Campos da resposta
iduuiduser_iduuidcorporate_account_iduuidcontract_iduuidnamestringstatusstringactivepausedcanceledcompletedfrequencystringweeklybiweeklymonthlynext_run_onstringYYYY-MM-DD).ends_onstringYYYY-MM-DD). Ausente se não houver.occurrences_totalintegeroccurrences_doneintegeron_contract_expiredstringpausecontinue_basepause pausa a grade; continue_base segue com o preço normal.consecutive_failuresintegeranchor_dayintegershipping_addressobjectpayment_method_iduuidcreated_at, updated_atstringitemsarrayid, product_id, quantity, product_name, sku.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo inválido; name vazio; frequency fora da lista; next_run_on que não é uma data YYYY-MM-DD; nenhuma linha válida. | {"error":"invalid standing order input","detail":"invalid standing order input"} |
| 401 | Sem token de cliente no cabeçalho Authorization. | {"error":"missing authorization header"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 403 | Perfil só de leitura (viewer) numa conta corporativa. | {"error":"not allowed to manage standing orders"} |
| 500 | Produto inexistente (viola vínculo) ou falha de gravação. A causa vem em detail. | {"error":"standing order operation failed","detail":"..."} |
Consultar uma grade
Devolve a grade completa, inclusive shipping_address. Só enxerga grades do próprio cliente; a de outro cliente responde 404, como se não existisse.
/api/v1/storefront/b2b/standing-orders/{id}ClienteDetalhe de uma grade com endereço e linhas
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/storefront/b2b/standing-orders/d2f6a8c0-3b5e-4719-a0c2-8e4f6b1d3a57" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": "d2f6a8c0-3b5e-4719-a0c2-8e4f6b1d3a57",
"user_id": "e0d4f8a1-5b2c-4d7e-9a31-6c8f0b2d4e6a",
"name": "Reposição mensal de canetas",
"status": "active",
"frequency": "monthly",
"next_run_on": "2026-11-05",
"ends_on": "2027-10-05",
"occurrences_done": 0,
"on_contract_expired": "pause",
"consecutive_failures": 0,
"anchor_day": 5,
"shipping_address": {
"zipcode": "01310-100",
"address": "Avenida Paulista, 1000",
"city": "São Paulo",
"state": "SP"
},
"created_at": "2026-10-11T14:20:00Z",
"updated_at": "2026-10-11T14:20:00Z",
"items": [
{
"id": "0c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 200,
"product_name": "Caneta esferográfica azul (cx 50)",
"sku": "CAN-AZ-50"
}
]
}Campos da resposta
(corpo)objectErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Sem token de cliente no cabeçalho Authorization. | {"error":"missing authorization header"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 404 | Grade inexistente ou de outro cliente. | {"error":"standing order not found"} |
| 500 | id que não é um UUID válido, ou falha de leitura (a causa vem em detail). | {"error":"standing order operation failed","detail":"..."} |
Alterar uma grade
Muda o nome e/ou a cesta. A alteração vale a partir do próximo pedido; pedidos já gerados não mudam. Periodicidade, datas, endereço e forma de pagamento não podem ser alterados aqui: cancele a grade e crie outra.
/api/v1/storefront/b2b/standing-orders/{id}ClienteRenomeia a grade e/ou troca a cesta
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringitemsarrayNova cesta completa: linhas que não estiverem na lista são removidas. Ausente mantém a cesta; presente sem nenhuma linha válida é recusado.
product_iduuidobrigatórioquantityintegerobrigatórioExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/storefront/b2b/standing-orders/d2f6a8c0-3b5e-4719-a0c2-8e4f6b1d3a57" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Reposição mensal de canetas e blocos",
"items": [
{
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 300
},
{
"product_id": "5a7b9c1d-3e4f-4a6b-8c0d-2e4f6a8b0c1d",
"quantity": 50
}
]
}'Resposta
{
"id": "d2f6a8c0-3b5e-4719-a0c2-8e4f6b1d3a57",
"user_id": "e0d4f8a1-5b2c-4d7e-9a31-6c8f0b2d4e6a",
"name": "Reposição mensal de canetas e blocos",
"status": "active",
"frequency": "monthly",
"next_run_on": "2026-11-05",
"ends_on": "2027-10-05",
"occurrences_done": 0,
"on_contract_expired": "pause",
"consecutive_failures": 0,
"anchor_day": 5,
"shipping_address": {
"zipcode": "01310-100",
"address": "Avenida Paulista, 1000",
"city": "São Paulo",
"state": "SP"
},
"created_at": "2026-10-11T14:20:00Z",
"updated_at": "2026-10-11T14:20:00Z",
"items": [
{
"id": "0c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 200,
"product_name": "Caneta esferográfica azul (cx 50)",
"sku": "CAN-AZ-50"
}
]
}Campos da resposta
(corpo)objectErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo inválido, ou items sem nenhuma linha válida. | {"error":"invalid standing order input","detail":"invalid standing order input: grade must keep at least one item"} |
| 401 | Sem token de cliente no cabeçalho Authorization. | {"error":"missing authorization header"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 403 | Perfil só de leitura (viewer) numa conta corporativa. | {"error":"not allowed to manage standing orders"} |
| 404 | Grade inexistente ou de outro cliente. | {"error":"standing order not found"} |
| 500 | id que não é um UUID válido, ou falha de leitura (a causa vem em detail). | {"error":"standing order operation failed","detail":"..."} |