Checkouts

Criar Sessão de Checkout

POST/v1/checkout-sessions
Base URL Produção:https://api.validapay.com.br
Base URL Sandbox:https://sandbox.validapay.com.br

Autenticaçã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

CampoObrig.TipoDescrição
priceIdstringDeve começar com price_. Deve pertencer à conta autenticada
allowedPaymentMethodsstring[]Métodos exibidos: pix creditcard boleto. Omitir = usa padrão do price
customer.namestringPré-preenche o nome no checkout
customer.emailstringUsado para localizar cliente existente pelo documentNumber
customer.documentNumberstringCPF (11) ou CNPJ (14 dígitos)
customer.phonestringTelefone
customer.addressobjectEndereço completo. Obrigatório para boleto no momento do pagamento
customer.address.typestringTipo do endereço (ex: BILLING)
customer.address.cityCodestringCódigo IBGE — obrigatório para emissão de nota fiscal
itemsarrayLista de { priceId, quantity }. Sobrescreve o item principal para multi-produto
billingDaynumber1–31. Dia do mês para cobranças recorrentes
prorataStartDatestringYYYY-MM-DD. Data de início para cálculo de prorata
installmentsnumber1–12. Parcelas fixas para a sessão
dueDatestringYYYY-MM-DD (deve ser maior que hoje). Deriva boletoDueDays automaticamente
boletoDueDaysnumberDias para vencimento do boleto (mín. 1). Ignorado se dueDate for informado
expirationAfterDueDatenumber0–60. Dias após vencimento que o boleto ainda aceita pagamento
discountsarrayDescontos aplicados à sessão. Cada item: { type, value, paymentMethod?, fromCycle?, toCycle?, durationMonths? }
discounts[].typestringPERCENTAGE ou FIXED
discounts[].valuenumberValor do desconto
discounts[].paymentMethodstringRestringir a um método: pix creditcard boleto
discounts[].fromCyclenumberCiclo inicial de aplicação
discounts[].toCyclenumberCiclo final de aplicação
discounts[].durationMonthsnumberDuração em meses
passFeesToCustomerbooleanRepassa taxas ao cliente. Default false
freeInstallmentsnumber1–12. Parcelas sem juros. Default 1
maxInstallmentsnumber1–12. Limite máximo de parcelas exibido
boletoInstructions.finenumberMulta em % (0.1–100). fine + interest ≤ 60%
boletoInstructions.interestnumberJuros mensais em % (0.1–100)
boletoInstructions.discount.amountnumberValor do desconto antecipado
boletoInstructions.discount.modalitystringfixed (R$) ou percent (%)
boletoInstructions.discount.limitDatestringYYYY-MM-DD — deve ser anterior ao dueDate
orderBumpsarrayProdutos adicionais exibidos no checkout
orderBumps[].priceIdstringpriceId do produto adicional
orderBumps[].callToActionstringTexto do botão de adicionar
orderBumps[].titlestringTítulo exibido
orderBumps[].descriptionstringDescrição exibida
orderBumps[].showImagebooleanExibir imagem do produto
primaryColorstringCor primária (hex)
secondaryColorstringCor secundária (hex)
fontColorstringCor do texto (hex)
companyNamestringNome da empresa exibido no checkout
successUrlstringRedireciona após pagamento aprovado
failureUrlstringRedireciona após pagamento recusado
metadataobjectDados 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

FieldTypeRequiredDescription
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

NameTypeValueRequired
Content-Type-application/jsonOptional
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"
}