Skip to main content
POST
Criar checkout session
POST /checkout/sessions Faz parte do recurso Links — o que é uma Session e os estados dela estão lá. Cria uma Session server-to-server, já materializada e pronta para pagar. Diferente do fluxo público — em que a própria página do comprador materializa a Session quando ele abre o Link — aqui você cria a Session pela API e recebe de volta a url da página de pagamento para redirecionar o comprador. O body aceita duas formas (oneOf):
  • A partir de um Link (linkId): materializa uma Session reusando toda a configuração do Link chk_* (itens, valor, métodos de pagamento, branding, splits). É a forma recomendada quando você já tem um Link.
  • Ad-hoc (body completo): cria uma Session sem Link, informando items + paymentMethods na própria requisição.
Em ambas, o objeto customer é opcional e serve para pré-preencher os dados do comprador.
Com linkId, o resto do corpo é ignorado — sem erro. A forma a partir do Link aceita exatamente três campos: linkId, customer e metadata. Mandar items, paymentMethods ou branding junto não altera nada e não responde 400: a configuração vem toda do Link, e o excedente é descartado em silêncio.Se você precisa de itens ou métodos diferentes dos do Link, é a forma ad-hoc — sem linkId, com a configuração inteira no corpo.
Endpoint idempotente. Envie Idempotency-Key para que um retry por timeout não crie duas Sessions — sem ele, a segunda chamada gera outra cs_ e outra URL de pagamento. Veja Convenções.

Por que usar: pré-preencher e reduzir atrito

O caso clássico é uma plataforma SaaS com usuário logado — você já conhece os dados dele (nome, e-mail, documento…). Em vez de mandá-lo para o checkout e pedir que digite tudo de novo, você cria a Session com o customer preenchido e o redireciona direto para o pagamento. Na prática, é como se o comprador tivesse aberto a página e já tivesse preenchido o formulário — só que essa etapa é pulada.
1

O usuário clica em 'Pagar' na sua plataforma

Você já tem os dados dele no seu banco.
2

Você cria a Session pela API

POST /checkout/sessions com o linkId do Link e o customer pré-preenchido. A resposta traz o id (cs_*) e a url.
3

Redireciona para a `url`

O comprador chega na página de pagamento com os campos já preenchidos — menos atrito, menos abandono.
O customer é pré-preenchimento, não trava: o comprador ainda pode corrigir os dados na página. Os requiredFields do Link continuam valendo no confirm.

Exemplo

Resposta 201
Em seguida, redirecione o comprador para url. Em produção, troque o host por https://api.z2pay.com/v1.
Autenticação por x-api-key (server-side) — nunca exponha a chave no navegador. É o oposto do fluxo do comprador, que é público e autenticado pela posse do cs_*.

Authorizations

x-api-key
string
header
required

API key unificada (z2_{live|test}{sk|pk}...) — secret (sk) para integração backend, publishable (pk) para uso no frontend público

Body

application/json

ID do Link (chk_*) a materializar em Session.

Minimum string length: 1
customer
object

Pré-preenchimento dos dados do comprador.

metadata
object

Metadados do seller (string → string); propagados ao additionalInfo da Transaction e dos webhooks.

Response

Session criada

id
string

Identificador único do registro.

Identificador do link de checkout que originou o registro; nulo em sessões ad-hoc.

status
string

Estado atual do registro.

mode
string

Modo do checkout: 'payment' (pagamento único) ou 'subscription' (assinatura).

currency
string

Moeda no padrão ISO 4217 (ex.: BRL).

locale
string

Idioma do checkout (ex.: pt-BR, en-US, es-ES).

config
object

Snapshot da configuração do checkout (formas de pagamento, itens e personalização visual).

customer
object | null

Dados do comprador (nome, e-mail, documento e demais informações).

customFieldValues
object | null

Valores preenchidos nos campos personalizados, indexados pela key de cada campo.

paymentMethodSelected
string | null

Forma de pagamento selecionada pelo comprador na sessão (ex.: credit_card, pix, boleto).

subtotal
integer

Soma dos itens antes dos descontos, em centavos.

discountTotal
integer

Total de descontos aplicados, em centavos.

amount
integer

Valor total a ser cobrado, em centavos.

discounts
object[] | null

Descontos aplicados ao valor da sessão.

paymentAttempts
integer

Quantidade de tentativas de pagamento realizadas na sessão.

transactionId
string | null

Identificador da transação gerada pelo pagamento da sessão; nulo até haver pagamento.

subscriptionId
string | null

Identificador da assinatura criada a partir da sessão; nulo até a ativação.

metadata
object | null

Metadados livres (pares chave-valor) para uso do integrador; não afeta o processamento.

createdAt
string<date-time>

Data e hora de criação do registro (ISO 8601).

updatedAt
string<date-time>

Data e hora da última atualização do registro (ISO 8601).

openedAt
string<date-time> | null

Data e hora em que a sessão foi aberta pelo comprador (ISO 8601); nula se ainda não aberta.

paidAt
string<date-time> | null

Data e hora em que o pagamento foi confirmado (ISO 8601); nula se não pago.

canceledAt
string<date-time> | null

Data e hora do cancelamento (ISO 8601); nula se não cancelado.

expiresAt
string<date-time>

Data e hora de expiração (ISO 8601).

url
string

URL pública do checkout para o comprador finalizar o pagamento.