Automatizaciones
Crea flujos de trabajo a partir de disparadores y pasos, lánzalos y consulta sus ejecuciones.
- POST/automations
- GET/automations/{id}
- POST/automations/{id}
- GET/automations
- DEL/automations/{id}
- POST/automations/{id}/start
- POST/automations/{id}/pause
- POST/automations/{id}/stop
- POST/automations/{id}/trigger
- GET/automations/{id}/runs
- GET/automations/{id}/runs/{run_id}
- GET/automations/{id}/stats
- GET/automations/{id}/steps/{step_key}/stats
Crear una automatización
Crea una automatización con el estado draft a partir de un grafo de pasos y conexiones. Requiere una clave de API con el permiso full. Las automatizaciones están en beta.
La automatización no hace nada hasta que la inicias. Cada ejecución cuesta 3 créditos al empezar, y cada email que envía send_email o forward_email cuesta 1 crédito más. En un espacio de trabajo sin verificar, esas acciones solo pueden enviar a las direcciones de email de las cuentas de los miembros del espacio de trabajo.
/automationsParámetros del cuerpo
contextstringobligatoriocontact, email o event. El contexto determina qué disparadores y acciones puedes usar, y no se puede cambiar después. Consulta Contextos.namestringobligatoriodescriptionstring | nullsettingsobjectstepsobject[]obligatorioconnectionsobject[]obligatorio[] para un grafo que solo tenga un disparador. Consulta Conexiones.Configuración
on_step_failurestringpor defecto: stopstop marca la ejecución como failed cuando falla un paso. skip registra el paso fallido y deja que el resto de la ejecución termine.allow_reentrybooleanpor defecto: truefalse ignora un disparo cuando el mismo contacto (o email) ya tiene una ejecución en curso en esta automatización.max_concurrent_runsintegerpor defecto: 0running a la vez. 0 significa sin límite.cooldown_secondsintegerpor defecto: 0Pasos
keystringobligatoriowelcome_email. Las conexiones, las estadísticas de pasos y las actualizaciones hacen referencia a los pasos por su clave.typestringobligatoriotrigger o action.triggerstringactionstringconfigobjectConexiones
fromstringobligatoriotostringobligatoriobranchstringpor defecto: defaultfrom sigue esta arista. Los pasos condition usan yes y no; los pasos experiment usan claves de variante. Todos los demás pasos usan default.Contextos
| Contexto | Una ejecución trata sobre | Disparadores | Reglas |
|---|---|---|---|
contact |
Un contacto. send_email se envía a ese contacto. |
contact.*, system.* |
Uno o varios disparadores. Todos deben conectarse a la misma primera acción. |
email |
Un email (enviado o recibido). | email.*, system.* |
Uno o varios disparadores. Todos deben conectarse a la misma primera acción. |
event |
Solo el payload del disparador. | event.*, system.* |
Exactamente un disparador. |
Todas las acciones deben ser alcanzables desde un disparador. Una ejecución empieza en la acción conectada al disparador que se ha disparado y sigue las conexiones:
conditionsolo sigue la arista cuyobranchesyesono, según el resultado.experimentsigue las aristas de la variante elegida. Cuando termina ese camino, la ejecución continúa por las aristasdefaultdel paso de experimento.waitretrasa el paso siguiente.- Todas las demás acciones siguen sus aristas
default. Un paso con varias aristas de salida las recorre todas.
Una ejecución queda completed cuando no quedan pasos, failed cuando falla un paso (con on_step_failure: "stop") y canceled cuando detienes la automatización.
Disparadores
| Disparador | Contexto | Se dispara cuando |
|---|---|---|
contact.added_to_audience |
contact | Un contacto se suscribe a una lista de contactos, también cuando vuelve a suscribirse. |
contact.removed_from_audience |
contact | Se elimina un suscriptor de una lista de contactos. |
contact.updated |
contact | Se actualiza un contacto. |
contact.loaded_email |
contact | Un destinatario que es contacto del espacio de trabajo abre un email. |
contact.clicked_in_email |
contact | Un destinatario que es contacto del espacio de trabajo hace clic en un enlace con seguimiento. |
contact.date_anniversary |
contact | Cada día a las 00:00 UTC, para los contactos cuyo campo personalizado de fecha (YYYY-MM-DD) coincide en mes y día con la fecha de hoy. |
contact.on_date |
contact | Cada día a las 00:00 UTC, para los contactos cuyo campo personalizado de fecha es igual a la fecha de hoy. |
contact.visits_url, contact.on_purchase, contact.on_event |
contact | Se aceptan, pero Emailit todavía no los dispara. |
email.received |
Llega un email entrante. | |
email.delivered, email.bounced, email.complained, email.loaded, email.clicked, email.failed, email.suppressed, email.canceled |
Se produce el evento de email del mismo nombre. | |
event.<name> |
event | Cualquier nombre que empiece por event.. Emailit todavía no emite eventos event.*; inicia las automatizaciones de eventos con system.manual. |
system.manual |
todos | Llamas a Lanzar una ejecución. |
system.schedule |
todos | Se acepta, pero Emailit todavía no dispara los disparadores programados. |
Campos de config del disparador:
audience_idstringcontact.added_to_audience y contact.removed_from_audience: solo se dispara para esta lista de contactos (aud_…).date_fieldstringcontact.date_anniversary y contact.on_date: la clave del campo personalizado que contiene la fecha, por ejemplo birthday.filterobjectSolo se dispara cuando el evento cumple el filtro: { "match": "all", "rules": [{ "field": "subject", "operator": "contains", "value": "Invoice" }] }. match es all (por defecto) o any. field es una ruta con puntos dentro del object del evento, por ejemplo to o email.subject; un prefijo payload. inicial se ignora.
Operadores: equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, in, not_in, is_set, is_not_set. Todos los operadores excepto is_set e is_not_set necesitan un value; in y not_in aceptan un array.
Acciones
| Acción | Contexto | Configuración |
|---|---|---|
send_email |
todos | type (obligatorio, template), template_id (obligatorio: un ID tem_ o el alias de una plantilla publicada), from, subject, reply_to, to |
forward_email |
email, event | to (obligatorio), from, subject, email_id |
wait |
todos | seconds (obligatorio, de 0 a 2.592.000, es decir, 30 días) |
condition |
todos | filter (obligatorio, consulta más abajo) |
experiment |
todos | variants (obligatorio), control |
call_webhook |
todos | url (obligatorio), method, headers, body |
run_automation |
todos | automation_id (obligatorio) |
end |
todos | Ninguna |
add_to_audience |
contact | audience_id (obligatorio) |
remove_from_audience |
contact | audience_id (obligatorio) |
edit_contact |
contact | fields (obligatorio) |
add_to_suppressions |
email, event | type, reason, email |
remove_from_suppressions |
email, event | email |
create_contact |
email, event | email, first_name, audience_id |
send_emailenvía la plantilla. Por defecto,fromes el remitente de la plantilla, y debe pertenecer a un dominio de envío verificado.subjectsustituye el asunto de la plantilla.reply_toes una dirección o un array de direcciones. En el contextocontact, el email se envía al contacto de la ejecución; en los contextosemailyevent, indicato.forward_emailreenvía el email de la ejecución (o el email deemail_id) ato. Por defecto,fromes el remitente original ysubjectesFwd: <original subject>.conditionacepta{ "match": "all" | "any", "rules": [...] }con los mismos operadores que los filtros de los disparadores. Los campos sin prefijo se resuelven contra el contacto (first_name,custom_fields.plan) o el email (rcpt_to,subject) de la ejecución; añade a un campo el prefijocontact.,email.,payload.ometa.para indicarlo de forma explícita. El paso continúa poryeso porno.experimentelige al azar, según su peso, una de lasvariants(ycontrol), cada una con la forma{ "key": "a", "weight": 50 }, y continúa por la rama que lleva el nombre de la clave elegida.call_webhookenvía una petición HTTP (método por defectoPOST,Content-TypeJSON) y registra la clase de estado (2xx,4xx,5xx),timeoutonetwork_error. Una respuesta que no sea 2xx no hace fallar el paso.run_automationinicia una ejecución de otra automatización en marcha con el payload de esta ejecución. La ejecución actual continúa.edit_contactaceptafields: [{ "key": "first_name", "value": "Ada" }]. Las clavesemail,first_name,last_nameyunsubscribedactualizan el contacto; cualquier otra clave asigna un valor a un campo personalizado.add_to_suppressionsbloquea la dirección de la ejecución (typepor defectorecipient,reasonpor defectoautomation).remove_from_suppressionsla desbloquea. En el contextoevent, pasaemail.create_contactcrea el contacto (o encuentra el que ya existe) y, opcionalmente, lo suscribe aaudience_id. En el contextoemail,emailes por defecto el destinatario del email.
Los valores de cadena de la configuración de cualquier acción pueden usar marcadores que Emailit rellena cuando se ejecuta el paso: {{contact.email}}, {{email.mail_from}}, {{payload.object.subject}} o {{meta.source_event_id}}, por ejemplo "to": "{{email.mail_from}}". Las plantillas que envía send_email también renderizan directamente los campos del contacto, como {{ first_name }}.
Devuelve
Devuelve 201 Created con la automatización en data, incluidos el ID de cada paso (aus_…) y las conexiones. status es draft.
La creación comprueba la estructura del grafo: los nombres de los disparadores y de las acciones según el contexto, que las claves sean únicas, que las conexiones sean válidas, que todos los pasos sean alcanzables y que cualquier dirección from de send_email use un dominio de envío verificado. No comprueba que la configuración de cada acción esté completa; eso lo hace Actualizar una automatización. Los errores devuelven 400 con errors indexado por la ruta del campo.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "draft",
"settings": { "allow_reentry": false },
"last_triggered_at": null,
"published_at": null,
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-01T09:41:05.318274+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
},
{
"id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"key": "wait_1_day",
"type": "action",
"trigger": null,
"action": "wait",
"config": { "seconds": 86400 }
},
{
"id": "aus_3HOgOzxaXBgVRpLFtpvJNo4vd5c",
"key": "is_free_user",
"type": "action",
"trigger": null,
"action": "condition",
"config": {
"filter": {
"match": "all",
"rules": [{ "field": "custom_fields.plan", "operator": "is_not_set" }]
}
}
},
{
"id": "aus_3gCI5SWMPFVhOSawR6nz8sF55wp",
"key": "upgrade_tips",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "getting-started-tips" }
},
{
"id": "aus_3Pq7Wd2LxN8cVt5RmK0sHy4BfJe",
"key": "done",
"type": "action",
"trigger": null,
"action": "end",
"config": {}
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" },
{ "from": "welcome_email", "to": "wait_1_day", "branch": "default" },
{ "from": "wait_1_day", "to": "is_free_user", "branch": "default" },
{ "from": "is_free_user", "to": "upgrade_tips", "branch": "yes" },
{ "from": "is_free_user", "to": "done", "branch": "no" }
]
},
"message": "Automation was successfully created.",
"notify": true
}{
"message": "Validation failed.",
"errors": {
"steps.1.action": ["Action \"forward_email\" is not allowed for context \"contact\"."],
"steps": ["Action step \"upgrade_tips\" is not reachable from any trigger."]
}
}Obtener una automatización
Obtiene una automatización con su grafo completo. Requiere una clave de API con el permiso full.
/automations/{id}Parámetros de ruta
idstringobligatorioaut_…).Devuelve
Devuelve la automatización en data.
idstringaut_.contextstringcontact, email o event.namestringdescriptionstring | nullstatusstringdraft, running, paused, stopped o archived.settingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Vacío si no has configurado ninguna.last_triggered_atstring | nullpublished_atstring | nullstepsobject[]id (aus_…), key, type, trigger, action y config de cada paso. Los detalles de las ejecuciones hacen referencia a los pasos por su id; las estadísticas, por su key.connectionsobject[]from y to de cada arista y su branch.Para saber qué significa cada disparador, acción y opción de configuración, consulta Crear una automatización. Devuelve 404 si la automatización no existe o se eliminó.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
},
{
"id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"key": "wait_1_day",
"type": "action",
"trigger": null,
"action": "wait",
"config": { "seconds": 86400 }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" },
{ "from": "welcome_email", "to": "wait_1_day", "branch": "default" }
]
}
}{
"message": "Automation not found."
}Actualizar una automatización
Actualiza el nombre, la descripción, la configuración o el grafo de una automatización. Requiere una clave de API con el permiso full. El contexto no se puede cambiar.
Para cambiar el grafo, envía steps y connections juntos; sustituyen el grafo actual. Los pasos cuya key ya existe conservan su ID y su historial de ejecuciones, los pasos que no incluyas se eliminan y las claves nuevas se añaden. A diferencia de la creación, la actualización también valida la configuración de cada acción (por ejemplo, send_email necesita type y template_id, y wait necesita seconds).
Pausa la automatización antes de cambiar el grafo de una automatización en marcha y después vuelve a iniciarla para que los nuevos disparadores surtan efecto.
/automations/{id}Parámetros de ruta
idstringobligatorioaut_…).Parámetros del cuerpo
namestringdescriptionstringsettingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Consulta Configuración.stepsobject[]connections. Consulta Pasos.connectionsobject[]steps. Consulta Conexiones.Devuelve
Devuelve la automatización actualizada en data, con message y notify. Devuelve 400 con errors indexado por la ruta del campo si la validación falla, y 404 si la automatización no existe.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series (v2)",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "paused",
"settings": { "allow_reentry": false, "on_step_failure": "skip" },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-04T08:15:22.730115+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully updated.",
"notify": true
}{
"message": "Validation failed.",
"errors": {
"steps.2.config.seconds": ["Wait seconds cannot exceed 2592000 (30 days)."],
"steps.1.config.template_id": ["Template ID is required when type is \"template\"."]
}
}{
"message": "Automation not found."
}Listar automatizaciones
Devuelve las automatizaciones del espacio de trabajo, de la más reciente a la más antigua, sin sus pasos ni sus conexiones. Requiere una clave de API con el permiso full. Las automatizaciones eliminadas no se listan.
/automationsParámetros de consulta
pageintegerpor defecto: 1per_pageintegerpor defecto: 25filter[context]stringcontact, email o event.filter[status]stringdraft, running, paused, stopped o archived.filter[name]stringsortstringpor defecto: created_atname, created_at, updated_at o last_triggered_at.orderstringpor defecto: descasc o desc.También puedes usar los filtros genéricos key.condition=value sobre name, status, context y created_at, con match. Consulta Filtrado.
Devuelve
dataobject[]id, context, name, description, status, settings, last_triggered_at, published_at, created_at, updated_at. En esta lista, settings siempre es un objeto vacío; para consultarlo, obtén la automatización.total_recordsintegerper_pageintegercurrent_pageintegertotal_pagesinteger{
"data": [
{
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": {},
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00"
}
],
"total_records": 1,
"per_page": 50,
"current_page": 1,
"total_pages": 1
}Eliminar una automatización
Elimina una automatización. Desaparece de las listas y deja de reaccionar a los disparadores. Requiere una clave de API con el permiso full.
Las ejecuciones que ya están en curso no se cancelan. Para cancelarlas, detén la automatización antes de eliminarla.
/automations/{id}Parámetros de ruta
idstringobligatorioaut_…).Devuelve
Devuelve un message que confirma la eliminación. Devuelve 404 si la automatización no existe o ya se eliminó.
{
"message": "Automation was deleted successfully.",
"notify": true
}{
"message": "Automation not found."
}Iniciar una automatización
Cambia el estado de la automatización a running. A partir de ese momento, los disparadores que coinciden inician ejecuciones; los eventos que se produjeron antes de iniciarla, no. Requiere una clave de API con el permiso full.
Puedes iniciar una automatización draft, paused o stopped. El primer inicio asigna published_at.
Al iniciarla no se vuelve a validar el grafo. Si creaste la automatización con Crear una automatización, que solo comprueba la estructura, asegúrate de que la configuración de cada acción esté completa, o envía el grafo una vez con Actualizar una automatización, que lo valida por completo. Un paso con una configuración incompleta falla cuando una ejecución llega a él.
/automations/{id}/startParámetros de ruta
idstringobligatorioaut_…).Devuelve
Devuelve la automatización en data con status igual a running. Devuelve 404 si la automatización no existe.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "running",
"settings": { "allow_reentry": false },
"last_triggered_at": null,
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-01T10:00:02.204118+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully started.",
"notify": true
}{
"message": "Automation not found."
}Pausar una automatización
Cambia el estado de la automatización a paused. Sus disparadores dejan de iniciar ejecuciones nuevas, pero las ejecuciones en curso continúan, incluidas las que están esperando en un paso wait. Requiere una clave de API con el permiso full.
Si además quieres cancelar las ejecuciones en curso, detén la automatización. Para que vuelva a reaccionar a los disparadores, iníciala de nuevo.
/automations/{id}/pauseParámetros de ruta
idstringobligatorioaut_…).Devuelve
Devuelve la automatización en data con status igual a paused. Devuelve 404 si la automatización no existe.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "paused",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-04T08:10:51.004732+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully paused.",
"notify": true
}{
"message": "Automation not found."
}Detener una automatización
Cambia el estado de la automatización a stopped y cancela todas las ejecuciones que siguen en running; esas ejecuciones pasan al estado canceled y sus pasos restantes no se ejecutan. Requiere una clave de API con el permiso full.
Detener una automatización solo es posible a través de la API. Si quieres que las ejecuciones en curso continúen, pausa la automatización. Puedes volver a iniciar una automatización detenida; las ejecuciones nuevas empiezan desde cero.
/automations/{id}/stopParámetros de ruta
idstringobligatorioaut_…).Devuelve
Devuelve la automatización en data con status igual a stopped. Devuelve 404 si la automatización no existe.
{
"data": {
"id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"context": "contact",
"name": "Welcome series",
"description": "Welcome new subscribers, then nudge free users a day later.",
"status": "stopped",
"settings": { "allow_reentry": false },
"last_triggered_at": "2026-10-03T14:12:40.551870+00:00",
"published_at": "2026-10-01T10:00:02.204118+00:00",
"created_at": "2026-10-01T09:41:05.318274+00:00",
"updated_at": "2026-10-05T16:45:09.882301+00:00",
"steps": [
{
"id": "aus_3ZqpuxjmL1szZ8og6uGL1mT6QEJ",
"key": "joined",
"type": "trigger",
"trigger": "contact.added_to_audience",
"action": null,
"config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
},
{
"id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"key": "welcome_email",
"type": "action",
"trigger": null,
"action": "send_email",
"config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
}
],
"connections": [
{ "from": "joined", "to": "welcome_email", "branch": "default" }
]
},
"message": "Automation was successfully stopped.",
"notify": true
}{
"message": "Automation not found."
}Lanzar una ejecución
Dispara el disparador system.manual con el payload que elijas. La automatización debe estar en running y tener un paso de disparador system.manual; si no, no se inicia ninguna ejecución. Requiere una clave de API con el permiso full. Los disparadores manuales solo están disponibles a través de la API.
La ejecución se inicia de forma asíncrona y cuesta 3 créditos, como cualquier otra ejecución. Puedes encontrarla con Listar ejecuciones.
/automations/{id}/triggerParámetros de ruta
idstringobligatorioaut_…).Parámetros del cuerpo
payloadobjectLos datos de la ejecución. Emailit añade automation_id y guarda el resultado como el payload de la ejecución. Los pasos pueden leerlo con marcadores como {{payload.order_id}} y con condiciones como payload.plan.
Sobre qué trata la ejecución depende del contexto de la automatización:
contact: pasacontact_id(con_…). Las acciones de contacto ysend_emailusan ese contacto.email: pasaemail_id(em_…). Las acciones de email usan ese email.event: cualquier dato. Indicatooemailen la configuración de las acciones, por ejemplo"to": "{{payload.customer_email}}".
Devuelve
Devuelve 200 con un message cuando el disparo se pone en cola. Devuelve 422 si la automatización no está en running y 404 si no existe.
{
"message": "Automation trigger dispatched."
}{
"message": "Automation must be running to trigger."
}{
"message": "Automation not found."
}Listar ejecuciones
Devuelve las ejecuciones de una automatización, de la más reciente a la más antigua. Cada ejecución es un recorrido por el grafo que inicia un disparador. Requiere una clave de API con el permiso full.
/automations/{id}/runsParámetros de ruta
idstringobligatorioaut_…).Parámetros de consulta
pageintegerpor defecto: 1per_pageintegerpor defecto: 25filter[status]stringrunning, completed, failed o canceled.También puedes filtrar con key.condition=value sobre status, event y created_at (por ejemplo, created_at.after=2026-10-01), y ordenar con order y direction por esas mismas claves. Consulta Filtrado.
Devuelve
dataobject[]total_records, per_page, current_page, total_pagesintegerCada ejecución tiene:
idstringaur_.automation_idstringaut_…).contact_idstring | nullcon_…) en el contexto contact.email_idstring | nullem_…) en el contexto email.event_idstring | nulleventstringcontact.added_to_audience o system.manual.payloadobjectmetaobjectfailure_reason, obtén la ejecución.statusstringrunning, completed, failed o canceled (se detuvo la automatización).started_at, completed_at, created_at, updated_atstring | null{
"data": [
{
"id": "aur_3q6GdFk2eRSG093grI0v9e6REu8",
"automation_id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A",
"email_id": null,
"event_id": null,
"event": "contact.added_to_audience",
"payload": {},
"meta": {},
"status": "failed",
"started_at": "2026-10-03T14:12:40.551870+00:00",
"completed_at": "2026-10-03T14:12:41.093355+00:00",
"created_at": "2026-10-03T14:12:40.551870+00:00",
"updated_at": "2026-10-03T14:12:41.093355+00:00"
}
],
"total_records": 1,
"per_page": 25,
"current_page": 1,
"total_pages": 1
}{
"message": "Automation not found."
}Obtener una ejecución
Obtiene una ejecución de una automatización, incluidos los pasos que ejecutó. Requiere una clave de API con el permiso full.
/automations/{id}/runs/{run_id}Parámetros de ruta
idstringobligatorioaut_…).run_idstringobligatorioaur_…).Devuelve
Devuelve la ejecución en data con los campos que se describen en Listar ejecuciones, además de payload y meta completos y un array run_steps.
payloadobject | null{ "object": { … } }) o el payload que pasaste a Lanzar una ejecución, con automation_id añadido.metaobject | nullsource_event_id vincula la ejecución con el evento que la inició. Las ejecuciones fallidas pueden tener failure_reason: insufficient_credits (no se pudieron cobrar los 3 créditos de la ejecución) o run_timeout (la ejecución seguía en running después de 72 horas sin ningún paso en espera).run_stepsobject[]Una entrada por cada paso al que llegó la ejecución:
step_id: el ID del paso (aus_…). Relaciónalo consteps[].idde Obtener una automatización.status:running,waiting(un pasowaitcuyo tiempo aún no ha transcurrido),completedofailed.data: el resultado del paso. Por ejemplo,send_emaildevuelve{ "result": "email_queued", "email_oid": "em_…", "to": "…" },conditiondevuelve{ "result": true, "branch": "yes" }y los pasos fallidos devuelven{ "error": "…" }.started_at,completed_at,created_at.
Devuelve 404 si la automatización o la ejecución no existen.
{
"data": {
"id": "aur_3q6GdFk2eRSG093grI0v9e6REu8",
"automation_id": "aut_3xqC9YD79FZZA36uTekWTBO1ghe",
"contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A",
"email_id": null,
"event_id": null,
"event": "contact.added_to_audience",
"payload": {
"object": {
"id": "sub_3Fh2pQx9LmZr4Wt7Nc0bVd8KsYe",
"object": "subscriber",
"subscribed": true,
"audience": { "id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "name": "Newsletter" },
"contact": { "id": "con_3munwNLaXKUARc6ff9wPtxKVq4A", "email": "ada@example.com" }
}
},
"meta": { "source_event_id": "evt_3Kd8sWq1NzXc5Vb7Mt2LpRy0HgA" },
"status": "running",
"started_at": "2026-10-03T14:12:40.551870+00:00",
"completed_at": null,
"created_at": "2026-10-03T14:12:40.551870+00:00",
"updated_at": "2026-10-03T14:12:40.551870+00:00",
"run_steps": [
{
"step_id": "aus_3V5TZIXXak1SSmGcOmzPOeFaguQ",
"status": "completed",
"data": {
"result": "email_queued",
"outcome": "accepted",
"email_oid": "em_3Cp8cMgPskzB8tIlgUyNJkpDp9O",
"to": "ada@example.com"
},
"started_at": "2026-10-03T14:12:40.702113+00:00",
"completed_at": "2026-10-03T14:12:40.918540+00:00",
"created_at": "2026-10-03T14:12:40.702113+00:00"
},
{
"step_id": "aus_3vM0ORwEXCQcyS7rylfQBQEXjVk",
"status": "waiting",
"data": { "status": "waiting", "delayMs": 86400000, "seconds": 86400 },
"started_at": "2026-10-03T14:12:41.004221+00:00",
"completed_at": null,
"created_at": "2026-10-03T14:12:41.004221+00:00"
}
]
}
}{
"message": "Run not found."
}Obtener estadísticas
Devuelve los recuentos de todos los pasos de una automatización, indexados por la clave del paso. Requiere una clave de API con el permiso full.
/automations/{id}/statsParámetros de ruta
idstringobligatorioaut_…).Parámetros de consulta
sincestring2026-10-01T00:00:00Z.untilstringrun_ids[]stringaur_…). Repite el parámetro para indicar varias ejecuciones.Devuelve
Devuelve data, un objeto con una entrada por cada clave de paso. Los pasos a los que no ha llegado ninguna ejecución tienen un total de 0.
totalintegerby_statusobjectrunning, waiting, completed, failed.by_outcomeobjectsend_email y forward_email: accepted y, después, el último estado del email (delivered, loaded, clicked, bounced, failed, complained, unsubscribed, canceled). condition: matched, not_matched. experiment: la clave de la variante elegida. call_webhook: 2xx, 4xx, 5xx, timeout, network_error. Pasos fallidos: error.funnelobjectsend_email. Recuentos acumulados: accepted incluye todos los emails que llegaron más lejos, delivered incluye los emails cargados y con clic, y loaded incluye los emails con clic. bounced, failed, complained y unsubscribed son recuentos simples.{
"data": {
"joined": { "total": 0, "by_status": {}, "by_outcome": {} },
"welcome_email": {
"total": 412,
"by_status": { "completed": 409, "failed": 3 },
"by_outcome": { "delivered": 251, "loaded": 98, "clicked": 41, "bounced": 19, "error": 3 },
"funnel": {
"accepted": 390,
"delivered": 390,
"loaded": 139,
"clicked": 41,
"bounced": 19,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
},
"wait_1_day": {
"total": 409,
"by_status": { "completed": 352, "waiting": 57 },
"by_outcome": {}
},
"is_free_user": {
"total": 352,
"by_status": { "completed": 352 },
"by_outcome": { "matched": 270, "not_matched": 82 }
},
"upgrade_tips": {
"total": 270,
"by_status": { "completed": 270 },
"by_outcome": { "accepted": 12, "delivered": 180, "loaded": 61, "clicked": 17 },
"funnel": {
"accepted": 270,
"delivered": 258,
"loaded": 78,
"clicked": 17,
"bounced": 0,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
},
"done": {
"total": 82,
"by_status": { "completed": 82 },
"by_outcome": {}
}
}
}{
"message": "Automation not found."
}Obtener estadísticas de un paso
Devuelve los recuentos de un paso de una automatización. Requiere una clave de API con el permiso full. Los campos son los mismos que en Obtener estadísticas.
/automations/{id}/steps/{step_key}/statsParámetros de ruta
idstringobligatorioaut_…).step_keystringobligatoriokey del paso, por ejemplo welcome_email.Parámetros de consulta
sincestringuntilstringDevuelve
Devuelve data con total, by_status, by_outcome y, en los pasos send_email, funnel. Devuelve 404 si la automatización o la clave del paso no existen.
{
"data": {
"total": 412,
"by_status": { "completed": 409, "failed": 3 },
"by_outcome": { "delivered": 251, "loaded": 98, "clicked": 41, "bounced": 19, "error": 3 },
"funnel": {
"accepted": 390,
"delivered": 390,
"loaded": 139,
"clicked": 41,
"bounced": 19,
"failed": 0,
"complained": 0,
"unsubscribed": 0
}
}
}{
"message": "Step not found."
}