# Dominios API

> Añade dominios de envío, consulta sus registros DNS y su estado de verificación, y verifícalos.

URL base: `https://api.emailit.com/v2`. Autentícate con `Authorization: Bearer <API key>`.

## Crear un dominio — POST /domains

> Añade un dominio de envío al espacio de trabajo y obtén los registros DNS de SPF, DKIM, return-path, DMARC, seguimiento y entrada que debes publicar antes de verificarlo.

# Crear un dominio

Añade un dominio de envío y devuelve los registros DNS que debes publicar para él.

`POST /domains`

Requiere una clave de API `full`. Emailit genera una clave DKIM de 2048 bits para el dominio. Publica los registros de `dns_records` en tu proveedor de DNS y, después, llama a [Verificar un dominio](/es/docs/api-reference/domains/verify/). Puedes enviar desde el dominio en cuanto esté verificado. Consulta [Añadir un dominio](/es/docs/domains/add-a-domain/) y [Registros DNS](/es/docs/domains/dns-records/).

El número de dominios depende de tu plan: 3 en Pay as you go (25 después de tu primera compra de créditos), 100 en Pro y 1000 en Business. Dispara un evento `domain.created`.

## Parámetros del cuerpo

- `name` (string, obligatorio): El dominio desde el que envías, como `acme.com` o `mail.acme.com`, sin `http://`, `https://` ni `www.`. Se guarda en minúsculas. Tus direcciones `from` deben usar exactamente este dominio.

- `tracking_key` (string): La etiqueta de subdominio del CNAME de seguimiento de aperturas y clics. Por defecto, `go`, que da `go.acme.com`. Letras, dígitos y guiones.

- `inbound_key` (string): La etiqueta de subdominio para recibir emails. Por defecto, `inbound`, que da `inbound.acme.com`. Letras, dígitos y guiones.

- `dmarc_reports` (boolean): Activa la recopilación de informes DMARC del dominio. Emailit crea una dirección de informes y la añade al registro DMARC sugerido. Disponible en los planes Pro, Business y Custom. Consulta [DMARC](/es/docs/dmarc/).

- `track_loads` (boolean): Debe ser `false` al crear un dominio. Activa el seguimiento con [Actualizar un dominio](/es/docs/api-reference/domains/update/) cuando el CNAME de seguimiento esté verificado.

- `track_clicks` (boolean): Igual que `track_loads`, para el seguimiento de clics.

Los indicadores antiguos `outgoing`, `incoming` y `use_for_any` se aceptan por compatibilidad y no tienen ningún efecto.

## Devuelve

Devuelve `201` con el [objeto de dominio](/es/docs/api-reference/domains/get/), incluido `dns_records`. Un dominio nuevo tiene el estado `pending`, o `pending_review` en Pay as you go hasta su primera comprobación de DNS.

**Petición** `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 Límite**

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

**422 Seguimiento**

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

---
Fuente: https://emailit.com/es/docs/api-reference/domains/create/

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

> Obtén un dominio de envío por su ID o su nombre, con su estado de verificación, el estado de cada registro DNS y los registros que debes publicar.

# Obtener un dominio

Obtiene un dominio de envío con su estado de verificación y sus registros DNS.

`GET /domains/{id}`

Requiere una clave de API `full`. Los estados de los registros reflejan la última comprobación de DNS, que se ejecuta cuando llamas a [Verificar un dominio](/es/docs/api-reference/domains/verify/) y, automáticamente, una vez al día.

## Parámetros de ruta

- `id` (string, obligatorio): El ID del dominio (`dom_…`, o `sd_…` y `sed_…` en dominios más antiguos) o su nombre, como `acme.com`.

## Devuelve

Devuelve el objeto de dominio.

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

- `id` (string): El ID del dominio.

- `name` (string): El nombre del dominio.

- `verification_status` (string): `verified` si el dominio puede enviar. `pending` mientras SPF, DKIM o el return-path todavía no sean correctos. `pending_review` en Pay as you go si Emailit tiene que revisar el dominio manualmente antes de poder verificarlo, por ejemplo porque se registró hace menos de 30 días.

- `verified_at` (string | null): Cuándo se superó la última comprobación de DNS, o `null` si el dominio no está verificado. Una comprobación fallida lo borra.

- `manual_review_required` (boolean): Si el dominio está pendiente de la revisión manual de Emailit.

- `manually_verified_at` (string | null): Cuándo aprobó Emailit el dominio manualmente, o `null`.

- `dns_checked_at` (string | null): Cuándo se comprobaron los registros DNS por última vez.

- `spf_status, dkim_status, return_path_status` (string): El estado de los tres registros obligatorios: `pending` (aún sin comprobar), `ok`, `missing` o `invalid`. Los tres deben estar en `ok` para que el dominio se verifique.

- `mx_status` (string): Igual que `return_path_status`.

- `dmarc_status` (string): El estado del registro DMARC: `pending`, `ok`, `missing`, `invalid` o `error`. Opcional para la verificación.

- `tracking_status` (string): El estado del CNAME de seguimiento. Debe estar en `ok` para poder activar el seguimiento.

- `inbound_status` (string): El estado del registro MX de entrada. Necesario para [recibir emails](/es/docs/inbound/) en el dominio.

- `spf_error, dkim_error, mx_error, return_path_error, dmarc_error, tracking_error, inbound_error` (string | null): Qué falla en cada registro tras una comprobación fallida, o `null`.

- `tracking_key` (string | null): La etiqueta del subdominio de seguimiento, o `null` para el valor por defecto, `go`.

- `inbound_key` (string | null): La etiqueta del subdominio de entrada, o `null` para el valor por defecto, `inbound`.

- `track_loads` (integer): `1` si el seguimiento de aperturas está activado por defecto en los emails de este dominio; `0` si no.

- `track_clicks` (integer): `1` si el seguimiento de clics está activado por defecto; `0` si no.

- `dmarc_reports` (boolean): Si Emailit recopila los informes DMARC del dominio.

- `dmarc_address` (string | null): La dirección que recibe los informes DMARC, o `null` si `dmarc_reports` está desactivado.

- `verification_token, verification_method, dkim_identifier_string` (string): Detalles internos de la verificación. `verification_method` es `dns` y `dkim_identifier_string` es el selector DKIM, `emailit`.

- `created_at, updated_at` (string): Cuándo se añadió el dominio y cuándo se modificó por última vez.

- `dns_records` (object[]): Los registros que debes publicar. Cada uno tiene `type` (`MX`, `TXT` o `CNAME`), `name`, `value`, `priority` (en los registros MX), `ttl` (`auto`), `required` (si es necesario para la verificación) y sus valores actuales de `status` y `error`.

| Registro | Tipo | Nombre | Valor | Obligatorio |
| --- | --- | --- | --- | --- |
| Return-path | MX | `emailit.acme.com` | `feedback-smtp.ffdc-1.emailit.com`, prioridad 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;`, más las direcciones de informes si `dmarc_reports` está activado | No |
| Seguimiento | CNAME | `go.acme.com` | `go.emailitmail.com` | No |
| Entrada | MX | `inbound.acme.com` | `inbound.emailitmail.com`, prioridad 10 | No |

**Petición** `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"
}
```

---
Fuente: https://emailit.com/es/docs/api-reference/domains/get/

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

> Comprueba en ese momento los registros DNS de un dominio de envío y actualiza su estado de verificación. SPF, DKIM y el return-path deben superar la comprobación para que puedas enviar.

# Verificar un dominio

Consulta en ese momento los registros DNS del dominio, guarda el resultado y devuelve el dominio con sus nuevos estados.

`POST /domains/{id}/verify`

Requiere una clave de API `full`. Llámalo después de publicar los registros de [Crear un dominio](/es/docs/api-reference/domains/create/) y de nuevo cada vez que los cambies. Los cambios de DNS pueden tardar en propagarse, así que, si un registro aparece como `missing`, espera unos minutos y vuelve a intentarlo.

El dominio pasa a `verified` cuando los tres registros obligatorios están en `ok`:

- **SPF:** un registro TXT en `emailit.<domain>` que incluya `_spf.emailit.com`.
- **DKIM:** un registro TXT en `emailit._domainkey.<domain>` con la clave pública del dominio.
- **Return-path:** un único registro MX en `emailit.<domain>` que apunte a `feedback-smtp.ffdc-1.emailit.com`.

En Pay as you go, un dominio registrado hace menos de 30 días recibe en su lugar `pending_review`, y Emailit lo revisa manualmente. Los registros DMARC, de seguimiento y de entrada también se comprueban, pero no afectan a la verificación.

Emailit también vuelve a comprobar cada dominio una vez al día. Si un registro obligatorio deja de superar la comprobación, el dominio deja de estar verificado, los envíos desde él fallan y el propietario del espacio de trabajo recibe un email. Consulta [Verificación del dominio](/es/docs/domains/verification/).

## Parámetros de ruta

- `id` (string, obligatorio): El ID o el nombre del dominio.

## Devuelve

Devuelve el [objeto de dominio](/es/docs/api-reference/domains/get/) con el resultado de esta comprobación en `verification_status`, en cada campo `*_status` y `*_error` y en `dns_records`. Esta respuesta no incluye `dmarc_reports` ni `dmarc_address`; consúltalos con [Obtener un dominio](/es/docs/api-reference/domains/get/).

**Petición** `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 Pendiente**

```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"
}
```

---
Fuente: https://emailit.com/es/docs/api-reference/domains/verify/

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

> Activa o desactiva el seguimiento de aperturas y clics, cambia los subdominios de seguimiento y de entrada o activa los informes DMARC de un dominio de envío.

# Actualizar un dominio

Actualiza la configuración de un dominio de envío. Solo cambian los campos que envíes.

`POST /domains/{id}`

Requiere una clave de API `full`. Dispara un evento `domain.updated`.

## Parámetros de ruta

- `id` (string, obligatorio): El ID o el nombre del dominio.

## Parámetros del cuerpo

- `track_loads` (boolean): Activa o desactiva por defecto el seguimiento de aperturas en los emails de este dominio. Para activarlo, necesitas un CNAME de seguimiento verificado (`tracking_status` en `ok`). Consulta [Dominio de seguimiento personalizado](/es/docs/tracking/custom-tracking-domain/).

- `track_clicks` (boolean): Activa o desactiva por defecto el seguimiento de clics. Tiene el mismo requisito que `track_loads`.

- `tracking_key` (string | null): Una nueva etiqueta de subdominio para el CNAME de seguimiento, o `null` para el valor por defecto, `go`. Al cambiarla, `tracking_status` vuelve a `pending`, así que publica el nuevo CNAME y [verifica](/es/docs/api-reference/domains/verify/) de nuevo.

- `inbound_key` (string | null): Una nueva etiqueta de subdominio para recibir emails, o `null` para el valor por defecto, `inbound`. Al cambiarla, `inbound_status` vuelve a `pending`.

- `dmarc_reports` (boolean): Activa la recopilación de informes DMARC del dominio. Al activarla, se añade una dirección de informes al registro DMARC sugerido, así que actualiza después tu registro `_dmarc`. Solo en los planes Pro, Business y Custom. Al desactivarla, la dirección se conserva para más adelante.

- `name` (string): Un nuevo nombre de dominio. Los registros DNS pasan al nuevo nombre, así que publícalos allí y vuelve a verificar el dominio antes de enviar desde él.

Los indicadores antiguos `outgoing`, `incoming` y `use_for_any` se aceptan y no tienen ningún efecto. Los campos desconocidos se ignoran. Una petición sin ninguno de estos campos devuelve `400`.

## Devuelve

Devuelve el [objeto de dominio](/es/docs/api-reference/domains/get/) actualizado, incluido `dns_records`.

**Petición** `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."
}
```

---
Fuente: https://emailit.com/es/docs/api-reference/domains/update/

## Listar dominios — GET /domains

> Obtén los dominios de envío de un espacio de trabajo con su estado de verificación y de DNS, además de cuántos dominios permite tu plan.

# Listar dominios

Devuelve una página de dominios de envío, del más reciente al más antiguo, junto con el número de dominios que permite tu plan.

`GET /domains`

Requiere una clave de API `full`. Los elementos del listado no incluyen `dns_records`; para obtenerlos, usa [Obtener un dominio](/es/docs/api-reference/domains/get/).

## Parámetros de consulta

- `page` (integer): La página que se devuelve.

- `limit` (integer): Dominios por página, de 1 a 100.

- `search` (string): Búsqueda en el nombre del dominio, sin distinguir mayúsculas y minúsculas.

- `match` (string): `all` u `or`. Cómo se combinan los filtros de abajo.

- `order` (string): Una clave de filtro por la que ordenar.

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

## Filtros

Añade filtros con el formato `key.condition=value`, por ejemplo `dkim_status.exact=ok`. Consulta [Filtrado](/es/docs/api-reference/filtering/).

| Clave | Tipo | Valores y notas |
| --- | --- | --- |
| `name` | cadena | |
| `created_at` | fecha | |
| `spf_status` | enumeración | `ok`, `missing`, `invalid` |
| `dkim_status` | enumeración | `ok`, `missing`, `invalid` |
| `return_path_status` | enumeración | `ok`, `missing`, `invalid` |

Todas las claves sirven también para ordenar.

## Devuelve

- `data` (object[]): Los [objetos de dominio](/es/docs/api-reference/domains/get/) de esta página, sin `dns_records`.

- `next_page_url` (string | null): La ruta de la página siguiente, o `null`. Consulta [Paginación](/es/docs/api-reference/pagination/).

- `previous_page_url` (string | null): La ruta de la página anterior, o `null`.

- `domain_limit` (integer | null): Cuántos dominios de envío permite tu plan, o `null` si no hay límite.

- `domain_count` (integer): Cuántos dominios de envío tiene el espacio de trabajo, en todas las páginas.

- `plan_name` (string | null): El nombre de tu plan, como `Pay as you go` o `Pro`.

**Petición** `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"
}
```

---
Fuente: https://emailit.com/es/docs/api-reference/domains/list/

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

> Elimina de forma permanente un dominio de envío del espacio de trabajo. Ya no podrás enviar desde él, y la eliminación no se puede deshacer.

# Eliminar un dominio

Elimina de forma permanente un dominio de envío.

`DELETE /domains/{id}`

Requiere una clave de API `full`. Tras la eliminación, los envíos desde el dominio fallan con `Domain not verified`, y las claves de API limitadas al dominio ya no pueden enviar. También se eliminan la clave DKIM del dominio, su historial de salud de envío y la conexión con Cloudflare que hubiera guardada. Los emails ya enviados siguen en tus registros de emails. Dispara un evento `domain.deleted`.

Para volver a enviar desde el dominio, [créalo](/es/docs/api-reference/domains/create/) de nuevo. Recibirá una nueva clave DKIM, así que tendrás que actualizar el registro DKIM.

## Parámetros de ruta

- `id` (string, obligatorio): El ID o el nombre del dominio.

## Devuelve

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

- `id` (string): El ID del dominio eliminado.

- `name` (string): El nombre del dominio.

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

**Petición** `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"
}
```

---
Fuente: https://emailit.com/es/docs/api-reference/domains/delete/
