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","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", "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: 10MB por adjunto y 20MB en total (env MAX_ATTACHMENT_MB / MAX_TOTAL_ATTACHMENTS_MB), 413 al excederlos. El body JSON completo está topado por MAX_JSON_MB (15MB por defecto), suficiente para un adjunto de 10MB (base64 infla ~33% → ~13.3MB).
object
Contenido del archivo codificado en base64.
Example
JVBERi0xLjQgZmFjdHVyYSBkZW1vExample
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