AllyOneMail / Enviar correos
Enviar correos
Un endpoint central para todo envío transaccional o de marketing.
POST /api/v1/send
{
"from": "hola@empresa.com",
"to": "cliente@destino.com",
"subject": "Asunto del correo",
"html": "<p>Contenido en HTML</p>",
"text": "Contenido en texto plano (fallback)",
"reply_to": "soporte@empresa.com",
"attachments": [
{ "filename": "factura.pdf", "content": "<base64>", "type": "application/pdf" }
],
"tags": ["bienvenida"],
"metadata": { "order_id": "1234" },
"track_opens": true,
"track_clicks": true,
"test_mode": false
}
| Campo | Obligatorio | Notas |
|---|---|---|
from, to, subject | Sí | subject hasta 998 caracteres. to acepta string o array. |
html / text | Al menos uno | Envía los dos cuando sea posible — text es el fallback para clientes sin HTML. |
attachments | No | Contenido en base64. |
track_opens / track_clicks | No | Activados por defecto. |
test_mode | No | Valida el payload sin entregar de verdad — útil en CI. |
Envío idempotente
Para evitar duplicados en un reintento de red, usa POST /api/v2/messages — mismo esquema de arriba, más idempotency_key (hasta 200 caracteres). La clave vale 7 días:
| Situación | Respuesta |
|---|---|
| Primera llamada con la clave | Envío normal. |
| Misma clave y mismo contenido, envío ya concluido | 200 con el message_id original y "deduplicated": true — no se reenvía nada. |
| Misma clave, primera llamada aún en curso | 202 {"status": "processing"} — vuelve a consultar en unos instantes. |
| Misma clave con contenido diferente | 409 IDEMPOTENCY_CONFLICT. |
