Checkouts
Criar Sessão de Checkout
POST
/v1/checkout-sessionsBase URL Produção:
https://api.validapay.com.brBase URL Sandbox:
https://sandbox.validapay.com.brAutenticação
bearerAuthorizationstring · header · obrigatório
Envie no header:
Authorization: Bearer {{token}}Cria um acesso temporário e seguro a uma página de pagamento, com validade e uso único.
POST /v1/checkout-sessions — Criar Sessão de Checkout
Auth: Bearer (Cognito) ou M2M (checkouts/write)
Cria um link de pagamento nominal com cliente e configurações pré-preenchidas. Uso único — expira após o pagamento.
Resposta
{
"id": "cs_abc123",
"url": "https://app.validapay.com.br/pagamento/cs_abc123",
"priceId": "price_abc123"
}
Referência dos campos
| Campo | Obrig. | Tipo | Descrição |
|---|---|---|---|
priceId | ✅ | string | Deve começar com price_. Deve pertencer à conta autenticada |
allowedPaymentMethods | — | string[] | Métodos exibidos: pix creditcard boleto. Omitir = usa padrão do price |
customer.name | — | string | Pré-preenche o nome no checkout |
customer.email | — | string | Usado para localizar cliente existente pelo documentNumber |
customer.documentNumber | — | string | CPF (11) ou CNPJ (14 dígitos) |
customer.phone | — | string | Telefone |
customer.address | — | object | Endereço completo. Obrigatório para boleto no momento do pagamento |
customer.address.type | — | string | Tipo do endereço (ex: BILLING) |
customer.address.cityCode | — | string | Código IBGE — obrigatório para emissão de nota fiscal |
items | — | array | Lista de { priceId, quantity }. Sobrescreve o item principal para multi-produto |
billingDay | — | number | 1–31. Dia do mês para cobranças recorrentes |
prorataStartDate | — | string | YYYY-MM-DD. Data de início para cálculo de prorata |
installments | — | number | 1–12. Parcelas fixas para a sessão |
dueDate | — | string | YYYY-MM-DD (deve ser maior que hoje). Deriva boletoDueDays automaticamente |
boletoDueDays | — | number | Dias para vencimento do boleto (mín. 1). Ignorado se dueDate for informado |
expirationAfterDueDate | — | number | 0–60. Dias após vencimento que o boleto ainda aceita pagamento |
discounts | — | array | Descontos aplicados à sessão. Cada item: { type, value, paymentMethod?, fromCycle?, toCycle?, durationMonths? } |
discounts[].type | — | string | PERCENTAGE ou FIXED |
discounts[].value | — | number | Valor do desconto |
discounts[].paymentMethod | — | string | Restringir a um método: pix creditcard boleto |
discounts[].fromCycle | — | number | Ciclo inicial de aplicação |
discounts[].toCycle | — | number | Ciclo final de aplicação |
discounts[].durationMonths | — | number | Duração em meses |
passFeesToCustomer | — | boolean | Repassa taxas ao cliente. Default false |
freeInstallments | — | number | 1–12. Parcelas sem juros. Default 1 |
maxInstallments | — | number | 1–12. Limite máximo de parcelas exibido |
boletoInstructions.fine | — | number | Multa em % (0.1–100). fine + interest ≤ 60% |
boletoInstructions.interest | — | number | Juros mensais em % (0.1–100) |
boletoInstructions.discount.amount | — | number | Valor do desconto antecipado |
boletoInstructions.discount.modality | — | string | fixed (R$) ou percent (%) |
boletoInstructions.discount.limitDate | — | string | YYYY-MM-DD — deve ser anterior ao dueDate |
orderBumps | — | array | Produtos adicionais exibidos no checkout |
orderBumps[].priceId | ✅ | string | priceId do produto adicional |
orderBumps[].callToAction | — | string | Texto do botão de adicionar |
orderBumps[].title | — | string | Título exibido |
orderBumps[].description | — | string | Descrição exibida |
orderBumps[].showImage | — | boolean | Exibir imagem do produto |
primaryColor | — | string | Cor primária (hex) |
secondaryColor | — | string | Cor secundária (hex) |
fontColor | — | string | Cor do texto (hex) |
companyName | — | string | Nome da empresa exibido no checkout |
successUrl | — | string | Redireciona após pagamento aprovado |
failureUrl | — | string | Redireciona após pagamento recusado |
metadata | — | object | Dados livres persistidos na sessão |
Body
application/json
Content-Type:application/json
{
"priceId": "price_abc123",
"allowedPaymentMethods": ["pix", "creditcard", "boleto"],
"customer": {
"name": "João Silva",
"email": "joao@email.com",
"documentNumber": "12345678901",
"phone": "51999999999",
"address": {
"type": "BILLING",
"street": "Rua das Flores",
"number": "123",
"complement": "Apto 4",
"neighborhood": "Centro",
"city": "Porto Alegre",
"state": "RS",
"zipCode": "90010000",
"country": "BR",
"cityCode": "4314902"
}
},
"items": [
{ "priceId": "price_abc123", "quantity": 1 }
],
"billingDay": 15,
"prorataStartDate": "2026-06-11",
"installments": 1,
"dueDate": "2026-07-30",
"boletoDueDays": 7,
"expirationAfterDueDate": 30,
"discounts": [
{
"type": "PERCENTAGE",
"value": 10,
"paymentMethod": "pix",
"fromCycle": 1,
"toCycle": 3,
"durationMonths": 3
}
],
"passFeesToCustomer": false,
"freeInstallments": 1,
"maxInstallments": 12,
"boletoInstructions": {
"fine": 2.0,
"interest": 1.0,
"discount": {
"amount": 10.00,
"modality": "fixed",
"limitDate": "2026-07-28"
}
},
"orderBumps": [
{
"priceId": "price_bump123",
"callToAction": "Adicionar ao pedido",
"title": "Produto adicional",
"description": "Descrição do order bump",
"showImage": true
}
],
"primaryColor": "#6366f1",
"secondaryColor": "#818cf8",
"fontColor": "#ffffff",
"companyName": "Minha Empresa",
"successUrl": "https://meusite.com/sucesso",
"failureUrl": "https://meusite.com/falha",
"metadata": { "referencia": "pedido-001" }
}Schema
| Field | Type | Required | Description |
|---|---|---|---|
priceId | string | - | - |
allowedPaymentMethods[3] | array | - | - |
customer | object | - | - |
items[1] | array | - | - |
billingDay | number | - | - |
prorataStartDate | string | - | - |
installments | number | - | - |
dueDate | string | - | - |
boletoDueDays | number | - | - |
expirationAfterDueDate | number | - | - |
discounts[1] | array | - | - |
passFeesToCustomer | boolean | - | - |
freeInstallments | number | - | - |
maxInstallments | number | - | - |
boletoInstructions | object | - | - |
orderBumps[1] | array | - | - |
primaryColor | string | - | - |
secondaryColor | string | - | - |
fontColor | string | - | - |
companyName | string | - | - |
successUrl | string | - | - |
failureUrl | string | - | - |
metadata | object | - | - |
Headers
| Name | Type | Value | Required |
|---|---|---|---|
| Content-Type | - | application/json | Optional |
const url = 'https://sandbox.validapay.com.br/v1/checkout-sessions';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer {{token}}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"priceId": "price_abc123",
"allowedPaymentMethods": ["pix", "creditcard", "boleto"],
"customer": {
"name": "João Silva",
"email": "joao@email.com",
"documentNumber": "12345678901",
"phone": "51999999999",
"address": {
"type": "BILLING",
"street": "Rua das Flores",
"number": "123",
"complement": "Apto 4",
"neighborhood": "Centro",
"city": "Porto Alegre",
"state": "RS",
"zipCode": "90010000",
"country": "BR",
"cityCode": "4314902"
}
},
"items": [
{ "priceId": "price_abc123", "quantity": 1 }
],
"billingDay": 15,
"prorataStartDate": "2026-06-11",
"installments": 1,
"dueDate": "2026-07-30",
"boletoDueDays": 7,
"expirationAfterDueDate": 30,
"discounts": [
{
"type": "PERCENTAGE",
"value": 10,
"paymentMethod": "pix",
"fromCycle": 1,
"toCycle": 3,
"durationMonths": 3
}
],
"passFeesToCustomer": false,
"freeInstallments": 1,
"maxInstallments": 12,
"boletoInstructions": {
"fine": 2.0,
"interest": 1.0,
"discount": {
"amount": 10.00,
"modality": "fixed",
"limitDate": "2026-07-28"
}
},
"orderBumps": [
{
"priceId": "price_bump123",
"callToAction": "Adicionar ao pedido",
"title": "Produto adicional",
"description": "Descrição do order bump",
"showImage": true
}
],
"primaryColor": "#6366f1",
"secondaryColor": "#818cf8",
"fontColor": "#ffffff",
"companyName": "Minha Empresa",
"successUrl": "https://meusite.com/sucesso",
"failureUrl": "https://meusite.com/falha",
"metadata": { "referencia": "pedido-001" }
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));Response Examples
200200
{
"id": "cs_abc123",
"url": "https://app.validapay.com.br/pagamento/cs_abc123",
"priceId": "price_abc123"
}400400
{
"error": {
"code": "INVALID_DATA",
"message": "Campo inválido",
"details": []
}
}401401
{
"code": "FORBIDDEN",
"message": "Você não tem permissão para usar este produto"
}404404
{
"code": "PRICE_NOT_FOUND"
}