VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Guia rápido/Pedidos

Alterar o status

Move o pedido de um status para outro (pago, enviado, entregue, cancelado...), consulta os destinos permitidos e força uma mudança fora do fluxo.

O status diz em que etapa o pedido está. Mudá-lo é a operação mais importante do ciclo de vida: ela baixa ou devolve estoque, dispara e-mails ao cliente, estorna o pagamento em um cancelamento, atualiza os relatórios e grava uma linha no histórico. Esta página reúne as quatro rotas que mexem no status.

A lista de status existentes, com a letra e o significado de cada um, está na home da seção e em Status de pedido. Cada loja tem o seu cadastro de status: antes de integrar, leia o da loja com GET /api/v1/admin/order-statuses.

PUT/api/v1/admin/orders/{id}/statusAdmin

Altera o status de um pedido

Exige o privilégio manage_orders. O corpo aceita o código do status (shipped) ou a letra do cadastro da loja (S).

Regras da plataforma:

  • Entre os status padrão da plataforma, só valem as transições da tabela abaixo. Pular etapas (pendente direto para enviado) ou sair de um estado final (reembolsado) é recusado com 400 invalid_transition.
  • Pedido já enviado, entregue ou concluído não volta para pendente, processando, em espera ou pago.
  • Status personalizados da loja (criados em Status de pedido) e transições entre eles não têm restrição, além de o destino existir no cadastro.
  • Ao mover um pedido pago para cancelado ou reembolsado, a plataforma tenta estornar no gateway antes de concluir. Se o estorno falhar, o status não muda.
  • Cancelado, reembolsado e falho devolvem o estoque. Sair desses status para um status ativo baixa o estoque de novo.
  • Ao enviar e entregar, shipped_at e delivered_at são preenchidos.
  • Se o pedido é sub-pedido, o status do pedido pai é recalculado (veja Sub-pedidos).

Path parameters

iduuidobrigatório
Id do pedido.

Corpo da requisição

statusstringobrigatório
Novo status: código (processing, shipped, cancelled...) ou letra (P, S, I...).
notesstring
Observação interna da mudança, gravada no histórico. Também é usada como justificativa quando o fluxo de status da loja pede motivo.
public_notestring
Texto que a linha do tempo pública do pedido mostra ao cliente (recurso do fluxo de status da loja). Fora desse recurso é ignorado.
expected_updated_atstring
Controle de concorrência (RFC 3339): o valor de updated_at que você leu. Se outro usuário alterou o pedido depois disso, a resposta é 409 stale_order_update e nada é gravado.
GET/api/v1/admin/orders/{id}/allowed-transitionsAdmin

Status para os quais este pedido pode ir

Devolve os status para os quais o pedido pode ir agora, segundo as regras acima. Use antes de montar um botão ou um menu de "mudar status", em vez de reescrever a tabela no seu código. Exige view_orders ou manage_orders.

Quando a loja usa o fluxo de status personalizado (recurso opcional), a resposta vem da matriz configurada para o administrador e traz também flow_active: true e a lista targets com nomes e cores.

Path parameters

iduuidobrigatório
Id do pedido.
POST/api/v1/admin/orders/{id}/force-statusAdmin

Força uma mudança de status fora do fluxo da loja

Muda o status ignorando a matriz de transições configurada pela loja, com um motivo obrigatório que fica no histórico e no log de atividades. As regras da plataforma (estorno, estoque, estados finais) continuam valendo. Só existe quando a loja ativou o recurso de fluxo de status, e exige os privilégios manage_orders e force_order_transition. Sem o recurso, responde 403 module_disabled.

Path parameters

iduuidobrigatório
Id do pedido.

Corpo da requisição

statusstringobrigatório
Novo status (código ou letra).
reasonstringobrigatório
Justificativa da exceção. Vazia causa 422 reason_required.
POST/api/v1/admin/orders/{id}/sync-statusAdmin

Recalcula o status de um pedido pai a partir dos subpedidos

Recalcula o status de um pedido pai a partir dos seus sub-pedidos e devolve o pedido. Normalmente isso já acontece sozinho a cada mudança de um sub-pedido; use a rota para corrigir um pedido pai que ficou fora de sincronia. Exige manage_orders.

Path parameters

iduuidobrigatório
Id do pedido pai.

Transições permitidas (status padrão da plataforma)

DePara
pending (O)processing, on_hold, paid, cancelled, failed
processing (P)pending, on_hold, paid, shipped, cancelled, refunded, chargeback
on_hold (H)pending, processing, cancelled
failed (F)pending, processing, cancelled
paid (A)shipped, cancelled, refunded, chargeback
shipped (S)delivered, on_hold, chargeback
delivered (C)completed, refunded, chargeback
completed (K)chargeback
cancelled (I)pending, processing, on_hold (reabrir um pedido cancelado)
refunded (R)nenhuma (estado final)
chargeback (Z)refunded, cancelled

Essa tabela vale para quem usa o alfabeto padrão. Em uma loja que renomeou ou reatribuiu letras, um status que deixa de ser reconhecido como o da plataforma passa a ser tratado como personalizado, sem restrição. Por isso, confie em allowed-transitions e não em uma cópia local.

Exemplo de requisição

bash
# Marcar como enviado
curl -X PUT "$BASE_URL/api/v1/admin/orders/$ORDER_ID/status" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"shipped","notes":"Despachado pela transportadora"}'

Resposta

200Pedido atualizado (trecho)
json
{
  "id": "2b4bd680-b717-4295-a2be-8b5c6771a4d0",
  "order_number": "PEDIDO-20261011-0001-V1",
  "parent_id": "e148b6aa-d495-4b89-92ab-f38b5979a43f",
  "subtotal": 167895,
  "shipping_total": 1759,
  "total": 169654,
  "payment_status": "pending",
  "status": "S",
  "status_text": "shipped",
  "shipped_at": "2026-10-11T20:16:39.661262Z",
  "updated_at": "2026-10-11T20:19:31.828444Z"
}
200allowed-transitions
json
{
  "transitions": [
    { "code": "P", "label_key": "processing" },
    { "code": "H", "label_key": "on_hold" },
    { "code": "A", "label_key": "paid" },
    { "code": "I", "label_key": "cancelled" },
    { "code": "F", "label_key": "failed" }
  ]
}
200sync-status
json
{
  "message": "parent order status synced from sub-orders",
  "order": { "order": { "id": "e148b6aa-d495-4b89-92ab-f38b5979a43f", "status": "P", "status_text": "processing" }, "items": [], "addresses": [], "status_history": [] }
}

Campos da resposta

statusstring
Letra do status novo.
status_textstring
Código longo do status novo.
transitionsarray
(allowed-transitions) Destinos permitidos. code é a letra para enviar de volta; label_key é o código do status.
flow_activeboolean
(allowed-transitions) true quando a loja usa o fluxo de status personalizado.
targetsarray
(allowed-transitions, só com fluxo ativo) Cada destino com code, letter_code, name, name_pt, color e requires_reason (se a mudança exige justificativa).
messagestring
(sync-status) Confirmação da sincronização.

Efeitos da mudança de status

Ao entrar em...O que acontece
cancelled, refunded, failedO estoque dos itens é devolvido. Pedido pago tem o estorno solicitado ao gateway antes.
shippedshipped_at é preenchido; o cliente pode receber o e-mail de envio.
delivereddelivered_at é preenchido.
chargebackEmite o evento de contestação de pagamento (chargeback) para as integrações.
qualquer statusUma linha entra no histórico (old_status, new_status, notes, quem alterou) e o evento de mudança de status é emitido, para e-mails, comissões e integrações.

Erros

StatusQuandoCorpo
400Falta status{"error":"status is required"}
400Transição inválida, ou status que não existe no cadastro da loja{"error":"invalid_transition","detail":"invalid_transition: from delivered to P (post-shipment orders cannot revert to a pre-shipment status via drag; use a return/refund flow)"}
400Fluxo de status da loja não permite a transição{"error":"transition_not_in_flow","detail":"..."}
401Sem credenciais ou token expirado{"error":"invalid or expired token"}
403Sem manage_orders (e force_order_transition no force-status); transição proibida para o seu papel; recurso de fluxo desligado{"error":"insufficient privileges","required":"manage_orders"}, {"error":"transition_not_allowed_for_actor"} ou {"error":"module_disabled","module":"order-status-flow"}
404O pedido não existe{"error":"order not found"}
409Outro usuário alterou o pedido (expected_updated_at); ou estorno em andamento{"error":"stale_order_update"} ou {"error":"refund_in_progress","detail":"Estorno em andamento: este pedido não pode mudar de status até o estorno terminar."}
422Fluxo da loja exige justificativa; status aposentado{"error":"reason_required"} ou {"error":"status_retired"}
423Cancelar/reembolsar pedido de um mês contábil já fechado{"error":"period_closed","competence":"2026-07"}

Veja também

  • Status de pedido
  • Histórico do pedido
  • Reembolsos
  • Fluxo de status personalizado
Anterior
Alterar pedido
Próxima
Histórico do pedido
Nesta página
  • Transições permitidas (status padrão da plataforma)
  • Exemplo de requisição
  • Resposta
  • Efeitos da mudança de status
  • Erros
  • Veja também