Produtos
Criar Produto
Cria um novo produto ou serviço com nome, descrição, preço e configurações de recorrência.
POST
/v1/productsBase URL Produção:
https://api.validapay.com.brBase URL Sandbox:
https://sandbox.validapay.com.brOs produtos criados ficam disponíveis no painel administrativo e podem ser utilizados tanto no checkout transparente (via API) quanto no checkout pro (link de pagamento).
Tipos de recorrência em prices[].recurrenceType:
- ONE_TIME → Avulsa
- WEEKLY → Semanal
- MONTHLY → Mensal
- QUARTERLY → Trimestral
- SEMIANNUAL → Semestral
- YEARLY → Anual
Case de uso:
Como SaaS, quero cadastrar meus planos como produtos com preços recorrentes, para que meus clientes possam assinar diretamente pelo checkout pro ou pela minha própria interface.
Authorizations
bearer
Authorization
string obrigatório
Cabeçalho de autenticação Bearer no formato Bearer {{token}} onde {{token}} é o seu token OAuth2.
Escopos requeridos
products/write
Body
application/json
Content-Type:application/json
JSON
{
"name": "Plano Premium",
"description": "Acesso completo à plataforma",
"type": "RECURRING",
"statementDescriptor": "VALIDAPAY PREMIUM",
"isActive": true,
"metadata": {},
"emitirNf": false,
"nfConfigId": "nfc_1788364755079_psuecwgdc",
"tipoNf": "B2C",
"fiscal": {
"descricaoServico": "Assinatura de plataforma",
"codigoTributacaoNacionalIss": "010101",
"codigoTributarioMunicipio": "0101",
"tributacaoIss": 1,
"tipoRetencaoIss": 1,
"aliquota": 2.5,
"ncm": "00000000",
"cfop": "5102",
"icms": 0,
"pis": 0,
"cofins": 0
},
"productUrlPurchased": "https://meusite.com/area-do-aluno",
"sendEmail": ["recurrence.activated", "recurrence.payment.success", "recurrence.payment.failed", "trial.started"],
"sendWhatsApp": ["+5511999998888"],
"sendWebhook": ["https://meusite.com/webhook"],
"contactCompanyName": "Minha Empresa LTDA",
"contactEmail": "suporte@minhaempresa.com",
"contactPhone": "+5511999998888",
"contactPhoneIsWhatsapp": true,
"contactWhatsappMessage": "Ola, preciso de ajuda com meu pedido",
"messageRuler": [
{
"templateName": "LEMBRETE_VENCIMENTO_PROXIMO",
"offsetDays": -3,
"sendAtTime": "11:00"
}
],
"prices": [
{
"title": "Mensal",
"amount": 99.9,
"currency": "BRL",
"recurrenceType": "MONTHLY",
"recurrenceInterval": 1,
"trialDays": 7,
"compareAtPrice": 129.9
},
{
"title": "Anual",
"amount": 899.0,
"currency": "BRL",
"recurrenceType": "YEARLY",
"recurrenceInterval": 1
}
]
}Schema
namestringobrigatórioNome do produto
pricesarray[2]obrigatóriodescriptionstringopcionaltypestringopcionalRECURRING cobra todo ciclo, ONE_TIME cobra uma vez (default RECURRING)
Valores aceitos:
RECURRINGONE_TIMEstatementDescriptorstringopcionalmax 22 caracteres
isActivebooleanopcionalmetadataobjectopcionalObjeto livre, aceita as chaves e valores que você quiser
emitirNfbooleanopcionalEmite nota fiscal a cada cobrança deste produto (default false)
nfConfigIdstringopcionalConfiguração fiscal usada na emissão; exige endereço do comprador
tipoNfstringopcionalPúblico da nota: consumidor final ou empresa
Valores aceitos:
B2CB2BfiscalobjectopcionalDados fiscais do produto, usados na nota
productUrlPurchasedstringopcionalLink entregue ao comprador após o pagamento
Regra:
urisendEmailarray[4]opcionalEventos que disparam e-mail deste produto. Os eventos recurrence.*, subscription.*, invoice.*, pix.*, boleto.*, trial.started, oneoff.* e payment.failed avisam o comprador; new.sale e seller.* avisam você. recurrence.activated é o e-mail do primeiro pagamento aprovado da assinatura, e a partir do segundo ciclo vale subscription.renewed. Sem o campo, ou com a lista vazia, nenhum e-mail é enviado
Valores aceitos:
recurrence.activatedrecurrence.payment.successrecurrence.pix.generatedrecurrence.boleto.generatedrecurrence.card.pendingsubscription.renewedsubscription.overdueinvoice.overduesubscription.canceledsubscription.canceled.boleto_pixtrial.startedrecurrence.payment.failedrecurrence.payment.refundedrecurrence.nf.issuedinvoice.reminder.10dinvoice.reminder.5dinvoice.reminder.1dinvoice.reminder.todaypix.reminder.10dpix.reminder.5dpix.reminder.1dpix.reminder.todayoneoff.payment.successoneoff.card.pendingoneoff.payment.refundedoneoff.nf.issuedpix.generatedboleto.generatedpayment.failednew.saleseller.subscription.renewedseller.charge.pendingsendWhatsApparray[1]opcionalNúmeros avisados a cada venda deste produto
sendWebhookarray[1]opcionalURLs chamadas a cada venda deste produto
contactCompanyNamestringopcionalNome exibido ao comprador no checkout e na nota
contactEmailstringopcionalE-mail de suporte exibido ao comprador
Regra:
emailcontactPhonestringopcionalTelefone de suporte exibido ao comprador
contactPhoneIsWhatsappbooleanopcionalMostra o telefone de suporte como WhatsApp
contactWhatsappMessagestringopcionalMensagem que o comprador envia ao clicar no WhatsApp
messageRulerarray[1]opcionalRégua de lembretes por WhatsApp antes e depois do vencimento
const url = 'https://sandbox.validapay.com.br/v1/products';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer {{token}}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"name": "Plano Premium",
"description": "Acesso completo à plataforma",
"type": "RECURRING",
"statementDescriptor": "VALIDAPAY PREMIUM",
"isActive": true,
"metadata": {},
"emitirNf": false,
"nfConfigId": "nfc_1788364755079_psuecwgdc",
"tipoNf": "B2C",
"fiscal": {
"descricaoServico": "Assinatura de plataforma",
"codigoTributacaoNacionalIss": "010101",
"codigoTributarioMunicipio": "0101",
"tributacaoIss": 1,
"tipoRetencaoIss": 1,
"aliquota": 2.5,
"ncm": "00000000",
"cfop": "5102",
"icms": 0,
"pis": 0,
"cofins": 0
},
"productUrlPurchased": "https://meusite.com/area-do-aluno",
"sendEmail": ["recurrence.activated", "recurrence.payment.success", "recurrence.payment.failed", "trial.started"],
"sendWhatsApp": ["+5511999998888"],
"sendWebhook": ["https://meusite.com/webhook"],
"contactCompanyName": "Minha Empresa LTDA",
"contactEmail": "suporte@minhaempresa.com",
"contactPhone": "+5511999998888",
"contactPhoneIsWhatsapp": true,
"contactWhatsappMessage": "Ola, preciso de ajuda com meu pedido",
"messageRuler": [
{
"templateName": "LEMBRETE_VENCIMENTO_PROXIMO",
"offsetDays": -3,
"sendAtTime": "11:00"
}
],
"prices": [
{
"title": "Mensal",
"amount": 99.9,
"currency": "BRL",
"recurrenceType": "MONTHLY",
"recurrenceInterval": 1,
"trialDays": 7,
"compareAtPrice": 129.9
},
{
"title": "Anual",
"amount": 899.0,
"currency": "BRL",
"recurrenceType": "YEARLY",
"recurrenceInterval": 1
}
]
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));Response Examples
200▾
JSON
{
"productId": "prod_xxx",
"name": "Plano Premium",
"prices": [
{
"priceId": "price_xxx",
"amount": 99.9,
"checkoutUrl": "https://app.validapay.com.br/pagamento/pl_xxx"
}
]
}400▾
JSON
{
"error": {
"message": "O campo name é obrigatório",
"code": "INVALID_PRODUCT_DATA",
"details": null,
"timestamp": "2026-07-14T21:39:36.322Z"
}
}