Skip to main content

Visão geral

O Checkout Session é o modelo recomendado quando o pagamento é iniciado no frontend (browser, app mobile). Em vez de expor sua X-API-Key no cliente, o fluxo funciona em duas etapas:
  1. Backend cria uma sessão com X-Client-ID + X-API-Key — recebe um token de curta duração
  2. Frontend usa esse token para submeter o pagamento — sem contato com a API key
Campos críticos como amount, currency e merchant_order_id são travados na sessão pelo backend — o frontend não pode alterá-los, o que elimina a possibilidade de manipulação de preço pelo cliente.

Criar sessão

POST /api/v1/checkout/sessions — requer X-Client-ID + X-API-Key. Chamada exclusivamente pelo backend da empresa.
success_url e cancel_url passam por validação SSRF: IPs privados e intervalos reservados (10.x, 192.168.x, 127.x) são rejeitados com 422.
Resposta 201:
O array saved_cards é preenchido quando o campo customer é informado e o cliente possui cartões salvos. Use-o para exibir uma lista de cartões ao usuário sem que o frontend precise consultar outra rota.

Submeter pagamento

O token recebido na criação da sessão é enviado no header X-Checkout-Token. Ele é de uso único — ao iniciar uma tentativa de pagamento, a sessão é marcada como usada e não pode ser reutilizada, mesmo que a cobrança falhe.

Cartão

POST /api/v1/checkout/payments/card — requer X-Checkout-Token.
Com cartão novo:
Com cartão salvo (token de saved_cards):
Ao usar um cartão salvo, billing_address e os dados do titular não são necessários — eles já estão no vault.

PIX

POST /api/v1/checkout/payments/pix — requer X-Checkout-Token.
O payment_method não é necessário no PIX via checkout — a rota já define o método. O amount, currency e merchant_order_id são injetados automaticamente da sessão.

Campos travados pela sessão

O middleware de checkout injeta automaticamente os valores abaixo no corpo da requisição, sobrescrevendo qualquer valor que o frontend tente enviar:

Resposta do pagamento

Idêntica ao pagamento direto — mesmos campos, mesmas regras de status HTTP:

Ciclo de vida da sessão

A sessão é marcada como usada antes de o pagamento ser processado. Se a cobrança falhar (gateway recusa, timeout), a sessão continua consumida e não pode ser reutilizada. Crie uma nova sessão para uma nova tentativa.

Referência rápida de rotas