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

# Criar cupom

> Cria um cupom de desconto percentual, fixo ou de preço fechado

Cria um cupom de desconto na conta. O código é normalizado para MAIÚSCULAS e deve ser único na conta.

## Body

<ParamField body="code" type="string" required>
  Código do cupom (3–50 caracteres). Normalizado para MAIÚSCULAS.
</ParamField>

<ParamField body="discount_type" type="string" required>
  `percentage` (percentual sobre o pedido), `fixed` (valor fixo de desconto) ou `bundle` (preço total fechado para uma quantidade exata de cotas).
</ParamField>

<ParamField body="discount_value" type="number" required>
  * `percentage`: percentual de 1 a 100.
  * `fixed`: desconto em **centavos** (ex.: `500` = R\$ 5,00 de desconto).
  * `bundle`: preço total fechado em **centavos** (ex.: `2990` = as cotas saem por R\$ 29,90).
</ParamField>

<ParamField body="bundle_quantity" type="number">
  **Obrigatório quando `discount_type` é `bundle`**: quantidade exata de cotas que o pedido precisa ter para destravar o preço fechado.
</ParamField>

<ParamField body="campaign_id" type="string">
  Restringe o cupom a uma ação (UUID). Omitido = vale para todas as ações da conta.
</ParamField>

<ParamField body="max_uses" type="number">Limite de usos (mínimo 1). Omitido = ilimitado.</ParamField>
<ParamField body="min_order_value" type="number">Valor mínimo do pedido em **centavos**.</ParamField>
<ParamField body="valid_from" type="string">Início da validade (ISO 8601).</ParamField>
<ParamField body="valid_until" type="string">Fim da validade (ISO 8601).</ParamField>
<ParamField body="is_active" type="boolean" default="true">Se o cupom já nasce ativo.</ParamField>

## Erros

| HTTP  | Código                            | Quando ocorre                               |
| ----- | --------------------------------- | ------------------------------------------- |
| `400` | `COUPON_PERCENTAGE_TOO_HIGH`      | `percentage` com valor acima de 100         |
| `400` | `COUPON_BUNDLE_QUANTITY_REQUIRED` | `bundle` sem `bundle_quantity`              |
| `400` | `COUPON_CODE_ALREADY_EXISTS`      | Já existe cupom com esse código na conta    |
| `404` | `CAMPAIGN_NOT_FOUND`              | `campaign_id` inexistente ou de outra conta |

<RequestExample>
  ```bash percentual theme={null}
  curl -u "pb_xxx:sk_xxx" -X POST \
    -H "Content-Type: application/json" \
    -d '{ "code": "BEMVINDO10", "discount_type": "percentage", "discount_value": 10 }' \
    "https://api.sortify.com.br/v1/discount-coupons"
  ```

  ```bash valor fixo theme={null}
  curl -u "pb_xxx:sk_xxx" -X POST \
    -H "Content-Type: application/json" \
    -d '{
      "code": "DESCONTO5",
      "discount_type": "fixed",
      "discount_value": 500,
      "min_order_value": 2000,
      "max_uses": 100
    }' \
    "https://api.sortify.com.br/v1/discount-coupons"
  ```

  ```bash preço fechado (bundle) theme={null}
  curl -u "pb_xxx:sk_xxx" -X POST \
    -H "Content-Type: application/json" \
    -d '{
      "code": "COMBO100",
      "discount_type": "bundle",
      "discount_value": 2990,
      "bundle_quantity": 100,
      "campaign_id": "a3f1c9e2-5b7d-4e8a-9c01-2d3e4f5a6b7c"
    }' \
    "https://api.sortify.com.br/v1/discount-coupons"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "message": "Cupom criado com sucesso",
    "data": {
      "id": "5f4e3d2c-1b0a-9f8e-7d6c-5b4a3f2e1d0c",
      "code": "COMBO100",
      "discount_type": "bundle",
      "discount_value": 2990,
      "bundle_quantity": 100,
      "campaign_id": "a3f1c9e2-5b7d-4e8a-9c01-2d3e4f5a6b7c",
      "max_uses": null,
      "current_uses": 0,
      "min_order_value": null,
      "valid_from": null,
      "valid_until": null,
      "is_active": true,
      "created_at": "2026-07-06T12:00:00.000Z"
    }
  }
  ```
</ResponseExample>
