Produtos são itens do seu catálogo usados nas cobranças: nome, preço, descrição e opcionalmente ciclo de assinatura. Avulso = pagamento único (cycle omitido ou null). Assinatura = cycle: WEEKLY, MONTHLY, QUARTERLY, SEMIANNUALLY ou ANNUALLY.
Produtos também podem ter um arquivo para download vinculado: um PDF que o comprador recebe acesso após o pagamento (e-books, ingressos, licenças, etc.).
Criar produto
Use /products/create. Moeda é sempre BRL.
Campos obrigatórios
Obrigatórios: externalId (único no seu sistema), name, price, currency. Opcionais: description, imageUrl, fileUrl, cycle (null/omitido = avulso), trialDays (requer cycle).
Exemplo (produto avulso):
POST /products/create
{
"externalId": "prod-123", // obrigatório - identificador único do produto no seu sistema
"name": "Produto Exemplo", // obrigatório - nome do produto
"price": 10000, // obrigatório - preço em centavos
"currency": "BRL", // obrigatório - moeda (sempre BRL)
"description": "Descrição do produto", // opcional - descrição
"imageUrl": null // opcional - URL da imagem (string | null)
}
Exemplo (produto de assinatura):
POST /products/create
{
"externalId": "prod-assinatura-1",
"name": "Plano Mensal",
"price": 4990,
"currency": "BRL",
"cycle": "MONTHLY" // opcional - WEEKLY | MONTHLY | QUARTERLY | SEMIANNUALLY | ANNUALLY; omitir ou null = avulso
}
Exemplo (produto de assinatura com período de teste gratuito):
POST /products/create
{
"externalId": "prod-assinatura-trial",
"name": "Plano Mensal com 7 dias grátis",
"price": 4990,
"currency": "BRL",
"cycle": "MONTHLY",
"trialDays": 7 // opcional - inteiro 1–90; requer cycle
}
Resposta (modelo Product):
{
"data": {
"externalId": "prod-assinatura-trial",
"name": "Plano Mensal com 7 dias grátis",
"description": null,
"imageUrl": null,
"hasFile": false,
"price": 4990,
"devMode": false,
"currency": "BRL",
"createdAt": "2024-11-04T18:38:28.573Z",
"updatedAt": "2024-11-04T18:38:28.573Z",
"status": "ACTIVE",
"id": "prod_abc123xyz",
"cycle": "MONTHLY",
"trialDays": 7
},
"success": true,
"error": null
}
O data retornado segue o modelo Product: id, externalId, name, description, imageUrl, hasFile, price, currency, status, cycle, trialDays, createdAt, updatedAt, etc.
Arquivo para download
Vincule um PDF ao produto passando fileUrl na criação. A AbacatePay baixa e armazena o arquivo internamente — o link original não é exposto.
fileUrl aceita qualquer URL pública de PDF. Tamanho máximo: 20 MB.
- Após o pagamento, o comprador recebe acesso ao download automaticamente.
- O campo
hasFile na resposta indica se o produto possui arquivo vinculado (true / false).
Exemplo (produto com arquivo):
POST /products/create
{
"externalId": "ebook-001",
"name": "E-book: Guia Completo",
"price": 4990,
"currency": "BRL",
"fileUrl": "https://exemplo.com/guia-completo.pdf"
}
Resposta:
{
"data": {
"id": "prod_abc123xyz",
"externalId": "ebook-001",
"name": "E-book: Guia Completo",
"hasFile": true,
"price": 4990,
"currency": "BRL",
"status": "ACTIVE",
...
},
"success": true,
"error": null
}
O URL do arquivo nunca é exposto pela API. Use hasFile para verificar se o produto tem um arquivo vinculado.