# Criar Produto
`POST /v1/products`
**Área:** Produtos

**Scopes necessários:** `products/write`

Cria um novo produto ou serviço com nome, descrição, preço e configurações de recorrência.

Os 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._

### Request body

```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": ["comprador@email.com"],
  "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
    }
  ]
}
```

### Campos do body

**Obrigatórios:** `name`, `messageRuler.templateName`, `messageRuler.offsetDays`, `prices`, `prices.title`, `prices.amount`, `prices.recurrenceType`

| Campo | Descrição |
|---|---|
| `name` | Nome do produto |
| `messageRuler.templateName` | Modelo da mensagem enviada |
| `messageRuler.offsetDays` | Dias em relação ao vencimento: negativo antes, positivo depois, até 10 dias antes |
| `prices` |  |
| `prices.title` |  |
| `prices.amount` | Valor em reais (> 0) |
| `prices.recurrenceType` | WEEKLY, MONTHLY, QUARTERLY, SEMIANNUAL, YEARLY ou ONE_TIME |

**Opcionais**

| Campo | Descrição |
|---|---|
| `description` |  |
| `type` | RECURRING cobra todo ciclo, ONE_TIME cobra uma vez (default RECURRING) (valores: RECURRING, ONE_TIME) |
| `statementDescriptor` | max 22 caracteres |
| `isActive` |  |
| `metadata` | Objeto livre, aceita as chaves e valores que você quiser |
| `emitirNf` | Emite nota fiscal a cada cobrança deste produto (default false) |
| `nfConfigId` | Configuração fiscal usada na emissão; exige endereço do comprador |
| `tipoNf` | Público da nota: consumidor final ou empresa (valores: B2C, B2B) |
| `fiscal` | Dados fiscais do produto, usados na nota |
| `fiscal.descricaoServico` | Descrição do serviço impressa na nota |
| `fiscal.codigoTributacaoNacionalIss` | Código nacional de tributação do ISS |
| `fiscal.codigoTributarioMunicipio` | Código de serviço da prefeitura |
| `fiscal.tributacaoIss` | Regime de tributação do ISS |
| `fiscal.tipoRetencaoIss` | Tipo de retenção do ISS |
| `fiscal.aliquota` | Alíquota aplicada em porcentagem |
| `fiscal.ncm` | Código NCM, para produto físico |
| `fiscal.cfop` | Código fiscal da operação, para produto físico |
| `fiscal.icms` | Percentual de ICMS |
| `fiscal.pis` | Percentual de PIS |
| `fiscal.cofins` | Percentual de COFINS |
| `productUrlPurchased` | Link entregue ao comprador após o pagamento |
| `sendEmail` | E-mails avisados a cada venda deste produto |
| `sendWhatsApp` | Números avisados a cada venda deste produto |
| `sendWebhook` | URLs chamadas a cada venda deste produto |
| `contactCompanyName` | Nome exibido ao comprador no checkout e na nota |
| `contactEmail` | E-mail de suporte exibido ao comprador |
| `contactPhone` | Telefone de suporte exibido ao comprador |
| `contactPhoneIsWhatsapp` | Mostra o telefone de suporte como WhatsApp |
| `contactWhatsappMessage` | Mensagem que o comprador envia ao clicar no WhatsApp |
| `messageRuler` | Régua de lembretes por WhatsApp antes e depois do vencimento |
| `messageRuler.sendAtTime` | Horário do envio em HH:MM (24h), entre 11:00 e 23:59 |
| `prices.currency` |  |
| `prices.recurrenceInterval` | min 1 (ex: 2 = bimestral) |
| `prices.trialDays` |  |
| `prices.compareAtPrice` | Preço "de" |

### Resposta 200: 200

```json
{
  "productId": "prod_xxx",
  "name": "Plano Premium",
  "prices": [
    {
      "priceId": "price_xxx",
      "amount": 99.9,
      "checkoutUrl": "https://app.validapay.com.br/pagamento/pl_xxx"
    }
  ]
}
```

### Resposta 400: 400

```json
{
    "error": {
        "message": "O campo name é obrigatório",
        "code": "INVALID_PRODUCT_DATA",
        "details": null,
        "timestamp": "2026-07-14T21:39:36.322Z"
    }
}
```

---
Página: https://docs.validapay.com.br/referencia/post-criar-produto
Contrato OpenAPI: https://docs.validapay.com.br/openapi.json