Ir a la documentación
API

Añadir un dominio

Añade un dominio al espacio de trabajo y lo devuelve con todos los registros DNS que necesita. El dominio empieza sin verificar, con su catch-all activado, y se verifica solo en cuanto los registros responden en el DNS público.

POST/domains

Ejecuta la llamada real contra tu espacio de trabajo, con tu propia clave.

POST /domains

Añade un dominio al espacio de trabajo y lo devuelve con todos los registros DNS que necesita. El dominio empieza sin verificar, con su catch-all activado, y se verifica solo en cuanto los registros responden en el DNS público.

La solicitud

Parámetros

domainstringobligatorio
Un dominio sin más, como `acme.com` o `mail.acme.com`. Se le quitan los espacios y se pasa a minúsculas, y un nombre internacional se guarda en su forma ASCII. Se rechaza un esquema, una ruta o una dirección.

Ejemplo

Necesita domains:write y una clave sin restricción de direcciones ni de dominios, porque un dominio nuevo alcanza a todo el espacio de trabajo.

curl
curl -X POST "$OE/domains" -H "$AUTH" -H "Content-Type: application/json" \  -d '{ "domain": "acme.com" }'
Respuesta
{  "object": "domain",  "id": "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f",  "domain": "acme.com",  "receiving": {    "verified": false,    "verifiedAt": null,    "catchAll": true,    "lastCheckedAt": "2026-09-25T10:00:02.000Z",    "error": "No MX records yet. DNS changes can take a few minutes to spread."  },  "sending": {    "status": "no_identity",    "canSend": false,    "checkedAt": null,    "error": null,    "note": "Sending is not set up yet. Publish the signing record listed for this domain, and sending switches on shortly after it answers in DNS."  },  "tracking": { "host": null, "status": "none", "active": false, "target": "", "record": null, "checkedAt": null, "verifiedAt": null, "error": null },  "storage": { "host": null, "status": "none", "active": false, "target": "", "record": null, "checkedAt": null, "verifiedAt": null, "error": null },  "addresses": [],  "createdAt": "2026-09-25T10:00:00.000Z",  "records": [    { "type": "MX", "name": "acme.com", "value": "inbound.mail.example", "priority": 10, "purpose": null, "status": "missing" },    { "type": "TXT", "name": "acme.com", "value": "v=spf1 include:_spf.openemail.uk ~all", "priority": null, "purpose": null, "status": "missing" },    { "type": "TXT", "name": "_openemail-challenge.acme.com", "value": "oe-verify=4f1c9a2b7e8d6053a1c4", "priority": null, "purpose": "Proves you own this domain", "status": "missing" }  ],  "dmarc": null}

El ejemplo recorta records. Una respuesta real lista todos los registros que necesita el dominio, incluidos DMARC, los CNAME de firma y los registros de return-path, y GET /domains/{id} describe cada campo.

Publica los registros exactamente como se indican y luego llama a POST /domains/{id}/verify o espera: el dominio se vuelve a comprobar cada vez que se lee y mediante un barrido en segundo plano, y domain.verified se dispara en el momento en que pasa.

Cuándo se rechaza

  • 409 domain_already_added: el propietario de este espacio de trabajo ya tiene el dominio.
  • 409 domain_claimed: otra cuenta lo tiene.
  • 409 related_domain_owned: un dominio superior o un subdominio suyo pertenece a otra cuenta, así que no se puede repartir entre las dos.
  • 409 operator_domain: el dominio pertenece al propio OpenEmail.
  • 403 domain_allowance_reached: el plan no admite más dominios. El mensaje nombra el plan que admite más.
  • 422 capability_unsupported: la clave está limitada a determinadas direcciones o dominios.

Tu bandeja de entrada,
en tus propios términos.

Infraestructura de correo para empresas, IA, agentes y correo personal. Creada para escalar, con privacidad y control. Todo lo que el correo debería haber tenido desde el primer día.

OpenEmail

Infraestructura de correo para empresas, IA, agentes y correo personal. Creada para escalar, con privacidad y control. Todo lo que el correo debería haber tenido desde el primer día.

© 2026 OpenEmail. Todos los derechos reservados.