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

Idempotência

Como repetir com segurança uma chamada que cria algo, usando o cabeçalho Idempotency-Key no fechamento de compra, e o que fazer nas demais rotas.

Uma operação é idempotente quando repeti-la produz o mesmo resultado que fazê-la uma vez. Isso importa porque redes falham: se a sua chamada deu tempo esgotado, você não sabe se o servidor chegou a processá-la. Repetir uma criação sem proteção pode gerar dois pedidos para a mesma compra.

Pontos-chave
  • GET, PUT e DELETE são seguros de repetir: o resultado final é o mesmo.
  • POST que cria algo não é idempotente por padrão.
  • O fechamento de compra da vitrine (POST /api/v1/storefront/checkout/{sessionId}/place) aceita o cabeçalho Idempotency-Key e, com ele, repete sem duplicar.
  • Fora do fechamento de compra, não há chave de idempotência geral: confira antes de repetir.
  • A plataforma também barra pedidos duplicados por conteúdo (mesmo carrinho, mesmo e-mail, em poucos minutos).

O cabeçalho Idempotency-Key no fechamento de compra

Gere um identificador único por tentativa de compra (um UUID v4 serve) e envie em Idempotency-Key. Use o mesmo valor em todas as repetições da mesma tentativa. O servidor guarda a chave junto com o pedido criado.

Situação da chaveResposta
Primeira vezA compra é processada normalmente e o pedido criado fica associado à chave.
Repetida, compra já concluída200 com o mesmo corpo da primeira resposta. Nenhum pedido novo.
Repetida enquanto a primeira ainda está sendo processada409 {"error":"in_progress","retry_after_ms":1500}. Espere e tente de novo.
Mesma chave em outra sessão de checkout422 idempotency key reused with a different checkout session.
A primeira tentativa falhouA chave é liberada e a repetição reprocessa a compra.
Sem o cabeçalhoSem proteção: cada chamada tenta criar um pedido.

A chave identifica uma intenção de compra, não um cliente. Uma nova compra, mesmo do mesmo cliente, usa uma chave nova.

bash
KEY=$(uuidgen)

curl -X POST "$BASE_URL/api/v1/storefront/checkout/$SESSION_ID/place" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $KEY" \
  -d '{}'

O corpo e as regras do fechamento de compra são documentados na seção de vitrine desta referência. Aqui importa só o comportamento da chave.

Proteção por conteúdo

Além da chave, o fechamento de compra recusa duplicidades pelo conteúdo, mesmo quando as chaves são diferentes ou ausentes:

StatuserrorQuando
409cart_already_orderedOutra requisição já transformou este carrinho em pedido.
409order_in_progressA mesma chave está sendo processada neste instante.
409duplicate_orderUm pedido equivalente do mesmo e-mail foi feito há menos de 10 minutos.

Se você recebe um desses, não crie de novo: consulte os pedidos do cliente para achar o que já foi criado.

Outras rotas de criação

Rotas que criam registros (produtos, clientes, pedidos pelo painel) não aceitam Idempotency-Key e uma repetição cria um segundo registro. Se a chamada deu tempo esgotado ou erro 5xx:

  1. Não repita às cegas. Consulte primeiro, filtrando por um campo que você controla (SKU do produto, e-mail do cliente, número da ordem de compra) na rota de listagem.
  2. Só crie de novo se a consulta mostrar que o registro não existe.
  3. Para reduzir o risco, preencha os campos que devem ser únicos na loja (como SKU de produto e e-mail de cliente): a plataforma recusa um segundo cadastro com o mesmo valor.

Operações de atualização (PUT, PATCH) e de remoção (DELETE) podem ser repetidas. Em uma remoção repetida o segundo DELETE costuma responder 404; trate como sucesso.

Erros comuns

  • Gerar a chave dentro do laço de repetição. A chave nova faz o servidor tratar como outra compra. Gere uma vez, fora do laço.
  • Reaproveitar a chave entre compras. Cada compra tem a sua; senão a segunda devolve o pedido da primeira.
  • Repetir imediatamente em um 409 in_progress. Espere retry_after_ms.
  • Confiar no cabeçalho em outras rotas. Fora do fechamento de compra ele é ignorado.

Veja também

Erros
409, 422 e 5xx.
Limites de requisições
Repetições e o 429.
Criar pedido
Criação manual de pedidos pelo painel.
Anterior
Ids, dinheiro e datas
Próxima
Limites de requisições
Nesta página
  • O cabeçalho Idempotency-Key no fechamento de compra
  • Proteção por conteúdo
  • Outras rotas de criação
  • Erros comuns
  • Veja também