Fluxo completo (checkout próprio)
A ordem das chamadas com o seu front, o seu backend e o nosso SDK — do cartão ao webhook.
Este guia mostra o caminho inteiro de uma venda com checkout próprio: a sua tela, o seu backend e o nosso SDK. Cada peça já tem guia próprio; aqui está a ordem e quem chama quem.
As três partes
- Seu front — coleta o cartão, mostra as parcelas e roda o desafio 3-D Secure com o nosso SDK. Nunca fala direto com a nossa API.
- Seu backend — o único que usa a chave
sk_. Tokeniza, simula parcelas, cobra e recebe webhooks. - Nossa API + SDK — a API é servidor-para-servidor; o SDK é um script no browser, hoje usado para o desafio 3-D Secure.
sk_ é de servidor. Ela não pode aparecer em código de front, em variável de build do seu site nem numa chamada feita pelo browser — quem a tiver cobra em seu nome.1. O cartão sai do seu front para o seu backend
O comprador digita o cartão na sua tela e você envia os dados para o seu backend por HTTPS. É o seu backend que troca o cartão por um token conosco — o cartão nunca vai do browser direto para a nossa API, porque isso exigiria a sk_ no browser.
2. Seu backend tokeniza
curl -X POST $API_BASE_URL/payment-methods/tokenize \ -H "Authorization: Bearer sk_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "type": "card", "card": { "number": "4111111111111111", "holder_name": "ADA LOVELACE", "exp_month": 12, "exp_year": 2030, "cvv": "123" } }'A resposta traz um tok_. Guarde-o para o passo 4; PAN e CVV são descartados aqui e não voltam mais.
3. Seu backend simula as parcelas — com o BIN daquele cartão
curl "$API_BASE_URL/installments?amount_cents=100000&max_installments=12&card_bin=411111" \ -H "Authorization: Bearer sk_live_xxx"Devolve uma opção por parcela, com o valor de cada uma e o total. Renderize essa lista no seu front e deixe o comprador escolher.
card_bin — os 6 primeiros dígitos do mesmo cartão que você vai cobrar. O total pode depender da bandeira, e a cobrança resolve a bandeira pelo token. Simular sem o BIN, ou com o BIN de outro cartão, faz o comprador ver um total e ser cobrado outro.4. Seu backend cobra, mandando só a contagem
curl -X POST $API_BASE_URL/charges \ -H "Authorization: Bearer sk_live_xxx" \ -H "Idempotency-Key: pedido_10432" \ -H "Content-Type: application/json" \ -d '{ "amount": 100000, "payment_method": "CREDIT_CARD", "installments": 6, "card_token": "tok_xxx", "security_code": "123", "buyer": { "name": "Ada Lovelace", "email": "ada@example.com", "document": "12345678909" } }'O amount é o preço à vista. O total do parcelado é sempre derivado por nós a partir das taxas do estabelecimento — não envie o total já com juros, e não confie num total vindo do browser. O Idempotency-Key deixa você repetir a chamada sem cobrar duas vezes.
5. Se a cobrança nascer requires_action, o SDK entra
Cartão pode exigir autenticação. Nesse caso a charge volta requires_action com um next_action: o seu front carrega o nosso SDK, roda o desafio e o seu backend conclui em POST /charges/{id}/confirm-3ds. O passo a passo está no guia 3-D Secure.
6. O desfecho chega por webhook
Não fique consultando a charge em laço. Assine os eventos de cobrança, valide a assinatura e trate o evento como a fonte do desfecho — inclusive para Pix e boleto, que confirmam depois da resposta HTTP.
Resumo da ordem
front → seu backend : dados do cartãoseu backend → API : POST /payment-methods/tokenize → tok_seu backend → API : GET /installments?...&card_bin=411111 → opçõesfront ← seu backend : lista de parcelasseu backend → API : POST /charges (tok_ + contagem) requires_action? : front roda o SDK → backend confirma o 3-D SecureAPI → seu backend : webhook com o desfecho