Enviar email desde plantilla
Mantenga un único diseño para cada factura, bienvenida o aviso de envío y rellene los datos en cada mensaje, como el nombre del cliente o el pedido 1234. Cambiar una frase ya no exige cambiar el código. Pague por uso, sin suscripción.
Esta tarea no está disponible ahora mismo, así que no se puede contratar. No se cobra nada por ella.
Cómo funciona y APIfusiona sus variables
El problema de tener HTML incrustado en el código
La mayoría de los equipos empieza concatenando cadenas de texto o inyectando datos en una plantilla en línea dentro de la propia aplicación, y funciona bien hasta que cambian tres cosas a la vez: el equipo de marketing quiere un pie de página nuevo, legal pide agregar un aviso, y un error de tipeo en la plantilla de confirmación de envío llega a producción porque nadie revisó ese texto.
Guardar la plantilla de nuestro lado y llamarla por referencia saca el HTML por completo del pipeline de despliegue: un cambio de copy deja de requerir un cambio de código.
Por qué la fusión de correo es más antigua de lo que parece
El mail-merge no es una idea nueva: es anterior a la web por décadas, y viene de las cartas modelo generadas a partir de un formato fijo y una lista de nombres. La mecánica es la misma; lo que se modernizó fue la tubería.
Consistencia a escala, sin revisión de diseño cada vez
Como el diseño vive en un solo lugar, cada factura, mensaje de bienvenida o actualización de envío se ve igual sin importar qué servicio de su sistema lo haya disparado. Esa consistencia importa más de lo que parece: un cliente que recibe tres correos visualmente distintos de la misma empresa en una semana empieza a sospechar que el tercero es un intento de phishing.
Qué puede hacer con ella
Correos de factura recurrente
Un proceso de facturación fusiona el nombre del cliente, el monto y la fecha de vencimiento en una plantilla de factura guardada cada ciclo, sin que un desarrollador vuelva a tocar el diseño.
Secuencias de bienvenida
Un evento de registro dispara la plantilla de bienvenida con el nombre y los detalles del plan del usuario, manteniendo idéntico el correo de onboarding de la marca en cada camino de registro.
Notificaciones en varios idiomas
El mismo evento llama a una plantilla guardada distinta según el idioma, manteniendo los nombres de las variables iguales mientras el texto y el diseño cambian según el idioma.
Preguntas frecuentes
¿Hay una capa gratuita para probar plantillas?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Puedo usar lógica condicional dentro de una plantilla?
La plantilla acepta marcadores de posición con nombre que se fusionan con los valores que envía; consulte la documentación de la plantilla para la sintaxis exacta admitida.
¿Qué pasa si omito una variable requerida?
La solicitud se valida antes de encolar el envío, así que una variable requerida faltante devuelve un error claro en vez de enviar un correo incompleto.
¿Puedo actualizar una plantilla sin redesplegar mi aplicación?
Esa es la ventaja principal: la plantilla vive de nuestro lado, así que editar su diseño o su texto nunca requiere un cambio de código ni un despliegue.
¿Cómo funcionan los huecos de una plantilla?
Escribe el mensaje una vez con huecos con nombre, por ejemplo el nombre del cliente y el número de pedido, y envía los valores con cada mensaje. Cada hueco se sustituye por su valor antes de poner el correo en cola, así cada cliente recibe un mensaje personal.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. Esta capacidad está disponible actualmente mediante la API, no como herramienta interactiva en la Web.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/notify/email-template \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"template":"Hola {nombre}, tu pedido {id} va en camino.","to":"ada@example.com"}'const res = await fetch("https://api.kit.forhosting.com/notify/email-template", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"template": "Hola {nombre}, tu pedido {id} va en camino.",
"to": "ada@example.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/notify/email-template",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"template": "Hola {nombre}, tu pedido {id} va en camino.",
"to": "ada@example.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/notify/email-template", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"template":"Hola {nombre}, tu pedido {id} va en camino.","to":"ada@example.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"template":"Hola {nombre}, tu pedido {id} va en camino.","to":"ada@example.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/notify/email-template", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"template": "Hola {nombre}, tu pedido {id} va en camino.",
"to": "ada@example.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "notify.email_template",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
POST /notify/email-template toma la plantilla que ya guardó con nosotros y fusiona en ella las variables de una sola solicitud —un nombre, un monto, una fecha de vencimiento—, de modo que el HTML nunca vuelve a vivir dentro del código de su aplicación. Es el endpoint para equipos que envían la misma forma de mensaje cientos de veces al día con datos distintos cada vez.
Cómo funciona la fusión en la práctica
Registra una plantilla una sola vez, con marcadores de posición dentro de ella, y luego llama a este endpoint con el identificador de la plantilla y un objeto plano de valores —customer_name, invoice_total, ship_date—, y el servicio completa los espacios y encola el envío. La llamada devuelve un task_id de inmediato; la fusión real y la entrega ocurren un momento después, con el resultado reportado mediante un webhook firmado o un enlace firmado válido por 24 horas.
Por qué la fusión de correo es más antigua de lo que parece
Lo que cambió es que la 'carta' ahora es HTML renderizado en decenas de clientes de correo inconsistentes entre sí, y la 'lista' es una llamada a una API disparada desde un checkout o un proceso de facturación en lugar de una hoja de cálculo.
Su encaje dentro de flujos automatizados
Una tarea fallida dispara tres reintentos automáticos y nunca se cobra, así que es seguro conectarla directo a flujos que corren sin supervisión. Este endpoint combina naturalmente con cualquier sistema orientado a eventos —un consumidor de cola, un cron de facturación, un manejador de registros— porque quien llama solo necesita conocer el nombre de la plantilla y los datos, nunca el marcado.
Casos de integración
Actualizaciones de estado de envío
Un webhook de logística fusiona número de rastreo y transportista en la plantilla de envío en el momento en que un paquete cambia de estado.
Preguntas técnicas
¿Cómo registro una plantilla?
Guarda la plantilla con nosotros una sola vez, definiendo marcadores de posición dentro del HTML; después de eso, cada llamada a este endpoint solo referencia la plantilla y aporta los valores.
¿Cuánto cuesta?
$0.002 por solicitud más $0.0035 por correo enviado, igual que un envío estándar: usar plantillas no agrega costo extra.
¿Cómo obtengo el resultado del envío?
La llamada devuelve un task_id de inmediato, y el resultado de la entrega llega por un webhook firmado o un enlace firmado válido por 24 horas.
¿Es distinto al endpoint de email simple?
Sí: el endpoint simple recibe el cuerpo completo en la solicitud, mientras que este referencia una plantilla guardada y solo envía las variables a fusionar en ella.