Guía
API de envío
Envía desde tu servidor con POST /v1/send. Una respuesta 202 confirma que MailShogun ha aceptado el mensaje en cola. Consulta después su estado en el panel.
Necesitas un dominio verificado, un plan activo, un método de pago y una clave con permiso send. Ejecuta los ejemplos en tu servidor; nunca expongas la clave en el navegador.
Preparar la cuenta y el dominioRevisado el 11 de septiembre de 2026
Ejemplo ilustrativo del proceso. La aceptación en cola no garantiza la entrega ni la llegada a la bandeja de entrada.
POST /v1/send
Authorization: Bearer ms_…
{
"from": "hola@tudominio.com",
"to": ["destino@ejemplo.com"],
"subject": "Hola",
"text": "Mundo"
}
Base y autenticación
Cada clave empieza por ms_…. La creas en la ficha del dominio, en Conexión.
- Base
https://api.mailshogun.com- Cabecera
Authorization: Bearer ms_…
La clave necesita el permiso send y debe permitir tu IP, país y dominio de envío. También se usa para autenticar MCP, sujeto a sus permisos.
La clave se muestra una sola vez al crearla. Si la pierdes, revócala y crea otra.
POST /v1/send
Cuerpo JSON. Cabecera Content-Type application/json.
POST https://api.mailshogun.com/v1/send
Campos
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
from |
string |
sí | Remitente. Debe pertenecer a un dominio verificado de la cuenta (y al dominio fijado en la clave, si lo tiene). |
to |
string[] |
sí | Destinatarios. Obligatorio al menos uno; hay un máximo por petición. |
subject |
string |
no | Asunto del mensaje. |
html |
string |
no | Cuerpo HTML. Puedes enviar html, text o ambos. |
text |
string |
no | Cuerpo en texto plano. |
Respuesta correcta: HTTP 202 con {"status":"queued"}. El envío no es inmediato: primero entra en cola.
Ejemplos
Define MAILSHOGUN_API_KEY en el entorno del servidor. Sustituye from y to por un remitente verificado y un buzón que controles. curl usa sintaxis de shell POSIX; JavaScript usa Node.js con fetch en un archivo .mjs y PHP requiere la extensión cURL. Estos ejemplos sí envían al ejecutarlos.
curl
curl -X POST https://api.mailshogun.com/v1/send \
-H "Authorization: Bearer $MAILSHOGUN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "hola@tudominio.com",
"to": ["destino@ejemplo.com"],
"subject": "Hola",
"html": "<p>Hola desde MailShogun</p>",
"text": "Hola desde MailShogun"
}'
Node.js (fetch)
const apiKey = process.env.MAILSHOGUN_API_KEY;
if (!apiKey) throw new Error('Missing MAILSHOGUN_API_KEY');
const response = await fetch('https://api.mailshogun.com/v1/send', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: 'hola@tudominio.com',
to: ['destino@ejemplo.com'],
subject: 'Hola',
html: '<p>Hola desde MailShogun</p>',
text: 'Hola desde MailShogun'
})
});
const body = await response.json();
if (response.status !== 202) {
throw new Error('HTTP ' + response.status + ': ' + JSON.stringify(body));
}
console.log(body);
PHP
<?php
$apiKey = getenv('MAILSHOGUN_API_KEY');
if (!$apiKey) { throw new RuntimeException('Missing MAILSHOGUN_API_KEY'); }
$payload = [
'from' => 'hola@tudominio.com',
'to' => ['destino@ejemplo.com'],
'subject' => 'Hola',
'html' => '<p>Hola desde MailShogun</p>',
'text' => 'Hola desde MailShogun',
];
$ch = curl_init('https://api.mailshogun.com/v1/send');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
if ($body === false) { throw new RuntimeException(curl_error($ch)); }
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// 202 + {"status":"queued"} on success
if ($code !== 202) { throw new RuntimeException('HTTP ' . $code . ': ' . $body); }
echo $body;
Respuestas y errores
El cuerpo de error es JSON {"error":"…"}. Los textos los genera MailShogun al enviar.
| HTTP | Caso | Detalle |
|---|---|---|
202 |
Aceptado | {"status":"queued"}. El mensaje está en cola. |
401 |
Sin clave o clave inválida | falta la clave, clave no válida. Revisa el prefijo ms_ y que la clave siga activa. |
403 |
Clave restringida | Permiso send ausente, IP o país no autorizados, o remitente fuera del dominio de la clave. Corrige el permiso o usa una clave adecuada. |
400 |
Petición inválida o dominio | from y to son obligatorios; JSON inválido; remitente inválido; el dominio del remitente no está dado de alta (verificado) en esta cuenta. |
402 |
Facturación | Revisa el plan, el método de pago y posibles pagos vencidos en Facturación. |
429 |
Límites | Tope diario, demasiados envíos seguidos u otros límites de la cuenta (por ejemplo rebotes). Espera o revisa Facturación y reputación. |
500 |
Error interno | Conserva el código y la hora. Si persiste, contacta con soporte; evita reintentos sin comprobar el estado. |
503 |
Cola no disponible | Servicio temporalmente no disponible. Conserva la respuesta y revisa el estado antes de reintentar. |
Los límites diarios y de ritmo los impone la cuenta. Un 429 indica que has alcanzado un tope.
MCP
Las mismas claves API (Bearer ms_…). Las herramientas son list_domains y send_email.
- Endpoint
POST https://mcp.mailshogun.com/mcp- Cabecera
Authorization: Bearer ms_…- Herramientas
list_domains,send_email
Siguiente paso
Con el dominio verificado, el tramo y la tarjeta, crea la clave en Conexión y lanza el POST.
Comprueba el resultado
- HTTP 202 y status queued confirman la aceptación. Consulta Estadísticas y el buzón de destino para seguir el resultado.
- Corrige los errores 400, 401, 402 y 403 antes de repetir. Para 429 revisa el límite o bloqueo indicado; esperar no resuelve todos los casos.
- Si se corta la conexión y no recibes respuesta, el envío puede haber entrado en cola. Comprueba su estado antes de repetir: esta API no documenta una clave de idempotencia para evitar duplicados.
Continúa con
¿Sigue fallando? Indica a soporte el código de error, la hora y el dominio afectado. Oculta contraseñas, claves API y el contenido de los mensajes. Soporte