# Planos

URL: https://staging.pagpolar.com/docs/referencia/planos

> Crie planos de assinatura e as ofertas de cada plano.

## Produto

As operações de plano (`/plans` e `/plans/{id}`) devolvem o plano como **[Produto](/docs/referencia/entidades/produto)**.

| Campo | Tipo | Obrigatório | Nulo | Descrição |
| --- | --- | --- | --- | --- |
| `id` | texto (uuid) | não | não | Exemplo: `c4d5e6f7-a8b9-4c0d-1e2f-3a4b5c6d7e8f`. |
| `name` | texto | não | não | Exemplo: `Curso de Marketing Digital`. |
| `description` | texto | não | sim | Exemplo: `Aprenda a vender online do zero`. |
| `author` | texto | não | sim | Exemplo: `João Silva`. |
| `promotional_text` | texto | não | sim | Exemplo: `Oferta por tempo limitado`. |
| `is_active` | booleano | não | não | Exemplo: `true`. |
| `image` | texto | não | sim | null quando o produto não tem imagem cadastrada. Exemplo: `https://api.pagpolar.com/files/abc123.png`. |
| `type` | enum | não | não | Tipo do produto. `PHYSICAL` pode aparecer em produtos criados no painel, mas produtos físicos ainda não são processados pela API: não há envio, frete nem rastreio. Valores: `PHYSICAL`, `DIGITAL`, `SUBSCRIPTION`, `PACKAGE`. Exemplo: `DIGITAL`. |
| `content_type` | enum | não | não | Valores: `DEFAULT`, `EVENT_ONLINE`, `EVENT_IN_PERSON`, `EBOOK`, `COURSE`. Exemplo: `COURSE`. |
| `warranty_time` | inteiro | não | não | Prazo de garantia em dias. Exemplo: `7`. |
| `category` | objeto | não | sim | null quando o produto não tem categoria. |
| `category.id` | texto (uuid) | não | não | — |
| `category.name` | texto | não | não | Exemplo: `Cursos`. |
| `created_at` | texto (date-time) | não | não | Exemplo: `2026-01-15T12:00:00.000Z`. |
| `updated_at` | texto (date-time) | não | não | Exemplo: `2026-02-01T09:30:00.000Z`. |

## Oferta

As operações de oferta de plano (`/plans/{id}/offers` e `/plan-offers/{id}`) devolvem **[Oferta](/docs/referencia/entidades/oferta)**.

| Campo | Tipo | Obrigatório | Nulo | Descrição |
| --- | --- | --- | --- | --- |
| `id` | texto (uuid) | não | não | Exemplo: `d5e6f7a8-b9c0-4d1e-2f3a-4b5c6d7e8f9a`. |
| `identifier` | texto | não | não | Código da oferta: prefixo `PPP` seguido de 10 dígitos. Exemplo: `PPP1234567890`. |
| `title` | texto | não | sim | Exemplo: `Plano Mensal`. |
| `price` | número | não | não | Exemplo: `197.9`. |
| `is_active` | booleano | não | não | Exemplo: `true`. |
| `requires_shipping` | booleano | não | não | true quando o produto é físico: a cobrança exige `address` e `shipping_option_id`. Consulte as opções em `GET /offers/{identifier}/shipping`. Exemplo: `false`. |
| `is_default` | booleano | não | não | Exemplo: `false`. |
| `product_id` | texto (uuid) | não | não | Exemplo: `c4d5e6f7-a8b9-4c0d-1e2f-3a4b5c6d7e8f`. |
| `payment_methods` | objeto | não | não | Meios de pagamento ligados. Cada meio só fica ligado se o preço atinge o mínimo dele: PIX R$ 5,00, cartão R$ 5,00 e boleto R$ 10,00. |
| `payment_methods.pix` | booleano | não | não | Exemplo: `true`. |
| `payment_methods.credit_card` | booleano | não | não | Exemplo: `true`. |
| `payment_methods.billet` | booleano | não | não | Exemplo: `false`. |
| `max_credit_card_installments` | inteiro | não | não | Exemplo: `12`. |
| `cycle` | enum | não | sim | null para oferta avulsa (não recorrente). Preenchido só quando a oferta é de assinatura. Valores: `DAILY`, `WEEKLY`, `MONTHLY`, `YEARLY`. Exemplo: `MONTHLY`. |
| `cycle_interval` | inteiro | não | sim | Exemplo: `1`. |
| `cycle_interval_limit` | inteiro | não | sim | null quando a assinatura não tem limite de ciclos. Exemplo: `12`. |
| `allow_purchase_quantity` | booleano | não | não | Exemplo: `false`. |
| `purchase_quantity_limit` | inteiro | não | sim | Exemplo: `10`. |
| `purchase_quantity_min` | inteiro | não | não | Exemplo: `1`. |
| `expires_at` | texto (date-time) | não | sim | Exemplo: `null`. |
| `created_at` | texto (date-time) | não | não | Exemplo: `2026-01-10T10:00:00.000Z`. |
