Automazioni
Crea flussi con trigger e passaggi, eseguili e analizza le loro esecuzioni.
- 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
Crea un’automazione
Crea un’automazione nello stato draft a partire da un grafo di passaggi e collegamenti. Richiede una chiave API con il permesso full. Le automazioni sono in beta.
L’automazione non fa nulla finché non la avvii. Ogni esecuzione costa 3 crediti all’avvio, e ogni email inviata da send_email o forward_email costa 1 credito in più. In un workspace non verificato, queste azioni possono inviare solo agli indirizzi email degli account dei membri del workspace.
/automationsParametri del corpo
contextstringobbligatoriocontact, email o event. Il contesto stabilisce quali trigger e azioni puoi usare e non si può cambiare in seguito. Vedi Contesti.namestringobbligatoriodescriptionstring | nullsettingsobjectstepsobject[]obbligatorioconnectionsobject[]obbligatorio[] per un grafo con un solo trigger. Vedi Collegamenti.Impostazioni
on_step_failurestringpredefinito: stopstop contrassegna l’esecuzione come failed quando un passaggio non riesce. skip registra il passaggio non riuscito e lascia terminare il resto dell’esecuzione.allow_reentrybooleanpredefinito: truefalse ignora un trigger quando lo stesso contatto (o la stessa email) ha già un’esecuzione in corso in questa automazione.max_concurrent_runsintegerpredefinito: 0running. 0 significa nessun limite.cooldown_secondsintegerpredefinito: 0Passaggi
keystringobbligatoriowelcome_email. I collegamenti, le statistiche dei passaggi e gli aggiornamenti fanno riferimento ai passaggi tramite la chiave.typestringobbligatoriotrigger o action.triggerstringactionstringconfigobjectCollegamenti
fromstringobbligatoriotostringobbligatoriobranchstringpredefinito: defaultfrom segue questo collegamento. I passaggi condition usano yes e no; i passaggi experiment usano le chiavi delle varianti. Tutti gli altri passaggi usano default.Contesti
| Contesto | Un’esecuzione riguarda | Trigger | Regole |
|---|---|---|---|
contact |
Un contatto. send_email invia a quel contatto. |
contact.*, system.* |
Uno o più trigger. Devono essere tutti collegati alla stessa prima azione. |
email |
Un’email (inviata o ricevuta). | email.*, system.* |
Uno o più trigger. Devono essere tutti collegati alla stessa prima azione. |
event |
Solo il payload del trigger. | event.*, system.* |
Esattamente un trigger. |
Ogni azione deve essere raggiungibile da un trigger. Un’esecuzione parte dall’azione collegata al trigger che è scattato e segue i collegamenti:
conditionsegue solo il collegamento il cuibranchèyesono, in base al risultato.experimentsegue i collegamenti della variante scelta. Quando quel percorso finisce, l’esecuzione prosegue sui collegamentidefaultdel passaggio experiment.waitritarda il passaggio successivo.- Tutte le altre azioni seguono i propri collegamenti
default. Un passaggio con più collegamenti in uscita li esegue tutti.
Un’esecuzione è completed quando non restano passaggi, failed quando un passaggio non riesce (con on_step_failure: "stop") e canceled quando interrompi l’automazione.
Trigger
| Trigger | Contesto | Quando scatta |
|---|---|---|
contact.added_to_audience |
contact | Un contatto si iscrive a una lista, reiscrizioni comprese. |
contact.removed_from_audience |
contact | Un iscritto viene eliminato da una lista. |
contact.updated |
contact | Un contatto viene aggiornato. |
contact.loaded_email |
contact | Un destinatario che è un contatto del workspace apre un’email. |
contact.clicked_in_email |
contact | Un destinatario che è un contatto del workspace fa clic su un link tracciato. |
contact.date_anniversary |
contact | Ogni giorno alle 00:00 UTC, per i contatti il cui campo personalizzato di tipo data (YYYY-MM-DD) ha il mese e il giorno di oggi. |
contact.on_date |
contact | Ogni giorno alle 00:00 UTC, per i contatti il cui campo personalizzato di tipo data corrisponde alla data di oggi. |
contact.visits_url, contact.on_purchase, contact.on_event |
contact | Accettati, ma per ora Emailit non li fa scattare. |
email.received |
Arriva un’email in entrata. | |
email.delivered, email.bounced, email.complained, email.loaded, email.clicked, email.failed, email.suppressed, email.canceled |
Si verifica l’evento email con lo stesso nome. | |
event.<name> |
event | Qualsiasi nome che inizia con event.. Per ora Emailit non genera eventi event.*; avvia le automazioni con contesto event tramite system.manual. |
system.manual |
tutti | Chiami Avvia un’esecuzione. |
system.schedule |
tutti | Accettato, ma per ora Emailit non fa scattare i trigger programmati. |
Campi config dei trigger:
audience_idstringcontact.added_to_audience e contact.removed_from_audience: scatta solo per questa lista (aud_…).date_fieldstringcontact.date_anniversary e contact.on_date: la chiave del campo personalizzato che contiene la data, ad esempio birthday.filterobjectScatta solo quando l’evento corrisponde: { "match": "all", "rules": [{ "field": "subject", "operator": "contains", "value": "Invoice" }] }. match è all (predefinito) o any. field è un percorso con punti all’interno dell’object dell’evento, ad esempio to o email.subject; un prefisso payload. iniziale viene ignorato.
Operatori: equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, in, not_in, is_set, is_not_set. Tutti gli operatori tranne is_set e is_not_set richiedono un value; in e not_in accettano un array.
Azioni
| Azione | Contesto | Configurazione |
|---|---|---|
send_email |
tutti | type (obbligatorio, template), template_id (obbligatorio: un ID tem_ o l’alias di un template pubblicato), from, subject, reply_to, to |
forward_email |
email, event | to (obbligatorio), from, subject, email_id |
wait |
tutti | seconds (obbligatorio, da 0 a 2.592.000, cioè 30 giorni) |
condition |
tutti | filter (obbligatorio, vedi sotto) |
experiment |
tutti | variants (obbligatorio), control |
call_webhook |
tutti | url (obbligatorio), method, headers, body |
run_automation |
tutti | automation_id (obbligatorio) |
end |
tutti | Nessuno |
add_to_audience |
contact | audience_id (obbligatorio) |
remove_from_audience |
contact | audience_id (obbligatorio) |
edit_contact |
contact | fields (obbligatorio) |
add_to_suppressions |
email, event | type, reason, email |
remove_from_suppressions |
email, event | email |
create_contact |
email, event | email, first_name, audience_id |
send_emailinvia il template. Per impostazione predefinitafromè il mittente del template, e deve appartenere a un dominio di invio verificato.subjectsostituisce l’oggetto del template.reply_toè un indirizzo o un array di indirizzi. Nel contestocontactl’email va al contatto dell’esecuzione; nei contestiemailedeventimpostato.forward_emailinoltra l’email dell’esecuzione (o l’email indicata inemail_id) ato. Per impostazione predefinitafromè il mittente originale esubjectèFwd: <original subject>.conditionaccetta{ "match": "all" | "any", "rules": [...] }con gli stessi operatori dei filtri dei trigger. I campi senza prefisso si riferiscono al contatto dell’esecuzione (first_name,custom_fields.plan) o all’email (rcpt_to,subject); per essere espliciti, aggiungi al campo il prefissocontact.,email.,payload.ometa.. Il passaggio prosegue suyesono.experimentsceglie a caso, in base al peso, una dellevariants(compresocontrol), ciascuna nella forma{ "key": "a", "weight": 50 }, e prosegue sulla diramazione che porta il nome della chiave scelta.call_webhookinvia una richiesta HTTP (metodo predefinitoPOST,Content-TypeJSON) e registra la classe dello stato (2xx,4xx,5xx) oppuretimeoutonetwork_error. Una risposta diversa da 2xx non fa fallire il passaggio.run_automationavvia un’esecuzione di un’altra automazione attiva con il payload di questa esecuzione. L’esecuzione corrente prosegue.edit_contactaccettafields: [{ "key": "first_name", "value": "Ada" }]. Le chiaviemail,first_name,last_nameeunsubscribedaggiornano il contatto; qualsiasi altra chiave imposta un campo personalizzato.add_to_suppressionssopprime l’indirizzo dell’esecuzione (typepredefinitorecipient,reasonpredefinitoautomation).remove_from_suppressionslo rimuove. Nel contestoevent, passaemail.create_contactcrea il contatto (o trova quello esistente) e facoltativamente lo iscrive aaudience_id. Nel contestoemail, per impostazione predefinitaemailè il destinatario dell’email.
I valori stringa nella configurazione di qualsiasi azione possono usare segnaposto che Emailit compila quando il passaggio viene eseguito: {{contact.email}}, {{email.mail_from}}, {{payload.object.subject}} o {{meta.source_event_id}}, ad esempio "to": "{{email.mail_from}}". I template inviati da send_email elaborano anche direttamente i campi del contatto, come {{ first_name }}.
Restituisce
Restituisce 201 Created con l’automazione in data, compresi l’ID di ogni passaggio (aus_…) e i collegamenti. status è draft.
La creazione controlla la struttura del grafo: nomi dei trigger e delle azioni validi per il contesto, chiavi univoche, collegamenti validi, raggiungibilità, e che ogni indirizzo from di send_email usi un dominio di invio verificato. Non controlla che la configurazione di ogni azione sia completa; questo controllo lo fa Aggiorna un’automazione. In caso di errore restituisce 400 con errors organizzato per percorso 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."]
}
}Recupera un’automazione
Recupera un’automazione con il suo grafo completo. Richiede una chiave API con il permesso full.
/automations/{id}Parametri di percorso
idstringobbligatorioaut_…).Restituisce
Restituisce l’automazione in data.
idstringaut_.contextstringcontact, email o event.namestringdescriptionstring | nullstatusstringdraft, running, paused, stopped o archived.settingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Vuoto se non ne hai impostata nessuna.last_triggered_atstring | nullpublished_atstring | nullstepsobject[]id (aus_…), key, type, trigger, action e config. I dettagli delle esecuzioni fanno riferimento ai passaggi tramite id; le statistiche tramite key.connectionsobject[]from e to e il suo branch.Per il significato di ogni trigger, azione e impostazione, vedi Crea un’automazione. Restituisce 404 se l’automazione non esiste o è stata eliminata.
{
"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."
}Aggiorna un’automazione
Aggiorna il nome, la descrizione, le impostazioni o il grafo di un’automazione. Richiede una chiave API con il permesso full. Il contesto non si può cambiare.
Per cambiare il grafo, invia insieme steps e connections: sostituiscono il grafo attuale. I passaggi la cui key esiste già mantengono l’ID e la cronologia delle esecuzioni, i passaggi che ometti vengono eliminati e le nuove chiavi vengono aggiunte. A differenza della creazione, l’aggiornamento convalida anche la configurazione di ogni azione (ad esempio, send_email richiede type e template_id, wait richiede seconds).
Metti in pausa l’automazione prima di cambiare il grafo di un’automazione attiva, poi avviala di nuovo perché i nuovi trigger abbiano effetto.
/automations/{id}Parametri di percorso
idstringobbligatorioaut_…).Parametri del corpo
namestringdescriptionstringsettingsobjecton_step_failure, allow_reentry, max_concurrent_runs, cooldown_seconds. Vedi Impostazioni.stepsobject[]connections. Vedi Passaggi.connectionsobject[]steps. Vedi Collegamenti.Restituisce
Restituisce l’automazione aggiornata in data, con message e notify. Se la convalida non riesce restituisce 400 con errors organizzato per percorso del campo, e 404 se l’automazione non esiste.
{
"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."
}Elenca le automazioni
Restituisce le automazioni del workspace, a partire dalla più recente, senza i loro passaggi e collegamenti. Richiede una chiave API con il permesso full. Le automazioni eliminate non vengono elencate.
/automationsParametri di query
pageintegerpredefinito: 1per_pageintegerpredefinito: 25filter[context]stringcontact, email o event.filter[status]stringdraft, running, paused, stopped o archived.filter[name]stringsortstringpredefinito: created_atname, created_at, updated_at o last_triggered_at.orderstringpredefinito: descasc o desc.Puoi usare anche i filtri generici key.condition=value su name, status, context e created_at, con match. Vedi Filtri e ordinamento.
Restituisce
dataobject[]id, context, name, description, status, settings, last_triggered_at, published_at, created_at, updated_at. In questo elenco settings è sempre un oggetto vuoto; per leggerlo, recupera l’automazione.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
}Elimina un’automazione
Elimina un’automazione. L’automazione scompare dagli elenchi e smette di reagire ai trigger. Richiede una chiave API con il permesso full.
Le esecuzioni già in corso non vengono annullate. Per annullarle, interrompi l’automazione prima di eliminarla.
/automations/{id}Parametri di percorso
idstringobbligatorioaut_…).Restituisce
Restituisce un message che conferma l’eliminazione. Restituisce 404 se l’automazione non esiste o è già stata eliminata.
{
"message": "Automation was deleted successfully.",
"notify": true
}{
"message": "Automation not found."
}Avvia un’automazione
Imposta lo stato dell’automazione su running. Da quel momento i trigger corrispondenti avviano esecuzioni; gli eventi avvenuti prima dell’avvio no. Richiede una chiave API con il permesso full.
Puoi avviare un’automazione draft, paused o stopped. Il primo avvio imposta published_at.
L’avvio non convalida di nuovo il grafo. Se hai creato l’automazione con Crea un’automazione, che controlla solo la struttura, assicurati che la configurazione di ogni azione sia completa, oppure invia una volta il grafo tramite Aggiorna un’automazione, che lo convalida per intero. Un passaggio con una configurazione incompleta non riesce quando un’esecuzione lo raggiunge.
/automations/{id}/startParametri di percorso
idstringobbligatorioaut_…).Restituisce
Restituisce l’automazione in data con status impostato su running. Restituisce 404 se l’automazione non esiste.
{
"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."
}Metti in pausa un’automazione
Imposta lo stato dell’automazione su paused. I suoi trigger smettono di avviare nuove esecuzioni, ma le esecuzioni già in corso proseguono, comprese quelle in attesa su un passaggio wait. Richiede una chiave API con il permesso full.
Per annullare anche le esecuzioni in corso, interrompi l’automazione invece di metterla in pausa. Per far scattare di nuovo i trigger, avviala un’altra volta.
/automations/{id}/pauseParametri di percorso
idstringobbligatorioaut_…).Restituisce
Restituisce l’automazione in data con status impostato su paused. Restituisce 404 se l’automazione non esiste.
{
"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."
}Interrompi un’automazione
Imposta lo stato dell’automazione su stopped e annulla ogni esecuzione ancora running; queste esecuzioni passano allo stato canceled e i passaggi rimanenti non vengono eseguiti. Richiede una chiave API con il permesso full.
L’interruzione è disponibile solo tramite l’API. Per lasciare proseguire le esecuzioni in corso, metti in pausa l’automazione invece di interromperla. Puoi avviare di nuovo un’automazione interrotta; le nuove esecuzioni ripartono da zero.
/automations/{id}/stopParametri di percorso
idstringobbligatorioaut_…).Restituisce
Restituisce l’automazione in data con status impostato su stopped. Restituisce 404 se l’automazione non esiste.
{
"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."
}Avvia un’esecuzione
Fa scattare il trigger system.manual con un payload a tua scelta. L’automazione deve essere running e avere un passaggio trigger system.manual; altrimenti non parte nessuna esecuzione. Richiede una chiave API con il permesso full. I trigger manuali sono disponibili solo tramite l’API.
L’esecuzione parte in modo asincrono e costa 3 crediti come qualsiasi altra esecuzione. La trovi con Elenca le esecuzioni.
/automations/{id}/triggerParametri di percorso
idstringobbligatorioaut_…).Parametri del corpo
payloadobjectI dati per l’esecuzione. Emailit aggiunge automation_id e salva il risultato come payload dell’esecuzione. I passaggi possono leggerlo con segnaposto come {{payload.order_id}} e con condizioni come payload.plan.
Di cosa tratta l’esecuzione dipende dal contesto dell’automazione:
contact: passacontact_id(con_…). Le azioni sui contatti esend_emailusano quel contatto.email: passaemail_id(em_…). Le azioni sulle email usano quell’email.event: dati qualsiasi. Impostatooemailnella configurazione delle azioni, ad esempio"to": "{{payload.customer_email}}".
Restituisce
Restituisce 200 con un message quando il trigger è stato messo in coda. Restituisce 422 se l’automazione non è running e 404 se non esiste.
{
"message": "Automation trigger dispatched."
}{
"message": "Automation must be running to trigger."
}{
"message": "Automation not found."
}Elenca le esecuzioni
Restituisce le esecuzioni di un’automazione, a partire dalla più recente. Ogni esecuzione è un percorso attraverso il grafo, avviato da un trigger. Richiede una chiave API con il permesso full.
/automations/{id}/runsParametri di percorso
idstringobbligatorioaut_…).Parametri di query
pageintegerpredefinito: 1per_pageintegerpredefinito: 25filter[status]stringrunning, completed, failed o canceled.Puoi anche filtrare con key.condition=value su status, event e created_at (ad esempio created_at.after=2026-10-01) e ordinare con order e direction sulle stesse chiavi. Vedi Filtri e ordinamento.
Restituisce
dataobject[]total_records, per_page, current_page, total_pagesintegerOgni esecuzione ha:
idstringaur_.automation_idstringaut_…).contact_idstring | nullcon_…) nel contesto contact.email_idstring | nullem_…) nel contesto email.event_idstring | nulleventstringcontact.added_to_audience o system.manual.payloadobjectmetaobjectfailure_reason, recupera l’esecuzione.statusstringrunning, completed, failed o canceled (l’automazione è stata interrotta).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."
}Recupera un’esecuzione
Recupera un’esecuzione di un’automazione, compresi i passaggi che ha eseguito. Richiede una chiave API con il permesso full.
/automations/{id}/runs/{run_id}Parametri di percorso
idstringobbligatorioaut_…).run_idstringobbligatorioaur_…).Restituisce
Restituisce l’esecuzione in data con i campi descritti in Elenca le esecuzioni, più payload e meta completi e un array run_steps.
payloadobject | null{ "object": { … } }) o il payload che hai passato ad Avvia un’esecuzione, con l’aggiunta di automation_id.metaobject | nullsource_event_id collega l’esecuzione all’evento che l’ha avviata. Le esecuzioni non riuscite possono avere failure_reason: insufficient_credits (non è stato possibile addebitare i 3 crediti dell’esecuzione) o run_timeout (l’esecuzione era ancora running dopo 72 ore senza alcun passaggio in attesa).run_stepsobject[]Una voce per ogni passaggio raggiunto dall’esecuzione:
step_id: l’ID del passaggio (aus_…). Confrontalo consteps[].iddi Recupera un’automazione.status:running,waiting(un passaggiowaitnon ancora trascorso),completedofailed.data: il risultato del passaggio. Ad esempiosend_emailrestituisce{ "result": "email_queued", "email_oid": "em_…", "to": "…" },conditionrestituisce{ "result": true, "branch": "yes" }e i passaggi non riusciti restituiscono{ "error": "…" }.started_at,completed_at,created_at.
Restituisce 404 se l’automazione o l’esecuzione non esiste.
{
"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."
}Recupera le statistiche
Restituisce i conteggi di ogni passaggio di un’automazione, indicizzati per chiave del passaggio. Richiede una chiave API con il permesso full.
/automations/{id}/statsParametri di percorso
idstringobbligatorioaut_…).Parametri di query
sincestring2026-10-01T00:00:00Z.untilstringrun_ids[]stringaur_…). Ripeti il parametro per indicare più esecuzioni.Restituisce
Restituisce data, un oggetto con una voce per ogni chiave di passaggio. I passaggi che nessuna esecuzione ha raggiunto hanno total pari a 0.
totalintegerby_statusobjectrunning, waiting, completed, failed.by_outcomeobjectsend_email e forward_email: accepted, poi lo stato più recente dell’email (delivered, loaded, clicked, bounced, failed, complained, unsubscribed, canceled). condition: matched, not_matched. experiment: la chiave della variante scelta. call_webhook: 2xx, 4xx, 5xx, timeout, network_error. Passaggi non riusciti: error.funnelobjectsend_email. Conteggi cumulativi: accepted include ogni email che è andata oltre, delivered include le email caricate e cliccate, e loaded include quelle cliccate. bounced, failed, complained e unsubscribed sono conteggi semplici.{
"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."
}Recupera le statistiche dei passaggi
Restituisce i conteggi di un passaggio di un’automazione. Richiede una chiave API con il permesso full. I campi sono gli stessi di Recupera le statistiche.
/automations/{id}/steps/{step_key}/statsParametri di percorso
idstringobbligatorioaut_…).step_keystringobbligatoriokey del passaggio, ad esempio welcome_email.Parametri di query
sincestringuntilstringRestituisce
Restituisce data con total, by_status, by_outcome e, per i passaggi send_email, funnel. Restituisce 404 se l’automazione o la chiave del passaggio non esiste.
{
"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."
}