Os exemplos usam o sandbox: API em
https://checkout-api.sandbox.z2pay.com e página em
https://pay.sandbox.z2pay.com. Em produção, use https://checkout-api.z2pay.com e
https://pay.z2pay.com.Endpoints
| Método | Rota | O que faz | Rate-limit |
|---|---|---|---|
GET | /public/checkout/{id} | Obtém a config pública para renderizar a página | 60 req/min/IP |
POST | /public/checkout/{id}/opened | Marca a Session como “aberta pelo comprador” | 60 req/min/IP |
POST | /public/checkout/{id}/confirm | Confirma o pagamento (tokenId + dados do comprador) | 10 req/min/IP |
O
{id} pode ser uma Session (cs_*), um Link (chk_*) ou um slug. Quando recebe Link ou slug, o
endpoint materializa uma Session nova e a retorna.Obter config pública
cs_*) ou Link
(chk_*). Quando recebe Link, materializa uma Session nova e retorna ela.
Apenas quando
{id} é Link (chk_*). O cliente envia um ID candidato (cs_[a-f0-9]{48}, gerado
localmente com 192 bits) para que a Session seja materializada idempotentemente — um refresh com o
mesmo sessionId reaproveita a Session existente. Para cs_* direto, o parâmetro é ignorado.200):
A Session retornada é uma view pública mascarada — não inclui
metadata, tenantId nem
transactionId. Só o necessário para renderizar a página.200 · 404 (ID inválido ou expirado).
Marcar como aberta
created → opened apenas na primeira chamada. Dispara o evento
checkout.session.opened.
Obrigatório apenas quando
{id} é Link (chk_*). Mesmo sessionId do GET; permite materializar
idempotentemente a Session.200):
Confirmar pagamento
cs_*)
ou Link (chk_*). É idempotente via header Idempotency-Key: requisições repetidas retornam a
resposta original e uma chamada concorrente aguarda a primeira terminar — defesa primária contra
cobrança dupla.
Body
Entradas de pagamento (1–8). 1 entrada = fluxo single-method; 2+ entradas = pagamento
combinado (exige
paymentMethods.combined.enabled na Session). A soma dos amount deve bater
exatamente com session.amount.Dados completos do comprador. Devem satisfazer os
requiredFields da Session (email, document e
phone são sempre obrigatórios; address se listado). Veja
Customer.Valores dos
customFields da Session. As keys batem com customFields[].key; valores são strings
("true"/"false" para checkbox); cada valor ≤ 2000 chars.payments é discriminada por paymentMethod:
Cartão
Cartão
tokenId é obrigatório; holderName opcional; installments de 1 a 12. Tokenize o cartão pelo
Tokenizer antes do confirm.PIX
PIX
Boleto
Boleto
Exemplo completo
200):
- Em PIX,
pixUrltraz o payload BR-Code para o app bancário;expiresAtindica o vencimento. - Em boleto,
boletoUrl/boletoDigitableLine/boletoBarcodetrazem os dados do boleto. - Se recusado,
session.statusvolta aopened(retry permitido) epayments[].errorMessage/declineCodeexplicam o motivo.
200 (resultado do pagamento, sucesso ou recusa) · 409 (Session em estado
inválido — já paga, expirada, cancelada — ou Link pai arquivado → link_not_active).
Ciclo do comprador (resumo)
Abre a URL
O comprador acessa
https://pay.sandbox.z2pay.com/c/{id}. A página chama
GET /public/checkout/{id} para carregar a config.Página marca como aberta
A página chama
POST /public/checkout/{id}/opened — Session vai de created → opened e dispara
checkout.session.opened.Comprador confirma
Ao clicar em “Pagar”, a página tokeniza o cartão (se aplicável) e chama
POST /public/checkout/{id}/confirm. A Session passa por paying e termina em paid (ou volta a
opened se recusado).Veja também
Checkout Sessions
Estados da Session e o objeto Customer.
Visão geral do Checkout
Conceitos e mapa de endpoints.
Tokenizer
Como gerar o
tokenId do cartão antes do confirm.Cartões de teste
Cenários de aprovação e recusa no sandbox.
Webhooks
Eventos disparados ao longo do ciclo do comprador.
Erros
Códigos de domínio do confirm (
amount_mismatch, combined_disabled, etc.).
