> ## Documentation Index
> Fetch the complete documentation index at: https://docs.moneydev.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Criar uma oferta

> Adiciona uma oferta com preço a um produto.

<Info>
  `POST /v1/products/{productId}/offers`  ·  Requer o escopo `products:write`
</Info>

Uma **oferta** é um preço específico de um produto — avulso ou recorrente. Um produto pode ter várias; exatamente uma é a padrão.

<Note>
  A nova oferta vira a padrão do produto se você passar `is_default: true`, **ou** se o produto não tiver nenhuma padrão ativa no momento. Promover uma oferta a padrão rebaixa a anterior.
</Note>

## Parâmetros de caminho

<ParamField path="productId" type="string" required>
  Produto ao qual anexar a oferta. Se não for um ID `prod_` válido → `400` (`invalid_product_id`).
</ParamField>

## Parâmetros do corpo

<ParamField body="amount_minor" type="integer" required>
  Preço em unidades menores (centavos). De `1` a `99999999999`.
</ParamField>

<ParamField body="currency" type="string" required>
  ISO 4217 em maiúsculas, ex. `BRL`.
</ParamField>

<ParamField body="name" type="string">
  Rótulo da oferta, de 1 a 160 caracteres. Padrão: `"Padrão"`.
</ParamField>

<ParamField body="compare_at_amount_minor" type="integer">
  Um preço de referência riscado. Deve ser `≥ amount_minor`.
</ParamField>

<ParamField body="type" type="string" default="one_time">
  `one_time` ou `recurring`.
</ParamField>

<ParamField body="billing_interval" type="string">
  `day`, `week`, `month` ou `year`. Obrigatório quando `type` é `recurring`; rejeitado quando `one_time`.
</ParamField>

<ParamField body="interval_count" type="integer">
  Número de intervalos entre cobranças, de `1` a `999`. Só para recorrente; padrão `1`.
</ParamField>

<ParamField body="is_default" type="boolean">
  Passe `true` para tornar esta a oferta padrão do produto.
</ParamField>

## Requisição

```bash cURL theme={null}
curl --request POST \
  https://api.moneydev.com.br/v1/products/prod_4d5e6f7a-8b9c-4d0e-1f2a-3b4c5d6e7f8a/offers \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "Mensal",
    "amount_minor": 4990,
    "currency": "BRL",
    "type": "recurring",
    "billing_interval": "month"
  }'
```

## Resposta

`201 Created` com o [objeto de oferta](#objeto-de-oferta).

## Erros

| Status | `code` | Causa |
| - | - | - |
| `400` | `invalid_product_id` | O trecho do caminho não é um ID `prod_` válido |
| `400` | `invalid_request` | Validação falhou; `param` indica o campo |
| `400` | `invalid_compare_at_amount` | `compare_at_amount_minor` é menor que `amount_minor` |
| `400` | `billing_interval_required` | `type` é `recurring` sem `billing_interval` |
| `400` | `invalid_one_time_billing` | Uma oferta `one_time` informou `billing_interval` ou `interval_count` |
| `404` | `product_not_found` | Não existe esse produto, ou ele está arquivado |

## Objeto de oferta

<ResponseField name="id" type="string">ID da oferta, com prefixo `offer_`.</ResponseField>
<ResponseField name="object" type="string">Sempre `"offer"`.</ResponseField>
<ResponseField name="product_id" type="string">ID do produto pai.</ResponseField>
<ResponseField name="name" type="string">Rótulo da oferta.</ResponseField>

<ResponseField name="lookup_key" type="string">
  Uma chave estável, gerada pelo sistema, para a oferta.
</ResponseField>

<ResponseField name="amount_minor" type="integer">Preço em unidades menores.</ResponseField>
<ResponseField name="compare_at_amount_minor" type="integer | null">Preço de referência, ou `null`.</ResponseField>
<ResponseField name="currency" type="string">Moeda ISO 4217.</ResponseField>
<ResponseField name="type" type="string">`one_time` ou `recurring`.</ResponseField>
<ResponseField name="billing_interval" type="string | null">`day` / `week` / `month` / `year`, ou `null` para avulso.</ResponseField>
<ResponseField name="interval_count" type="integer | null">Intervalos entre cobranças, ou `null` para avulso.</ResponseField>
<ResponseField name="is_default" type="boolean">Se esta é a oferta padrão do produto.</ResponseField>
<ResponseField name="active" type="boolean">Se a oferta pode ser usada em novos checkouts.</ResponseField>
<ResponseField name="created_at" type="string">Data/hora de criação em ISO 8601.</ResponseField>
<ResponseField name="updated_at" type="string">Data/hora da última alteração em ISO 8601.</ResponseField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.