Criar um produto
Cria um produto com preço em centavos inteiros e, opcionalmente, a regra de divisão dele. O produto nasce pronto para receber cobrança.
POSThttps://api.navenaut.com/products/
Autenticação
A sessão do painel autentica esta rota, e ela é lida de forma autoritativa: não há parâmetro em que o chamador aponte para outra conta.
Esta rota não exige escopo nomeado — o que não quer dizer que ela seja aberta: sem a credencial acima ela recusa.
Exige sessão de vendedor. O dono do produto vem do vínculo da sessão, nunca da requisição.
Parâmetros
Corpo da requisição
application/json.
| Campo | Tipo | Descrição |
|---|---|---|
acceptedMethods | arranjo de um de: `pix`, `card`, `paypal`, `apple_pay`, `google_pay`, `boleto` | — |
affiliateProgram | objeto | — |
billingType | um de: `one_time`, `recurring` | Como o produto cobra: one_time (avulso, o padrão) ou recurring (assinatura). Não muda depois de criado. Nesta etapa o produto recorrente já se cria e se configura, mas ainda não se vende: o checkout de assinatura por oferta vem depois, e a vitrine avulsa o trata como inexistente. |
category | um de: `Saúde e Esportes`, `Finanças e Investimentos`, `Relacionamento`, `Negócios e Carreira`, `Espiritualidade`, `Sexualidade`, `Entretenimento`, `Culinária e Gastronomia`, `Idiomas`, `Direito`, `Apps & Software`, `Literatura`, `Casa e Construção`, `Desenvolvimento Pessoal`, `Moda e Beleza`, `Animais e Plantas`, `Educacional`, `Hobbies`, `Internet`, `Ecologia e Meio Ambiente`, `Música e Artes`, `Tecnologia da Informação`, `Empreendedorismo Digital`, `Outros` | — |
currency | um de: `BRL`, `USD`, `EUR` | A moeda do preço. |
deliveryInstructions | texto | — |
deliveryMode | um de: `members`, `manual` | — |
description | texto | O texto que acompanha o nome na vitrine. |
installmentExtraBps | inteiro | Quanto você quer ganhar a mais por parcela, em pontos-base (10 é +0,10% ao mês). É receita sua por inteiro. Zero é nada a mais; o teto é 250. Tem de ser um número inteiro (a string 10 entre aspas é recusada com 422). Com installmentLimit em 1 (apenas à vista) o acréscimo é gravado como 0. A taxa da plataforma não aparece nem se escreve por aqui. |
installmentLimit | inteiro | O teto de parcelas no cartão: 1 é só à vista, de 2 em diante o produto parcela até aquela quantidade. Os juros são sempre do comprador. |
nameobrigatório | texto | O nome que o comprador vê na vitrine. |
offers | arranjo de objeto | As ofertas do produto recorrente, cada uma com nome, preço em centavos e periodicidade (semanal, mensal de 1, 2, 3 ou 6 meses, ou anual). No produto recorrente a oferta é o plano. O produto avulso não aceita ofertas. |
parts | arranjo de objeto | As pernas da divisão. Cada perna aponta para um beneficiário e diz quanto dela lhe cabe. |
pixRecoveryEmailEnabled | booleano | — |
priceCents | inteiro (centavos) | O preço, em centavos inteiros. É dele que sai o valor de toda cobrança deste produto. No produto recorrente, deixe de fora: o preço do produto é o da oferta principal. |
showAllOffers | booleano | — |
statementDescriptor | texto | — |
warrantyDays | inteiro | — |
{
"acceptedMethods": [
"pix"
],
"affiliateProgram": {
"clickModel": "first",
"commissionBps": 1,
"cookieDays": 30,
"description": "exemplo",
"enabled": true,
"manualApproval": true,
"onBump": true,
"onUpsell": true,
"rules": "exemplo",
"supportEmail": "comprador@exemplo.com.br"
},
"billingType": "one_time",
"category": "Saúde e Esportes",
"currency": "BRL",
"deliveryInstructions": "exemplo",
"deliveryMode": "members",
"description": "exemplo",
"installmentExtraBps": 0,
"installmentLimit": 1,
"name": "Loja Exemplo",
"offers": [
{
"interval": {
"count": 1,
"unit": "week"
},
"name": "Loja Exemplo",
"priceCents": 129900,
"principal": true
}
],
"parts": [
{
"beneficiaryId": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06",
"bps": 1,
"priority": 0,
"role": "coprodutor",
"shareKind": "proportional"
}
],
"pixRecoveryEmailEnabled": true,
"priceCents": 129900,
"showAllOffers": true,
"statementDescriptor": "exemplo",
"warrantyDays": 7
}Respostas
200 · sucesso
{
"billingType": "one_time",
"id": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06",
"publicId": "7k3m9x",
"status": "draft"
}422 · corpo inválido
O corpo não passou na validação: a resposta nomeia o que recusou.
Erros desta rota
| Status | Código | Quando | O que fazer |
|---|---|---|---|
| 422 | PRODUCT_OFFERS_INVALID | As ofertas não combinam com o produto: o recorrente sem oferta, o avulso com oferta, periodicidade fora da lista, nomes repetidos, mais de uma oferta principal, ou parcelamento num produto recorrente. | Corrija o que a resposta lista em reasons e reenvie. Todas as razões vêm de uma vez, e nada foi gravado. |
| 422 | PRODUCT_SPLIT_RULE_INVALID | As pernas da divisão não fecham: a soma não bate com o todo, uma perna repete o mesmo beneficiário, ou uma delas pede um valor que a venda não tem para dar. | Some as pernas e confira contra o preço antes de reenviar. A resposta nomeia o que recusou, e nada foi gravado. |
Os códigos são estáveis e fazem parte do contrato. A lista completa, com todos os vocabulários, está na tabela de erros.