# Ofertas, planos e ofertas ocultas

URL: https://staging.pagpolar.com/docs/guias/conceitos/ofertas-planos-e-ofertas-ocultas

> Escolha entre usar o código de uma oferta e informar a oferta na hora da venda, e entenda o que é uma oferta oculta.

## Produto, oferta, plano e oferta de plano

| Termo           | O que é                                                                                                                                                        | Como criar                                                             |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| Produto         | O que você vende. Pela API, nasce como produto digital (`type: DIGITAL`). Veja [produtos físicos](/docs/guias/jornadas/criar-produto-e-oferta#crie-o-produto). | [`POST /products`](/docs/referencia/produtos/create-product)           |
| Oferta          | Um preço de venda do produto, com os meios de pagamento e o máximo de parcelas. Um produto pode ter várias ofertas. O preço vai em `price`.                    | [`POST /offers`](/docs/referencia/ofertas/create-offer)                |
| Plano           | Um produto de assinatura (`type: SUBSCRIPTION`).                                                                                                               | [`POST /plans`](/docs/referencia/planos/create-plan)                   |
| Oferta de plano | O preço recorrente do plano, com o ciclo de cobrança: `WEEKLY`, `MONTHLY` ou `YEARLY`. O preço vai em `price`.                                                 | [`POST /plans/{id}/offers`](/docs/referencia/planos/create-plan-offer) |

A venda sempre aponta para uma **oferta**, não para o produto.

Em `price` e em `offer.value`, o valor que você envia é sempre em **centavos**, como número inteiro: `4990` = R$ 49,90. Nas respostas, o valor volta em reais. Veja [Valores que você envia](/docs/guias/fundamentos/valores-datas-e-identificadores#valores-que-voce-envia).

## Meios de pagamento e valor mínimo

Na oferta e na oferta de plano, cada meio de pagamento tem um valor mínimo e é desligado ao salvar quando o preço fica abaixo dele. Veja a regra, os exemplos e a edição em [Meios de pagamento e valor mínimo](/docs/guias/jornadas/criar-produto-e-oferta#meios-de-pagamento).

## Duas formas de apontar a oferta numa cobrança

Nas rotas `POST /payments/pix`, `POST /payments/boleto` e `POST /payments/credit-card`, envie **uma** destas duas formas:

| Campo              | Quando usar                                                                 |
| ------------------ | --------------------------------------------------------------------------- |
| `offer_identifier` | Você já criou a oferta e tem o código dela.                                 |
| `offer`            | Você quer informar produto, nome e valor na hora, sem criar a oferta antes. |

Enviar as duas ou nenhuma responde `400`:

| Situação       | `message`                                        |
| -------------- | ------------------------------------------------ |
| As duas juntas | `Envie offer_identifier ou offer, nunca os dois` |
| Nenhuma        | `Envie offer_identifier ou offer`                |

A resposta da cobrança traz `offer_identifier` com o código da oferta usada.

Os exemplos abaixo mostram só o campo da oferta. O restante do corpo, como `customer`, é o mesmo nas duas formas. Veja o corpo completo em [Vender com PIX ou boleto](/docs/guias/jornadas/vender-com-pix-ou-boleto).

### Com `offer_identifier`

```json
{
  "offer_identifier": "<CODIGO_DA_OFERTA>"
}
```

### Com `offer`

```json
{
  "offer": {
    "product_id": "c4d5e6f7-a8b9-4c0d-1e2f-3a4b5c6d7e8f",
    "name": "Consultoria avulsa",
    "value": 4990,
    "createOffer": false
  }
}
```

| Campo de `offer` | Obrigatório | O que é                                                                 |
| ---------------- | ----------- | ----------------------------------------------------------------------- |
| `product_id`     | Sim         | `id` do produto. Precisa ser da sua conta, senão a resposta é `404`.    |
| `name`           | Sim         | Nome da oferta, até 255 caracteres.                                     |
| `value`          | Sim         | Valor da oferta, na mesma unidade de `price`. Mínimo padrão: `500`.     |
| `createOffer`    | Sim         | `true` ou `false`, como booleano. Veja [Oferta oculta](#oferta-oculta). |

## Oferta informada na hora: reaproveitar ou criar

Com `offer`, a API procura uma oferta **ativa** que tenha exatamente:

* o mesmo produto;
* o mesmo nome;
* o mesmo valor;
* a mesma visibilidade (oculta ou não).

Se encontrar, usa essa oferta. Se não encontrar, cria uma nova. Enviar a mesma `offer` várias vezes não cria ofertas repetidas.

Na criação, a oferta aceita cartão com o maior número de parcelas que respeita a parcela mínima, até 12. Veja [A regra da parcela mínima](/docs/guias/jornadas/criar-produto-e-oferta#parcela-minima).

## Oferta oculta

`createOffer` decide se a oferta criada fica visível:

| `createOffer` | Resultado                                                      |
| ------------- | -------------------------------------------------------------- |
| `true`        | Oferta comum, visível. Funciona com `offer_identifier` depois. |
| `false`       | Oferta **oculta**.                                             |

A oferta oculta só funciona pela API, enviando `offer` de novo. Ela não aparece nem funciona nestes lugares:

| Onde                               | O que acontece                        |
| ---------------------------------- | ------------------------------------- |
| `GET /offers/by-product/{id}`      | Não aparece na lista.                 |
| `GET /offers/{identifier}`         | `404 Oferta não encontrada`.          |
| `offer_identifier` numa cobrança   | `404 Oferta não encontrada`.          |
| `POST /plans/offer/{id}/subscribe` | `404 Oferta de plano não encontrada`. |

Use a oferta oculta quando o preço é decidido pelo seu sistema na hora, por exemplo um orçamento, e você não quer essa oferta nas listagens.

## Regras conferidas em toda cobrança

Com qualquer uma das duas formas, a API confere a oferta antes de cobrar:

| Regra                                       | Resposta quando falha                                                                            |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| A oferta está ativa.                        | `409` com `Oferta inativa`                                                                       |
| A oferta não expirou.                       | `409` com `Oferta expirada`                                                                      |
| O meio de pagamento está ligado na oferta.  | `409` com `Método de pagamento PIX não habilitado para esta oferta` (ou `BOLETO`, `CREDIT_CARD`) |
| As parcelas não passam do máximo da oferta. | `400` com `Número de parcelas acima do permitido para esta oferta (máximo N)`                    |
| A quantidade respeita a oferta.             | `400`                                                                                            |

## Parcelas: oferta avulsa e oferta de plano

Na oferta avulsa, o máximo é o valor que você definir em `max_credit_card_installments`, respeitando a [parcela mínima](/docs/guias/jornadas/criar-produto-e-oferta#parcela-minima). Sem o campo, a API usa 12. Na oferta de plano, só `1`: valor maior responde `400`.

A assinatura pela API só aceita cartão. A oferta de plano precisa estar com o cartão ligado, senão a resposta é `409`.

## Guias relacionados

- [Valores, datas e identificadores](/docs/guias/fundamentos/valores-datas-e-identificadores) — Centavos no envio, reais na resposta, e a parcela mínima.
- [Início rápido](/docs/guias/inicio-rapido) — Crie produto, oferta e a primeira venda PIX.
