Skip to main content
Um checkout white-label permite cobrar cartão dentro da sua própria experiência: sua URL, sua interface, sua marca e seus estados de pagamento. A Chargefy cuida da tokenização, do cartão salvo, da cobrança e dos webhooks. A regra de segurança é simples: o número do cartão e o CVC são tratados no navegador do comprador com Chargefy.js. O seu backend cria o cadastro e entrega o client_secret; o SDK conclui a coleta e devolve somente um payment_method reutilizável. O token de uso único fica interno.
Use Checkout white-label quando você quer controlar a tela de pagamento inteira. Se preferir uma página pronta da Chargefy, use Checkout Sessions.

Quando usar

O que fica com quem

Como as peças se encaixam

Um payment intent é cobrado com um payment_method (pm_*). No fluxo recomendado, seu código não transporta token_id: Chargefy.js cuida da credencial intermediária dentro de confirmSetup().

Pagamento imediato

1. Crie ou reutilize um customer

O cartão pertence a um customer. Para cartão no Brasil, crie o customer com document (CPF/CNPJ).
Reutilize o mesmo customer quando o comprador já existir no seu sistema. Assim você mantém cartões salvos, histórico e cobranças futuras no mesmo perfil.

2. Inicie o cadastro no backend

Crie um setup intent para o customer. Envie o client_secret retornado somente à página que vai coletar o cartão.
O client_secret, combinado com a chave publicável, autoriza consultar e concluir somente esse cadastro. Envie-o à página do comprador, mas não o coloque em analytics, logs ou mensagens.

3. Salve o cartão no navegador

Na sua tela de pagamento, carregue o Chargefy.js, use a chave publicável do mesmo ambiente e conclua o cadastro.
Seu backend recebe apenas o pm_*; número e CVC não chegam à sua aplicação.

4. Cobre com o cartão salvo

Crie o payment intent com customer, payment_method e confirm: true.
Para cartão, a confirmação é síncrona: a resposta já volta com o resultado atual em status.
Mesmo em uma compra avulsa, o cartão salvo fica disponível no customer. Isso permite retry com consentimento, recompra e assinaturas sem pedir os dados de novo.

Controle explícito do token

Na maioria das integrações, confirmSetup() é o caminho mais simples: o SDK mantém o token de uso único no navegador e devolve diretamente o payment_method. Algumas integrações, porém, precisam transportar o token_id no próprio backend antes de salvar o cartão. Os dois caminhos produzem o mesmo cartão salvo. A diferença está apenas em quem transporta a credencial intermediária.

1. Tokenize o cartão no navegador

O número do cartão continua indo diretamente do navegador para a Chargefy. Sua página envia somente token.id ao backend.

2. Troque o token por um cartão salvo

No backend, crie e confirme o setup intent em uma única chamada. O token é de uso único; se a operação falhar antes de salvar o cartão, gere outro.
A partir daqui, use o mesmo fluxo desta página: consulte a payment preview quando houver parcelas e crie o payment intent com o pm_* retornado.

Parcelamento

Parcelas são definidas em payment_method_options.credit_card.installments no create ou update do payment intent. Não envie parcelamento no confirm.
O objeto retornado detalha o cálculo do parcelamento:
Enviar installments no corpo do confirm retorna 400. Defina as parcelas no create ou update do payment intent.

Exiba o valor exato das parcelas

No Brasil, Payment Previews serve basicamente para uma coisa: exibir no seu checkout a quantidade de parcelas e o valor exato de cada uma, já com o acréscimo calculado — antes de criar o payment intent, sem você calcular juro na mão.
A resposta traz payment_methods.credit_card.installments.options[] com count, per_installment_amount e amount de cada opção — a tabela pronta para o seu seletor de parcelas — além dos totais de pix e boleto no mesmo payload. Quando o comprador escolher, envie o count no create ou update do payment intent. A Chargefy recalcula tudo no servidor; a preview serve apenas para exibição.

Repasse de taxa (surcharge)

Se você quer que o comprador cubra a taxa da organização — a organização recebe líquido exatamente o amount —, envie has_surcharge: true na preview e no payment intent. Os totais passam a incluir surcharge_amount, e no intent a decomposição fica em amount_details (principal_amount + surcharge_amount + installment_interest_amount = amount).

UX recomendada

Recusa e retry

Se o cartão for recusado, a tentativa termina, mas o Payment Intent volta para requires_payment_method com o motivo em last_payment_error. Para tentar de novo:
  1. Crie um novo setup intent no backend.
  2. Chame confirmSetup() com o novo client_secret e os dados corrigidos.
  3. Atualize o mesmo Payment Intent com esse pm_*.
  4. Confirme novamente o mesmo Payment Intent.
O SDK cria uma nova credencial intermediária a cada confirmação. Uma charge recusada é terminal; o Payment Intent em requires_payment_method continua sendo o mesmo pagamento e aceita uma nova tentativa com dados corrigidos ou outro método.

3DS e autenticação

Hoje a cobrança de cartão é síncrona: ao confirmar, o status já volta succeeded, requires_capture (quando capture_method: manual) ou requires_payment_method na recusa. Não há etapa de redirecionamento ou desafio 3DS no fluxo de cartão.
Cartão não usa next_action neste checkout white-label. O campo aparece em métodos assíncronos: Pix no fluxo direto e boleto quando o intent nasce de checkout hospedado ou invoice.

Webhooks são a fonte da verdade

A resposta síncrona ajuda a atualizar a tela, mas o estado final da sua operação deve vir dos webhooks. Verifique a assinatura antes de processar eventos — veja Entrega de webhooks.
Uma cobrança de cartão também emite charge.succeeded ou charge.failed. Para o estado do pagamento, escute payment.intent.*; charge.* é o detalhe da tentativa de cobrança.

Erros esperados

Todos seguem o formato de erro { error: { code, message, param, type } }.

Sandbox

Em test, o número do cartão escolhe o cenário (aprovado, recusado, saldo insuficiente etc.). Use ch_test_* no backend e pk_test_* no Chargefy.js. Veja os cartões de teste em Chargefy.js e os cenários completos em Sandbox.

Chargefy for Platforms

Se você cobra em nome de organizações filhas, envie o header Organization em todas as chamadas do backend. No navegador, a chave publicável e o client_secret precisam pertencer à mesma organização e ao mesmo ambiente. Veja Autenticação para a matriz de chaves e escopos.

Próximos passos

Chargefy.js

Referência do script de tokenização no navegador.

Tokenização de cartão

Salve cartão para assinaturas, recompra e cobrança futura.

Payment Intents

Contrato completo de create, confirm, capture e cancel.

Webhooks

Entrega, assinatura e processamento idempotente.