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

# Gerar Cupom

> Gerar um novo cupom para um cliente

# Gerar Cupom

Gera um cupom para um cliente da empresa autenticada. O request sempre exige `client_id`; `product_id` e `points_amount` são opcionais.

## Comportamento atual

* a rota aceita `X-Idempotency-Key` para retry seguro
* quando `product_id` é enviado, o produto precisa pertencer à empresa e estar ativo
* o response model atual retorna `uid`, `status`, `product_name`, `valor`, `expires_at` e `created_at`
* na resposta imediata de criação, `product_name` pode vir `null`; para consultar o nome enriquecido do produto, use a rota de busca do cupom
* o status atual retornado pelo backend é serializado como `ativo`
* no uso esperado, envie `points_amount` ou `product_id`

## Exemplo de resposta

### Exemplo de request com idempotência

```bash theme={null}
curl -X POST "https://api.indiqai.com/api/v1/public/coupons/generate" \
  -H "X-API-Key: indiqai_sua_chave_aqui" \
  -H "X-Idempotency-Key: coupon-erp-2026-05-12-001" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "550e8400-e29b-41d4-a716-446655440000",
    "points_amount": 200
  }'
```

<ResponseExample>
  ```json 201 Created theme={null}
  {
    "uid": "A1B2C3D4",
    "status": "ativo",
    "product_name": null,
    "valor": 200,
    "expires_at": "2026-04-20T08:15:00Z",
    "created_at": "2026-03-20T08:15:00Z"
  }
  ```

  ```json 400 Bad Request theme={null}
  {
    "detail": "Não foi possível gerar o cupom"
  }
  ```
</ResponseExample>

## Status comuns

* `201` cupom criado com sucesso
* `400` falha de geração ou recurso inválido para a empresa
* `401` API Key inválida ou revogada
* `403` plano sem `api_access`
* `422` header ou body inválidos
* `429` limite global da API pública excedido


## OpenAPI

````yaml POST /api/v1/public/coupons/generate
openapi: 3.1.0
info:
  contact:
    email: support@indiqai.com
    name: IndiqAI Support
    url: https://indiqai.com/
  description: Especificação OpenAPI da API Pública IndiqAI.
  license:
    name: Proprietary
    url: https://indiqai.com/license
  title: IndiqAI API Pública
  version: 1.5.0
servers:
  - description: Produção
    url: https://api.indiqai.com
security: []
paths:
  /api/v1/public/coupons/generate:
    post:
      tags:
        - API Pública
      summary: Gerar cupom
      description: Gera um cupom para o cliente informado. Suporta X-Idempotency-Key.
      operationId: generate_coupon_api_v1_public_coupons_generate_post
      parameters:
        - in: header
          name: X-Idempotency-Key
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Idempotency-Key
        - description: Chave de API
          in: header
          name: X-API-Key
          required: true
          schema:
            description: Chave de API
            title: X-Api-Key
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicCouponGenerate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicCouponResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
components:
  schemas:
    PublicCouponGenerate:
      description: Gerar cupom para cliente.
      properties:
        client_id:
          description: ID do cliente (usuario_id)
          title: Client Id
          type: string
        points_amount:
          anyOf:
            - minimum: 1
              type: integer
            - type: 'null'
          description: Quantidade de pontos (cupom de pontos)
          title: Points Amount
        product_id:
          anyOf:
            - type: string
            - type: 'null'
          description: ID do produto (cupom de produto)
          title: Product Id
      required:
        - client_id
      title: PublicCouponGenerate
      type: object
    PublicCouponResponse:
      description: Dados de um cupom.
      properties:
        created_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Created At
        expires_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Expires At
        product_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Product Name
        status:
          title: Status
          type: string
        uid:
          title: Uid
          type: string
        valor:
          anyOf:
            - type: number
            - type: 'null'
          title: Valor
      required:
        - uid
        - status
      title: PublicCouponResponse
      type: object
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      title: HTTPValidationError
      type: object
    ValidationError:
      properties:
        ctx:
          title: Context
          type: object
        input:
          title: Input
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
        - loc
        - msg
        - type
      title: ValidationError
      type: object

````