Enviar un correo
const url = 'https://api.mailerdash.com/v1/mail/send';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"send_at":"2026-08-15T09:00:00Z","personalizations":[{"to":[{"email":"recipient@example.com","name":"Recipient Name"}],"cc":[{"email":"cc@example.com","name":"CC Name"}],"bcc":[{"email":"bcc@example.com","name":"BCC Name"}],"subject":"Asunto específico de este destinatario","headers":{"additionalProperty":"example"}}],"from":{"email":"no-reply@example-domain.com","name":"Service Name"},"subject":"Email subject","content":[{"type":"text/plain","value":"Hello world"}],"reply_to":{"email":"reply@example-domain.com","name":"Reply Name"},"headers":{"additionalProperty":"example"},"attachments":[{"content":"JVBERi0xLjQgZmFjdHVyYSBkZW1v","url":"https://archivos.example.com/facturas/123.pdf","filename":"invoice-123.pdf","type":"application/pdf","content_id":"logo@inv"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.mailerdash.com/v1/mail/send \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "send_at": "2026-08-15T09:00:00Z", "personalizations": [ { "to": [ { "email": "recipient@example.com", "name": "Recipient Name" } ], "cc": [ { "email": "cc@example.com", "name": "CC Name" } ], "bcc": [ { "email": "bcc@example.com", "name": "BCC Name" } ], "subject": "Asunto específico de este destinatario", "headers": { "additionalProperty": "example" } } ], "from": { "email": "no-reply@example-domain.com", "name": "Service Name" }, "subject": "Email subject", "content": [ { "type": "text/plain", "value": "Hello world" } ], "reply_to": { "email": "reply@example-domain.com", "name": "Reply Name" }, "headers": { "additionalProperty": "example" }, "attachments": [ { "content": "JVBERi0xLjQgZmFjdHVyYSBkZW1v", "url": "https://archivos.example.com/facturas/123.pdf", "filename": "invoice-123.pdf", "type": "application/pdf", "content_id": "logo@inv" } ] }'Envía un correo usando un payload tipo SendGrid. Requiere API key en el header Authorization.
Authorizations
Sección titulada «Authorizations »Parameters
Sección titulada « Parameters »Header Parameters
Sección titulada «Header Parameters »Modo sandbox. Se activa con true, 1, yes u on (sin distinguir mayusculas); cualquier otro valor envia normalmente. Valida la peticion COMPLETA (auth, dominio, formato, destinatarios, supresiones, reputacion, limite de destinatarios) y se detiene justo antes de cobrar la cuota y entregar el mensaje: no sale ningun correo, no se consume cuota y no cuenta para las estadisticas. La respuesta trae sandbox: true y un message_id con prefijo sandbox-. Solo un “si” explicito lo activa: X-Xilo-Test: false envia de verdad, para que un header vestigial no apague los envios en produccion sin que nadie lo note. Las peticiones en sandbox ignoran Idempotency-Key en los dos sentidos: no guardan su respuesta (probar con una clave y despues mandar de verdad con la misma devolveria la respuesta de la prueba y ningun correo) ni leen la de un envio real.
Request Body required
Sección titulada «Request Body required »object
Programa el envío para esa fecha (ISO 8601, hasta 90 días). Omitir para enviar de inmediato. Devuelve 202 con el id del envío programado en lugar de enviarlo. Los permisos se re-evalúan al disparar: si entre el agendado y la fecha vence la gracia del dominio o se suspende la cuenta, el envío se descarta. Programar no reserva cuota. Solo admite UNA personalización — para varios destinatarios, usar una campaña.
Example
2026-08-15T09:00:00Zobject
object
Example
recipient@example.comExample
Recipient NameCopia (CC). Misma validación, supresión y cobro de cuota que to.
object
Example
cc@example.comExample
CC NameCopia oculta (BCC). Misma validación, supresión y cobro de cuota que to.
object
Example
bcc@example.comExample
BCC NameOverride del subject para esta personalización. Si falta, se usa el subject de nivel mensaje.
Example
Asunto específico de este destinatarioHeaders personalizados para esta personalización. X-Xilo-Channel se ignora (el canal transaccional no se puede sobrescribir).
object
object
Example
no-reply@example-domain.comExample
Service NameExample
Email subjectobject
Example
text/plainExample
Hello worldobject
Example
reply@example-domain.comExample
Reply NameHeaders personalizados a nivel mensaje. X-Xilo-Channel se ignora — el canal transaccional no se puede sobrescribir. Los headers por-personalización tienen precedencia sobre estos.
object
Archivos adjuntos codificados en base64 (p.ej. facturas PDF, imágenes inline). Límites por defecto: 25MB por adjunto y 25MB en total (env MAX_ATTACHMENT_MB / MAX_TOTAL_ATTACHMENTS_MB), 413 al excederlos. El body JSON de este endpoint está topado por MAX_SEND_JSON_MB (35MB por defecto), que acomoda los 25MB de adjuntos una vez inflados por base64 (~33% → ~34MB). Si el escaneo antivirus está activo en el servidor, un adjunto infectado devuelve 422 con code virus_detected, nombrando el archivo y la firma detectada.
object
Contenido del archivo codificado en base64. Alternativa a url: hay que mandar uno de los dos, y mandar ambos es un 400 — no adivinamos cuál gana.
Example
JVBERi0xLjQgZmFjdHVyYSBkZW1vAlternativa a content: MailerDash descarga el archivo desde esta URL al recibir el envío. Evita inflar el payload ~33% con base64. HTTPS obligatorio; no se siguen redirects (un presigned de S3/GCS no redirige, pero un acortador sí, y ahí falla con un error que lo dice); rige el mismo tope por adjunto; y si la descarga falla, el envío completo devuelve 422 y no sale — un correo sin su adjunto no es el correo. La descarga ocurre en línea con tu request, así que su latencia la esperas tú, con un presupuesto compartido de 20s para todos los adjuntos del envío.
Example
https://archivos.example.com/facturas/123.pdfExample
invoice-123.pdfMIME type del adjunto (Content-Type).
Example
application/pdfCID para adjuntos inline: referenciar como cid:<content_id> dentro del HTML.
Example
logo@invobject
Contenido del archivo codificado en base64. Alternativa a url: hay que mandar uno de los dos, y mandar ambos es un 400 — no adivinamos cuál gana.
Example
JVBERi0xLjQgZmFjdHVyYSBkZW1vAlternativa a content: MailerDash descarga el archivo desde esta URL al recibir el envío. Evita inflar el payload ~33% con base64. HTTPS obligatorio; no se siguen redirects (un presigned de S3/GCS no redirige, pero un acortador sí, y ahí falla con un error que lo dice); rige el mismo tope por adjunto; y si la descarga falla, el envío completo devuelve 422 y no sale — un correo sin su adjunto no es el correo. La descarga ocurre en línea con tu request, así que su latencia la esperas tú, con un presupuesto compartido de 20s para todos los adjuntos del envío.
Example
https://archivos.example.com/facturas/123.pdfExample
invoice-123.pdfMIME type del adjunto (Content-Type).
Example
application/pdfCID para adjuntos inline: referenciar como cid:<content_id> dentro del HTML.
Example
logo@invResponses
Sección titulada « Responses »Accepted – message queued for delivery
object
object
En sandbox lleva prefijo sandbox-, para que se note que no corresponde a ningun correo si termina guardado.
Example
{ "message": "accepted", "app": "example-app", "sandbox": true, "items": [ { "status": "queued" } ]}Invalid JSON or request body
object
Example
{ "message": "Invalid JSON body"}Missing or invalid API key
From domain not authorized
Internal server error