# Domini API

> Aggiungi domini di invio, leggi i loro record DNS e lo stato di verifica, e verificali.

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

## Crea un dominio — POST /domains

> Aggiungi un dominio di invio al workspace e ottieni i record DNS SPF, DKIM, del return path, DMARC, di tracciamento e di ricezione da pubblicare prima di verificarlo.

# Crea un dominio

Aggiunge un dominio di invio e restituisce i record DNS da pubblicare.

`POST /domains`

Richiede una chiave API `full`. Emailit genera una chiave DKIM a 2048 bit per il dominio. Pubblica i record di `dns_records` presso il tuo provider DNS, poi chiama [Verifica un dominio](/it/docs/api-reference/domains/verify/). Puoi inviare dal dominio dopo che è stato verificato. Vedi [Aggiungi un dominio](/it/docs/domains/add-a-domain/) e [Record DNS](/it/docs/domains/dns-records/).

Il numero di domini dipende dal piano: 3 con Pay as you go (25 dopo il primo acquisto di crediti), 100 con Pro e 1000 con Business. Genera un evento `domain.created`.

## Parametri del corpo

- `name` (string, obbligatorio): Il dominio da cui inviare, ad esempio `acme.com` o `mail.acme.com`, senza `http://`, `https://` o `www.`. Viene salvato in minuscolo. Gli indirizzi `from` devono usare esattamente questo dominio.

- `tracking_key` (string): L’etichetta del sottodominio per il CNAME di tracciamento delle aperture e dei clic. Il valore predefinito è `go`, che dà `go.acme.com`. Lettere, cifre e trattini.

- `inbound_key` (string): L’etichetta del sottodominio per la ricezione delle email. Il valore predefinito è `inbound`, che dà `inbound.acme.com`. Lettere, cifre e trattini.

- `dmarc_reports` (boolean): Raccoglie i report DMARC del dominio. Emailit crea un indirizzo di raccolta dei report e lo aggiunge al record DMARC suggerito. Disponibile nei piani Pro, Business e Custom. Vedi [DMARC](/it/docs/dmarc/).

- `track_loads` (boolean): Deve essere `false` quando crei un dominio. Attiva il tracciamento con [Aggiorna un dominio](/it/docs/api-reference/domains/update/) dopo la verifica del CNAME di tracciamento.

- `track_clicks` (boolean): Come `track_loads`, per il tracciamento dei clic.

I vecchi flag `outgoing`, `incoming` e `use_for_any` vengono accettati per compatibilità e non hanno alcun effetto.

## Restituisce

Restituisce `201` con l’[oggetto dominio](/it/docs/api-reference/domains/get/), compreso `dns_records`. Un nuovo dominio ha lo stato `pending`, oppure `pending_review` con Pay as you go fino al primo controllo DNS.

**Richiesta** `POST /domains`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const domain = await emailit.domains.create({ name: 'acme.com' });
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

domain = client.domains.create({"name": "acme.com"})
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$domain = $emailit->domains()->create(['name' => 'acme.com']);
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

domain = client.domains.create(name: "acme.com")
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"

client := emailit.NewClient("your_api_key")

domain, err := client.Domains.Create(&emailit.CreateDomainRequest{Name: "acme.com"})
```

**Rust**

```rust
use emailit::Emailit;

let emailit = Emailit::new("your_api_key");

let domain = emailit.domains.create(emailit::types::CreateDomainParams::new("acme.com")).await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;

EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject domain = emailit.domains().create(DomainCreateParams.builder().setName("acme.com").build());
```

**.NET**

```csharp
using Emailit;

var emailit = new EmailitClient("your_api_key");

var domain = emailit.Domains.Create(new DomainCreateOptions { Name = "acme.com" });
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$domain = Emailit::domains()->create(['name' => 'acme.com']);
```

**cURL**

```bash
curl https://api.emailit.com/v2/domains \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "acme.com"}'
```

**cURL**

```bash
curl https://api.emailit.com/v2/domains \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "acme.com",
    "tracking_key": "links",
    "inbound_key": "reply",
    "dmarc_reports": true
  }'
```

**201**

```json
{
  "object": "domain",
  "id": "dom_4K468YrjOkR1wwdhqiO0G9XEUey",
  "name": "acme.com",
  "verification_token": "vt_4KY8weirBN9sxnfbIt78tsFWteY",
  "verification_method": "dns",
  "verified_at": null,
  "manually_verified_at": null,
  "manual_review_required": false,
  "verification_status": "pending",
  "dkim_identifier_string": "emailit",
  "dns_checked_at": null,
  "spf_status": "pending",
  "spf_error": null,
  "dkim_status": "pending",
  "dkim_error": null,
  "mx_status": "pending",
  "mx_error": null,
  "return_path_status": "pending",
  "return_path_error": null,
  "dmarc_status": "pending",
  "dmarc_error": null,
  "tracking_status": "pending",
  "tracking_error": null,
  "tracking_key": null,
  "inbound_status": "pending",
  "inbound_error": null,
  "inbound_key": null,
  "track_loads": 0,
  "track_clicks": 0,
  "dmarc_reports": false,
  "dmarc_address": null,
  "created_at": "2026-10-01T09:12:03.551208Z",
  "updated_at": "2026-10-01T09:12:03.551208Z",
  "dns_records": [
    {
      "required": true,
      "type": "MX",
      "name": "emailit.acme.com",
      "value": "feedback-smtp.ffdc-1.emailit.com",
      "priority": 10,
      "ttl": "auto",
      "status": "pending",
      "error": null
    },
    {
      "required": true,
      "type": "TXT",
      "name": "emailit.acme.com",
      "value": "v=spf1 include:_spf.emailit.com ~all",
      "priority": null,
      "ttl": "auto",
      "status": "pending",
      "error": null
    },
    {
      "required": true,
      "type": "TXT",
      "name": "emailit._domainkey.acme.com",
      "value": "v=DKIM1; t=s; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3kQ...IDAQAB;",
      "priority": null,
      "ttl": "auto",
      "status": "pending",
      "error": null
    },
    {
      "required": false,
      "type": "TXT",
      "name": "_dmarc.acme.com",
      "value": "v=DMARC1; p=none;",
      "priority": null,
      "ttl": "auto",
      "status": "pending",
      "error": null
    },
    {
      "required": false,
      "type": "CNAME",
      "name": "go.acme.com",
      "value": "go.emailitmail.com",
      "priority": null,
      "ttl": "auto",
      "status": "pending",
      "error": null
    },
    {
      "required": false,
      "type": "MX",
      "name": "inbound.acme.com",
      "value": "inbound.emailitmail.com",
      "priority": 10,
      "ttl": "auto",
      "status": "pending",
      "error": null
    }
  ]
}
```

**400**

```json
{
  "error": "The domain must be in apex format (e.g., domain.com) without http://, https://, or www."
}
```

**403**

```json
{
  "error": "plan_required",
  "required_plan": "pro"
}
```

**409**

```json
{
  "error": "Domain with this name already exists",
  "existing": {
    "object": "domain",
    "id": "dom_4K468YrjOkR1wwdhqiO0G9XEUey",
    "name": "acme.com"
  }
}
```

**422 Limite**

```json
{
  "error": "Pay as you go includes 3 domain(s)."
}
```

**422 Tracciamento**

```json
{
  "error": "Tracking requires a verified custom CNAME. New messages are not rewritten to a shared tracking URL."
}
```

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

## Recupera un dominio — GET /domains/{id}

> Recupera un dominio di invio tramite ID o nome, con lo stato di verifica, lo stato di ogni record DNS e i record da pubblicare.

# Recupera un dominio

Recupera un dominio di invio con lo stato di verifica e i record DNS.

`GET /domains/{id}`

Richiede una chiave API `full`. Gli stati dei record riflettono l’ultimo controllo DNS, che viene eseguito quando chiami [Verifica un dominio](/it/docs/api-reference/domains/verify/) e automaticamente una volta al giorno.

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del dominio (`dom_…`, oppure `sd_…` e `sed_…` per i domini meno recenti) o il nome del dominio, ad esempio `acme.com`.

## Restituisce

Restituisce l’oggetto dominio.

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

- `id` (string): L’ID del dominio.

- `name` (string): Il nome del dominio.

- `verification_status` (string): `verified` quando il dominio può inviare. `pending` finché SPF, DKIM o il return path non sono ancora corretti. `pending_review` con Pay as you go quando il dominio richiede una revisione manuale da parte di Emailit prima di poter essere verificato, ad esempio perché è stato registrato meno di 30 giorni fa.

- `verified_at` (string | null): Quando è stato superato l’ultimo controllo DNS, oppure `null` se il dominio non è verificato. Un controllo non riuscito lo azzera.

- `manual_review_required` (boolean): Indica se il dominio è in attesa della revisione manuale di Emailit.

- `manually_verified_at` (string | null): Quando Emailit ha approvato manualmente il dominio, oppure `null`.

- `dns_checked_at` (string | null): Quando sono stati controllati l’ultima volta i record DNS.

- `spf_status, dkim_status, return_path_status` (string): Stato dei tre record obbligatori: `pending` (non ancora controllato), `ok`, `missing` o `invalid`. Perché il dominio sia verificato, tutti e tre devono essere `ok`.

- `mx_status` (string): Come `return_path_status`.

- `dmarc_status` (string): Stato del record DMARC: `pending`, `ok`, `missing`, `invalid` o `error`. Facoltativo per la verifica.

- `tracking_status` (string): Stato del CNAME di tracciamento. Deve essere `ok` prima che tu possa attivare il tracciamento.

- `inbound_status` (string): Stato del record MX di ricezione. Necessario per [ricevere email](/it/docs/inbound/) sul dominio.

- `spf_error, dkim_error, mx_error, return_path_error, dmarc_error, tracking_error, inbound_error` (string | null): Cosa non va in ciascun record dopo un controllo non riuscito, oppure `null`.

- `tracking_key` (string | null): L’etichetta del sottodominio di tracciamento, oppure `null` per il valore predefinito `go`.

- `inbound_key` (string | null): L’etichetta del sottodominio di ricezione, oppure `null` per il valore predefinito `inbound`.

- `track_loads` (integer): `1` se il tracciamento delle aperture è attivo per impostazione predefinita per le email da questo dominio, `0` in caso contrario.

- `track_clicks` (integer): `1` se il tracciamento dei clic è attivo per impostazione predefinita, `0` in caso contrario.

- `dmarc_reports` (boolean): Indica se Emailit raccoglie i report DMARC del dominio.

- `dmarc_address` (string | null): L’indirizzo che riceve i report DMARC, oppure `null` quando `dmarc_reports` è disattivato.

- `verification_token, verification_method, dkim_identifier_string` (string): Dettagli interni della verifica. `verification_method` è `dns` e `dkim_identifier_string` è il selettore DKIM, `emailit`.

- `created_at, updated_at` (string): Quando il dominio è stato aggiunto e quando è stato modificato l’ultima volta.

- `dns_records` (object[]): I record da pubblicare. Ognuno ha `type` (`MX`, `TXT` o `CNAME`), `name`, `value`, `priority` (per i record MX), `ttl` (`auto`), `required` (se è necessario per la verifica), e i valori attuali di `status` ed `error`.

| Record | Tipo | Nome | Valore | Obbligatorio |
| --- | --- | --- | --- | --- |
| Return path | MX | `emailit.acme.com` | `feedback-smtp.ffdc-1.emailit.com`, priorità 10 | Sì |
| SPF | TXT | `emailit.acme.com` | `v=spf1 include:_spf.emailit.com ~all` | Sì |
| DKIM | TXT | `emailit._domainkey.acme.com` | `v=DKIM1; t=s; h=sha256; p=…` | Sì |
| DMARC | TXT | `_dmarc.acme.com` | `v=DMARC1; p=none;`, più gli indirizzi per i report quando `dmarc_reports` è attivo | No |
| Tracciamento | CNAME | `go.acme.com` | `go.emailitmail.com` | No |
| Ricezione | MX | `inbound.acme.com` | `inbound.emailitmail.com`, priorità 10 | No |

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

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const domain = await emailit.domains.get('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

domain = client.domains.get("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$domain = $emailit->domains()->get('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

domain = client.domains.get("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

domain, err := client.Domains.Get("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**Rust**

```rust
use emailit::Emailit;

let emailit = Emailit::new("your_api_key");

let domain = emailit.domains.get("dom_4K468YrjOkR1wwdhqiO0G9XEUey").await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;

EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject domain = emailit.domains().get("dom_4K468YrjOkR1wwdhqiO0G9XEUey");
```

**.NET**

```csharp
using Emailit;

var emailit = new EmailitClient("your_api_key");

var domain = emailit.Domains.Get("dom_4K468YrjOkR1wwdhqiO0G9XEUey");
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$domain = Emailit::domains()->get('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**cURL**

```bash
curl https://api.emailit.com/v2/domains/dom_4K468YrjOkR1wwdhqiO0G9XEUey \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**200**

```json
{
  "object": "domain",
  "id": "dom_4K468YrjOkR1wwdhqiO0G9XEUey",
  "name": "acme.com",
  "verification_token": "vt_4KY8weirBN9sxnfbIt78tsFWteY",
  "verification_method": "dns",
  "verified_at": "2026-10-01T03:00:12.000000Z",
  "manually_verified_at": null,
  "manual_review_required": false,
  "verification_status": "verified",
  "dkim_identifier_string": "emailit",
  "dns_checked_at": "2026-10-01T03:00:12.000000Z",
  "spf_status": "ok",
  "spf_error": null,
  "dkim_status": "ok",
  "dkim_error": null,
  "mx_status": "ok",
  "mx_error": null,
  "return_path_status": "ok",
  "return_path_error": null,
  "dmarc_status": "ok",
  "dmarc_error": null,
  "tracking_status": "ok",
  "tracking_error": null,
  "tracking_key": null,
  "inbound_status": "invalid",
  "inbound_error": "queryMx ENOTFOUND inbound.acme.com",
  "inbound_key": null,
  "track_loads": 1,
  "track_clicks": 1,
  "dmarc_reports": true,
  "dmarc_address": "4KXUJdXRVlVgbkWQm4GHLy8BleP@dmarc.emailitmail.com",
  "created_at": "2026-09-14T08:02:51.000000Z",
  "updated_at": "2026-10-01T03:00:12.000000Z",
  "dns_records": [
    {
      "required": true,
      "type": "MX",
      "name": "emailit.acme.com",
      "value": "feedback-smtp.ffdc-1.emailit.com",
      "priority": 10,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": true,
      "type": "TXT",
      "name": "emailit.acme.com",
      "value": "v=spf1 include:_spf.emailit.com ~all",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": true,
      "type": "TXT",
      "name": "emailit._domainkey.acme.com",
      "value": "v=DKIM1; t=s; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3kQ...IDAQAB;",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": false,
      "type": "TXT",
      "name": "_dmarc.acme.com",
      "value": "v=DMARC1; p=none; rua=mailto:4KXUJdXRVlVgbkWQm4GHLy8BleP@dmarc.emailitmail.com; ruf=mailto:4KXUJdXRVlVgbkWQm4GHLy8BleP@dmarc.emailitmail.com;",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": false,
      "type": "CNAME",
      "name": "go.acme.com",
      "value": "go.emailitmail.com",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": false,
      "type": "MX",
      "name": "inbound.acme.com",
      "value": "inbound.emailitmail.com",
      "priority": 10,
      "ttl": "auto",
      "status": "invalid",
      "error": "queryMx ENOTFOUND inbound.acme.com"
    }
  ]
}
```

**404**

```json
{
  "error": "Domain not found"
}
```

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

## Verifica un dominio — POST /domains/{id}/verify

> Controlla subito i record DNS di un dominio di invio e aggiorna il suo stato di verifica. SPF, DKIM e il return path devono superare il controllo prima che tu possa inviare.

# Verifica un dominio

Controlla subito i record DNS del dominio, salva il risultato e restituisce il dominio con i nuovi stati.

`POST /domains/{id}/verify`

Richiede una chiave API `full`. Chiamalo dopo aver pubblicato i record ottenuti da [Crea un dominio](/it/docs/api-reference/domains/create/), e di nuovo ogni volta che li modifichi. La propagazione delle modifiche DNS può richiedere un po’ di tempo, quindi se un record risulta `missing`, attendi qualche minuto e riprova.

Il dominio diventa `verified` quando tutti e tre i record obbligatori sono `ok`:

- **SPF:** un record TXT su `emailit.<domain>` che include `_spf.emailit.com`.
- **DKIM:** un record TXT su `emailit._domainkey.<domain>` con la chiave pubblica del dominio.
- **Return path:** un unico record MX su `emailit.<domain>` che punta a `feedback-smtp.ffdc-1.emailit.com`.

Con Pay as you go, un dominio registrato meno di 30 giorni fa riceve invece `pending_review`, ed Emailit lo esamina manualmente. Vengono controllati anche i record DMARC, di tracciamento e di ricezione, ma non influiscono sulla verifica.

Emailit ricontrolla inoltre ogni dominio una volta al giorno. Se un record obbligatorio smette di superare il controllo, il dominio non è più verificato, gli invii da quel dominio non riescono e il proprietario del workspace riceve un’email. Vedi [Verifica del dominio](/it/docs/domains/verification/).

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del dominio o il nome del dominio.

## Restituisce

Restituisce l’[oggetto dominio](/it/docs/api-reference/domains/get/) con il risultato di questo controllo in `verification_status`, in ogni campo `*_status` e `*_error`, e in `dns_records`. Questa risposta non include `dmarc_reports` e `dmarc_address`; leggili con [Recupera un dominio](/it/docs/api-reference/domains/get/).

**Richiesta** `POST /domains/{id}/verify`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const domain = await emailit.domains.verify('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

domain = client.domains.verify("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$domain = $emailit->domains()->verify('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

domain = client.domains.verify("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

domain, err := client.Domains.Verify("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**Rust**

```rust
use emailit::Emailit;

let emailit = Emailit::new("your_api_key");

let domain = emailit.domains.verify("dom_4K468YrjOkR1wwdhqiO0G9XEUey").await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;

EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject domain = emailit.domains().verify("dom_4K468YrjOkR1wwdhqiO0G9XEUey");
```

**.NET**

```csharp
using Emailit;

var emailit = new EmailitClient("your_api_key");

var domain = emailit.Domains.Verify("dom_4K468YrjOkR1wwdhqiO0G9XEUey");
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$domain = Emailit::domains()->verify('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/domains/dom_4K468YrjOkR1wwdhqiO0G9XEUey/verify \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**200 In attesa**

```json
{
  "object": "domain",
  "id": "dom_4K468YrjOkR1wwdhqiO0G9XEUey",
  "name": "acme.com",
  "verification_token": "vt_4KY8weirBN9sxnfbIt78tsFWteY",
  "verification_method": "dns",
  "verified_at": null,
  "manually_verified_at": null,
  "manual_review_required": false,
  "dkim_identifier_string": "emailit",
  "dns_checked_at": "2026-10-01T09:20:41.000000Z",
  "spf_status": "ok",
  "spf_error": null,
  "dkim_status": "missing",
  "dkim_error": "queryTxt ENOTFOUND emailit._domainkey.acme.com",
  "mx_status": "ok",
  "mx_error": null,
  "return_path_status": "ok",
  "return_path_error": null,
  "dmarc_status": "error",
  "dmarc_error": "queryTxt ENOTFOUND _dmarc.acme.com",
  "tracking_status": "invalid",
  "tracking_error": "queryCname ENOTFOUND go.acme.com",
  "tracking_key": null,
  "inbound_status": "invalid",
  "inbound_error": "queryMx ENOTFOUND inbound.acme.com",
  "inbound_key": null,
  "track_loads": 0,
  "track_clicks": 0,
  "created_at": "2026-10-01T09:12:03.000000Z",
  "updated_at": "2026-10-01T09:20:41.000000Z",
  "dns_records": [
    {
      "required": true,
      "type": "MX",
      "name": "emailit.acme.com",
      "value": "feedback-smtp.ffdc-1.emailit.com",
      "priority": 10,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": true,
      "type": "TXT",
      "name": "emailit.acme.com",
      "value": "v=spf1 include:_spf.emailit.com ~all",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": true,
      "type": "TXT",
      "name": "emailit._domainkey.acme.com",
      "value": "v=DKIM1; t=s; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3kQ...IDAQAB;",
      "priority": null,
      "ttl": "auto",
      "status": "missing",
      "error": "queryTxt ENOTFOUND emailit._domainkey.acme.com"
    },
    {
      "required": false,
      "type": "TXT",
      "name": "_dmarc.acme.com",
      "value": "v=DMARC1; p=none;",
      "priority": null,
      "ttl": "auto",
      "status": "error",
      "error": "queryTxt ENOTFOUND _dmarc.acme.com"
    },
    {
      "required": false,
      "type": "CNAME",
      "name": "go.acme.com",
      "value": "go.emailitmail.com",
      "priority": null,
      "ttl": "auto",
      "status": "invalid",
      "error": "queryCname ENOTFOUND go.acme.com"
    },
    {
      "required": false,
      "type": "MX",
      "name": "inbound.acme.com",
      "value": "inbound.emailitmail.com",
      "priority": 10,
      "ttl": "auto",
      "status": "invalid",
      "error": "queryMx ENOTFOUND inbound.acme.com"
    }
  ],
  "verification_status": "pending"
}
```

**404**

```json
{
  "error": "Domain not found"
}
```

---
Fonte: https://emailit.com/it/docs/api-reference/domains/verify/

## Aggiorna un dominio — POST /domains/{id}

> Attiva o disattiva il tracciamento di aperture e clic, cambia i sottodomini di tracciamento e di ricezione o attiva i report DMARC per un dominio di invio.

# Aggiorna un dominio

Aggiorna le impostazioni di un dominio di invio. Cambiano solo i campi che invii.

`POST /domains/{id}`

Richiede una chiave API `full`. Genera un evento `domain.updated`.

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del dominio o il nome del dominio.

## Parametri del corpo

- `track_loads` (boolean): Attiva o disattiva per impostazione predefinita il tracciamento delle aperture per le email da questo dominio. Per attivarlo serve un CNAME di tracciamento verificato (`tracking_status` è `ok`). Vedi [Configura un dominio di tracciamento personalizzato](/it/docs/tracking/custom-tracking-domain/).

- `track_clicks` (boolean): Attiva o disattiva per impostazione predefinita il tracciamento dei clic. Stesso requisito di `track_loads`.

- `tracking_key` (string | null): Una nuova etichetta di sottodominio per il CNAME di tracciamento, oppure `null` per il valore predefinito `go`. Se la cambi, `tracking_status` torna a `pending`, quindi pubblica il nuovo CNAME e [verifica](/it/docs/api-reference/domains/verify/) di nuovo il dominio.

- `inbound_key` (string | null): Una nuova etichetta di sottodominio per la ricezione delle email, oppure `null` per il valore predefinito `inbound`. Se la cambi, `inbound_status` torna a `pending`.

- `dmarc_reports` (boolean): Raccoglie i report DMARC del dominio. Se lo attivi, viene aggiunto un indirizzo di raccolta dei report al record DMARC suggerito, quindi aggiorna poi il record `_dmarc`. Solo nei piani Pro, Business e Custom. Se lo disattivi, l’indirizzo viene conservato per un uso futuro.

- `name` (string): Un nuovo nome di dominio. I record DNS passano al nuovo nome, quindi pubblicali lì e verifica di nuovo il dominio prima di inviare.

I vecchi flag `outgoing`, `incoming` e `use_for_any` vengono accettati e non hanno alcun effetto. I campi sconosciuti vengono ignorati. Una richiesta senza nessuno di questi campi restituisce `400`.

## Restituisce

Restituisce l’[oggetto dominio](/it/docs/api-reference/domains/get/) aggiornato, compreso `dns_records`.

**Richiesta** `POST /domains/{id}`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const domain = await emailit.domains.update('dom_4K468YrjOkR1wwdhqiO0G9XEUey', { track_clicks: false });
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

domain = client.domains.update("dom_4K468YrjOkR1wwdhqiO0G9XEUey", {"track_clicks": False})
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$domain = $emailit->domains()->update('dom_4K468YrjOkR1wwdhqiO0G9XEUey', ['track_clicks' => false]);
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

domain = client.domains.update("dom_4K468YrjOkR1wwdhqiO0G9XEUey", track_clicks: false)
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

domain, err := client.Domains.Update("dom_4K468YrjOkR1wwdhqiO0G9XEUey", &emailit.UpdateDomainRequest{TrackClicks: false})
```

**Rust**

```rust
use emailit::Emailit;

let emailit = Emailit::new("your_api_key");

let domain = emailit.domains.update("dom_4K468YrjOkR1wwdhqiO0G9XEUey", emailit::types::UpdateDomainParams { track_clicks: Some(false), ..Default::default() }).await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;

EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject domain = emailit.domains().update("dom_4K468YrjOkR1wwdhqiO0G9XEUey", DomainUpdateParams.builder().setTrackClicks(false).build());
```

**.NET**

```csharp
using Emailit;

var emailit = new EmailitClient("your_api_key");

var domain = emailit.Domains.Update("dom_4K468YrjOkR1wwdhqiO0G9XEUey", new DomainUpdateOptions { TrackClicks = false });
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$domain = Emailit::domains()->update('dom_4K468YrjOkR1wwdhqiO0G9XEUey', ['track_clicks' => false]);
```

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/domains/dom_4K468YrjOkR1wwdhqiO0G9XEUey \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"track_clicks": false}'
```

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/domains/acme.com \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"track_loads": true, "track_clicks": true}'
```

**200**

```json
{
  "object": "domain",
  "id": "dom_4K468YrjOkR1wwdhqiO0G9XEUey",
  "name": "acme.com",
  "verification_token": "vt_4KY8weirBN9sxnfbIt78tsFWteY",
  "verification_method": "dns",
  "verified_at": "2026-10-01T03:00:12.000000Z",
  "manually_verified_at": null,
  "manual_review_required": false,
  "verification_status": "verified",
  "dkim_identifier_string": "emailit",
  "dns_checked_at": "2026-10-01T03:00:12.000000Z",
  "spf_status": "ok",
  "spf_error": null,
  "dkim_status": "ok",
  "dkim_error": null,
  "mx_status": "ok",
  "mx_error": null,
  "return_path_status": "ok",
  "return_path_error": null,
  "dmarc_status": "ok",
  "dmarc_error": null,
  "tracking_status": "ok",
  "tracking_error": null,
  "tracking_key": null,
  "inbound_status": "invalid",
  "inbound_error": "queryMx ENOTFOUND inbound.acme.com",
  "inbound_key": null,
  "track_loads": 1,
  "track_clicks": 0,
  "dmarc_reports": false,
  "dmarc_address": null,
  "created_at": "2026-09-14T08:02:51.000000Z",
  "updated_at": "2026-10-01T10:44:20.000000Z",
  "dns_records": [
    {
      "required": true,
      "type": "MX",
      "name": "emailit.acme.com",
      "value": "feedback-smtp.ffdc-1.emailit.com",
      "priority": 10,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": true,
      "type": "TXT",
      "name": "emailit.acme.com",
      "value": "v=spf1 include:_spf.emailit.com ~all",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": true,
      "type": "TXT",
      "name": "emailit._domainkey.acme.com",
      "value": "v=DKIM1; t=s; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3kQ...IDAQAB;",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": false,
      "type": "TXT",
      "name": "_dmarc.acme.com",
      "value": "v=DMARC1; p=none;",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": false,
      "type": "CNAME",
      "name": "go.acme.com",
      "value": "go.emailitmail.com",
      "priority": null,
      "ttl": "auto",
      "status": "ok",
      "error": null
    },
    {
      "required": false,
      "type": "MX",
      "name": "inbound.acme.com",
      "value": "inbound.emailitmail.com",
      "priority": 10,
      "ttl": "auto",
      "status": "invalid",
      "error": "queryMx ENOTFOUND inbound.acme.com"
    }
  ]
}
```

**400**

```json
{
  "error": "No valid fields provided for update. Provide at least one of: name, outgoing, incoming, use_for_any, track_loads, track_clicks, tracking_key, inbound_key, dmarc_reports"
}
```

**403**

```json
{
  "error": "plan_required",
  "required_plan": "pro"
}
```

**404**

```json
{
  "error": "Domain not found"
}
```

**409**

```json
{
  "error": "Another domain with this name already exists"
}
```

**422**

```json
{
  "error": "Tracking requires a verified custom CNAME. New messages are not rewritten to a shared tracking URL."
}
```

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

## Elenca i domini — GET /domains

> Elenca i domini di invio di un workspace con lo stato di verifica e dei DNS, e quanti domini consente il piano.

# Elenca i domini

Restituisce una pagina di domini di invio, a partire dal più recente, con il numero di domini consentito dal piano.

`GET /domains`

Richiede una chiave API `full`. Gli elementi dell’elenco non includono `dns_records`; per quelli usa [Recupera un dominio](/it/docs/api-reference/domains/get/).

## Parametri di query

- `page` (integer): La pagina da restituire.

- `limit` (integer): Domini per pagina, da 1 a 100.

- `search` (string): Corrispondenza sul nome del dominio, senza distinzione tra maiuscole e minuscole.

- `match` (string): `all` o `or`. Come si combinano i filtri qui sotto.

- `order` (string): Una chiave di filtro per cui ordinare.

- `direction` (string): `asc` o `desc`.

## Filtri

Aggiungi i filtri nella forma `key.condition=value`, ad esempio `dkim_status.exact=ok`. Vedi [Filtri e ordinamento](/it/docs/api-reference/filtering/).

| Chiave | Tipo | Valori e note |
| --- | --- | --- |
| `name` | string | |
| `created_at` | date | |
| `spf_status` | enum | `ok`, `missing`, `invalid` |
| `dkim_status` | enum | `ok`, `missing`, `invalid` |
| `return_path_status` | enum | `ok`, `missing`, `invalid` |

Ogni chiave è anche una chiave di ordinamento.

## Restituisce

- `data` (object[]): Gli [oggetti dominio](/it/docs/api-reference/domains/get/) di questa pagina, senza `dns_records`.

- `next_page_url` (string | null): Percorso della pagina successiva, oppure `null`. Vedi [Paginazione](/it/docs/api-reference/pagination/).

- `previous_page_url` (string | null): Percorso della pagina precedente, oppure `null`.

- `domain_limit` (integer | null): Quanti domini di invio consente il piano, oppure `null` se non c’è limite.

- `domain_count` (integer): Quanti domini di invio ha il workspace, su tutte le pagine.

- `plan_name` (string | null): Il nome del piano, ad esempio `Pay as you go` o `Pro`.

**Richiesta** `GET /domains`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const domains = await emailit.domains.list();
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

domains = client.domains.list()
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$domains = $emailit->domains()->list();
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

domains = client.domains.list
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

domains, err := client.Domains.List(nil)
```

**Rust**

```rust
use emailit::Emailit;

let emailit = Emailit::new("your_api_key");

let domains = emailit.domains.list(None).await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;

EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject domains = emailit.domains().list();
```

**.NET**

```csharp
using Emailit;

var emailit = new EmailitClient("your_api_key");

var domains = emailit.Domains.List();
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$domains = Emailit::domains()->list();
```

**cURL**

```bash
curl https://api.emailit.com/v2/domains \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**cURL**

```bash
curl -G https://api.emailit.com/v2/domains \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -d dkim_status.not_exact=ok \
  -d spf_status.not_exact=ok \
  -d match=or
```

**200**

```json
{
  "data": [
    {
      "object": "domain",
      "id": "dom_4K468YrjOkR1wwdhqiO0G9XEUey",
      "name": "acme.com",
      "verification_token": "vt_4KY8weirBN9sxnfbIt78tsFWteY",
      "verification_method": "dns",
      "verified_at": "2026-10-01T03:00:12.000000Z",
      "manually_verified_at": null,
      "manual_review_required": false,
      "verification_status": "verified",
      "dkim_identifier_string": "emailit",
      "dns_checked_at": "2026-10-01T03:00:12.000000Z",
      "spf_status": "ok",
      "spf_error": null,
      "dkim_status": "ok",
      "dkim_error": null,
      "mx_status": "ok",
      "mx_error": null,
      "return_path_status": "ok",
      "return_path_error": null,
      "dmarc_status": "ok",
      "dmarc_error": null,
      "tracking_status": "ok",
      "tracking_error": null,
      "tracking_key": null,
      "inbound_status": "invalid",
      "inbound_error": "queryMx ENOTFOUND inbound.acme.com",
      "inbound_key": null,
      "track_loads": 1,
      "track_clicks": 1,
      "dmarc_reports": true,
      "dmarc_address": "4KXUJdXRVlVgbkWQm4GHLy8BleP@dmarc.emailitmail.com",
      "created_at": "2026-09-14T08:02:51.000000Z",
      "updated_at": "2026-10-01T03:00:12.000000Z"
    }
  ],
  "next_page_url": null,
  "previous_page_url": null,
  "domain_limit": 100,
  "domain_count": 1,
  "plan_name": "Pro"
}
```

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

## Elimina un dominio — DELETE /domains/{id}

> Elimina definitivamente un dominio di invio dal workspace. Non potrai più inviare da quel dominio e l’eliminazione non si può annullare.

# Elimina un dominio

Elimina definitivamente un dominio di invio.

`DELETE /domains/{id}`

Richiede una chiave API `full`. Dopo l’eliminazione, gli invii dal dominio non riescono con `Domain not verified` e le chiavi API limitate al dominio non possono più inviare. Vengono rimossi anche la chiave DKIM del dominio, lo storico della salute degli invii e l’eventuale connessione a Cloudflare salvata. Le email già inviate restano nei log. Genera un evento `domain.deleted`.

Per inviare di nuovo dal dominio, [crealo](/it/docs/api-reference/domains/create/) di nuovo. Riceverà una nuova chiave DKIM, quindi dovrai aggiornare il record DKIM.

## Parametri di percorso

- `id` (string, obbligatorio): L’ID del dominio o il nome del dominio.

## Restituisce

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

- `id` (string): L’ID del dominio eliminato.

- `name` (string): Il nome del dominio.

- `deleted` (boolean): Sempre `true`.

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

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

await emailit.domains.delete('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

client.domains.delete("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$emailit->domains()->delete('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

client.domains.delete("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

err := client.Domains.Delete("dom_4K468YrjOkR1wwdhqiO0G9XEUey")
```

**Rust**

```rust
use emailit::Emailit;

let emailit = Emailit::new("your_api_key");

emailit.domains.delete("dom_4K468YrjOkR1wwdhqiO0G9XEUey").await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;

EmailitClient emailit = new EmailitClient("your_api_key");

emailit.domains().delete("dom_4K468YrjOkR1wwdhqiO0G9XEUey");
```

**.NET**

```csharp
using Emailit;

var emailit = new EmailitClient("your_api_key");

emailit.Domains.Delete("dom_4K468YrjOkR1wwdhqiO0G9XEUey");
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

Emailit::domains()->delete('dom_4K468YrjOkR1wwdhqiO0G9XEUey');
```

**cURL**

```bash
curl -X DELETE https://api.emailit.com/v2/domains/dom_4K468YrjOkR1wwdhqiO0G9XEUey \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**200**

```json
{
  "object": "domain",
  "id": "dom_4K468YrjOkR1wwdhqiO0G9XEUey",
  "name": "acme.com",
  "deleted": true
}
```

**404**

```json
{
  "error": "Domain not found"
}
```

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