Dominios

Registra y verifica dominios de envío, consulta sus registros DNS y gestiona el perfil de remitente de cada dominio.

Endpoints de ReallyQuickEmails para la gestión completa de dominios de envío: registro, verificación DNS, consulta de estado y configuración de perfil de remitente.

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


Autenticacion

Todos los endpoints de dominios requieren autenticación mediante Secret Key:

HeaderTipoRequeridoDescripción
AuthorizationstringBearer sk_proj_...
Content-TypestringSí*application/json (en POST/PUT).

POST /domains/register

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

Request Body

CampoTipoRequeridoDescripción
domainstringDominio a registrar (ej. mitienda.com).
sender_namestringNombre del remitente (ej. Mi Tienda).
sender_emailstringDirección de correo del remitente. Debe terminar en @{domain} (ej. ventas@mitienda.com).
external_keystringNoClave externa para integraciones de terceros.

Ejemplo

bash
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"
  }'

Respuesta exitosa (201 Created)

json
{
  "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=quarantine; rua=mailto:dmarc-reports@mitienda.com",
      "purpose": "dmarc",
      "status": "not_set",
      "ttl_hint": 300
    },
    {
      "id": "f708192a-3b4c-45d6-e7f8-091a2b3c4d5e",
      "record_type": "CNAME",
      "name": "bounce",
      "value": "feedback-smtp.us-east-1.amazonses.com",
      "purpose": "return_path",
      "status": "not_set",
      "ttl_hint": 300
    }
  ]
}

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

Valores posibles de status de un registro DNS: not_set, propagating, mismatch, verified.

Registros DNS generados

#TipoNombrePropósitoNotas
1TXT_amazonsesVerificación de dominioValor generado automáticamente al registrar
2-4CNAME{token}._domainkeyDKIM3 registros, tokens generados automáticamente
5TXT@ (raíz del dominio)SPFv=spf1 include:amazonses.com ~all
6TXT_dmarcDMARCv=DMARC1; p=quarantine; rua=mailto:dmarc-reports@{domain}
7CNAMEbounceReturn-PathApunta a feedback-smtp.us-east-1.amazonses.com

Nota: Los nombres de los registros son relativos al dominio. Por ejemplo, si tu dominio es mitienda.com, el registro _amazonses se configura como _amazonses.mitienda.com en tu proveedor DNS. Algunos proveedores agregan el dominio automáticamente, por lo que solo necesitas ingresar _amazonses.

Configura los registros DNS en tu proveedor y luego llama a POST /domains/{domain}/verify para validar. Ver más en Deliverability.

Codigos de Error

CódigoDescripción
400Campos requeridos faltantes, dominio con formato inválido, o sender_email no termina en @{domain}.
401API Key inválida.
409El dominio ya está registrado en este proyecto.
500Error interno al registrar el dominio.

GET /domains/:domain/dns-records

Retorna los registros DNS almacenados para un dominio, con su último estado conocido y sin realizar consultas externas.

Parametros de Ruta

ParámetroTipoDescripción
domainstringDominio registrado (ej. mitienda.com).

Ejemplo

bash
curl -X GET https://api.reallyquickemails.com/domains/mitienda.com/dns-records \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Respuesta exitosa (200 OK)

json
{
  "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": "CNAME",
      "name": "bounce",
      "value": "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 que ejecutas la primera verificación con POST /domains/{domain}/verify.

Nota: Los registros SPF y DMARC siempre aparecen con status: "not_set" porque su propagación no se valida automáticamente.

Codigos de Error

CódigoDescripción
401API Key inválida.
404Dominio no encontrado en el proyecto.

POST /domains/:domain/verify

Verifica el estado DNS del dominio consultando directamente la infraestructura de envío, actualiza el estado almacenado de los registros y retorna si el dominio puede enviar correos.

Parametros de Ruta

ParámetroTipoDescripción
domainstringDominio registrado (ej. mitienda.com).

Ejemplo

bash
curl -X POST https://api.reallyquickemails.com/domains/mitienda.com/verify \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Respuesta exitosa (200 OK)

json
{
  "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": "CNAME",
      "name": "bounce",
      "value": "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 de verificación (_amazonses) está configurado.
  2. DKIM — Los 3 registros CNAME de DKIM están configurados y propagados.
  3. MAIL FROM — El registro CNAME de Return-Path (bounce) está configurado.

Campos clave:

CampoDescripción
verification_statusverified (dominio y DKIM verificados), failed (alguna verificación falló) o pending.
details.domain_verificationEstado crudo de la verificación de dominio: Success, Pending, Failed, TemporaryFailure o NotStarted.
details.dkim_verificationEstado crudo de DKIM (mismos valores).
details.mail_from_statusEstado crudo de MAIL FROM (mismos valores).
sender_profilePerfil de remitente activo del dominio, o null si no existe.
can_sendtrue cuando dominio y DKIM están verificados.

El campo can_send es true cuando details.domain_verification y details.dkim_verification son Success (equivalente a verification_status: "verified"). La verificación de MAIL FROM no es obligatoria para enviar, pero se recomienda para mejorar la entregabilidad.

Codigos de Error

CódigoDescripción
401API Key inválida.
404Dominio no encontrado en el proyecto.
500Error 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 — un endpoint rápido ideal para polling desde la interfaz.

Parametros de Ruta

ParámetroTipoDescripción
domainstringDominio registrado (ej. mitienda.com).

Ejemplo

bash
curl -X GET https://api.reallyquickemails.com/domains/mitienda.com/status \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Respuesta exitosa (200 OK)

json
{
  "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 DNS por propósito: records_count es la cantidad de registros de ese propósito y all_verified indica si todos están en status: "verified". can_send es true cuando verification_status es verified. last_verified_at corresponde a la última actualización del estado del dominio.

Codigos de Error

CódigoDescripción
401API Key inválida.
404Dominio no encontrado en el proyecto.

GET /domains

Busca un dominio específico por nombre y retorna su información básica junto con el perfil de remitente.

Query Parameters

ParámetroTipoRequeridoDescripción
domainstringNombre del dominio a buscar.

Ejemplo

bash
curl -X GET "https://api.reallyquickemails.com/domains?domain=mitienda.com" \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Respuesta exitosa (200 OK)

json
{
  "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ódigoDescripción
400Parámetro domain no proporcionado.
401API Key inválida.
404Dominio no encontrado en el proyecto.

POST /domains/:domain/recreate

Elimina y vuelve a crear la identidad de envío del dominio — útil cuando la verificación de DKIM queda atascada en estado fallido.

Parametros de Ruta

ParámetroTipoDescripción
domainstringDominio registrado (ej. mitienda.com).

Ejemplo

bash
curl -X POST https://api.reallyquickemails.com/domains/mitienda.com/recreate \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Respuesta exitosa (200 OK)

json
{
  "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."
}

La recreación conserva el dominio registrado y el perfil de remitente, regenera los registros DNS y reinicia verification_status a pending. Después de recrear, llama a POST /domains/{domain}/verify. Si los registros DNS ya estaban propagados, la verificación puede completarse en segundos.

Codigos de Error

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

DELETE /domains/:domain

Elimina un dominio inmediatamente de la infraestructura de envío y desactiva el perfil de remitente asociado.

Parametros de Ruta

ParámetroTipoDescripción
domainstringDominio a eliminar (ej. mitienda.com).

Ejemplo

bash
curl -X DELETE https://api.reallyquickemails.com/domains/mitienda.com \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Respuesta exitosa (200 OK)

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

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

Advertencia: Una vez eliminado, deberás volver a registrar el dominio y configurar los registros DNS nuevamente para poder enviar desde él.

Codigos de Error

CódigoDescripción
401API Key inválida.
404Dominio no encontrado en el proyecto.

PUT /domains/:domain/sender

Actualiza el perfil de remitente asociado a un dominio.

Parametros de Ruta

ParámetroTipoDescripción
domainstringDominio asociado (ej. mitienda.com).

Request Body

CampoTipoRequeridoDescripción
sender_namestringNombre visible del remitente.
sender_emailstringDirección de correo del remitente. Debe terminar en @{domain}.
reply_emailstringNoDirección de correo para respuestas (Reply-To).

Ejemplo

bash
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"
  }'

Respuesta exitosa (200 OK)

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

Nota: El campo reply_email se guarda pero no se incluye en la respuesta.

Codigos de Error

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

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

Nota: La verificación por email es más rápida pero no incluye DKIM/SPF. Para mejor deliverability, se recomienda verificar el dominio completo.

Cuando el estado de verificación cambia (de pending a verified o failed), RQE emite el evento de webhook sender.verified o sender.failed. Ver más en Webhooks.


POST /domains/verify-email

Inicia la verificación de un email como remitente enviando un enlace de verificación al email proporcionado.

Request Body

CampoTipoRequeridoDescripción
sender_emailstringEmail a verificar como remitente.
sender_namestringNombre visible del remitente.
external_keystringNoClave externa para integraciones.

Ejemplo

bash
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"
  }'

Respuesta exitosa (201)

json
{
  "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ódigoDescripción
400sender_email o sender_name faltantes, o formato de email inválido
401API Key inválida
409Email ya registrado en este proyecto

GET /domains/verify-email/status

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

Query Parameters

ParámetroTipoRequeridoDescripción
emailstringEmail a consultar.

Ejemplo

bash
curl "https://api.reallyquickemails.com/domains/verify-email/status?email=ventas@gmail.com" \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Respuesta exitosa (200)

json
{
  "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

EstadoDescripción
pendingEmail de verificación enviado, esperando clic del remitente
verifiedRemitente verificado, listo para enviar
failedVerificación fallida

Errores

CódigoDescripción
400email query parameter is required
401API Key inválida
404Email no encontrado en el proyecto

POST /domains/verify-email/resend

Reenvía el email de verificación al remitente — solo es válido mientras la verificación está en estado pending.

Request Body

CampoTipoRequeridoDescripción
sender_emailstringEmail al que reenviar.

Ejemplo

bash
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"
  }'

Respuesta exitosa (200)

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

Errores

CódigoDescripción
400sender_email faltante, o la verificación no está en estado pending
401API Key inválida
404Email 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ámetroTipoRequeridoDescripción
emailstringEmail a eliminar.

Ejemplo

bash
curl -X DELETE "https://api.reallyquickemails.com/domains/verify-email?email=ventas@gmail.com" \
  -H "Authorization: Bearer sk_proj_xxxxxxxxxxxx"

Respuesta exitosa (200)

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

Errores

CódigoDescripción
400email query parameter is required
401API Key inválida
404Email no encontrado en el proyecto