# Coupon API

> Crea coupon e gestisci i loro pool di codici unici per le email.

URL di base: `https://api.emailit.com/v2`. Autenticati con `Authorization: Bearer <API key>`.

## Crea un coupon — POST /coupons

> Crea un coupon con un pool di codici unici, o con un solo codice condiviso, per le tue email. Alpha: aperto solo al team di Emailit.

# Crea un coupon

Crea un coupon. Inseriscilo in un’email con `{{coupon "key"}}`: quando l’email viene elaborata, ogni destinatario riceve un codice. Richiede una chiave API con il permesso `full`.

> **L’e-commerce è in alpha:** L’e-commerce è aperto solo al team di Emailit mentre lo testiamo. Le altre richieste restituiscono `403` con `error: "commerce_alpha"`. Le chiavi API funzionano solo nei workspace di proprietà del team di Emailit. Vedi [Chi può usare l’e-commerce](/it/docs/commerce/#who-can-use-commerce).

- Un coupon **unique** contiene un pool di codici monouso. A ogni destinatario viene assegnato il codice libero più vecchio, uno per campagna o automazione, e riceve di nuovo lo stesso codice ogni volta che quell’email viene elaborata per lui. Carica qui i codici del tuo negozio o con [Aggiungi codici a un coupon](/it/docs/api-reference/coupons/add-codes/), oppure genera i codici in Emailit e importali nel negozio.
- Un coupon **static** ha un solo codice per tutti, `static_code`.

Quando un [ordine](/it/docs/api-reference/orders/create/) elenca un codice in `coupon_codes`, il codice viene contrassegnato come utilizzato. Vedi [Prodotti, coupon e carrello](/it/docs/campaigns/products-and-coupons/#coupon-codes).

`POST /coupons`

## Corpo della richiesta

- `key` (string, obbligatorio): Il nome che usi nel contenuto, univoco nel workspace. Da 1 a 64 lettere minuscole, cifre, `-` o `_`, che inizia con una lettera o una cifra. Le maiuscole vengono convertite in minuscole.

- `name` (string, obbligatorio): Nome del coupon mostrato nel pannello, fino a 191 caratteri.

- `description` (string | null): Nota per il tuo team. Il testo più lungo viene troncato a 1000 caratteri.

- `kind` (string): `unique` (predefinito) o `static`.

- `static_code` (string | null): Fino a 191 caratteri. Obbligatorio per un coupon static: il codice che ricevono tutti. Per un coupon unique, il testo che ricevono i destinatari quando il pool è vuoto o il coupon è scaduto. Senza, ricevono una stringa vuota.

- `discount_label` (string | null): Breve descrizione dello sconto, come `10% off`. Il testo più lungo viene troncato a 191 caratteri.

- `expires_at` (string | null): Data e ora ISO 8601. Dopo questo momento, i destinatari di un coupon unique ricevono `static_code` invece di un codice, anche nelle email elaborate di nuovo. Emailit non applica la scadenza nel tuo negozio.

- `codes` (string[] | string): Codici da aggiungere al pool: un array, oppure un testo con un codice per riga. Per un testo CSV viene letta la prima colonna e un’intestazione come `code` o `coupon_code` viene saltata. Un codice è composto da 2 a 64 lettere, cifre, `-`, `_` o `.`, e inizia con una lettera o una cifra. I codici non validi vengono esclusi e i duplicati vengono aggiunti una sola volta. Fino a 10.000 codici.

## Restituisce

`201 Created` con l’[oggetto coupon](/it/docs/api-reference/coupons/get/). Restituisce `422` quando un campo non è valido o un altro coupon ha già la chiave.
**Richiesta** `POST /coupons`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/coupons \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "welcome-10",
    "name": "Welcome 10% off",
    "description": "First-order discount for new subscribers.",
    "kind": "unique",
    "static_code": "WELCOME10",
    "discount_label": "10% off",
    "expires_at": "2026-12-31T23:59:59Z",
    "codes": ["WELCOME-7KQ2M9XA", "WELCOME-H4TZ8RCN", "WELCOME-P2WD6YFE"]
  }'
```

**201**

```json
{
  "object": "coupon",
  "id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
  "key": "welcome-10",
  "name": "Welcome 10% off",
  "description": "First-order discount for new subscribers.",
  "kind": "unique",
  "static_code": "WELCOME10",
  "discount_label": "10% off",
  "expires_at": "2026-12-31T23:59:59.000Z",
  "codes_total": 3,
  "codes_available": 3,
  "codes_assigned": 0,
  "codes_redeemed": 0,
  "created_at": "2026-10-01T09:00:12.304Z",
  "updated_at": "2026-10-01T09:00:12.304Z"
}
```

**422**

```json
{
  "message": "Validation failed. key: A coupon with this key already exists.",
  "errors": {
    "key": [
      "A coupon with this key already exists."
    ]
  }
}
```

---
Fonte: https://emailit.com/it/docs/api-reference/coupons/create/

## Recupera un coupon — GET /coupons/{id}

> Recupera un coupon tramite il suo ID o la sua chiave, con il numero di codici disponibili, assegnati e utilizzati. Alpha: aperto solo al team di Emailit.

# Recupera un coupon

Recupera un coupon tramite il suo ID o la sua chiave, con il conteggio dei suoi codici. Richiede una chiave API con il permesso `full`.

> **L’e-commerce è in alpha:** L’e-commerce è aperto solo al team di Emailit mentre lo testiamo. Le altre richieste restituiscono `403` con `error: "commerce_alpha"`. Le chiavi API funzionano solo nei workspace di proprietà del team di Emailit. Vedi [Chi può usare l’e-commerce](/it/docs/commerce/#who-can-use-commerce).

`GET /coupons/{id}`

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del coupon (`cpn_...`) o la `key` del coupon.

## L’oggetto coupon

- `object` (string): Sempre `coupon`.

- `id` (string): ID del coupon (`cpn_...`).

- `key` (string): Il nome che usi nel contenuto delle email: `{{coupon "welcome-10"}}`. Vedi [Prodotti, coupon e carrello](/it/docs/campaigns/products-and-coupons/#coupon-codes).

- `name` (string): Nome del coupon mostrato nel pannello.

- `description` (string | null): Nota per il tuo team.

- `kind` (string): - `unique`: un pool di codici monouso. Ogni destinatario riceve il proprio codice, uno per campagna o automazione, e di nuovo lo stesso codice quando l’email viene elaborata di nuovo. - `static`: un solo codice per tutti, `static_code`.

- `static_code` (string | null): Il codice condiviso di un coupon static. Per un coupon unique, il testo che ricevono i destinatari quando non resta nessun codice o il coupon è scaduto. Senza, ricevono una stringa vuota.

- `discount_label` (string | null): Breve descrizione dello sconto, come `10% off`.

- `expires_at` (string | null): Dopo questo momento, i destinatari di un coupon unique ricevono `static_code` invece di un codice.

- `codes_total` (integer): Codici nel pool.

- `codes_available` (integer): Codici che si possono ancora distribuire: non assegnati a un contatto e non usati in un ordine.

- `codes_assigned` (integer): Codici assegnati a un contatto, compresi quelli già utilizzati.

- `codes_redeemed` (integer): Codici usati in un [ordine](/it/docs/api-reference/orders/create/) (`coupon_codes`).

- `created_at, updated_at` (string): Quando il coupon è stato creato e quando è cambiato l’ultima volta, in ISO 8601 UTC.

**Richiesta** `GET /coupons/{id}`

**cURL**

```bash
curl https://api.emailit.com/v2/coupons/welcome-10 \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "object": "coupon",
  "id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
  "key": "welcome-10",
  "name": "Welcome 10% off",
  "description": "First-order discount for new subscribers.",
  "kind": "unique",
  "static_code": "WELCOME10",
  "discount_label": "10% off",
  "expires_at": "2026-12-31T23:59:59.000Z",
  "codes_total": 5000,
  "codes_available": 3812,
  "codes_assigned": 1188,
  "codes_redeemed": 143,
  "created_at": "2026-10-01T09:00:12.304Z",
  "updated_at": "2026-10-01T09:00:12.304Z"
}
```

**404**

```json
{
  "error": "Coupon not found",
  "message": "Coupon not found."
}
```

---
Fonte: https://emailit.com/it/docs/api-reference/coupons/get/

## Aggiorna un coupon — POST /coupons/{id}

> Cambia chiave, nome, tipo, codice di riserva o statico, etichetta o scadenza di un coupon. Alpha: aperto solo al team di Emailit.

# Aggiorna un coupon

Aggiorna un coupon. Cambiano solo i campi che invii. Per aggiungere codici usa [Aggiungi codici a un coupon](/it/docs/api-reference/coupons/add-codes/): `codes` in questa richiesta viene ignorato. Richiede una chiave API con il permesso `full`.

> **L’e-commerce è in alpha:** L’e-commerce è aperto solo al team di Emailit mentre lo testiamo. Le altre richieste restituiscono `403` con `error: "commerce_alpha"`. Le chiavi API funzionano solo nei workspace di proprietà del team di Emailit. Vedi [Chi può usare l’e-commerce](/it/docs/commerce/#who-can-use-commerce).

Se cambi la `key`, aggiorna anche i tag `{{coupon "key"}}` nelle tue email: Emailit cerca i coupon in base alla chiave presente nel contenuto.

`POST /coupons/{id}`

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del coupon (`cpn_...`) o la `key` attuale del coupon.

## Corpo della richiesta

Uno qualsiasi tra `key`, `name`, `description`, `kind`, `static_code`, `discount_label` ed `expires_at`, con le regole di [Crea un coupon](/it/docs/api-reference/coupons/create/). Invia `null` per `description`, `static_code`, `discount_label` o `expires_at` per svuotare il campo. Un coupon che è o diventa `static` deve mantenere uno `static_code`.

## Restituisce

`200 OK` con l’[oggetto coupon](/it/docs/api-reference/coupons/get/) aggiornato. Restituisce `404` se nessun coupon corrisponde a `id` e `422` quando un campo non è valido o la nuova chiave è già in uso.
**Richiesta** `POST /coupons/{id}`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/coupons/welcome-10 \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "expires_at": "2027-01-31T23:59:59Z" }'
```

**200**

```json
{
  "object": "coupon",
  "id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
  "key": "welcome-10",
  "name": "Welcome 10% off",
  "description": "First-order discount for new subscribers.",
  "kind": "unique",
  "static_code": "WELCOME10",
  "discount_label": "10% off",
  "expires_at": "2027-01-31T23:59:59.000Z",
  "codes_total": 5000,
  "codes_available": 3812,
  "codes_assigned": 1188,
  "codes_redeemed": 143,
  "created_at": "2026-10-01T09:00:12.304Z",
  "updated_at": "2026-10-09T15:47:20.061Z"
}
```

**404**

```json
{
  "error": "Coupon not found",
  "message": "Coupon not found."
}
```

**422**

```json
{
  "message": "Validation failed. static_code: A static coupon needs its code.",
  "errors": {
    "static_code": [
      "A static coupon needs its code."
    ]
  }
}
```

---
Fonte: https://emailit.com/it/docs/api-reference/coupons/update/

## Elenca i coupon — GET /coupons

> Elenca i coupon del workspace, a partire dal più recente, con il conteggio dei loro codici. Alpha: aperto solo al team di Emailit.

# Elenca i coupon

Elenca i coupon del workspace, a partire dal più recente, con il conteggio dei loro codici. Richiede una chiave API con il permesso `full`.

> **L’e-commerce è in alpha:** L’e-commerce è aperto solo al team di Emailit mentre lo testiamo. Le altre richieste restituiscono `403` con `error: "commerce_alpha"`. Le chiavi API funzionano solo nei workspace di proprietà del team di Emailit. Vedi [Chi può usare l’e-commerce](/it/docs/commerce/#who-can-use-commerce).

`GET /coupons`

## Parametri di query

- `page` (integer): Numero di pagina per la paginazione (minimo: 1, predefinito: 1).

- `limit` (integer): Numero di coupon da restituire (minimo: 1, massimo: 100, predefinito: 25).

- `search` (string): Corrispondenza sul nome o sulla chiave del coupon, senza distinzione tra maiuscole e minuscole.

- `match`, `order`, `direction`: vedi [Filtri e ordinamento](https://emailit.com/it/docs/api-reference/filtering/).

## Filtri e ordinamento

Chiavi di filtro e di ordinamento: vedi [Filtri e ordinamento](https://emailit.com/it/docs/api-reference/filtering/).

## Restituisce

Una pagina di [oggetti coupon](/it/docs/api-reference/coupons/get/) in `data`, con `total_records`, `next_page_url` e `previous_page_url`. Gli URL delle pagine riportano solo `page` e `limit`, quindi aggiungi di nuovo la ricerca e i filtri quando li segui.
**Richiesta** `GET /coupons`

**cURL**

```bash
curl "https://api.emailit.com/v2/coupons?kind.exact=unique" \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "data": [
    {
      "object": "coupon",
      "id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
      "key": "welcome-10",
      "name": "Welcome 10% off",
      "description": "First-order discount for new subscribers.",
      "kind": "unique",
      "static_code": "WELCOME10",
      "discount_label": "10% off",
      "expires_at": "2026-12-31T23:59:59.000Z",
      "codes_total": 5000,
      "codes_available": 3812,
      "codes_assigned": 1188,
      "codes_redeemed": 143,
      "created_at": "2026-10-01T09:00:12.304Z",
      "updated_at": "2026-10-01T09:00:12.304Z"
    }
  ],
  "total_records": 1,
  "next_page_url": null,
  "previous_page_url": null
}
```

---
Fonte: https://emailit.com/it/docs/api-reference/coupons/list/

## Elimina un coupon — DELETE /coupons/{id}

> Elimina un coupon e tutti i suoi codici. Alpha: aperto solo al team di Emailit.

# Elimina un coupon

Elimina un coupon insieme a tutti i suoi codici, compresi quelli assegnati e utilizzati. Gli ordini mantengono i codici nel loro `coupon_codes`. Richiede una chiave API con il permesso `full`.

> **L’e-commerce è in alpha:** L’e-commerce è aperto solo al team di Emailit mentre lo testiamo. Le altre richieste restituiscono `403` con `error: "commerce_alpha"`. Le chiavi API funzionano solo nei workspace di proprietà del team di Emailit. Vedi [Chi può usare l’e-commerce](/it/docs/commerce/#who-can-use-commerce).

`DELETE /coupons/{id}`

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del coupon (`cpn_...`) o la `key` del coupon.

**Richiesta** `DELETE /coupons/{id}`

**cURL**

```bash
curl -X DELETE https://api.emailit.com/v2/coupons/cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "object": "coupon",
  "id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
  "deleted": true
}
```

**404**

```json
{
  "error": "Coupon not found",
  "message": "Coupon not found."
}
```

---
Fonte: https://emailit.com/it/docs/api-reference/coupons/delete/

## Elenca i codici di un coupon — GET /coupons/{id}/codes

> Elenca i codici di un coupon con il contatto a cui sono stati assegnati e se sono stati utilizzati, in JSON o come esportazione CSV. Alpha: aperto solo al team di Emailit.

# Elenca i codici di un coupon

Elenca i codici di un coupon, a partire dal meno recente: l’ordine in cui vengono distribuiti. Usa `format=csv` per esportarli, ad esempio per importare nel negozio i codici generati. Richiede una chiave API con il permesso `full`.

> **L’e-commerce è in alpha:** L’e-commerce è aperto solo al team di Emailit mentre lo testiamo. Le altre richieste restituiscono `403` con `error: "commerce_alpha"`. Le chiavi API funzionano solo nei workspace di proprietà del team di Emailit. Vedi [Chi può usare l’e-commerce](/it/docs/commerce/#who-can-use-commerce).

`GET /coupons/{id}/codes`

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del coupon (`cpn_...`) o la `key` del coupon.

## Parametri di query

- `page` (integer): Numero di pagina per la paginazione (minimo: 1, predefinito: 1).

- `limit` (integer): Numero di codici da restituire (minimo: 1, massimo: 100, predefinito: 50).

- `status` (string): - `available`: non assegnato a un contatto e non usato in un ordine, quindi si può ancora distribuire. - `assigned`: assegnato a un contatto e non utilizzato. - `redeemed`: usato in un ordine.

- `format` (string): `json` (predefinito) o `csv`. Il CSV restituisce in un unico file tutti i codici che corrispondono a `status`, senza paginazione, con le colonne `code`, `status`, `email`, `assigned_at` e `redeemed_at`. I filtri `key.condition` e l’ordinamento non si applicano al CSV.

- `match`, `order`, `direction`: vedi [Filtri e ordinamento](https://emailit.com/it/docs/api-reference/filtering/).

## Filtri e ordinamento

Chiavi di filtro e di ordinamento: vedi [Filtri e ordinamento](https://emailit.com/it/docs/api-reference/filtering/).

## Restituisce

Una pagina di codici coupon in `data`, con `total_records`, `next_page_url` e `previous_page_url`. Ogni codice ha:

- `object` (string): Sempre `coupon_code`.

- `id` (string): ID del codice (`cpc_...`).

- `code` (string): Il codice.

- `contact_id, email` (string | null): Il contatto a cui è assegnato il codice, oppure `null`.

- `source_id` (string | null): La campagna (`cmp_...`) o l’automazione (`aut_...`) la cui email ha ricevuto il codice.

- `assigned_at` (string | null): Quando è stato assegnato il codice.

- `redeemed_at, redeemed_order_id` (string | null): Quando è stato utilizzato il codice e da quale ordine (`ord_...`).

- `created_at` (string): Quando il codice è stato aggiunto al pool.

**Richiesta** `GET /coupons/{id}/codes`

**cURL**

```bash
curl "https://api.emailit.com/v2/coupons/welcome-10/codes?status=assigned&limit=2" \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "data": [
    {
      "object": "coupon_code",
      "id": "cpc_3s6oCjlRbLFujYObEAcuiZmGKqu",
      "code": "WELCOME-H4TZ8RCN",
      "contact_id": "con_3MjLVacsYA6keJucAbOs3o3XhyA",
      "email": "grace@example.com",
      "source_id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
      "assigned_at": "2026-10-08T09:00:41.773Z",
      "redeemed_at": null,
      "redeemed_order_id": null,
      "created_at": "2026-10-01T09:00:12.304Z"
    },
    {
      "object": "coupon_code",
      "id": "cpc_3u9TrZTopqOgaqT9FcZFareUFGj",
      "code": "WELCOME-P2WD6YFE",
      "contact_id": "con_3EwrXnu9OaQWlfI1AyPUUEoYjQs",
      "email": "ada@example.com",
      "source_id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
      "assigned_at": "2026-10-08T09:00:41.802Z",
      "redeemed_at": null,
      "redeemed_order_id": null,
      "created_at": "2026-10-01T09:00:12.304Z"
    }
  ],
  "total_records": 1045,
  "next_page_url": "/v2/coupons/cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ/codes?page=2&limit=2",
  "previous_page_url": null
}
```

**CSV**

```text
code,status,email,assigned_at,redeemed_at
WELCOME-7KQ2M9XA,redeemed,ada@example.com,2026-10-08T09:00:41.751Z,2026-10-08T14:32:10.000Z
WELCOME-H4TZ8RCN,assigned,grace@example.com,2026-10-08T09:00:41.773Z,
WELCOME-QX3B9NMV,available,,,
```

**404**

```json
{
  "error": "Coupon not found",
  "message": "Coupon not found."
}
```

---
Fonte: https://emailit.com/it/docs/api-reference/coupons/list-codes/

## Aggiungi codici a un coupon — POST /coupons/{id}/codes

> Carica i codici del tuo negozio in un coupon a codici unici, oppure genera codici casuali in Emailit. Alpha: aperto solo al team di Emailit.

# Aggiungi codici a un coupon

Aggiungi codici al pool di un coupon a codici unici. Puoi caricare con `codes` i codici che esistono nel tuo negozio, oppure lasciare che Emailit crei codici casuali con `generate` e poi importarli nel negozio con [Elenca i codici di un coupon](/it/docs/api-reference/coupons/list-codes/) (`format=csv`). I codici già presenti nel pool vengono saltati. I coupon static hanno un solo codice e restituiscono `422`. Richiede una chiave API con il permesso `full`.

> **L’e-commerce è in alpha:** L’e-commerce è aperto solo al team di Emailit mentre lo testiamo. Le altre richieste restituiscono `403` con `error: "commerce_alpha"`. Le chiavi API funzionano solo nei workspace di proprietà del team di Emailit. Vedi [Chi può usare l’e-commerce](/it/docs/commerce/#who-can-use-commerce).

`POST /coupons/{id}/codes`

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del coupon (`cpn_...`) o la `key` del coupon.

## Corpo della richiesta

Invia `codes` o `generate`. Se li invii entrambi, viene usato `generate`.

- `codes` (string[] | string): Fino a 10.000 codici: un array, oppure un testo con un codice per riga. Per un testo CSV viene letta la prima colonna e un’intestazione come `code` o `coupon_code` viene saltata. Un codice è composto da 2 a 64 lettere, cifre, `-`, `_` o `.`, e inizia con una lettera o una cifra. I codici che non rispettano queste regole vengono restituiti in `invalid`.

- `generate` (object): Crea codici casuali con lettere maiuscole e cifre, senza `0`, `O`, `1` e `I`, che si confondono facilmente. - `count` (integer, obbligatorio): da 1 a 10.000 codici. - `prefix` (string): fino a 20 lettere, cifre, `-` o `_`, inserito davanti a ogni codice. Ad esempio `WELCOME-`. - `length` (integer): caratteri casuali dopo il prefisso, da 4 a 32. Il valore predefinito è 8. I valori fuori dall’intervallo vengono riportati al limite più vicino.

## Restituisce

- `added` (integer): Codici aggiunti al pool.

- `skipped` (integer): Codici che erano già nel pool.

- `invalid` (string[]): Valori caricati che non sono codici validi e non sono stati aggiunti.

- `coupon` (object): L’[oggetto coupon](/it/docs/api-reference/coupons/get/) con i nuovi conteggi.

Restituisce `404` se nessun coupon corrisponde a `id`, e `422` per un coupon static, quando non è stato inviato nessun codice valido, quando sono stati inviati più di 10.000 codici o quando `generate.count` o `generate.prefix` è fuori dall’intervallo.
**Richiesta** `POST /coupons/{id}/codes`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/coupons/welcome-10/codes \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "generate": { "count": 5000, "prefix": "WELCOME-", "length": 8 } }'
```

**200**

```json
{
  "added": 5000,
  "skipped": 0,
  "invalid": [],
  "coupon": {
    "object": "coupon",
    "id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
    "key": "welcome-10",
    "name": "Welcome 10% off",
    "description": "First-order discount for new subscribers.",
    "kind": "unique",
    "static_code": "WELCOME10",
    "discount_label": "10% off",
    "expires_at": "2026-12-31T23:59:59.000Z",
    "codes_total": 5003,
    "codes_available": 5003,
    "codes_assigned": 0,
    "codes_redeemed": 0,
    "created_at": "2026-10-01T09:00:12.304Z",
    "updated_at": "2026-10-01T09:00:12.304Z"
  }
}
```

**422**

```json
{
  "message": "Validation failed. codes: Static coupons have one code; set static_code instead.",
  "errors": {
    "codes": [
      "Static coupons have one code; set static_code instead."
    ]
  }
}
```

---
Fonte: https://emailit.com/it/docs/api-reference/coupons/add-codes/
