Links de pagamento
Criar sessão de pagamento
Cria um acesso temporário e seguro a uma página de pagamento, com cliente e configurações pré-preenchidos. É de uso único: expira após o pagamento.
Informe o priceId de um preço já cadastrado. Opcionalmente, envie os dados do cliente, restrinja as formas de pagamento e personalize a aparência.
A resposta inclui o id da sessão e a url de pagamento hospedada pela ValidaPay.
Formas de pagamento aceitas em allowedPaymentMethods: pix, creditcard, boleto e pix_automatico. O Pix Automático está disponível apenas para contas PJ (conta ValidaPay cadastrada com CNPJ) e exige um preço recorrente (recurrenceType WEEKLY, MONTHLY, QUARTERLY, SEMIANNUAL ou YEARLY): o cliente autoriza a recorrência uma única vez no aplicativo do banco e os ciclos seguintes são debitados automaticamente. Enquanto a autorização não é confirmada pelo banco do pagador, a assinatura fica com status PENDING. O valor mínimo por cobrança é de R$ 4,99.
Erros: 400 PIX_AUTOMATICO_PJ_ONLY (conta PF) e 400 PIX_AUTOMATICO_MIN_AMOUNT (valor abaixo do mínimo).
Ao informar termsOfServiceUrl e/ou privacyPolicyUrl, o checkout exibe um aceite obrigatório com os links: o cliente só consegue finalizar a compra depois de marcar que leu e concorda. O texto do aceite se adapta a um ou aos dois links. Sem esses campos, nenhum aceite é exibido.
Case de uso:
Como SaaS, quero gerar um link de pagamento nominal para cada cliente no momento da contratação, com uso único para evitar cobranças duplicadas.
/v1/checkout-sessionshttps://api.validapay.com.brhttps://sandbox.validapay.com.brAuthorizations
Authorization
string · header · required
Cabeçalho de autenticação Bearer no formato Bearer {{token}} onde {{token}} é o seu token OAuth2.
Escopos requeridos
Body
application/json
{
"priceId": "price_abc123",
"allowedPaymentMethods": [
"pix",
"creditcard",
"boleto",
"pix_automatico"
],
"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",
"termsOfServiceUrl": "https://meusite.com/termos-de-servico",
"privacyPolicyUrl": "https://meusite.com/politica-de-privacidade",
"metadata": { "referencia": "pedido-001" }
}Schema
priceIdstringRequiredPreço da sessão (deve começar com price_)
allowedPaymentMethods[4]arrayOptionalpixcreditcardboletopix_automaticoMétodos exibidos: pix, creditcard, boleto, pix_automatico (só conta PJ; omitir usa o padrão do price)
customerobjectOptionalPré-preenche os dados do cliente no checkout
items[1]arrayOptionalLista de { priceId, quantity } (sobrescreve o item principal)
billingDaynumberOptional1 a 31Dia do mês das cobranças recorrentes (1 a 31)
prorataStartDatestringOptionalInício do cálculo de pró-rata (YYYY-MM-DD)
installmentsnumberOptional1 a 12Parcelas fixas da sessão (1 a 12)
dueDatestringOptional^\d{4}-\d{2}-\d{2}$Vencimento do boleto (YYYY-MM-DD, maior que hoje)
boletoDueDaysnumberOptional1Dias até o vencimento (mín. 1; ignorado se dueDate informado)
expirationAfterDueDatenumberOptional0 a 60Dias após o vencimento que o boleto aceita pagamento (0 a 60)
discounts[1]arrayOptionalDescontos aplicados à sessão
passFeesToCustomerbooleanOptionalRepassa as taxas ao cliente (default false)
freeInstallmentsnumberOptional0 a 12Parcelas sem juros (1 a 12, default 1)
maxInstallmentsnumberOptionalLimite máximo de parcelas exibido (1 a 12)
boletoInstructionsobjectOptionalRegras de multa/juros/desconto do boleto
orderBumps[1]arrayOptionalProdutos adicionais exibidos no checkout
primaryColorstringOptionalCor primária em hex
secondaryColorstringOptionalCor secundária em hex
fontColorstringOptionalCor do texto em hex
companyNamestringOptionalNome da empresa exibido no checkout
successUrlstringOptionalRedireciona após pagamento aprovado
failureUrlstringOptionalRedireciona após pagamento recusado
termsOfServiceUrlstringOptionalTermos de serviço exibidos no checkout para aceite do cliente
privacyPolicyUrlstringOptionalPolítica de privacidade exibida no checkout para aceite do cliente
metadataobjectHeaders
| 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",
"pix_automatico"
],
"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",
"termsOfServiceUrl": "https://meusite.com/termos-de-servico",
"privacyPolicyUrl": "https://meusite.com/politica-de-privacidade",
"metadata": { "referencia": "pedido-001" }
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));Response Examples
{
"id": "cs_abc123",
"url": "https://app.validapay.com.br/pagamento/cs_abc123",
"priceId": "price_abc123"
}{
"error": {
"code": "INVALID_DATA",
"message": "Campo inválido",
"details": []
}
}{
"error": {
"message": "Você não tem permissão para usar este produto",
"code": "FORBIDDEN",
"details": null,
"timestamp": "2026-07-14T21:39:36.322Z"
}
}{
"error": {
"message": "Preço não encontrado",
"code": "PRICE_NOT_FOUND",
"details": null,
"timestamp": "2026-07-14T21:39:36.322Z"
}
}