# Validar Cupom por ID
`POST /v1/coupons/:couponId/validate`
**Área:** Cupons

Endpoint público, sem autenticação — mesmo comportamento de Validar Cupom, mas com o couponId no caminho em vez de code no body.

IMPORTANTE: o código do cupom continua sendo lido de code no corpo da requisição; o couponId do caminho não é usado para buscar o cupom. Prefira Validar Cupom (POST /v1/coupons/validate) para novas integrações.

### Path parameters

| Campo | Obrigatório | Descrição |
|---|---|---|
| `couponId` | **sim** | Couponid |

### Request body

```json
{
  "code": "BEMVINDO10",
  "amount": 199.90,
  "productIds": ["price_1788364755079_psuecwgdc"],
  "chargeType": "RECURRING",
  "customerDocument": "12345678901"
}
```

### Campos do body

**Obrigatórios:** `code`

| Campo | Descrição |
|---|---|
| `code` | Código digitado pelo cliente |

**Opcionais**

| Campo | Descrição |
|---|---|
| `amount` | Valor do pedido, usado para checar minAmount e calcular o desconto |
| `productIds` | Price IDs do pedido, usados para checar restrição de produto |
| `chargeType` | Tipo da cobrança sendo montada (default RECURRING) (valores: RECURRING, ONE_TIME) |
| `customerDocument` | CPF/CNPJ do cliente, usado para checar firstTimeOnly |

### Resposta 200: 200 válido

```json
{
  "valid": true,
  "coupon": {
    "code": "BEMVINDO10",
    "name": "Cupom de boas-vindas",
    "description": "10% na primeira cobrança",
    "discountType": "PERCENTAGE",
    "discountValue": 10,
    "maxCycles": 3,
    "maxDiscount": 30.0,
    "validUntil": "2026-12-31T23:59:59.000Z",
    "appliesTo": "RECURRING",
    "firstTimeOnly": true
  }
}
```

---
Página: https://docs.validapay.com.br/referencia/post-validar-cupom-por-id
Contrato OpenAPI: https://docs.validapay.com.br/openapi.json