Inicio rápido
De no tener cuenta a un correo entregado: crea una clave y haz tu primer envío.
Crea una cuenta
Si todavía no tienes una organización, crea una cuenta — es gratis empezar, y todo lo que creas dentro (miembros, plantillas, claves de API) vive dentro de esa organización.
Crea una clave de API
Desde Settings → Claves de API, crea una clave con el permiso Enviar mensajes. El botón Crear clave te muestra el token una sola vez — cópialo en ese momento. La guía de autenticación tiene el detalle completo, con capturas de pantalla del panel.
Envía tu primer correo
La superficie pública de la API — la única que un integrador externo puede llamar — vive bajo
/v1 y lee la organización desde la clave misma, no desde la URL. from tiene que nombrar un
remitente ya registrado en tu organización — la dirección con la que te registraste ya es uno,
verificado desde el momento en que se creó tu cuenta, así que funciona aquí sin nada más que
configurar:
curl -X POST https://api.e-comms.dev/v1/email \
-H "Authorization: Bearer ek_live_<tu-clave>" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "inicio-rapido-2026-09-19",
"to": ["tu@example.com"],
"from": "tu@example.com",
"content": {
"type": "raw",
"subject": "Mi primer correo",
"html": "<p>¡Funciona!</p>",
"text": "¡Funciona!"
}
}'const response = await fetch("https://api.e-comms.dev/v1/email", {
method: "POST",
headers: {
Authorization: "Bearer ek_live_<tu-clave>",
"Content-Type": "application/json",
},
body: JSON.stringify({
idempotencyKey: "inicio-rapido-2026-09-19",
to: ["tu@example.com"],
from: "tu@example.com",
content: {
type: "raw",
subject: "Mi primer correo",
html: "<p>¡Funciona!</p>",
text: "¡Funciona!",
},
}),
})
const body = await response.json()import requests
response = requests.post(
"https://api.e-comms.dev/v1/email",
headers={"Authorization": "Bearer ek_live_<tu-clave>"},
json={
"idempotencyKey": "inicio-rapido-2026-09-19",
"to": ["tu@example.com"],
"from": "tu@example.com",
"content": {
"type": "raw",
"subject": "Mi primer correo",
"html": "<p>¡Funciona!</p>",
"text": "¡Funciona!",
},
},
)
body = response.json()Enviar desde otra dirección — tu propio dominio, una vez verificado — es cuestión de registrar un nuevo remitente en Settings → Sending, sin ningún cambio de código aquí.
Confirma que se envió
Una respuesta 202 significa que el correo fue admitido — no que ya llegó. Cada destinatario
aparece con su propio estado en results:
{
"results": [
{
"address": "tu@example.com",
"messageId": "01a0ba31-3fe4-7cc4-a1c6-64bdaaa5d99c",
"status": "claimed"
}
]
}claimed es el único estado posible en esta respuesta — el proveedor todavía no fue llamado
cuando se arma. Guarda el messageId: es lo que consultas
para saber si el envío realmente llegó, y lo que correlaciona un evento de
webhook con este mismo correo. Un error trae un code de un
conjunto cerrado — revisa la referencia de errores para ver qué
código responde a qué situación.