chk_) é um template de cobrança reutilizável. Você define uma vez (itens,
preço, métodos, branding) e divulga a URL quantas vezes quiser — cada acesso de comprador materializa
uma CheckoutSession independente. Ideal para link na bio do Instagram,
página de captura ou qualquer divulgação em massa.
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. Todas as requisições usam o header x-api-key — veja
Autenticação.Endpoints
| Método | Rota | Descrição |
|---|---|---|
POST | /checkout/links | Cria um template de cobrança |
GET | /checkout/links | Lista templates (paginado) |
GET | /checkout/links/{id} | Busca um template pelo ID |
PUT | /checkout/links/{id} | Atualiza um template |
DELETE | /checkout/links/{id} | Arquiva (soft-delete) um template |
O objeto Checkout Link
Nome interno (≤ 255 chars), visível ao seller, não ao comprador. Útil para organizar a lista do
painel.
Descrição interna (≤ 2000 chars).
Identificador URL-friendly. Regex
^[a-z0-9-]+$, 3–100 chars. Reservado para feature futura de URL
amigável.Hoje apenas
"payment".Código ISO 4217. Hoje apenas
"BRL".Idioma da página:
"pt-BR", "en-US" ou "es-ES".Itens da cobrança (≥ 1). A soma de
quantity × unitAmount é o total a cobrar. Veja
Item.Métodos aceitos. Pelo menos um método deve estar habilitado. Veja
Métodos de pagamento.
Campos do comprador obrigatórios além dos sempre-obrigatórios. Veja
Required fields.
Campos customizados (≤ 20) pedidos ao comprador. Veja Custom fields.
URL de redirect (≤ 2000) após pagamento aprovado.
URL de redirect (≤ 2000) ao cancelar.
Mapa
string → string com dados arbitrários do seller (opaco ao servidor; retorna nos webhooks).Tempo de validade da Session a partir da criação, em minutos. Mínimo
5, máximo 43200 (30 dias).
Default 1440 (24h).Item (CheckoutItem)
Nome exibido ao comprador (1–255 chars).
Descrição mostrada abaixo do nome (≤ 2000 chars).
Imagem exibida ao lado do item. Qualquer URL HTTPS pública (≤ 2000 chars).
Quantidade (inteiro ≥ 1).
Valor unitário em centavos (inteiro ≥ 1). R$ 99,90 =
9990.Mapa
string → string com identificadores internos do seller (sku, course_id, etc.).Métodos de pagamento (paymentMethods)
Configuração de cartão.
card.enabled (boolean) liga/desliga. card.installments define o
parcelamento (veja abaixo). card.multipleCards (boolean) permite dividir o total entre 2 cartões.Parcelamento.
maxInstallments (1–12, obrigatório), freeInstallments (0–12, default 0, parcelas
iniciais sem juros), interestRate (0–100, taxa mensal em %, ex. 2.99), interestType ("simple"
ou "compound", default "compound" = Price/Tabela).Configuração de PIX.
pix.enabled (boolean) liga/desliga. pix.expiresIn (60–86400) é a expiração
do QR code em segundos (60s a 24h).Configuração de boleto.
boleto.enabled (boolean) liga/desliga. boleto.dueDateDays (1–30) é o
número de dias até o vencimento.Pagamento combinado (dividir o total entre métodos/cartões).
enabled (boolean, obrigatório),
minAmountPerPayment (centavos, default 1), maxPaymentsCount (2–8, default 4).Split
Distribui o valor recebido entre múltiplos recipients (marketplace, parceiros, plataformas).ID do recipient (
rec_*) que recebe a parcela.Porcentagem do valor total (0.01–100). Aceita decimais (ex.
33.33).Marca o recipient como responsável por chargebacks (tipicamente o seller principal).
Branding
Cor primária em hex. Regex
^#([0-9a-f]{6}|[0-9a-f]{3})$/i, ex. "#1e3b79" ou "#FFF". Derivações
(hover, contraste de texto) são calculadas automaticamente.Logo do seller exibido no header da página (≤ 2000 chars).
Nome do seller exibido na página (≤ 100 chars), caso não tenha logo ou ao lado dele.
"single-page" ou "step-by-step" — controla o layout do checkout em mobile.Favicon da página, ícone da aba do navegador (≤ 2000 chars).
Required fields
Lista de campos do comprador que serão obrigatórios além dos sempre-obrigatórios."email", "document", "phone", "address".
email, document e phone são sempre obrigatórios no momento do confirm, mesmo que você não
os liste aqui. Listar "address" força o comprador a preencher o endereço completo.Custom fields
Permite pedir informações adicionais ao comprador (texto, dropdown, checkbox).Identificador interno do campo. Regex
^[a-z][a-z0-9_]*$/i, ≤ 50 chars.Label exibido. String simples (
"Empresa") ou map por idioma
({ "pt-BR": "Empresa", "en-US": "Company" })."text", "select" ou "checkbox".Obrigatório se
type = "select". Aceita strings ("Opção 1") ou objetos { value, label } com label
localizável.Se
true, o comprador é obrigado a preencher.Criar Link
201. Suporta idempotência via header Idempotency-Key
(veja Convenções).
201):
A
url retornada é o link de pagamento pronto para compartilhar. Cada abertura materializa uma
Session nova.Erros comuns
| HTTP | Code | Quando |
|---|---|---|
400 | validation_failed | Body malformado (falta items, valor não-inteiro, etc.) |
400 | no_items | Array items vazio |
400 | amount_too_low | Soma dos itens resulta em 0 |
400 | invalid_splits_sum | Splits não somam 100 |
401 | unauthenticated | x-api-key ausente, inválido ou revogado |
409 | slug_taken | Já existe um Link com esse slug |
409 | idempotency_conflict | Mesma Idempotency-Key usada com body diferente |
Listar Links
Filtra por status (CSV). Ex.:
?status=active ou ?status=active,archived.Busca em
name e description (≤ 255 chars).Número da página (≥ 1).
Itens por página (1–100).
200):
Buscar Link por ID
POST).
200 (encontrado) · 404 (não encontrado).
Atualizar Link
200. Suporta idempotência via Idempotency-Key.
200 (atualizado) · 404 (não encontrado) · 400 (validação).
Arquivar Link
/c/chk_...) passa a retornar 404 e novas Sessions não podem mais
ser criadas a partir dele. Sessions já criadas continuam funcionando normalmente. Retorna 200
com a entidade contendo deletedAt preenchido. Suporta idempotência.
200):
200 (arquivado) · 404 (não encontrado).
Galeria de exemplos
Payloads prontos paraPOST /checkout/links. Abra a url retornada para conferir visualmente.
Apenas cartão (parcelamento simples)
Apenas cartão (parcelamento simples)
Apenas PIX (expira em 1h)
Apenas PIX (expira em 1h)
Apenas boleto (vence em 5 dias)
Apenas boleto (vence em 5 dias)
Todos os métodos
Todos os métodos
Múltiplos itens
Múltiplos itens
49900 + 4900 + 3 × 15000).Item com imagem e descrição
Item com imagem e descrição
Branding (cor + logo + nome)
Branding (cor + logo + nome)
Locale en-US / es-ES
Locale en-US / es-ES
"locale": "es-ES" para a página em espanhol. A página inteira segue o idioma escolhido.Endereço obrigatório (required fields)
Endereço obrigatório (required fields)
Custom fields (text + select + checkbox)
Custom fields (text + select + checkbox)
experience_level.Splits 70/30 (marketplace)
Splits 70/30 (marketplace)
Parcelamento com juros compostos
Parcelamento com juros compostos
Success / Cancel URLs
Success / Cancel URLs
successUrl. Você pode usar
{CHECKOUT_SESSION_ID} como placeholder — substituímos pelo cs_* antes de redirecionar.Kitchen-sink (quase todos os campos)
Kitchen-sink (quase todos os campos)
Veja também
Visão geral do Checkout
Conceitos, casos de uso e mapa de endpoints.
Checkout Sessions
Materialize Sessions a partir de um Link.
Webhooks
Eventos
checkout.link.* e checkout.session.*.Erros
Formato dos erros e como tratar
400 / 404 / 409.
