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

# Dominios

> Registra y verifica dominios de envío, y gestiona sus registros DNS.

Endpoints para gestionar dominios de envío: registro, verificación DNS, estado y perfil de remitente.

**Base URL:** `https://api.reallyquickemails.com`

***

## Autenticacion

Todos los endpoints de dominios requieren Secret Key:

| Header          | Tipo   | Requerido | Descripción                       |
| --------------- | ------ | --------- | --------------------------------- |
| `Authorization` | string | Sí        | `Bearer sk_proj_...`              |
| `Content-Type`  | string | Sí\*      | `application/json` (en POST/PUT). |

***

## Flujo de integracion

Si automatizas el alta de dominios desde tu propia aplicación, este es el recorrido completo:

<Steps>
  <Step title="Registra el dominio">
    `POST /domains/register` retorna los 8 registros DNS en `dns_records`, ya listos para mostrar.
  </Step>

  <Step title="Ofrece la configuración en un clic">
    `GET /domains/{domain}/domain-connect`. Si retorna `supported: true`, redirige al usuario a `apply_url` y su proveedor crea los registros solo. Si no, muestra los registros para configuración manual.
  </Step>

  <Step title="Verifica">
    `POST /domains/{domain}/verify` consulta el estado real y actualiza los registros. Llámalo cuando el usuario indique que ya configuró su DNS.
  </Step>

  <Step title="Confirma antes de enviar">
    Recibe `domain.verified` por webhook, o consulta `GET /domains/{domain}/status`. El dominio puede enviar cuando `can_send: true`.
  </Step>
</Steps>

<Tip>
  **No pollees: escucha el webhook.** Cuando un dominio queda verificado, RQE emite `domain.verified` hacia la URL de webhooks de tu proyecto (y `domain.failed` si la verificación falla). Se emite **una sola vez**, en la transición. Ver [Webhooks](/api-reference/webhooks#domainverified-domainfailed).
</Tip>

<Info>
  Los dominios en `pending` se re-verifican solos, sin que llames a nada: con frecuencia alta el primer día y espaciándose a medida que el alta envejece. Si tu usuario publica el DNS días después del registro, igual recibirás el webhook. `POST /verify` sigue siendo útil para respuesta inmediata cuando el usuario dice "ya lo configuré".
</Info>

<Note>
  **SPF y DMARC se verifican cada 6 horas, no en el momento.** Un barrido server-side los resuelve por DNS y escribe su `status` en `dns_records`, así que pueden llegarte `verified` o `mismatch` sin que llames a nada — no necesitas resolverlos por tu cuenta. Dos salvedades: `can_send` no los considera (de ellos dependen la entregabilidad y la alineación DMARC, no el permiso de envío), y `POST /domains/{domain}/verify` reescribe ambos a `not_set` hasta el siguiente barrido.
</Note>

***

## POST /domains/register

Registra un dominio de envío: crea la identidad de envío, genera los registros DNS y crea el perfil de remitente.

### Request Body

| Campo          | Tipo   | Requerido | Descripción                                                                                  |
| -------------- | ------ | --------- | -------------------------------------------------------------------------------------------- |
| `domain`       | string | Sí        | Dominio a registrar (ej. `mitienda.com`).                                                    |
| `sender_name`  | string | Sí        | Nombre del remitente (ej. `Mi Tienda`).                                                      |
| `sender_email` | string | Sí        | Dirección de correo del remitente. Debe terminar en `@{domain}` (ej. `ventas@mitienda.com`). |
| `external_key` | string | No        | Clave externa para integraciones de terceros.                                                |

### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.reallyquickemails.com/domains/register \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
      -d '{
        "domain": "mitienda.com",
        "sender_name": "Mi Tienda",
        "sender_email": "ventas@mitienda.com"
      }'
    ```
  </Tab>
</Tabs>

**Respuesta** `201 Created`

```json theme={null}
{
  "success": true,
  "identity_id": "8a1f6e2c-3b4d-4f5a-9c6e-7d8f9a0b1c2d",
  "domain": "mitienda.com",
  "verification_status": "pending",
  "sender_profile_id": "123e4567-e89b-12d3-a456-426614174000",
  "sender": {
    "from_name": "Mi Tienda",
    "from_email": "ventas@mitienda.com",
    "domain_authenticated": false
  },
  "verification_token": "abcdef1234567890abcdef1234567890",
  "dkim_tokens": ["abc123", "def456", "ghi789"],
  "dns_records": [
    {
      "id": "f1a2b3c4-d5e6-4f70-8a91-b2c3d4e5f607",
      "record_type": "TXT",
      "name": "_amazonses",
      "value": "abcdef1234567890abcdef1234567890",
      "purpose": "ses_verification",
      "status": "not_set",
      "ttl_hint": 300
    },
    {
      "id": "a2b3c4d5-e6f7-4081-92a3-b4c5d6e7f809",
      "record_type": "CNAME",
      "name": "abc123._domainkey",
      "value": "abc123.dkim.amazonses.com",
      "purpose": "dkim",
      "status": "not_set",
      "ttl_hint": 1800
    },
    {
      "id": "b3c4d5e6-f708-4192-a3b4-c5d6e7f8091a",
      "record_type": "CNAME",
      "name": "def456._domainkey",
      "value": "def456.dkim.amazonses.com",
      "purpose": "dkim",
      "status": "not_set",
      "ttl_hint": 1800
    },
    {
      "id": "c4d5e6f7-0819-42a3-b4c5-d6e7f8091a2b",
      "record_type": "CNAME",
      "name": "ghi789._domainkey",
      "value": "ghi789.dkim.amazonses.com",
      "purpose": "dkim",
      "status": "not_set",
      "ttl_hint": 1800
    },
    {
      "id": "d5e6f708-192a-43b4-c5d6-e7f8091a2b3c",
      "record_type": "TXT",
      "name": "@",
      "value": "v=spf1 include:amazonses.com ~all",
      "purpose": "spf",
      "status": "not_set",
      "ttl_hint": 300
    },
    {
      "id": "e6f70819-2a3b-44c5-d6e7-f8091a2b3c4d",
      "record_type": "TXT",
      "name": "_dmarc",
      "value": "v=DMARC1; p=none; rua=mailto:d-a1b2c3d4-e5f6-7890-abcd-ef1234567890@dmarc.reallyquickemails.com",
      "purpose": "dmarc",
      "status": "not_set",
      "ttl_hint": 300
    },
    {
      "id": "f708192a-3b4c-45d6-e7f8-091a2b3c4d5e",
      "record_type": "MX",
      "name": "send",
      "value": "10 feedback-smtp.us-east-1.amazonses.com",
      "purpose": "return_path",
      "status": "not_set",
      "ttl_hint": 300
    },
    {
      "id": "0819192a-4c5d-46e7-f809-1a2b3c4d5e6f",
      "record_type": "TXT",
      "name": "send",
      "value": "v=spf1 include:amazonses.com ~all",
      "purpose": "return_path",
      "status": "not_set",
      "ttl_hint": 300
    }
  ]
}
```

Cada registro DNS incluye: `id`, `record_type` (`TXT`, `CNAME` o `MX`), `name`, `value`, `purpose` (`ses_verification`, `dkim`, `spf`, `dmarc`, `return_path`), `status` y `ttl_hint` (TTL sugerido en segundos).

Valores de `status`: `not_set`, `propagating`, `mismatch`, `verified`.

### Registros DNS generados

| #   | Tipo  | Nombre                 | Propósito               | Notas                                                                      |
| --- | ----- | ---------------------- | ----------------------- | -------------------------------------------------------------------------- |
| 1   | TXT   | `_amazonses`           | Verificación de dominio | Valor generado automáticamente al registrar                                |
| 2-4 | CNAME | `{token}._domainkey`   | DKIM                    | 3 registros, tokens generados automáticamente                              |
| 5   | TXT   | `@` (raíz del dominio) | SPF                     | `v=spf1 include:amazonses.com ~all`                                        |
| 6   | TXT   | `_dmarc`               | DMARC                   | `v=DMARC1; p=none; rua=mailto:d-{identity_id}@dmarc.reallyquickemails.com` |
| 7   | MX    | `send`                 | Return-Path             | `10 feedback-smtp.us-east-1.amazonses.com`                                 |
| 8   | TXT   | `send`                 | Return-Path             | `v=spf1 include:amazonses.com ~all`                                        |

<Note>
  El `rua` del DMARC apunta a un buzón de RQE, no a una casilla tuya: así recibimos los reportes agregados por ti y los puedes ver en el detalle del dominio. El dominio nace en `p=none` (solo monitoreo) para no mandar a spam el correo legítimo de tus otras herramientas mientras se alinea.
</Note>

<Note>
  Los nombres son relativos al dominio. Con dominio `mitienda.com`, el registro `_amazonses` se configura como `_amazonses.mitienda.com`. Algunos proveedores agregan el dominio automáticamente, así que solo ingresas `_amazonses`.
</Note>

Configura los registros DNS en tu proveedor y llama a `POST /domains/{domain}/verify` para validar. Ver [Deliverability](/concepts/deliverability).

### Codigos de Error

| Código | Descripción                                                                                            |
| ------ | ------------------------------------------------------------------------------------------------------ |
| `400`  | Campos requeridos faltantes, dominio con formato inválido, o `sender_email` no termina en `@{domain}`. |
| `401`  | API Key inválida.                                                                                      |
| `409`  | El dominio está asociado a otro remitente verificado.                                                  |
| `500`  | Error interno al registrar el dominio.                                                                 |

<Note>
  **El alta es idempotente.** Si el dominio ya tiene un registro incompleto, la operación lo reconcilia en vez de fallar: responde `201` con `reused: true` y sus registros DKIM existentes. Reintentar un alta que quedó a medias es seguro y no crea duplicados.
</Note>

***

## GET /domains/:domain/dns-records

Retorna los registros DNS almacenados con su último estado conocido, sin consultas externas.

### Parametros de Ruta

| Parámetro | Tipo   | Descripción                              |
| --------- | ------ | ---------------------------------------- |
| `domain`  | string | Dominio registrado (ej. `mitienda.com`). |

### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X GET https://api.reallyquickemails.com/domains/mitienda.com/dns-records \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "identity_id": "8a1f6e2c-3b4d-4f5a-9c6e-7d8f9a0b1c2d",
  "domain": "mitienda.com",
  "verification_status": "pending",
  "dns_records": [
    {
      "id": "f1a2b3c4-d5e6-4f70-8a91-b2c3d4e5f607",
      "record_type": "TXT",
      "name": "_amazonses",
      "value": "abcdef1234567890abcdef1234567890",
      "purpose": "ses_verification",
      "status": "not_set",
      "ttl_hint": 300,
      "last_checked_at": null
    },
    {
      "id": "a2b3c4d5-e6f7-4081-92a3-b4c5d6e7f809",
      "record_type": "CNAME",
      "name": "abc123._domainkey",
      "value": "abc123.dkim.amazonses.com",
      "purpose": "dkim",
      "status": "not_set",
      "ttl_hint": 1800,
      "last_checked_at": null
    },
    {
      "id": "d5e6f708-192a-43b4-c5d6-e7f8091a2b3c",
      "record_type": "TXT",
      "name": "@",
      "value": "v=spf1 include:amazonses.com ~all",
      "purpose": "spf",
      "status": "not_set",
      "ttl_hint": 300,
      "last_checked_at": null
    },
    {
      "id": "f708192a-3b4c-45d6-e7f8-091a2b3c4d5e",
      "record_type": "MX",
      "name": "send",
      "value": "10 feedback-smtp.us-east-1.amazonses.com",
      "purpose": "return_path",
      "status": "not_set",
      "ttl_hint": 300,
      "last_checked_at": null
    }
  ]
}
```

`status` por registro: `not_set`, `propagating`, `mismatch` o `verified`. `last_checked_at` es `null` hasta la primera verificación con `POST /domains/{domain}/verify`.

<Note>
  SPF y DMARC no los reporta AWS: los resuelve un barrido propio por DNS cada 6 horas. Tras un `POST /verify` vuelven a `not_set` hasta ese barrido.
</Note>

### Codigos de Error

| Código | Descripción                           |
| ------ | ------------------------------------- |
| `401`  | API Key inválida.                     |
| `404`  | Dominio no encontrado en el proyecto. |

***

## POST /domains/:domain/verify

Consulta el estado DNS directamente en la infraestructura de envío, actualiza el estado almacenado de los registros y retorna si el dominio puede enviar.

### Parametros de Ruta

| Parámetro | Tipo   | Descripción                              |
| --------- | ------ | ---------------------------------------- |
| `domain`  | string | Dominio registrado (ej. `mitienda.com`). |

### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.reallyquickemails.com/domains/mitienda.com/verify \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "identity_id": "8a1f6e2c-3b4d-4f5a-9c6e-7d8f9a0b1c2d",
  "domain": "mitienda.com",
  "verification_status": "verified",
  "sender_profile": {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "from_name": "Mi Tienda",
    "from_email": "ventas@mitienda.com",
    "domain_authenticated": true
  },
  "details": {
    "domain_verification": "Success",
    "dkim_verification": "Success",
    "mail_from_status": "Pending"
  },
  "dns_records": [
    {
      "id": "f1a2b3c4-d5e6-4f70-8a91-b2c3d4e5f607",
      "record_type": "TXT",
      "name": "_amazonses",
      "value": "abcdef1234567890abcdef1234567890",
      "purpose": "ses_verification",
      "status": "verified",
      "last_checked_at": "2025-03-10T18:45:00.000Z"
    },
    {
      "id": "a2b3c4d5-e6f7-4081-92a3-b4c5d6e7f809",
      "record_type": "CNAME",
      "name": "abc123._domainkey",
      "value": "abc123.dkim.amazonses.com",
      "purpose": "dkim",
      "status": "verified",
      "last_checked_at": "2025-03-10T18:45:00.000Z"
    },
    {
      "id": "f708192a-3b4c-45d6-e7f8-091a2b3c4d5e",
      "record_type": "MX",
      "name": "send",
      "value": "10 feedback-smtp.us-east-1.amazonses.com",
      "purpose": "return_path",
      "status": "propagating",
      "last_checked_at": "2025-03-10T18:45:00.000Z"
    }
  ],
  "verification_token": "abcdef1234567890abcdef1234567890",
  "dkim_tokens": ["abc123", "def456", "ghi789"],
  "can_send": true
}
```

La verificación comprueba tres aspectos:

1. **Verificación de dominio** — El registro TXT `_amazonses` está configurado.
2. **DKIM** — Los 3 registros CNAME de DKIM están configurados y propagados.
3. **MAIL FROM** — Los registros de Return-Path en `send` (MX y TXT) están configurados.

Campos clave:

| Campo                         | Descripción                                                                                                    |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `verification_status`         | `verified` (dominio y DKIM verificados), `failed` (alguna verificación falló) o `pending`.                     |
| `details.domain_verification` | Estado crudo de la verificación de dominio: `Success`, `Pending`, `Failed`, `TemporaryFailure` o `NotStarted`. |
| `details.dkim_verification`   | Estado crudo de DKIM (mismos valores).                                                                         |
| `details.mail_from_status`    | Estado crudo de MAIL FROM (mismos valores).                                                                    |
| `sender_profile`              | Perfil de remitente activo del dominio, o `null` si no existe.                                                 |
| `can_send`                    | `true` cuando dominio y DKIM están verificados.                                                                |

`can_send` es `true` cuando `details.domain_verification` y `details.dkim_verification` son `Success` (equivalente a `verification_status: "verified"`). MAIL FROM no es obligatorio para enviar, pero mejora la entregabilidad.

### Codigos de Error

| Código | Descripción                                           |
| ------ | ----------------------------------------------------- |
| `401`  | API Key inválida.                                     |
| `404`  | Dominio no encontrado en el proyecto.                 |
| `500`  | Error al comunicarse con la infraestructura de envío. |

***

## GET /domains/:domain/status

Retorna el estado de verificación almacenado, sin consultar la infraestructura de envío. Rápido, ideal para polling desde la interfaz.

### Parametros de Ruta

| Parámetro | Tipo   | Descripción                              |
| --------- | ------ | ---------------------------------------- |
| `domain`  | string | Dominio registrado (ej. `mitienda.com`). |

### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X GET https://api.reallyquickemails.com/domains/mitienda.com/status \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "identity_id": "8a1f6e2c-3b4d-4f5a-9c6e-7d8f9a0b1c2d",
  "domain": "mitienda.com",
  "verification_status": "verified",
  "external_key": null,
  "sender_profile": {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "from_name": "Mi Tienda",
    "from_email": "ventas@mitienda.com",
    "domain_authenticated": true
  },
  "dns_records_summary": [
    { "purpose": "ses_verification", "records_count": 1, "all_verified": true },
    { "purpose": "dkim", "records_count": 3, "all_verified": true },
    { "purpose": "spf", "records_count": 1, "all_verified": false },
    { "purpose": "dmarc", "records_count": 1, "all_verified": false },
    { "purpose": "return_path", "records_count": 1, "all_verified": true }
  ],
  "can_send": true,
  "last_verified_at": "2025-03-10T18:45:00.000Z"
}
```

`dns_records_summary` agrupa los registros por propósito: `records_count` es cuántos hay y `all_verified` indica si todos están en `status: "verified"`. `can_send` es `true` cuando `verification_status` es `verified`. `last_verified_at` es la última actualización del estado del dominio.

### Codigos de Error

| Código | Descripción                           |
| ------ | ------------------------------------- |
| `401`  | API Key inválida.                     |
| `404`  | Dominio no encontrado en el proyecto. |

***

## GET /domains

Con el parámetro `domain` busca **uno** por nombre. Sin él, **lista** los dominios del proyecto de forma paginada — para reconciliar N dominios en una request en lugar de N consultas.

### Query Parameters

| Parámetro | Tipo    | Requerido | Descripción                                                              |
| --------- | ------- | --------- | ------------------------------------------------------------------------ |
| `domain`  | string  | No        | Busca un dominio puntual. Si lo envías, los demás parámetros se ignoran. |
| `limit`   | integer | No        | Resultados por página. Default `50`, máximo `200`.                       |
| `offset`  | integer | No        | Desplazamiento para paginar. Default `0`.                                |
| `status`  | string  | No        | Filtra por estado: `pending`, `verified` o `failed`.                     |

### Ejemplo — listado

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X GET "https://api.reallyquickemails.com/domains?limit=50&status=verified" \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "domains": [
    {
      "identity_id": "8a1f6e2c-3b4d-4f5a-9c6e-7d8f9a0b1c2d",
      "domain": "mitienda.com",
      "verification_status": "verified",
      "external_key": null,
      "can_send": true,
      "sender_profile": {
        "id": "123e4567-e89b-12d3-a456-426614174000",
        "from_name": "Mi Tienda",
        "from_email": "ventas@mitienda.com",
        "domain_authenticated": true
      },
      "created_at": "2026-03-01T12:00:00.000Z"
    }
  ],
  "total": 128,
  "limit": 50,
  "offset": 0,
  "has_more": true
}
```

Los dominios vienen ordenados por fecha de creación descendente. `total` es la cantidad total que coincide con el filtro; pagina mientras `has_more` sea `true`.

### Ejemplo — lookup de uno

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X GET "https://api.reallyquickemails.com/domains?domain=mitienda.com" \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "identity_id": "8a1f6e2c-3b4d-4f5a-9c6e-7d8f9a0b1c2d",
  "domain": "mitienda.com",
  "verification_status": "verified",
  "external_key": null,
  "can_send": true,
  "sender_profile": {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "from_name": "Mi Tienda",
    "from_email": "ventas@mitienda.com",
    "domain_authenticated": true
  },
  "created_at": "2025-03-01T12:00:00.000Z"
}
```

### Codigos de Error

| Código | Descripción                                                                |
| ------ | -------------------------------------------------------------------------- |
| `401`  | API Key inválida.                                                          |
| `404`  | Dominio no encontrado (solo en el lookup: el listado vacío retorna `200`). |

***

## GET /domains/health

Salud de envío de todos tus dominios en una sola llamada: cuál puede enviar, cómo está su autenticación, cuánto envió, cómo rebota y **qué hacer con cada uno**.

Pensado para integradores que operan a varios clientes. Cruza en el servidor lo que de otro modo tendrías que juntar a mano entre `GET /domains`, los registros DNS y `/v1/domain-stats`.

<Info>
  El campo `issues` viene en texto plano y accionable — puedes reenviarlo directo a tu cliente final sin traducirlo.
</Info>

### Query Parameters

| Parámetro | Tipo    | Default | Descripción                            |
| --------- | ------- | ------- | -------------------------------------- |
| `days`    | integer | `30`    | Ventana de métricas, entre `1` y `90`. |

### Ejemplo

```bash theme={null}
curl "https://api.reallyquickemails.com/domains/health" \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
```

```json theme={null}
{
  "success": true,
  "period_days": 30,
  "summary": { "total": 3, "healthy": 1, "warning": 1, "critical": 1 },
  "data": [
    {
      "domain": "cliente-ok.com",
      "status": "healthy",
      "can_send": true,
      "sent": 56248,
      "hard_bounce_rate": 0.31,
      "auth": { "ses": "verified", "spf": "verified", "dmarc": "verified", "dkim": "verified" },
      "issues": []
    },
    {
      "domain": "cliente-pendiente.com",
      "status": "warning",
      "can_send": true,
      "sent": 2509,
      "hard_bounce_rate": 0.44,
      "auth": { "ses": "verified", "spf": "verified", "dmarc": "not_set", "dkim": "verified" },
      "issues": [
        "DMARC sin configurar: sin él no hay reportes ni política ante suplantación."
      ]
    },
    {
      "domain": "gmail.com",
      "status": "critical",
      "can_send": true,
      "sent": 14049,
      "hard_bounce_rate": 1.12,
      "auth": { "ses": null, "spf": null, "dmarc": null, "dkim": null },
      "issues": [
        "Se envía desde este dominio pero no está registrado como identidad. Sin verificarlo no hay autenticación posible."
      ]
    }
  ]
}
```

### Campos de respuesta

| Campo              | Descripción                                                                                          |
| ------------------ | ---------------------------------------------------------------------------------------------------- |
| `status`           | `healthy` · `warning` · `critical`. Ver la tabla de abajo.                                           |
| `can_send`         | Si el dominio tiene identidad verificada en SES. **`true` no significa que llegue bien** — ver nota. |
| `sent`             | Envíos en la ventana pedida (`period_days`).                                                         |
| `hard_bounce_rate` | Porcentaje de rebotes **permanentes**. Los temporales no cuentan.                                    |
| `auth.ses`         | `verified` · `pending` · `failed`, o `null` si no hay identidad de dominio.                          |
| `auth.spf`         | Estado del registro TXT de SPF resuelto por DNS.                                                     |
| `auth.dmarc`       | Estado del registro `_dmarc`. `not_set` si no existe.                                                |
| `auth.dkim`        | Estado de los 3 CNAME de DKIM. Basta con que uno falte para que no sea `verified`.                   |
| `issues`           | Qué le falta a este dominio, en texto accionable. Vacío si está sano.                                |

Los dominios vienen **ordenados por volumen**: primero donde el arreglo rinde más.

### Cómo se calcula `status`

| Estado     | Cuándo                                                                                                          |
| ---------- | --------------------------------------------------------------------------------------------------------------- |
| `critical` | El dominio no puede enviar, **o** envía sin identidad de dominio verificada, **o** su hard bounce supera el 5%. |
| `warning`  | Puede enviar pero le falta algo: DKIM propio, DMARC, o el hard bounce pasó del 3%.                              |
| `healthy`  | Verificado, autenticado y con rebote bajo. `issues` vacío.                                                      |

<Warning>
  **`can_send: true` con `status: critical` es el caso que más cuesta.** Significa que los emails salen con `200` y nadie ve un error, pero van sin DKIM del dominio del cliente: se firman con el dominio compartido de la plataforma, así que su reputación se mezcla con la de todos y no puede usar reply domain ni tracking domain propios.

  Aparece cuando el dominio se verificó **solo por email** (el enlace de un clic) en vez de por DNS, o cuando se envía desde un dominio ajeno como `gmail.com` — que no se puede autenticar de ninguna forma porque no controlas su DNS.
</Warning>

### Codigos de Error

| Código | Descripción                                   |
| ------ | --------------------------------------------- |
| `401`  | API Key inválida.                             |
| `500`  | No se pudo calcular la salud de los dominios. |

***

## GET /domains/:domain/domain-connect

Configuración de DNS en un clic. Si el proveedor DNS del dominio soporta el estándar [Domain Connect](https://www.domainconnect.org/), retorna una URL firmada que crea los 8 registros automáticamente: el usuario final solo confirma en la pantalla de su proveedor, sin copiar nada a mano.

Úsalo justo después de `POST /domains/register`. Si el proveedor no lo soporta, cae de vuelta a mostrar los registros de `dns_records` para configuración manual.

<Info>
  Cobertura medida sobre dominios reales: alrededor del 50% soporta Domain Connect. Cloudflare está operativo. Siempre debes manejar el caso `supported: false`.
</Info>

### Parametros de Ruta

| Parámetro | Tipo   | Descripción                              |
| --------- | ------ | ---------------------------------------- |
| `domain`  | string | Dominio registrado (ej. `mitienda.com`). |

### Query Parameters

| Parámetro      | Tipo   | Requerido | Descripción                                                          |
| -------------- | ------ | --------- | -------------------------------------------------------------------- |
| `redirect_uri` | string | No        | URL a la que vuelve el usuario tras aplicar los registros. Ver nota. |

<Warning>
  `redirect_uri` solo acepta hosts de ReallyQuickEmails (`app.reallyquickemails.com`) y de desarrollo local. Si envías el dominio de tu propia aplicación, la respuesta es `supported: false` con `reason: "invalid_redirect_uri"`. Omite el parámetro: la `apply_url` sigue siendo válida, solo que el usuario termina en la página de su proveedor DNS en vez de volver a tu aplicación.
</Warning>

### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X GET "https://api.reallyquickemails.com/domains/mitienda.com/domain-connect" \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK` — proveedor compatible

```json theme={null}
{
  "supported": true,
  "provider_name": "Cloudflare",
  "zone": "mitienda.com",
  "host": "",
  "apply_url": "https://dash.cloudflare.com/domainconnect/v2/domainTemplates/providers/reallyquickemails.com/services/email-sending/apply?domain=mitienda.com&sesVerify=...&sig=...&key=_dck1"
}
```

Redirige al usuario a `apply_url`. Al confirmar, su proveedor crea los registros. Después llama a `POST /domains/{domain}/verify` para confirmar el estado.

**Respuesta** `200 OK` — proveedor no compatible

```json theme={null}
{
  "supported": false,
  "reason": "no_domain_connect",
  "zone": "mitienda.com",
  "host": ""
}
```

### Campos de respuesta

| Campo           | Descripción                                                                         |
| --------------- | ----------------------------------------------------------------------------------- |
| `supported`     | `true` si hay un flujo de un clic disponible para este dominio.                     |
| `apply_url`     | URL firmada a la que debes redirigir. Solo presente cuando `supported: true`.       |
| `provider_name` | Nombre del proveedor DNS detectado (ej. `Cloudflare`, `GoDaddy`).                   |
| `zone`          | Zona DNS detectada. Para subdominios, el dominio raíz que tiene los NS.             |
| `host`          | Prefijo del subdominio dentro de la zona. Cadena vacía si el dominio es la raíz.    |
| `reason`        | Motivo por el que no hay flujo disponible. Solo presente cuando `supported: false`. |

### Valores de `reason`

| Valor                        | Significado                                                            |
| ---------------------------- | ---------------------------------------------------------------------- |
| `no_zone`                    | No se pudo determinar la zona DNS del dominio.                         |
| `no_domain_connect`          | El proveedor DNS no publica soporte para Domain Connect.               |
| `no_sync_flow`               | El proveedor soporta Domain Connect pero no el flujo interactivo.      |
| `template_not_onboarded`     | El proveedor no tiene habilitada la plantilla de ReallyQuickEmails.    |
| `identity_missing_tokens`    | El dominio aún no tiene tokens generados. Registra el dominio primero. |
| `invalid_redirect_uri`       | El `redirect_uri` enviado no está permitido.                           |
| `signing_key_not_configured` | Error de configuración del servicio. Contacta a soporte.               |

<Note>
  `supported: false` no es un error: la respuesta es `200 OK`. Muestra los registros DNS de `GET /domains/{domain}/dns-records` para que el usuario los configure manualmente.
</Note>

### Codigos de Error

| Código | Descripción                           |
| ------ | ------------------------------------- |
| `401`  | API Key inválida.                     |
| `404`  | Dominio no encontrado en el proyecto. |
| `500`  | Error al consultar el proveedor DNS.  |

***

## POST /domains/:domain/recreate

Elimina y recrea la identidad de envío del dominio. Útil cuando DKIM queda atascado en estado fallido.

### Parametros de Ruta

| Parámetro | Tipo   | Descripción                              |
| --------- | ------ | ---------------------------------------- |
| `domain`  | string | Dominio registrado (ej. `mitienda.com`). |

### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.reallyquickemails.com/domains/mitienda.com/recreate \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "identity_id": "8a1f6e2c-3b4d-4f5a-9c6e-7d8f9a0b1c2d",
  "domain": "mitienda.com",
  "verification_status": "pending",
  "verification_token": "abcdef1234567890abcdef1234567890",
  "dkim_tokens": ["abc123", "def456", "ghi789"],
  "dns_records": [
    {
      "id": "f1a2b3c4-d5e6-4f70-8a91-b2c3d4e5f607",
      "record_type": "TXT",
      "name": "_amazonses",
      "value": "abcdef1234567890abcdef1234567890",
      "purpose": "ses_verification",
      "status": "not_set",
      "ttl_hint": 300
    }
  ],
  "message": "Domain identity recreated in SES. DNS records may already be propagated - verify in a few seconds."
}
```

Conserva el dominio y el perfil de remitente, regenera los registros DNS y reinicia `verification_status` a `pending`. Luego llama a `POST /domains/{domain}/verify`. Si los registros ya estaban propagados, la verificación puede completarse en segundos.

### Codigos de Error

| Código | Descripción                             |
| ------ | --------------------------------------- |
| `401`  | API Key inválida.                       |
| `404`  | Dominio no encontrado en el proyecto.   |
| `500`  | Error al recrear la identidad de envío. |

***

## DELETE /domains/:domain

Elimina el dominio de la infraestructura de envío y desactiva su perfil de remitente.

### Parametros de Ruta

| Parámetro | Tipo   | Descripción                              |
| --------- | ------ | ---------------------------------------- |
| `domain`  | string | Dominio a eliminar (ej. `mitienda.com`). |

### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE https://api.reallyquickemails.com/domains/mitienda.com \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "domain": "mitienda.com",
  "message": "Domain and associated sender profile removed"
}
```

El mismo dominio puede registrarse de nuevo más adelante.

<Warning>
  Tras eliminarlo, deberás registrar el dominio y configurar los registros DNS de nuevo para enviar desde él.
</Warning>

### Codigos de Error

| Código | Descripción                           |
| ------ | ------------------------------------- |
| `401`  | API Key inválida.                     |
| `404`  | Dominio no encontrado en el proyecto. |

***

## PUT /domains/:domain/sender

Actualiza el perfil de remitente asociado a un dominio.

### Parametros de Ruta

| Parámetro | Tipo   | Descripción                            |
| --------- | ------ | -------------------------------------- |
| `domain`  | string | Dominio asociado (ej. `mitienda.com`). |

### Request Body

| Campo          | Tipo   | Requerido | Descripción                                                      |
| -------------- | ------ | --------- | ---------------------------------------------------------------- |
| `sender_name`  | string | Sí        | Nombre visible del remitente.                                    |
| `sender_email` | string | Sí        | Dirección de correo del remitente. Debe terminar en `@{domain}`. |
| `reply_email`  | string | No        | Dirección de correo para respuestas (Reply-To).                  |

### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X PUT https://api.reallyquickemails.com/domains/mitienda.com/sender \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
      -d '{
        "sender_name": "Equipo Mi Tienda",
        "sender_email": "ventas@mitienda.com",
        "reply_email": "soporte@mitienda.com"
      }'
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "sender_profile_id": "123e4567-e89b-12d3-a456-426614174000",
  "from_name": "Equipo Mi Tienda",
  "from_email": "ventas@mitienda.com",
  "domain_authenticated": true
}
```

<Note>
  El campo `reply_email` se guarda pero no se incluye en la respuesta.
</Note>

### Codigos de Error

| Código | Descripción                                                                        |
| ------ | ---------------------------------------------------------------------------------- |
| `400`  | Falta `sender_name` o `sender_email`, o `sender_email` no coincide con el dominio. |
| `401`  | API Key inválida.                                                                  |
| `404`  | Dominio o perfil de remitente no encontrado en el proyecto.                        |

***

## Reply domain (Reply-To limpio, sin token)

Configura un **dominio de reply branded** por proyecto (`reply.tudominio.com`) para que el Reply-To de los envíos API salga limpio —`localpart@reply.tudominio.com`— en vez del token codificado. El envío y la resolución de las respuestas son automáticos una vez verificado. Sin reply domain configurado, se usa el token de siempre. Cómo afecta el webhook: [Webhooks · reply domain](/api-reference/webhooks#reply-domain-branded-opcional-sin-token).

```mermaid theme={null}
flowchart LR
  A[POST /domains/reply] --> B[Publicar TXT + MX en DNS]
  B --> C[POST /domains/reply/verify]
  C --> D{SES verificado?}
  D -->|sí| E[Reply-To limpio activo]
  E --> F[Respuesta del destinatario]
  F --> G[Webhook email.inbound]
```

<Info>
  **Modelo para integradores (varios reply domains por proyecto).** El reply domain pertenece al proyecto de la API key con la que llamas, y **un proyecto puede tener varios**: cada envío resuelve el que corresponde al dominio del remitente.

  Para ofrecer reply limpio a **tus propios clientes** desde un mismo proyecto, registra el dominio de cada uno con tu key: `POST /domains/reply { "domain": "phrasso.com" }` y las respuestas de ese cliente llegan a `nombre@reply.phrasso.com`. Para verificar uno concreto, pasa `domain` en el body de `POST /domains/reply/verify`.

  También puedes darle un proyecto propio a cada cliente, con su key — ver [Partner quickstart](/guides/partner-quickstart) para cuándo conviene cada modelo.
</Info>

### POST /domains/reply

Registra el reply domain: verifica la identidad en SES para **recibir** y devuelve los 2 registros DNS que el cliente debe publicar.

#### Request Body

| Campo    | Tipo   | Requerido | Descripción                                                            |
| -------- | ------ | --------- | ---------------------------------------------------------------------- |
| `domain` | string | Sí        | Dominio del cliente (ej. `phrasso.com`). RQE arma `reply.phrasso.com`. |

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.reallyquickemails.com/domains/reply \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
      -H "Content-Type: application/json" \
      -d '{ "domain": "phrasso.com" }'
    ```
  </Tab>
</Tabs>

**Respuesta** `201 Created`

```json theme={null}
{
  "success": true,
  "reply_domain": "reply.phrasso.com",
  "reply_domain_status": "pending",
  "dns_records": [
    { "record_type": "TXT", "name": "_amazonses.reply.phrasso.com", "value": "<token>", "purpose": "ses_verification", "ttl_hint": 300 },
    { "record_type": "MX", "name": "reply.phrasso.com", "value": "inbound-smtp.us-east-1.amazonaws.com", "priority": 10, "purpose": "reply_inbound", "ttl_hint": 300 }
  ],
  "message": "Publica estos 2 registros en el DNS del dominio y luego llama a POST /domains/reply/verify."
}
```

El cliente publica esos 2 registros (TXT de verificación SES + MX que enruta las respuestas al inbound de RQE). Luego llama a **verify**.

### POST /domains/reply/verify

Consulta SES y marca el reply domain como `verified` cuando el TXT ya propagó. A partir de ahí, los envíos API del proyecto salen con el Reply-To limpio.

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.reallyquickemails.com/domains/reply/verify \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "success": true,
  "reply_domain": "reply.phrasso.com",
  "reply_domain_status": "verified",
  "ses_status": "Success",
  "can_receive": true
}
```

`reply_domain_status`: `pending` (aún sin verificar) · `verified` (en uso) · `failed`. `can_receive` es `true` cuando SES puede recibir en el dominio.

### GET /domains/reply

Estado y registros DNS del reply domain del proyecto. `reply_domain: null` si no hay ninguno configurado.

```bash theme={null}
curl https://api.reallyquickemails.com/domains/reply \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
```

### DELETE /domains/reply

Quita el reply domain (lo saca del ruteo de inbound, borra la identidad SES y limpia el proyecto). Los envíos vuelven al Reply-To con token.

```bash theme={null}
curl -X DELETE https://api.reallyquickemails.com/domains/reply \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
```

***

## Tracking domain (links de click con tu dominio)

Envuelve los links de click-tracking con **tu propio subdominio** (`links.tudominio.com`) en vez del compartido de RQE. Aísla la reputación del tracking y alinea los links con tu `From`. Se configura con un solo registro **CNAME**.

<Info>
  El tracking domain **se cambia, nunca se borra**: los links de los emails ya enviados dependen de que el dominio siga resolviendo. Por eso no hay endpoint `DELETE` — para migrar, publica el CNAME nuevo y llama a `PUT` con el nuevo dominio.
</Info>

Estos endpoints cuelgan de `/api/projects/:projectId`. El `:projectId` es el **UUID de tu proyecto** —el `project_id` que devuelve cualquier respuesta de envío— y debe coincidir con el proyecto de tu API key.

### GET /api/projects/:projectId/tracking-domain

Estado actual del tracking domain del proyecto.

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl https://api.reallyquickemails.com/api/projects/:projectId/tracking-domain \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "domain": "links.tudominio.com",
  "status": "verified",
  "verified_at": "2026-07-20T12:00:00.000Z",
  "cname": { "name": "links.tudominio.com", "target": "track.reallyquickemails.com" }
}
```

`domain`, `status` y `cname` son `null` si no hay ninguno configurado.

### PUT /api/projects/:projectId/tracking-domain

Setea o cambia el tracking domain. Queda en `pending` hasta verificar. Debe ser un subdominio propio (ej. `links.tudominio.com`), nunca un dominio de RQE.

#### Request Body

| Campo    | Tipo   | Requerido | Descripción                                   |
| -------- | ------ | --------- | --------------------------------------------- |
| `domain` | string | Sí        | Subdominio propio, ej. `links.tudominio.com`. |

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X PUT https://api.reallyquickemails.com/api/projects/:projectId/tracking-domain \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
      -H "Content-Type: application/json" \
      -d '{ "domain": "links.tudominio.com" }'
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "domain": "links.tudominio.com",
  "status": "pending",
  "cname": { "name": "links.tudominio.com", "target": "track.reallyquickemails.com" },
  "tls_registered": true
}
```

Publica el **CNAME** `links.tudominio.com → track.reallyquickemails.com` en tu DNS y luego llama a **verify**.

| Código | Error                     | Motivo                                                      |
| ------ | ------------------------- | ----------------------------------------------------------- |
| `400`  | `INVALID_DOMAIN`          | No es un subdominio válido, o es un dominio de RQE.         |
| `502`  | `TLS_REGISTRATION_FAILED` | No se pudo registrar el dominio para emitir TLS. Reintenta. |

### POST /api/projects/:projectId/tracking-domain/verify

Chequea el DNS y marca `verified` si el CNAME ya resuelve a nuestro target (soporta el CNAME flattening de Cloudflare comparando registros A).

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.reallyquickemails.com/api/projects/:projectId/tracking-domain/verify \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200 OK`

```json theme={null}
{
  "domain": "links.tudominio.com",
  "status": "verified",
  "verified": true,
  "detail": "cname",
  "cname": { "name": "links.tudominio.com", "target": "track.reallyquickemails.com" }
}
```

`verified: false` con `status: "pending"` si el DNS aún no propagó (`detail` explica el motivo). Responde `404 NO_DOMAIN` si no hay tracking domain configurado.

***

## Verificacion de Email (Magic Link)

Alternativa a la verificación de dominio completo: verifica un email individual como remitente sin configurar DNS. Se envía un email de verificación; al hacer clic en el enlace, el email queda verificado para enviar.

<Note>
  Es más rápida pero no incluye DKIM/SPF. Para mejor deliverability, verifica el dominio completo.
</Note>

Cuando el estado cambia (de `pending` a `verified` o `failed`), RQE emite el webhook `sender.verified` o `sender.failed`. Ver [Webhooks](/api-reference/webhooks).

***

### POST /domains/verify-email

Inicia la verificación de un email como remitente enviándole un enlace de verificación.

#### Request Body

| Campo          | Tipo   | Requerido | Descripción                       |
| -------------- | ------ | --------- | --------------------------------- |
| `sender_email` | string | Sí        | Email a verificar como remitente. |
| `sender_name`  | string | Sí        | Nombre visible del remitente.     |
| `external_key` | string | No        | Clave externa para integraciones. |

#### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.reallyquickemails.com/domains/verify-email \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
      -H "Content-Type: application/json" \
      -d '{
        "sender_email": "ventas@gmail.com",
        "sender_name": "Mi Empresa"
      }'
    ```
  </Tab>
</Tabs>

**Respuesta** `201`

```json theme={null}
{
  "success": true,
  "identity_id": "550e8400-e29b-41d4-a716-446655440000",
  "sender_email": "ventas@gmail.com",
  "verification_status": "pending",
  "sender_profile_id": "123e4567-e89b-12d3-a456-426614174000",
  "sender": {
    "from_name": "Mi Empresa",
    "from_email": "ventas@gmail.com",
    "email_verified": false,
    "domain_authenticated": false
  },
  "message": "Verification email sent. The sender must click the link in the email to verify."
}
```

El remitente recibirá un email con un enlace. Al hacer clic, su email queda verificado.

#### Errores

| Código | Descripción                                                           |
| ------ | --------------------------------------------------------------------- |
| `400`  | `sender_email` o `sender_name` faltantes, o formato de email inválido |
| `401`  | API Key inválida                                                      |
| `409`  | Email ya registrado en este proyecto                                  |

***

### GET /domains/verify-email/status

Consulta el estado de verificación de un email en la infraestructura de envío en tiempo real.

#### Query Parameters

| Parámetro | Tipo   | Requerido | Descripción        |
| --------- | ------ | --------- | ------------------ |
| `email`   | string | Sí        | Email a consultar. |

#### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.reallyquickemails.com/domains/verify-email/status?email=ventas@gmail.com" \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200`

```json theme={null}
{
  "success": true,
  "identity_id": "550e8400-e29b-41d4-a716-446655440000",
  "sender_email": "ventas@gmail.com",
  "verification_status": "verified",
  "sender_profile": {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "from_name": "Mi Empresa",
    "from_email": "ventas@gmail.com",
    "email_verified": true,
    "domain_authenticated": false
  },
  "can_send": true
}
```

`sender_profile` puede ser `null` si no existe un perfil de remitente activo. `can_send` es `true` cuando `verification_status` es `verified`.

#### Estados de verificacion

| Estado     | Descripción                                                 |
| ---------- | ----------------------------------------------------------- |
| `pending`  | Email de verificación enviado, esperando clic del remitente |
| `verified` | Remitente verificado, listo para enviar                     |
| `failed`   | Verificación fallida                                        |

#### Errores

| Código | Descripción                         |
| ------ | ----------------------------------- |
| `400`  | `email query parameter is required` |
| `401`  | API Key inválida                    |
| `404`  | Email no encontrado en el proyecto  |

***

### POST /domains/verify-email/resend

Reenvía el email de verificación al remitente. Solo válido mientras la verificación está en `pending`.

#### Request Body

| Campo          | Tipo   | Requerido | Descripción            |
| -------------- | ------ | --------- | ---------------------- |
| `sender_email` | string | Sí        | Email al que reenviar. |

#### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.reallyquickemails.com/domains/verify-email/resend \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
      -H "Content-Type: application/json" \
      -d '{
        "sender_email": "ventas@gmail.com"
      }'
    ```
  </Tab>
</Tabs>

**Respuesta** `200`

```json theme={null}
{
  "success": true,
  "message": "Verification email resent",
  "sender_email": "ventas@gmail.com"
}
```

#### Errores

| Código | Descripción                                                            |
| ------ | ---------------------------------------------------------------------- |
| `400`  | `sender_email` faltante, o la verificación no está en estado `pending` |
| `401`  | API Key inválida                                                       |
| `404`  | Email no encontrado en el proyecto                                     |

***

### DELETE /domains/verify-email

Elimina un email verificado como remitente; el mismo email puede registrarse de nuevo más adelante.

#### Query Parameters

| Parámetro | Tipo   | Requerido | Descripción       |
| --------- | ------ | --------- | ----------------- |
| `email`   | string | Sí        | Email a eliminar. |

#### Ejemplo

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE "https://api.reallyquickemails.com/domains/verify-email?email=ventas@gmail.com" \
      -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"
    ```
  </Tab>
</Tabs>

**Respuesta** `200`

```json theme={null}
{
  "success": true,
  "sender_email": "ventas@gmail.com",
  "message": "Email identity and associated sender profile removed"
}
```

#### Errores

| Código | Descripción                         |
| ------ | ----------------------------------- |
| `400`  | `email query parameter is required` |
| `401`  | API Key inválida                    |
| `404`  | Email no encontrado en el proyecto  |
