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}
- POST/automations/{id}/runs/{run_id}/cancel
- POST/automations/{id}/exit
- GET/automations/runs
- 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
exit_conditionsobject[]Cancela la ejecución de un contacto en cuanto se cumple una de estas condiciones (contexto contact, hasta 20). Cada elemento es un selector de evento, con el nombre del disparador en event más sus campos de configuración, como { "event": "contact.tag_added", "tag": "customer" } o { "event": "contact.on_event", "event_name": "purchase" }, o una condición sobre el contacto, { "condition": { "match": "all", "rules": [...] } }, con las reglas de la acción condition. Los selectores aceptan todos los disparadores de contacto excepto los de fecha y contact.visits_url, y un filter opcional, como las configuraciones de los disparadores. Los eventos de segmento (con segment_id obligatorio) y los de comercio electrónico están en alfa, como sus disparadores. Los selectores contact.on_event, aquí y en los pasos goal y wait_until, requieren un plan Pro, Business o Custom. Consulta Condiciones de salida y objetivos.
exit_on_audience_removalbooleanpor defecto: falsetrue cancela una ejecución iniciada por contact.added_to_audience cuando el contacto se quita de esa lista, se da de baja de ella o se da de baja de todos los emails de marketing.on_step_failurestringpor defecto: stopstop marca la ejecución como failed cuando falla un paso. skip registra el paso fallido y continúa por sus aristas default (o por no después de un condition fallido).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 wait_until usan matched y timeout (eventos y condiciones) o default y passed (fechas); 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.wait_untilsolo siguematchedotimeout(eventos y condiciones), odefaultopassed(fechas).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. - A un paso
goaltambién se puede llegar fuera de orden: cuando el contacto cumple el objetivo, la ejecución salta a él y continúa a partir de él.
Una ejecución queda completed cuando no quedan pasos o se ejecuta un paso end_run, failed cuando falla un paso (con on_step_failure: "stop") y canceled cuando se cumple una condición de salida, la ejecución se cancela o 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.added_to_segment |
contact | Un contacto entra en un segmento con seguimiento. No se dispara con los cambios causados por editar el segmento. Alfa: solo el equipo de Emailit puede añadir disparadores de segmento; las demás peticiones devuelven 403 con error: "segments_alpha". |
contact.removed_from_segment |
contact | Un contacto sale de un segmento con seguimiento. No se dispara con los cambios causados por editar el segmento. Alfa, como contact.added_to_segment. |
contact.created |
contact | Se crea un contacto. |
contact.updated |
contact | Se actualiza un contacto, también sus etiquetas y su puntuación. |
contact.tag_added, contact.tag_removed |
contact | Se añade una etiqueta al contacto o se le quita. |
contact.score_changed |
contact | Cambia la puntuación de lead del contacto. |
contact.unsubscribed |
contact | El contacto se da de baja de una lista o de todos los emails de marketing. |
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.on_date |
contact | Llega la fecha de un campo personalizado de fecha, opcionalmente con un desfase en días o semanas, a una hora del día en una zona horaria. Una vez, o cada año con repeat: "yearly". |
contact.date_anniversary |
contact | Cada año, en el mes y el día de un campo personalizado de fecha, con las mismas opciones. |
contact.on_event |
contact | Un evento personalizado (c:) o un evento del espacio de trabajo (w:) para el contacto. Planes Business y Custom: los demás planes reciben 403 con error: "plan_required" y required_plan: "business". |
form.submitted |
contact | Se envía un formulario con una dirección de email. |
contact.on_purchase |
contact | Un contacto realiza un nuevo pedido. Alfa: solo el equipo de Emailit puede añadir disparadores de comercio electrónico; las demás peticiones devuelven 403 con error: "commerce_alpha". |
contact.abandoned_cart |
contact | Se abandona el carrito de un contacto. Alfa, como contact.on_purchase. |
contact.visits_url |
contact | Se acepta, pero Emailit todavía no lo 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_…).segment_idstringcontact.added_to_segment y contact.removed_from_segment: el segmento con seguimiento (seg_…). Opcional al crear la automatización y obligatorio al actualizar sus pasos. Un segmento que no existe o que no tiene seguimiento devuelve 400.include_current_membersbooleanpor defecto: falsecontact.added_to_segment: en el primer inicio de la automatización, inicia también una ejecución para cada contacto que ya está en el segmento. Se siguen aplicando los ajustes de reentrada.date_fieldstringcontact.date_anniversary y contact.on_date: la clave del campo personalizado que contiene la fecha, por ejemplo birthday.offset, time, timezone, repeatobject, string, string, stringoffset es { "amount": 3, "unit": "days", "direction": "before" } (unit days o weeks), time es HH:MM (por defecto, 00:00), timezone es un nombre IANA (por defecto, UTC) y repeat es once o yearly en contact.on_date.tagstringcontact.tag_added y contact.tag_removed: solo esta etiqueta.threshold, directionnumber, stringcontact.score_changed: solo cuando la puntuación cruza threshold, hacia arriba (up, por defecto) o hacia abajo (down).fieldstringcontact.updated: solo cuando ha cambiado este campo, por ejemplo custom_fields.purchased, tags o score.event_namestringcontact.on_event: el nombre del evento, como purchase (coincide con c:purchase y w:purchase) o w:webinar.attended. Omítelo para cualquier evento de espacio de trabajo o personalizado. Filtra por las propiedades del evento con filter, por ejemplo properties.total.automation_id, campaign_id, link_containsstringform_idstringform.submitted: solo este formulario.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, email_type, tracking |
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) |
wait_until |
todos (modos event y condition: contact) |
mode (date, event o condition) y los campos de ese modo |
condition |
todos | filter (obligatorio, consulta Condiciones) |
goal |
contact | event o condition, if_not_met |
experiment |
todos | variants (obligatorio), control |
call_webhook |
todos | url (obligatorio), method, headers, body, secret, fail_on_error |
run_automation |
todos | automation_id (obligatorio), exit_current |
exit_automation |
contact | automation_ids o all: true |
end_run |
todos | Ninguna |
end |
todos | Ninguna |
add_tag, remove_tag |
contact | tags (obligatorio) |
update_score |
contact | operation (add, subtract o set), value (obligatorio) |
add_to_audience |
contact | audience_id (obligatorio), emit_events |
remove_from_audience |
contact | audience_id (obligatorio), mode (remove o unsubscribe), emit_events |
update_subscription |
contact | action (subscribe o unsubscribe, obligatorio), scope (audience, all_audiences o global), audience_id |
edit_contact |
contact | fields (obligatorio), emit_events |
add_to_suppressions |
email, event | type, reason, email |
remove_from_suppressions |
email, event | email |
create_contact |
email, event | email, first_name, audience_id, emit_events |
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, y puede ser un marcador. En el contextocontact, el email se envía al contacto de la ejecución; en los contextosemailyevent, indicato.email_typeesmarketing(por defecto en el contextocontact: se omite para los contactos dados de baja y lleva un enlace de baja y cabecerasList-Unsubscribe) otransactional.tracking: { "loads": true, "clicks": true }sustituye la configuración de seguimiento del dominio, ytracking: {}vuelve a ella.wait_untilespera a una fecha:{ "mode": "date", "date": { "type": "global", "key": "webinar_date" }, "offset": { "amount": 1, "unit": "days", "direction": "before" }, "time": "09:00", "timezone": "Europe/Prague", "if_passed": "continue" }, dondedate.typeescontact(confield),global(conkey),fixed(convalue) opayload(conpath), eif_passedescontinueobranch. Para un evento:{ "mode": "event", "event": { "event": "contact.clicked_in_email" }, "timeout": { "amount": 2, "unit": "days" } }. Para una condición:{ "mode": "condition", "condition": { ... }, "timeout": ... }. Las esperas duran como máximo 365 días. Consulta Wait until.goalacepta un selector de evento enevent(como enexit_conditions) o unacondition. Cuando el contacto lo cumple, la ejecución salta al objetivo.if_not_met(continue,waitoend) decide qué ocurre cuando una ejecución llega al objetivo antes de cumplirlo. Los pasos de objetivo requieren un plan Pro, Business o Custom.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": [...] }. Consulta Condiciones. 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. Sinbody, envía la automatización, la ejecución, el contacto y el payload en JSON. Consecret, el cuerpo se firma enX-Emailit-Signature. Una respuesta que no sea 2xx no hace fallar el paso, salvo quefail_on_errorseatrue. Las direcciones privadas están bloqueadas.run_automationinicia una ejecución de otra automatización en marcha para el mismo contacto, con el payload de esta ejecución. La ejecución actual continúa, o termina conexit_current: true.exit_automationcancela las ejecuciones en curso del contacto en las automatizaciones deautomation_ids, o en todas las demás automatizaciones conall: true.end_runtermina la ejecución, incluidas las demás ramas.endsolo termina su propia rama.add_tagyremove_tagcambian las etiquetas del contacto.update_scorecambia la puntuación de lead.update_subscriptionsuscribe al contacto o lo da de baja de una lista, de todas las listas (solounsubscribe) o de todos los emails de marketing (global).remove_from_audienceelimina la pertenencia del contacto a la lista (mode: "remove", por defecto) o lo mantiene en la lista como dado de baja (mode: "unsubscribe").emit_events(por defectotrue) enadd_to_audience,remove_from_audience,create_contactyedit_contactenvía los eventossubscriber.*ycontact.*habituales, así que los webhooks los reciben y se inician otras automatizaciones. Los pasos guardados antes del 2026-10-20 tienenemit_events: false, y sus pasosremove_from_audiencetienenmode: "unsubscribe".edit_contactaceptafields: [{ "key": "first_name", "value": "Ada" }]. Las clavesemail,first_name,last_nameyunsubscribedactualizan el contacto; cualquier otra clave (con o sincustom_fields.) asigna un valor a un campo personalizado, convertido a su tipo.operationesset(por defecto),clear,incrementodecrement.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}}, {{cf.plan}}, {{global.webinar_link}}, {{email.mail_from}}, {{payload.object.subject}} o {{meta.source_event_id}}, por ejemplo "to": "{{email.mail_from}}". Las plantillas que envía send_email, y su subject, se renderizan con Temple y también tienen directamente los campos del contacto, como {{ first_name }}, {{tags}} y {{score}}.
Condiciones
Un filtro condition (y también las condiciones de wait_until y goal y las exit_conditions) es { "match": "all" | "any", "rules": [...] }. Una regla es { "field", "operator", "value" }, o un grupo anidado { "match", "rules" }, con hasta 3 niveles y 50 reglas.
field |
operator |
value |
|---|---|---|
Campos del contacto (email, first_name, last_name, created_at, unsubscribed, score), subscribed, custom_fields.<key>, global.<key>, payload.<path>, meta.<path>, contact.<path>, email.<path> |
equals, not_equals, contains, not_contains, starts_with, ends_with, in, not_in, is_set, is_not_set, greater_than, less_than, greater_or_equal, less_or_equal, is_true, is_false, before, after, on, is_past, is_future, within_last, within_next, more_than_ago, more_than_from_now |
El valor. Los operadores de días aceptan un número de días o { "amount", "unit" }. No hace falta con is_set, is_not_set, is_true, is_false, is_past ni is_future. |
tags |
contains, not_contains, in, not_in, is_set, is_not_set |
Una etiqueta, o un array para in y not_in. |
audience |
is_subscribed, is_not_subscribed, is_member, is_not_member |
Un ID de lista (aud_…). |
engagement |
opened, not_opened, clicked, not_clicked |
"run", "automation", { "scope": "step", "step": "<key>" }, { "scope": "any", "days": 30 } o { "scope": "campaign", "campaign_id": "cmp_…" }. |
segment |
is_member, is_not_member |
Un ID de segmento (seg_…), con seguimiento o sin él. Alfa. |
commerce.<field> |
Los operadores de segmento del campo, salvo cinco que usan los nombres de esta tabla: greater_or_equal, less_or_equal, within_last, within_next y more_than_ago |
El valor que acepta la regla de segmento. Alfa. Consulta más abajo. |
Los campos sin prefijo se resuelven contra el contacto (first_name, custom_fields.plan) o el email (rcpt_to, subject) de la ejecución. subscribed es true cuando el contacto puede recibir emails de marketing.
Las reglas commerce.<field> usan los campos de comercio electrónico de los segmentos y se evalúan de la misma forma: orders_count, total_spent, average_order_value, first_order_at, last_order_at, expected_next_order_at, last_active_at, churn_risk, purchased, viewed_product, used_coupon y cart, por ejemplo { "field": "commerce.purchased", "operator": "has", "value": { "days": 30, "product_ids": ["sku-1"] } }. Las reglas de segmento y de comercio electrónico están en alfa: las demás peticiones que las añaden devuelven 403 con error segments_alpha o commerce_alpha. Las automatizaciones que ya las tienen siguen funcionando para todos.
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 y las ramas sean válidas, que todos los pasos sean alcanzables, los settings 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.
Las funciones que el plan del espacio de trabajo no incluye devuelven 403 con error: "plan_required", el plan más bajo que las incluye en required_plan y un message. Los pasos goal y los selectores contact.on_event en exit_conditions, goal y wait_until requieren pro, y el disparador contact.on_event requiere business.
{
"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). Cuando un paso conserva su key y su acción, los ajustes que no incluyas en su config conservan sus valores guardados: email_type y tracking en send_email, emit_events en los pasos de contacto y mode en remove_from_audience. Envía un ajuste para cambiarlo; tracking: {} vuelve a la configuración de seguimiento del dominio.
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
namestringdescriptionstringsettingsobjectexit_conditions, exit_on_audience_removal, on_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Consulta Configuración. Las condiciones de salida nuevas se aplican a las ejecuciones en curso, también en las automatizaciones en marcha.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, 403 con error: "plan_required" cuando la actualización añade un paso, un disparador o una condición de salida que el plan no incluye (consulta Crear una automatización), y 404 si la automatización no existe. Lo que la automatización ya tiene sigue estando permitido después de bajar de plan.
{
"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. Solo en el primer inicio, los disparadores contact.added_to_segment con include_current_members: true también inician una ejecución para cada contacto que ya está en su segmento con seguimiento.
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.filter[contact_id]stringcon_…). Para ver las ejecuciones de un contacto en todas las automatizaciones, usa Listar las ejecuciones de un contacto.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.cancel_reasonstring | nullexit_condition, left_audience, canceled_by_user (o el reason que enviaste), exited_by_api, exited_by_automation, automation_stopped o contact_deleted.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, un array run_steps y un array waits.
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). Las ejecuciones canceladas tienen cancel_reason, y las completadas que terminaron antes de tiempo tienen ended_by, como end_run_step, moved_to_automation o goal_not_met. Las ejecuciones iniciadas por otra automatización tienen depth y, además, parent_run_id (si las inició un paso Start automation) o caused_by (si las inició un cambio hecho por un paso).run_stepsobject[]Una entrada por cada paso al que llegó la ejecución:
step_id: el ID del paso (aus_…), ystep_keyyaction, la clave y la acción del paso.status:running,waiting(un pasowaitowait_untilque aún no ha terminado),completed,failed,skipped(omitido porque la ejecución saltó a un objetivo o terminó antes de tiempo) ocanceled.outcome: el resultado, por ejemplo el último estado del email que envió un pasosend_email(delivered,loaded,clicked…),skippeden un email de marketing a un contacto dado de baja,matchedonot_matcheden una condición,matchedotimeouten unwait_until, oreachedonot_reacheden un objetivo.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.
waitsobject[]Las esperas de la ejecución en pasos wait_until (de evento o de condición) y goal: id, step_key, kind (event o condition), event, status (waiting, matched, timed_out o canceled), timeout_at, created_at y resolved_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."
}Cancelar una ejecución
Cancela una ejecución que sigue en running. Los pasos que esperan en un Time delay o un Wait until se cancelan, no se ejecuta ningún paso más y el estado de la ejecución pasa a ser canceled. Requiere una clave de API con el permiso full.
Las ejecuciones canceladas no se pueden reanudar. Para cancelar todas las ejecuciones de un contacto en la automatización, usa Quitar un contacto. Para cancelar ejecuciones automáticamente, usa condiciones de salida.
/automations/{id}/runs/{run_id}/cancelParámetros de ruta
idstringobligatorioaut_…).run_idstringobligatorioaur_…).Parámetros del cuerpo
reasonstringpor defecto: canceled_by_usercancel_reason de la ejecución, de hasta 200 caracteres.Devuelve
Devuelve la ejecución en data, con status canceled y cancel_reason. Devuelve 404 si la automatización o la ejecución no existen, y 422 si la ejecución no está en curso.
Quitar un contacto de una automatización
Cancela todas las ejecuciones de esta automatización que siguen en running para un contacto, por ejemplo desde tu tienda cuando se paga un pedido. Las ejecuciones pasan al estado canceled. Requiere una clave de API con el permiso full.
Para sacar a los contactos automáticamente cuando ocurre algo, usa en su lugar condiciones de salida.
/automations/{id}/exitParámetros de ruta
idstringobligatorioaut_…).Parámetros del cuerpo
contact_idstringcon_…). Envía este campo o email.emailstringreasonstringpor defecto: exited_by_apicancel_reason de cada ejecución, de hasta 200 caracteres.Devuelve
dataobjectautomation_id, contact_id y canceled_runs, los ID de las ejecuciones canceladas. Vacío si el contacto no tenía ejecuciones en curso.messagestringCanceled 1 run.Devuelve 400 sin contact_id ni email, y 404 si la automatización o el contacto no existen.
Listar las ejecuciones de un contacto
Devuelve las últimas 100 ejecuciones de un contacto en todas las automatizaciones, de más reciente a más antigua, cada una con el nombre de la automatización. Requiere una clave de API con el permiso full.
/automations/runsParámetros de consulta
contact_idstringcon_…). Envía este campo o email.emailstringstatusstringrunning, completed, failed o canceled.Devuelve
dataobject[]automation_name.Devuelve 400 sin contact_id ni email, y 404 si el contacto no existe.
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."
}