Checkout Sessions
Create a Checkout Session
Cria uma checkout session.
Uma checkout session é uma sessão temporária de compra. A Chargefy devolve
Pagamento one-shot com invoice (
Passe
Para trial em checkout de assinatura, use



No
O frontend da hosted page chama
url (página hospedada onde o cliente paga) e client_secret (lido pelo browser do comprador na hosted page). Ela coleta dados do comprador, apresenta os métodos disponíveis e confirma a escolha do comprador.
Diferente de um payment link (URL pública reutilizável), a session nasce para uma compra específica e expira em 24h. Ela não é o livro-razão financeiro da cobrança; o resultado do pagamento é acompanhado por payment_status, payment_intent quando fizer parte do fluxo, invoices quando aplicável e webhooks.
Autenticação
HeaderAuthorization: Bearer {{API_KEY}}. Escopo necessário: write.
| Tipo de chave | O header Organization | Em nome de quem cria |
|---|---|---|
| API key da organização | proibido | a própria org dona da chave |
API key da plataforma (platform_admin) | obrigatório | a organização conectada indicada no header (deve estar ativa sob a plataforma) |
Attributes
Permitir o comprador inserir códigos de cupom na hosted page.
Override visual desta sessão sobre a identidade da organização.
null (ou omitido) herda 100% da organização. Cada campo presente sobrescreve só aquele campo; campo ausente herda. Veja Branding.URL pra onde a Chargefy redireciona se o cliente abandonar a sessão (botão
“Voltar” na hosted page).
CPF ou CNPJ do comprador (pré-preenche).
cpf ou cnpj. Envie junto de customer_document.Email do comprador (pré-preenche o formulário da hosted page).
ID de um customer já existente da organização conectada. Se omitido, a
Chargefy cria um novo customer no confirm com os dados da sessão/comprador;
não há dedupe automático por email ou CPF/CNPJ no nível de
customer.Nome do comprador (pré-preenche).
ID de um desconto pré-aplicado da organização conectada alvo.
Quando
true e a session é mode=payment, o pagamento bem-sucedido
materializa uma invoice canônica. Padrão false — pagamentos one-shot não
geram invoice. Sessions mode=subscription sempre materializam invoice via a
assinatura, independente desse campo (passar false aqui em sub-mode é erro
400).Array não-vazio de itens. Cada item descreve um produto/preço cobrado nessa
sessão. Aceita três formas — veja Três
variantes.
Objeto livre
string → string, opcional e definido pelo parceiro. É ecoado em
todos os webhooks checkout.session.* correspondentes. Limite: 50 chaves,
chave com 40 caracteres e valor com 500 caracteres.Apenas para sessões
subscription. Um de always ou if_required. always
coleta cartão mesmo quando a assinatura não tem cobrança no momento da
confirmação, como trial gratuito ou preço recorrente gratuito. if_required
permite concluir sem coletar cartão quando não há cobrança no momento da
confirmação.Opções por método de pagamento. Quando omitido, aplicam-se os padrões da
organização.
Subconjunto dos meios de pagamento habilitados na organização conectada. Use
credit_card, pix e/ou boleto. Quando omitido, a sessão usa os meios
configurados na organização.Exigir endereço de cobrança no formulário. Quando omitido, herda a política de
checkout da organização. Boleto sempre exige endereço, independente deste
valor.
Exigir o documento (CPF/CNPJ) do comprador no formulário. Quando omitido,
herda a política de checkout da organização (padrão
true). Boleto sempre
exige documento, independente deste valor.Exigir o telefone do comprador no formulário. Quando omitido, herda a política
de checkout da organização (padrão
false).Tipo semântico do botão de finalização. Um de
auto, pay, subscribe,
book, donate. Controla a cópia do botão, que a hosted page renderiza
no idioma do comprador. auto (padrão) escolhe a cópia pelo tipo da sessão
(one-shot → “Pagar”, recorrente → “Assinar”). Use um valor explícito quando a
transação for reserva (book) ou doação (donate).Input transitório usado apenas quando a sessão é
mode=subscription. A
session guarda esse snapshot para audit/debug, mas o estado durável de trial
fica na subscription criada no confirm.URL pra onde a Chargefy redireciona o cliente após pagamento confirmado.
Template visual da página hospedada. Um de
minimal, booking ou
subscription. Quando omitido, a sessão usa o template padrão da organização.line_items — três variantes
Cada item deline_items aceita exatamente uma destas três formas. Use a mais idiomática pro seu caso.
(a) Preço do catálogo
Caminho mais curto. Resolve produto, valor e (se for o caso) recorrência automaticamente a partir doprice_id.
(b) Produto do catálogo + preço ad-hoc
Reusa nome/descrição do produto cadastrado, mas com valor único pra essa sessão. Não cria preço novo no catálogo.(c) Produto e preço ad-hoc
Nada vem do catálogo. Útil pra integrações headless que não cadastram produto.Pagamento one-shot com invoice (invoice_creation)
Passe invoice_creation: true quando precisar de uma invoice canônica
materializada no sucesso da cobrança — útil pra reconciliação contábil ou
emissão fiscal a partir de um documento próprio. Sem o flag, mode=payment
não gera invoice; mode=subscription sempre gera independentemente.
Recorrência
Em (a), basta oprice_id apontar pra um preço com recurring preenchido — a sessão nasce em mode: subscription sem campos extras. Em (b) e (c), adicione price_data.recurring:
subscription_data. A session guarda
esse input como snapshot, mas a assinatura criada no confirm passa a ser a fonte
de verdade (trial_start, trial_end, trial_settings).
Por padrão, a hosted page coleta cartão quando a assinatura não tem cobrança no
momento da confirmação (payment_method_collection: "always"), preparando a
cobrança automática de ciclos pagos futuros. Para permitir concluir sem cartão
quando nada é devido agora, envie payment_method_collection: "if_required".
Restrições do array
- Todos os itens compartilham a mesma
currency. - Ou todos os itens são recorrentes, ou nenhum é. Misturar one-shot com recorrente retorna 400.
- Cada item tem exatamente um entre
price_idouprice_data. - Quando
price_dataé usado, exatamente um entreproduct_ideproduct_datadeve acompanhá-lo.
Branding
A identidade visual da página hospedada vem da organização (cor, fonte, tema, formato de borda — configurada uma vez em organizations). A checkout session pode sobrescrever campos visuais pontualmente viabranding_settings.
O contrato é por campo: cada campo presente em branding_settings vence o default da organização; cada campo ausente herda. branding_settings: null (ou omitido) herda tudo.
A resposta da API devolve o
branding_settings cru — só o que você
sobrescreveu nesta sessão, sem mesclar com a organização. A mescla final
(override da sessão + defaults da organização) é resolvida pela página
hospedada no momento de renderizar. Assim o que você envia é o que você lê de
volta.submit_type não é branding — é a cópia semântica do botão e mora na raiz da sessão.
Templates
template controla a estrutura do painel esquerdo da página hospedada. O painel
de pagamento permanece o mesmo em todos os templates.
minimal

booking

subscription

| Valor | Uso |
|---|---|
minimal | Produto/preço e resumo padrão. |
booking | Reservas de hospedagem com estadia, noites e adicionais/taxas. |
subscription | Assinaturas com trial, ciclo de cobrança e valor por mês. |
booking, envie a acomodação como primeiro line_items[]: price_data.product_id
aponta para o produto da acomodação, unit_amount é a diária dinâmica e
quantity é o número de noites. Itens seguintes representam adicionais ou
taxas cobradas.
No subscription, use line_items[] com preços recorrentes (recurring) e,
quando houver período de teste, envie subscription_data.trial_period_days (ou
subscription_data.trial_end). A página destaca o trial, o ciclo de cobrança e
o valor por mês equivalente, e mostra R$ 0,00 como total devido hoje durante o
trial.
Resposta
ID da checkout session.
Sempre
checkout.session.Eco do body (default
true).Desconto aplicado, em centavos.
Soma dos
line_items, em centavos, antes de descontos e impostos.Impostos aplicados, em centavos.
Total cobrado, em centavos. = subtotal − discount + tax.
Override visual cru desta sessão — só os campos que você sobrescreveu, sem
mescla com a organização.
null quando não houve override. Não é o branding
resolvido (esse é aplicado pela página hospedada).Eco do que veio no body.
String opaca de 64 caracteres hex, sem prefixo. Usada pela hosted page pra
abrir a sessão sem precisar do token de API. Não é segredo de servidor — é
runtime do browser.
ISO-8601.
Moeda em ISO 4217 minúsculo (ex:
brl).Vem
null no create — a Chargefy resolve customer só no confirm (lazy).
Aparece preenchido nos webhooks de checkout.session.completed em diante.Mesmo padrão de
customer_email.cpf, cnpj ou null.Pré-preenchido se enviado no body; senão
null. Atualizado quando o comprador
preenche o formulário.Mesmo padrão de
customer_email.Eco do body.
ISO-8601. 24h depois do
created_at.Eco do body (default
false em mode=payment).Snapshot dos itens da sessão (resolvido com produto/preço/recorrência conforme
a variante usada).
Indica se a sessão foi criada em modo live.
Eco do body (default
{}).payment (one-shot) ou subscription (recorrente).null no create. Aparece preenchido depois do confirm.Em sessões
subscription, indica se a hosted page coleta cartão sempre
(always) ou somente quando houver cobrança no momento da confirmação
(if_required). Em sessões payment, o valor é always.Opções por método de pagamento oferecidas na hosted page.
Métodos disponíveis pro comprador na hosted page (ex:
["credit_card", "pix", "boleto"]). É o subconjunto salvo na sessão: ou o valor enviado em
payment_method_types, ou os meios configurados na organização quando o campo
foi omitido. Esse conjunto é um snapshot imutável — a hosted page, a consulta,
a confirmação e os webhooks da sessão sempre devolvem exatamente esses
métodos, independente de mudanças posteriores na política da organização.unpaid, paid, no_payment_required (total = 0).Política resolvida (body ou default da organização). Boleto sempre exige.
Política resolvida (body ou default da organização, padrão
true). Boleto
sempre exige documento.Política resolvida (body ou default da organização, padrão
false).open (criada, aguardando pagamento), complete (cliente confirmou),
expired (24h sem confirm — terminal).Eco do body (default
auto). Um de auto, pay, subscribe, book,
donate.Subscription criada por uma sessão
mode=subscription. Vem null no create.Eco do que veio no body.
Template explícito da sessão.
null significa que a página hospedada usa o
padrão da organização.URL hospedada da Chargefy. Redirecione o comprador pra essa URL.
Próximo passo
Redirecione o comprador praresposta.url. A Chargefy renderiza a página de pagamento, confirma o método escolhido e devolve o cliente em success_url ao final.
POST /v1/checkout-sessions/public/:client_secret/confirm sozinho. Seu servidor não precisa criar nem confirmar uma movimentação interna de processamento para uma checkout session.
Erros
| HTTP | Razão |
|---|---|
| 400 | line_items ausente, vazio, ou item sem price_id nem price_data |
| 400 | Item com price_id e price_data juntos (envie exatamente um) |
| 400 | price_data sem product_id nem product_data — ou com ambos |
| 400 | Mistura de itens recorrentes e únicos no mesmo line_items |
| 400 | Currency divergente entre os itens |
| 400 | price_id ou product_id não existe na organização conectada alvo |
| 400 | customer_id (quando passado) não pertence à organização conectada alvo |
| 401 | Authorization ausente, mal formado ou inválido |
| 403 | Token de plataforma sem header Organization, ou Organization apontando para uma organização conectada não ativa da sua plataforma |
Organização conectada sem cadastro financeiro concluído não bloqueia a
criação — a sessão nasce com
payment_method_types: []. Trate o array vazio
antes de redirecionar o comprador (ou aborte criação no seu lado se preferir).
