# Automatisierungen API

> Workflows aus Triggern und Schritten aufbauen, ausführen und ihre Durchläufe prüfen.

Basis-URL: `https://api.emailit.com/v2`. Authentifizieren Sie sich mit `Authorization: Bearer <API key>`.

## Automatisierung erstellen — POST /automations

> Eine Automatisierung als Entwurf aus einem Graphen von Trigger- und Aktionsschritten erstellen, etwa eine Willkommens-E-Mail, die gesendet wird, wenn ein Kontakt einer Kontaktliste beitritt.

# Automatisierung erstellen

Erstellt eine Automatisierung im Status `draft` aus einem Graphen von Schritten und Verbindungen. Erfordert einen API-Schlüssel mit dem Scope `full`. Automatisierungen sind in der Beta.

Die Automatisierung tut nichts, bis Sie sie [starten](/de/docs/api-reference/automations/start/). Jeder Durchlauf kostet beim Start 3 Credits, und jede E-Mail, die `send_email` oder `forward_email` sendet, kostet einen weiteren Credit. In einem nicht verifizierten Workspace können diese Aktionen nur an die E-Mail-Adressen der Konten von Workspace-Mitgliedern senden.

`POST /automations`

## Body-Parameter

- `context` (string, erforderlich): Worum es in jedem Durchlauf geht: `contact`, `email` oder `event`. Der Kontext bestimmt, welche Trigger und Aktionen Sie verwenden können, und lässt sich später nicht ändern. Siehe [Kontexte](#contexts).

- `name` (string, erforderlich): Name der Automatisierung, bis zu 191 Zeichen.

- `description` (string | null): Optionale Beschreibung.

- `settings` (object): Regeln für Durchläufe. Siehe [Einstellungen](#settings).

- `steps` (object[], erforderlich): Die Trigger- und Aktionsschritte, mindestens ein Trigger. Siehe [Schritte](#steps).

- `connections` (object[], erforderlich): Die Kanten zwischen den Schritten. Übergeben Sie `[]` für einen Graphen, der nur aus einem Trigger besteht. Siehe [Verbindungen](#connections).

### Einstellungen

- `on_step_failure` (string): `stop` markiert den Durchlauf als `failed`, wenn ein Schritt fehlschlägt. `skip` protokolliert den fehlgeschlagenen Schritt und lässt den Rest des Durchlaufs zu Ende laufen.

- `allow_reentry` (boolean): `false` überspringt einen Trigger, wenn derselbe Kontakt (oder dieselbe E-Mail) in dieser Automatisierung bereits einen laufenden Durchlauf hat.

- `max_concurrent_runs` (integer): Maximale Anzahl gleichzeitiger Durchläufe im Status `running`. `0` bedeutet kein Limit.

- `cooldown_seconds` (integer): Überspringt einen Trigger, wenn derselbe Kontakt (oder dieselbe E-Mail) innerhalb dieser Anzahl von Sekunden einen Durchlauf in dieser Automatisierung gestartet hat.

### Schritte

- `key` (string, erforderlich): Ihre Kennung für den Schritt, eindeutig innerhalb der Automatisierung, zum Beispiel `welcome_email`. Verbindungen, [Schrittstatistiken](/de/docs/api-reference/automations/step-stats/) und Aktualisierungen verweisen über diesen Schlüssel auf Schritte.

- `type` (string, erforderlich): `trigger` oder `action`.

- `trigger` (string): Name des Triggers, erforderlich, wenn `type` den Wert `trigger` hat. Siehe [Trigger](#triggers).

- `action` (string): Name der Aktion, erforderlich, wenn `type` den Wert `action` hat. Siehe [Aktionen](#actions).

- `config` (object): Einstellungen für den Trigger oder die Aktion.

### Verbindungen

- `from` (string, erforderlich): Schlüssel des Schritts, an dem die Kante beginnt.

- `to` (string, erforderlich): Schlüssel des nächsten Schritts.

- `branch` (string): Welches Ergebnis des Schritts in `from` dieser Kante folgt. Schritte vom Typ `condition` verwenden `yes` und `no`, Schritte vom Typ `experiment` die Schlüssel der Varianten. Alle anderen Schritte verwenden `default`.

## Kontexte

| Kontext | Ein Durchlauf betrifft | Trigger | Regeln |
| --- | --- | --- | --- |
| `contact` | Einen Kontakt. `send_email` geht an diesen Kontakt. | `contact.*`, `system.*` | Ein oder mehrere Trigger. Sie müssen alle mit derselben ersten Aktion verbunden sein. |
| `email` | Eine E-Mail (gesendet oder empfangen). | `email.*`, `system.*` | Ein oder mehrere Trigger. Sie müssen alle mit derselben ersten Aktion verbunden sein. |
| `event` | Nur den Payload des Triggers. | `event.*`, `system.*` | Genau ein Trigger. |

Jede Aktion muss von einem Trigger aus erreichbar sein. Ein Durchlauf beginnt bei der Aktion, die mit dem ausgelösten Trigger verbunden ist, und folgt den Verbindungen:

- `condition` folgt je nach Ergebnis nur der Kante, deren `branch` `yes` oder `no` ist.
- `experiment` folgt den Kanten der gewählten Variante. Wenn dieser Pfad endet, setzt sich der Durchlauf an den `default`-Kanten des Experiment-Schritts fort.
- `wait` verzögert den nächsten Schritt.
- Alle anderen Aktionen folgen ihren `default`-Kanten. Ein Schritt mit mehreren ausgehenden Kanten führt sie alle aus.

Ein Durchlauf ist `completed`, wenn keine Schritte mehr übrig sind, `failed`, wenn ein Schritt fehlschlägt (mit `on_step_failure: "stop"`), und `canceled`, wenn Sie [die Automatisierung stoppen](/de/docs/api-reference/automations/stop/).

## Trigger

| Trigger | Kontext | Wird ausgelöst, wenn |
| --- | --- | --- |
| `contact.added_to_audience` | contact | Ein Kontakt eine Kontaktliste abonniert, auch bei erneuter Anmeldung. |
| `contact.removed_from_audience` | contact | Ein Abonnent aus einer Kontaktliste gelöscht wird. |
| `contact.updated` | contact | Ein Kontakt aktualisiert wird. |
| `contact.loaded_email` | contact | Ein Empfänger, der ein Kontakt im Workspace ist, eine E-Mail öffnet. |
| `contact.clicked_in_email` | contact | Ein Empfänger, der ein Kontakt im Workspace ist, auf einen getrackten Link klickt. |
| `contact.date_anniversary` | contact | Täglich um 00:00 UTC, für Kontakte, deren eigenes Datumsfeld (`YYYY-MM-DD`) den heutigen Monat und Tag enthält. |
| `contact.on_date` | contact | Täglich um 00:00 UTC, für Kontakte, deren eigenes Datumsfeld dem heutigen Datum entspricht. |
| `contact.visits_url`, `contact.on_purchase`, `contact.on_event` | contact | Werden akzeptiert, aber Emailit löst sie noch nicht aus. |
| `email.received` | email | Eine eingehende E-Mail eintrifft. |
| `email.delivered`, `email.bounced`, `email.complained`, `email.loaded`, `email.clicked`, `email.failed`, `email.suppressed`, `email.canceled` | email | Das gleichnamige E-Mail-Event eintritt. |
| `event.<name>` | event | Jeder Name, der mit `event.` beginnt. Emailit löst noch keine `event.*`-Events aus; starten Sie Event-Automatisierungen mit `system.manual`. |
| `system.manual` | alle | Sie [Durchlauf auslösen](/de/docs/api-reference/automations/trigger/) aufrufen. |
| `system.schedule` | alle | Wird akzeptiert, aber Emailit löst geplante Trigger noch nicht aus. |

Felder in `config` für Trigger:

- `audience_id` (string): Für `contact.added_to_audience` und `contact.removed_from_audience`: nur für diese Kontaktliste (`aud_…`) auslösen.

- `date_field` (string): Für `contact.date_anniversary` und `contact.on_date`: der Schlüssel des [eigenen Felds](/de/docs/contacts/custom-fields/), das das Datum enthält, zum Beispiel `birthday`.

- `filter` (object): Nur auslösen, wenn das Event passt: `{ "match": "all", "rules": [{ "field": "subject", "operator": "contains", "value": "Invoice" }] }`. `match` ist `all` (Standardwert) oder `any`. `field` ist ein Pfad mit Punkten in das `object` des Events, zum Beispiel `to` oder `email.subject`; ein vorangestelltes `payload.` wird ignoriert. Operatoren: `equals`, `not_equals`, `contains`, `not_contains`, `starts_with`, `ends_with`, `greater_than`, `less_than`, `in`, `not_in`, `is_set`, `is_not_set`. Jeder Operator außer `is_set` und `is_not_set` braucht einen `value`; `in` und `not_in` erwarten ein Array.

## Aktionen

| Aktion | Kontext | Konfiguration |
| --- | --- | --- |
| `send_email` | alle | `type` (erforderlich, `template`), `template_id` (erforderlich: eine `tem_`-ID oder der Alias einer veröffentlichten Vorlage), `from`, `subject`, `reply_to`, `to` |
| `forward_email` | email, event | `to` (erforderlich), `from`, `subject`, `email_id` |
| `wait` | alle | `seconds` (erforderlich, 0 bis 2.592.000, also 30 Tage) |
| `condition` | alle | `filter` (erforderlich, siehe unten) |
| `experiment` | alle | `variants` (erforderlich), `control` |
| `call_webhook` | alle | `url` (erforderlich), `method`, `headers`, `body` |
| `run_automation` | alle | `automation_id` (erforderlich) |
| `end` | alle | Keine |
| `add_to_audience` | contact | `audience_id` (erforderlich) |
| `remove_from_audience` | contact | `audience_id` (erforderlich) |
| `edit_contact` | contact | `fields` (erforderlich) |
| `add_to_suppressions` | email, event | `type`, `reason`, `email` |
| `remove_from_suppressions` | email, event | `email` |
| `create_contact` | email, event | `email`, `first_name`, `audience_id` |

- **`send_email`** sendet die Vorlage. `from` ist standardmäßig der Absender der Vorlage und muss auf einer verifizierten Versanddomain liegen. `subject` überschreibt den Betreff der Vorlage. `reply_to` ist eine Adresse oder ein Array von Adressen. Im Kontext `contact` geht die E-Mail an den Kontakt des Durchlaufs; in den Kontexten `email` und `event` setzen Sie `to`.
- **`forward_email`** leitet die E-Mail des Durchlaufs (oder die E-Mail in `email_id`) an `to` weiter. `from` ist standardmäßig der ursprüngliche Absender und `subject` standardmäßig `Fwd: <original subject>`.
- **`condition`** erwartet `{ "match": "all" | "any", "rules": [...] }` mit denselben Operatoren wie Trigger-Filter. Felder ohne Präfix beziehen sich auf den Kontakt des Durchlaufs (`first_name`, `custom_fields.plan`) oder auf die E-Mail (`rcpt_to`, `subject`); stellen Sie einem Feld `contact.`, `email.`, `payload.` oder `meta.` voran, um es eindeutig anzugeben. Der Schritt wird mit `yes` oder `no` fortgesetzt.
- **`experiment`** wählt eine der `variants` (einschließlich `control`), jeweils `{ "key": "a", "weight": 50 }`, zufällig nach Gewichtung aus und setzt den Durchlauf auf dem Zweig fort, der nach dem gewählten Schlüssel benannt ist.
- **`call_webhook`** sendet eine HTTP-Anfrage (Standardmethode `POST`, JSON als `Content-Type`) und protokolliert die Statusklasse (`2xx`, `4xx`, `5xx`) oder `timeout` oder `network_error`. Eine Antwort außerhalb von 2xx lässt den Schritt nicht fehlschlagen.
- **`run_automation`** startet einen Durchlauf einer anderen laufenden Automatisierung mit dem Payload dieses Durchlaufs. Der aktuelle Durchlauf läuft weiter.
- **`edit_contact`** erwartet `fields: [{ "key": "first_name", "value": "Ada" }]`. Die Schlüssel `email`, `first_name`, `last_name` und `unsubscribed` aktualisieren den Kontakt; jeder andere Schlüssel setzt ein eigenes Feld.
- **`add_to_suppressions`** sperrt die Adresse des Durchlaufs (Standardwert für `type`: `recipient`, für `reason`: `automation`). **`remove_from_suppressions`** hebt die Sperrung auf. Im Kontext `event` übergeben Sie `email`.
- **`create_contact`** erstellt den Kontakt (oder findet den vorhandenen) und meldet ihn optional bei `audience_id` an. Im Kontext `email` ist `email` standardmäßig der Empfänger der E-Mail.

String-Werte in jeder Aktionskonfiguration können Platzhalter enthalten, die Emailit beim Ausführen des Schritts füllt: `{{contact.email}}`, `{{email.mail_from}}`, `{{payload.object.subject}}` oder `{{meta.source_event_id}}`, zum Beispiel `"to": "{{email.mail_from}}"`. Vorlagen, die `send_email` sendet, rendern außerdem die Felder des Kontakts direkt, etwa `{{ first_name }}`.

## Rückgabe

Gibt `201 Created` mit der Automatisierung in `data` zurück, einschließlich der ID jedes Schritts (`aus_…`) und der Verbindungen. `status` ist `draft`.

Beim Erstellen wird die Struktur des Graphen geprüft: Trigger- und Aktionsnamen für den Kontext, eindeutige Schlüssel, gültige Verbindungen, Erreichbarkeit und ob jede Absenderadresse `from` in `send_email` eine verifizierte Versanddomain verwendet. Nicht geprüft wird, ob jede Aktionskonfiguration vollständig ist; das übernimmt [Automatisierung aktualisieren](/de/docs/api-reference/automations/update/). Fehler geben `400` mit `errors` zurück, nach Feldpfad gegliedert.

**Anfrage** `POST /automations`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/automations \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome series",
    "context": "contact",
    "description": "Welcome new subscribers, then nudge free users a day later.",
    "settings": { "allow_reentry": false },
    "steps": [
      {
        "key": "joined",
        "type": "trigger",
        "trigger": "contact.added_to_audience",
        "config": { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" }
      },
      {
        "key": "welcome_email",
        "type": "action",
        "action": "send_email",
        "config": { "type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>" }
      },
      {
        "key": "wait_1_day",
        "type": "action",
        "action": "wait",
        "config": { "seconds": 86400 }
      },
      {
        "key": "is_free_user",
        "type": "action",
        "action": "condition",
        "config": {
          "filter": {
            "match": "all",
            "rules": [{ "field": "custom_fields.plan", "operator": "is_not_set" }]
          }
        }
      },
      {
        "key": "upgrade_tips",
        "type": "action",
        "action": "send_email",
        "config": { "type": "template", "template_id": "getting-started-tips" }
      },
      { "key": "done", "type": "action", "action": "end" }
    ],
    "connections": [
      { "from": "joined", "to": "welcome_email" },
      { "from": "welcome_email", "to": "wait_1_day" },
      { "from": "wait_1_day", "to": "is_free_user" },
      { "from": "is_free_user", "to": "upgrade_tips", "branch": "yes" },
      { "from": "is_free_user", "to": "done", "branch": "no" }
    ]
  }'
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/automations', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EMAILIT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Welcome series',
    context: 'contact',
    description: 'Welcome new subscribers, then nudge free users a day later.',
    settings: { allow_reentry: false },
    steps: [
      {
        key: 'joined',
        type: 'trigger',
        trigger: 'contact.added_to_audience',
        config: { audience_id: 'aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV' },
      },
      {
        key: 'welcome_email',
        type: 'action',
        action: 'send_email',
        config: { type: 'template', template_id: 'welcome', from: 'Acme <hello@acme.com>' },
      },
      { key: 'wait_1_day', type: 'action', action: 'wait', config: { seconds: 86400 } },
      {
        key: 'is_free_user',
        type: 'action',
        action: 'condition',
        config: {
          filter: { match: 'all', rules: [{ field: 'custom_fields.plan', operator: 'is_not_set' }] },
        },
      },
      {
        key: 'upgrade_tips',
        type: 'action',
        action: 'send_email',
        config: { type: 'template', template_id: 'getting-started-tips' },
      },
      { key: 'done', type: 'action', action: 'end' },
    ],
    connections: [
      { from: 'joined', to: 'welcome_email' },
      { from: 'welcome_email', to: 'wait_1_day' },
      { from: 'wait_1_day', to: 'is_free_user' },
      { from: 'is_free_user', to: 'upgrade_tips', branch: 'yes' },
      { from: 'is_free_user', to: 'done', branch: 'no' },
    ],
  }),
});
const { data: automation } = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/automations",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    json={
        "name": "Welcome series",
        "context": "contact",
        "description": "Welcome new subscribers, then nudge free users a day later.",
        "settings": {"allow_reentry": False},
        "steps": [
            {
                "key": "joined",
                "type": "trigger",
                "trigger": "contact.added_to_audience",
                "config": {"audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV"},
            },
            {
                "key": "welcome_email",
                "type": "action",
                "action": "send_email",
                "config": {"type": "template", "template_id": "welcome", "from": "Acme <hello@acme.com>"},
            },
            {"key": "wait_1_day", "type": "action", "action": "wait", "config": {"seconds": 86400}},
            {
                "key": "is_free_user",
                "type": "action",
                "action": "condition",
                "config": {
                    "filter": {
                        "match": "all",
                        "rules": [{"field": "custom_fields.plan", "operator": "is_not_set"}],
                    }
                },
            },
            {
                "key": "upgrade_tips",
                "type": "action",
                "action": "send_email",
                "config": {"type": "template", "template_id": "getting-started-tips"},
            },
            {"key": "done", "type": "action", "action": "end"},
        ],
        "connections": [
            {"from": "joined", "to": "welcome_email"},
            {"from": "welcome_email", "to": "wait_1_day"},
            {"from": "wait_1_day", "to": "is_free_user"},
            {"from": "is_free_user", "to": "upgrade_tips", "branch": "yes"},
            {"from": "is_free_user", "to": "done", "branch": "no"},
        ],
    },
)
automation = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->post('automations', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'json' => [
        'name' => 'Welcome series',
        'context' => 'contact',
        'description' => 'Welcome new subscribers, then nudge free users a day later.',
        'settings' => ['allow_reentry' => false],
        'steps' => [
            [
                'key' => 'joined',
                'type' => 'trigger',
                'trigger' => 'contact.added_to_audience',
                'config' => ['audience_id' => 'aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV'],
            ],
            [
                'key' => 'welcome_email',
                'type' => 'action',
                'action' => 'send_email',
                'config' => ['type' => 'template', 'template_id' => 'welcome', 'from' => 'Acme <hello@acme.com>'],
            ],
            ['key' => 'wait_1_day', 'type' => 'action', 'action' => 'wait', 'config' => ['seconds' => 86400]],
            [
                'key' => 'is_free_user',
                'type' => 'action',
                'action' => 'condition',
                'config' => [
                    'filter' => [
                        'match' => 'all',
                        'rules' => [['field' => 'custom_fields.plan', 'operator' => 'is_not_set']],
                    ],
                ],
            ],
            [
                'key' => 'upgrade_tips',
                'type' => 'action',
                'action' => 'send_email',
                'config' => ['type' => 'template', 'template_id' => 'getting-started-tips'],
            ],
            ['key' => 'done', 'type' => 'action', 'action' => 'end'],
        ],
        'connections' => [
            ['from' => 'joined', 'to' => 'welcome_email'],
            ['from' => 'welcome_email', 'to' => 'wait_1_day'],
            ['from' => 'wait_1_day', 'to' => 'is_free_user'],
            ['from' => 'is_free_user', 'to' => 'upgrade_tips', 'branch' => 'yes'],
            ['from' => 'is_free_user', 'to' => 'done', 'branch' => 'no'],
        ],
    ],
]);
$automation = json_decode($response->getBody(), true)['data'];
```

**201**

```json
{
  "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
}
```

**400**

```json
{
  "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."]
  }
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/create/

## Automatisierung abrufen — GET /automations/{id}

> Eine Automatisierung mit Status, Einstellungen, Trigger- und Aktionsschritten und den Verbindungen dazwischen abrufen.

# Automatisierung abrufen

Ruft eine Automatisierung mit ihrem vollständigen Graphen ab. Erfordert einen API-Schlüssel mit dem Scope `full`.

`GET /automations/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Rückgabe

Gibt die Automatisierung in `data` zurück.

- `id` (string): ID der Automatisierung mit dem Präfix `aut_`.

- `context` (string): `contact`, `email` oder `event`.

- `name` (string): Name der Automatisierung.

- `description` (string | null): Optionale Beschreibung.

- `status` (string): `draft`, `running`, `paused`, `stopped` oder `archived`.

- `settings` (object): Regeln für Durchläufe: `on_step_failure`, `allow_reentry`, `max_concurrent_runs`, `cooldown_seconds`. Leer, wenn Sie keine festgelegt haben.

- `last_triggered_at` (string | null): Zeitpunkt, zu dem die Automatisierung zuletzt einen Durchlauf gestartet hat.

- `published_at` (string | null): Zeitpunkt, zu dem die Automatisierung zum ersten Mal gestartet wurde.

- `steps` (object[]): Für jeden Schritt `id` (`aus_…`), `key`, `type`, `trigger`, `action` und `config`. Details zu Durchläufen verweisen über `id` auf Schritte, Statistiken über `key`.

- `connections` (object[]): Für jede Kante die Schrittschlüssel `from` und `to` sowie ihr `branch`.

Was jeder Trigger, jede Aktion und jede Einstellung bedeutet, erfahren Sie unter [Automatisierung erstellen](/de/docs/api-reference/automations/create/). Gibt `404` zurück, wenn die Automatisierung nicht existiert oder gelöscht wurde.

**Anfrage** `GET /automations/{id}`

**cURL**

```bash
curl https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe', {
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const { data: automation } = await res.json();
```

**Python**

```python
import os, requests

r = requests.get(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
automation = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->get('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$automation = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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" }
    ]
  }
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/get/

## Automatisierung aktualisieren — POST /automations/{id}

> Eine Automatisierung umbenennen, ihre Einstellungen ändern oder ihren Graphen aus Schritten und Verbindungen mit vollständiger Validierung ersetzen.

# Automatisierung aktualisieren

Aktualisiert Name, Beschreibung, Einstellungen oder Graphen einer Automatisierung. Erfordert einen API-Schlüssel mit dem Scope `full`. Der Kontext lässt sich nicht ändern.

Um den Graphen zu ändern, senden Sie `steps` und `connections` zusammen; sie ersetzen den aktuellen Graphen. Schritte, deren `key` bereits existiert, behalten ihre ID und ihren Durchlaufverlauf, Schritte, die Sie weglassen, werden gelöscht, und neue Schlüssel werden hinzugefügt. Anders als beim Erstellen wird beim Aktualisieren auch die Konfiguration jeder Aktion validiert (zum Beispiel braucht `send_email` die Felder `type` und `template_id` und `wait` das Feld `seconds`).

[Pausieren Sie die Automatisierung](/de/docs/api-reference/automations/pause/), bevor Sie den Graphen einer laufenden Automatisierung ändern, und [starten Sie sie](/de/docs/api-reference/automations/start/) dann erneut, damit die neuen Trigger wirksam werden.

`POST /automations/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Body-Parameter

- `name` (string): Name, bis zu 191 Zeichen.

- `description` (string): Beschreibung.

- `settings` (object): Ersetzt alle Einstellungen: `on_step_failure`, `allow_reentry`, `max_concurrent_runs`, `cooldown_seconds`. Siehe [Einstellungen](/de/docs/api-reference/automations/create/#settings).

- `steps` (object[]): Die vollständige Liste der Schritte. Erforderlich, wenn Sie `connections` senden. Siehe [Schritte](/de/docs/api-reference/automations/create/#steps).

- `connections` (object[]): Die vollständige Liste der Verbindungen. Erforderlich, wenn Sie `steps` senden. Siehe [Verbindungen](/de/docs/api-reference/automations/create/#connections).

## Rückgabe

Gibt die aktualisierte Automatisierung in `data` zurück, mit `message` und `notify`. Gibt bei fehlgeschlagener Validierung `400` mit `errors` nach Feldpfad zurück und `404`, wenn die Automatisierung nicht existiert.

**Anfrage** `POST /automations/{id}`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome series (v2)",
    "settings": { "allow_reentry": false, "on_step_failure": "skip" }
  }'
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EMAILIT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Welcome series (v2)',
    settings: { allow_reentry: false, on_step_failure: 'skip' },
  }),
});
const { data: automation } = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    json={
        "name": "Welcome series (v2)",
        "settings": {"allow_reentry": False, "on_step_failure": "skip"},
    },
)
automation = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->post('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'json' => [
        'name' => 'Welcome series (v2)',
        'settings' => ['allow_reentry' => false, 'on_step_failure' => 'skip'],
    ],
]);
$automation = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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
}
```

**400**

```json
{
  "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\"."]
  }
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/update/

## Automatisierungen auflisten — GET /automations

> Die Automatisierungen eines Workspaces mit Paginierung über page und per_page auflisten, gefiltert nach Kontext, Status oder Name.

# Automatisierungen auflisten

Gibt die Automatisierungen des Workspaces zurück, die neuesten zuerst, ohne ihre Schritte und Verbindungen. Erfordert einen API-Schlüssel mit dem Scope `full`. Gelöschte Automatisierungen werden nicht aufgelistet.

`GET /automations`

## Query-Parameter

- `page` (integer): Seitennummer, beginnend bei 1.

- `per_page` (integer): Automatisierungen pro Seite, von 1 bis 100.

- `filter[context]` (string): Nur Automatisierungen mit diesem Kontext: `contact`, `email` oder `event`.

- `filter[status]` (string): Nur Automatisierungen mit diesem Status: `draft`, `running`, `paused`, `stopped` oder `archived`.

- `filter[name]` (string): Abgleich mit einem Teil des Namens, ohne Beachtung der Groß-/Kleinschreibung.

- `sort` (string): Sortierfeld: `name`, `created_at`, `updated_at` oder `last_triggered_at`.

- `order` (string): Sortierrichtung: `asc` oder `desc`.

Sie können auch die allgemeinen Filter der Form `key.condition=value` auf `name`, `status`, `context` und `created_at` verwenden, zusammen mit `match`. Siehe [Filtern](/de/docs/api-reference/filtering/).

## Rückgabe

- `data` (object[]): Die Automatisierungen auf dieser Seite: `id`, `context`, `name`, `description`, `status`, `settings`, `last_triggered_at`, `published_at`, `created_at`, `updated_at`. `settings` ist in dieser Liste immer ein leeres Objekt; [rufen Sie die Automatisierung ab](/de/docs/api-reference/automations/get/), um es zu lesen.

- `total_records` (integer): Anzahl der passenden Automatisierungen.

- `per_page` (integer): Verwendete Seitengröße.

- `current_page` (integer): Die Nummer dieser Seite.

- `total_pages` (integer): Anzahl der Seiten.

**Anfrage** `GET /automations`

**cURL**

```bash
curl -G https://api.emailit.com/v2/automations \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  --data-urlencode "filter[status]=running" \
  -d sort=last_triggered_at \
  -d per_page=50
```

**Node.js**

```javascript
const params = new URLSearchParams({ 'filter[status]': 'running', sort: 'last_triggered_at', per_page: '50' });
const res = await fetch(`https://api.emailit.com/v2/automations?${params}`, {
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const { data, total_pages } = await res.json();
```

**Python**

```python
import os, requests

r = requests.get(
    "https://api.emailit.com/v2/automations",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    params={"filter[status]": "running", "sort": "last_triggered_at", "per_page": 50},
)
automations = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->get('automations', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'query' => ['filter[status]' => 'running', 'sort' => 'last_triggered_at', 'per_page' => 50],
]);
$automations = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/list/

## Automatisierung löschen — DELETE /automations/{id}

> Eine Automatisierung löschen, sodass sie nicht mehr auf Trigger reagiert. Stoppen Sie sie vorher, wenn Sie auch laufende Durchläufe abbrechen möchten.

# Automatisierung löschen

Löscht eine Automatisierung. Sie verschwindet aus Listen und reagiert nicht mehr auf Trigger. Erfordert einen API-Schlüssel mit dem Scope `full`.

Bereits laufende Durchläufe werden nicht abgebrochen. Um sie abzubrechen, [stoppen Sie die Automatisierung](/de/docs/api-reference/automations/stop/), bevor Sie sie löschen.

`DELETE /automations/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Rückgabe

Gibt eine `message` zurück, die das Löschen bestätigt. Gibt `404` zurück, wenn die Automatisierung nicht existiert oder bereits gelöscht wurde.

**Anfrage** `DELETE /automations/{id}`

**cURL**

```bash
curl -X DELETE https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const result = await res.json();
```

**Python**

```python
import os, requests

r = requests.delete(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
result = r.json()
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->delete('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$result = json_decode($response->getBody(), true);
```

**200**

```json
{
  "message": "Automation was deleted successfully.",
  "notify": true
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/delete/

## Automatisierung starten — POST /automations/{id}/start

> Eine Automatisierung auf running setzen, sodass ihre Trigger neue Durchläufe starten. Funktioniert für Automatisierungen im Entwurf, pausierte und gestoppte Automatisierungen.

# Automatisierung starten

Setzt den Status der Automatisierung auf `running`. Ab dann starten passende Trigger Durchläufe; Events, die vor dem Start eingetreten sind, nicht. Erfordert einen API-Schlüssel mit dem Scope `full`.

Sie können eine Automatisierung im Status `draft`, `paused` oder `stopped` starten. Der erste Start setzt `published_at`.

Beim Starten wird der Graph nicht erneut validiert. Wenn Sie die Automatisierung mit [Automatisierung erstellen](/de/docs/api-reference/automations/create/) angelegt haben, das nur die Struktur prüft, stellen Sie sicher, dass jede Aktionskonfiguration vollständig ist, oder senden Sie den Graphen einmal über [Automatisierung aktualisieren](/de/docs/api-reference/automations/update/), das ihn vollständig validiert. Ein Schritt mit unvollständiger Konfiguration schlägt fehl, wenn ein Durchlauf ihn erreicht.

`POST /automations/{id}/start`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Rückgabe

Gibt die Automatisierung in `data` zurück, mit `status` auf `running`. Gibt `404` zurück, wenn die Automatisierung nicht existiert.

**Anfrage** `POST /automations/{id}/start`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/start \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/start', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const { data: automation } = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/start",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
automation = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->post('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/start', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$automation = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/start/

## Automatisierung pausieren — POST /automations/{id}/pause

> Eine Automatisierung pausieren, sodass ihre Trigger keine neuen Durchläufe mehr starten, während bereits laufende Durchläufe zu Ende laufen.

# Automatisierung pausieren

Setzt den Status der Automatisierung auf `paused`. Ihre Trigger starten keine neuen Durchläufe mehr, aber bereits laufende Durchläufe laufen weiter, auch solche, die in einem `wait`-Schritt warten. Erfordert einen API-Schlüssel mit dem Scope `full`.

Um auch laufende Durchläufe abzubrechen, [stoppen Sie die Automatisierung](/de/docs/api-reference/automations/stop/) stattdessen. [Starten Sie sie](/de/docs/api-reference/automations/start/) erneut, damit Trigger wieder Durchläufe auslösen.

`POST /automations/{id}/pause`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Rückgabe

Gibt die Automatisierung in `data` zurück, mit `status` auf `paused`. Gibt `404` zurück, wenn die Automatisierung nicht existiert.

**Anfrage** `POST /automations/{id}/pause`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/pause \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/pause', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const { data: automation } = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/pause",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
automation = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->post('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/pause', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$automation = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/pause/

## Automatisierung stoppen — POST /automations/{id}/stop

> Eine Automatisierung stoppen und alle laufenden Durchläufe abbrechen. Nur per API verfügbar, nicht in der Weboberfläche.

# Automatisierung stoppen

Setzt den Status der Automatisierung auf `stopped` und bricht jeden Durchlauf ab, der noch `running` ist; diese Durchläufe erhalten den Status `canceled`, und ihre restlichen Schritte werden nicht ausgeführt. Erfordert einen API-Schlüssel mit dem Scope `full`.

Stoppen ist nur per API möglich. Um laufende Durchläufe weiterlaufen zu lassen, [pausieren Sie die Automatisierung](/de/docs/api-reference/automations/pause/) stattdessen. Sie können eine gestoppte Automatisierung erneut [starten](/de/docs/api-reference/automations/start/); neue Durchläufe beginnen dann von vorn.

`POST /automations/{id}/stop`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Rückgabe

Gibt die Automatisierung in `data` zurück, mit `status` auf `stopped`. Gibt `404` zurück, wenn die Automatisierung nicht existiert.

**Anfrage** `POST /automations/{id}/stop`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stop \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stop', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const { data: automation } = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stop",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
automation = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->post('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stop', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$automation = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/stop/

## Durchlauf auslösen — POST /automations/{id}/trigger

> Den Trigger system.manual einer laufenden Automatisierung mit Ihrem eigenen Payload auslösen, um einen Durchlauf aus Ihrem Code zu starten.

# Durchlauf auslösen

Löst den Trigger `system.manual` mit einem Payload Ihrer Wahl aus. Die Automatisierung muss `running` sein und einen Trigger-Schritt `system.manual` haben, sonst startet kein Durchlauf. Erfordert einen API-Schlüssel mit dem Scope `full`. Manuelle Trigger sind nur per API verfügbar.

Der Durchlauf startet asynchron und kostet wie jeder andere Durchlauf 3 Credits. Sie finden ihn über [Durchläufe auflisten](/de/docs/api-reference/automations/runs/).

> **Jeder manuelle Trigger im Workspace wird ausgelöst:** Emailit stellt den manuellen Trigger derzeit jeder laufenden Automatisierung im Workspace zu, die einen Trigger-Schritt `system.manual` hat, nicht nur der Automatisierung im Pfad. Um eine Automatisierung auf ihre eigenen Aufrufe zu beschränken, fügen Sie ihrem Trigger-Schritt einen Filter hinzu: `{ "match": "all", "rules": [{ "field": "automation_id", "operator": "equals", "value": "aut_…" }] }`.

`POST /automations/{id}/trigger`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Body-Parameter

- `payload` (object): Daten für den Durchlauf. Emailit ergänzt `automation_id` und speichert das Ergebnis als `payload` des Durchlaufs. Schritte können ihn mit Platzhaltern wie `{{payload.order_id}}` und in Bedingungen wie `payload.plan` lesen. Worum es im Durchlauf geht, hängt vom Kontext der Automatisierung ab: - `contact`: Übergeben Sie `contact_id` (`con_…`). Kontaktaktionen und `send_email` verwenden diesen Kontakt. - `email`: Übergeben Sie `email_id` (`em_…`). E-Mail-Aktionen verwenden diese E-Mail. - `event`: beliebige Daten. Setzen Sie `to` oder `email` in den Aktionskonfigurationen, zum Beispiel `"to": "{{payload.customer_email}}"`.

## Rückgabe

Gibt `200` mit einer `message` zurück, sobald der Trigger in die Warteschlange gestellt ist. Gibt `422` zurück, wenn die Automatisierung nicht `running` ist, und `404`, wenn sie nicht existiert.

**Anfrage** `POST /automations/{id}/trigger`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/trigger \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "payload": {
      "contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A",
      "plan": "pro",
      "order_id": "ord_1042"
    }
  }'
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/trigger', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EMAILIT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    payload: { contact_id: 'con_3munwNLaXKUARc6ff9wPtxKVq4A', plan: 'pro', order_id: 'ord_1042' },
  }),
});
const result = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/trigger",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    json={"payload": {"contact_id": "con_3munwNLaXKUARc6ff9wPtxKVq4A", "plan": "pro", "order_id": "ord_1042"}},
)
result = r.json()
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->post('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/trigger', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'json' => [
        'payload' => ['contact_id' => 'con_3munwNLaXKUARc6ff9wPtxKVq4A', 'plan' => 'pro', 'order_id' => 'ord_1042'],
    ],
]);
$result = json_decode($response->getBody(), true);
```

**200**

```json
{
  "message": "Automation trigger dispatched."
}
```

**422**

```json
{
  "message": "Automation must be running to trigger."
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/trigger/

## Durchläufe auflisten — GET /automations/{id}/runs

> Die Durchläufe einer Automatisierung auflisten, die neuesten zuerst, mit auslösendem Event, Payload, Status und Zeitangaben jedes Durchlaufs.

# Durchläufe auflisten

Gibt die Durchläufe einer Automatisierung zurück, die neuesten zuerst. Jeder Durchlauf ist ein Durchgang durch den Graphen, gestartet von einem Trigger. Erfordert einen API-Schlüssel mit dem Scope `full`.

`GET /automations/{id}/runs`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Query-Parameter

- `page` (integer): Seitennummer, beginnend bei 1.

- `per_page` (integer): Durchläufe pro Seite, von 1 bis 100.

- `filter[status]` (string): Nur Durchläufe mit diesem Status: `running`, `completed`, `failed` oder `canceled`.

Sie können auch mit `key.condition=value` auf `status`, `event` und `created_at` filtern (zum Beispiel `created_at.after=2026-10-01`) und mit `order` und `direction` nach denselben Schlüsseln sortieren. Siehe [Filtern](/de/docs/api-reference/filtering/).

## Rückgabe

- `data` (object[]): Die Durchläufe auf dieser Seite. Siehe die Felder unten.

- `total_records, per_page, current_page, total_pages` (integer): Angaben zur Paginierung.

Jeder Durchlauf hat:

- `id` (string): ID des Durchlaufs mit dem Präfix `aur_`.

- `automation_id` (string): Die Automatisierung (`aut_…`).

- `contact_id` (string | null): Der Kontakt des Durchlaufs (`con_…`) im Kontext `contact`.

- `email_id` (string | null): Die E-Mail des Durchlaufs (`em_…`) im Kontext `email`.

- `event_id` (string | null): ID des auslösenden Events, wenn der Trigger-Payload eine enthält.

- `event` (string): Der Trigger, der den Durchlauf gestartet hat, zum Beispiel `contact.added_to_audience` oder `system.manual`.

- `payload` (object): In dieser Liste immer ein leeres Objekt. [Rufen Sie den Durchlauf ab](/de/docs/api-reference/automations/run/), um seinen Trigger-Payload zu lesen.

- `meta` (object): In dieser Liste immer ein leeres Objekt. Rufen Sie den Durchlauf ab, um seine Metadaten zu lesen, etwa `failure_reason`.

- `status` (string): `running`, `completed`, `failed` oder `canceled` (die Automatisierung wurde gestoppt).

- `started_at, completed_at, created_at, updated_at` (string | null): Zeitstempel in UTC.

**Anfrage** `GET /automations/{id}/runs`

**cURL**

```bash
curl -G https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  --data-urlencode "filter[status]=failed"
```

**Node.js**

```javascript
const params = new URLSearchParams({ 'filter[status]': 'failed' });
const res = await fetch(
  `https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs?${params}`,
  { headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` } },
);
const { data: runs } = await res.json();
```

**Python**

```python
import os, requests

r = requests.get(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    params={"filter[status]": "failed"},
)
runs = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->get('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'query' => ['filter[status]' => 'failed'],
]);
$runs = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/runs/

## Durchlauf abrufen — GET /automations/{id}/runs/{run_id}

> Einen Durchlauf einer Automatisierung mit Trigger-Payload, Metadaten sowie Status und Ergebnis jedes ausgeführten Schritts abrufen.

# Durchlauf abrufen

Ruft einen Durchlauf einer Automatisierung ab, einschließlich der ausgeführten Schritte. Erfordert einen API-Schlüssel mit dem Scope `full`.

`GET /automations/{id}/runs/{run_id}`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

- `run_id` (string, erforderlich): Die ID des Durchlaufs (`aur_…`).

## Rückgabe

Gibt den Durchlauf in `data` zurück, mit den unter [Durchläufe auflisten](/de/docs/api-reference/automations/runs/) beschriebenen Feldern sowie dem vollständigen `payload`, `meta` und einem Array `run_steps`.

- `payload` (object | null): Der Trigger-Payload: die Event-Daten (`{ "object": { … } }`) oder der Payload, den Sie an [Durchlauf auslösen](/de/docs/api-reference/automations/trigger/) übergeben haben, ergänzt um `automation_id`.

- `meta` (object | null): `source_event_id` verknüpft den Durchlauf mit dem Event, das ihn gestartet hat. Fehlgeschlagene Durchläufe können `failure_reason` enthalten: `insufficient_credits` (die 3 Credits für den Durchlauf konnten nicht abgebucht werden) oder `run_timeout` (der Durchlauf war nach 72 Stunden noch `running`, ohne dass ein Schritt wartete).

- `run_steps` (object[]): Ein Eintrag pro Schritt, den der Durchlauf erreicht hat: - `step_id`: die ID des Schritts (`aus_…`). Ordnen Sie sie `steps[].id` aus [Automatisierung abrufen](/de/docs/api-reference/automations/get/) zu. - `status`: `running`, `waiting` (ein `wait`-Schritt, dessen Wartezeit noch nicht abgelaufen ist), `completed` oder `failed`. - `data`: das Ergebnis des Schritts. Zum Beispiel gibt `send_email` `{ "result": "email_queued", "email_oid": "em_…", "to": "…" }` zurück, `condition` gibt `{ "result": true, "branch": "yes" }` zurück, und fehlgeschlagene Schritte geben `{ "error": "…" }` zurück. - `started_at`, `completed_at`, `created_at`.

Gibt `404` zurück, wenn die Automatisierung oder der Durchlauf nicht existiert.

**Anfrage** `GET /automations/{id}/runs/{run_id}`

**cURL**

```bash
curl https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs/aur_3q6GdFk2eRSG093grI0v9e6REu8 \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch(
  'https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs/aur_3q6GdFk2eRSG093grI0v9e6REu8',
  { headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` } },
);
const { data: run } = await res.json();
```

**Python**

```python
import os, requests

r = requests.get(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs/aur_3q6GdFk2eRSG093grI0v9e6REu8",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
run = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->get('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/runs/aur_3q6GdFk2eRSG093grI0v9e6REu8', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$run = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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"
      }
    ]
  }
}
```

**404**

```json
{
  "message": "Run not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/run/

## Statistiken abrufen — GET /automations/{id}/stats

> Zählwerte pro Schritt einer Automatisierung abrufen: wie viele Durchläufe jeden Schritt erreicht haben, Schrittstatus, Ergebnisse und ein E-Mail-Funnel.

# Statistiken abrufen

Gibt Zählwerte für jeden Schritt einer Automatisierung zurück, nach Schrittschlüssel geordnet. Erfordert einen API-Schlüssel mit dem Scope `full`.

`GET /automations/{id}/stats`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

## Query-Parameter

- `since` (string): Nur Schrittausführungen zählen, die zu oder nach diesem Zeitpunkt erstellt wurden. Datum und Uhrzeit nach RFC 3339, zum Beispiel `2026-10-01T00:00:00Z`.

- `until` (string): Nur Schrittausführungen zählen, die zu oder vor diesem Zeitpunkt erstellt wurden. Datum und Uhrzeit nach RFC 3339.

- `run_ids[]` (string): Nur diese Durchläufe zählen (`aur_…`). Wiederholen Sie den Parameter für mehrere Durchläufe.

## Rückgabe

Gibt `data` zurück, ein Objekt mit einem Eintrag pro Schrittschlüssel. Schritte, die kein Durchlauf erreicht hat, haben `total` mit dem Wert `0`.

- `total` (integer): Wie oft Durchläufe den Schritt erreicht haben.

- `by_status` (object): Zählwerte pro Schrittstatus: `running`, `waiting`, `completed`, `failed`.

- `by_outcome` (object): Zählwerte pro Ergebnis. `send_email` und `forward_email`: `accepted`, dann der letzte Zustand der E-Mail (`delivered`, `loaded`, `clicked`, `bounced`, `failed`, `complained`, `unsubscribed`, `canceled`). `condition`: `matched`, `not_matched`. `experiment`: der Schlüssel der gewählten Variante. `call_webhook`: `2xx`, `4xx`, `5xx`, `timeout`, `network_error`. Fehlgeschlagene Schritte: `error`.

- `funnel` (object): Nur für Schritte vom Typ `send_email`. Kumulierte Zählwerte: `accepted` umfasst jede E-Mail, die weiter gekommen ist, `delivered` umfasst geladene und geklickte E-Mails, und `loaded` umfasst geklickte. `bounced`, `failed`, `complained` und `unsubscribed` sind einfache Zählwerte.

**Anfrage** `GET /automations/{id}/stats`

**cURL**

```bash
curl -G https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stats \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -d since=2026-10-01T00:00:00Z
```

**Node.js**

```javascript
const params = new URLSearchParams({ since: '2026-10-01T00:00:00Z' });
const res = await fetch(
  `https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stats?${params}`,
  { headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` } },
);
const { data: stats } = await res.json();
```

**Python**

```python
import os, requests

r = requests.get(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stats",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    params={"since": "2026-10-01T00:00:00Z"},
)
stats = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->get('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/stats', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'query' => ['since' => '2026-10-01T00:00:00Z'],
]);
$stats = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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": {}
    }
  }
}
```

**404**

```json
{
  "message": "Automation not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/stats/

## Schrittstatistiken abrufen — GET /automations/{id}/steps/{step_key}/stats

> Die Zählwerte für einen einzelnen Schritt einer Automatisierung über seinen Schlüssel abrufen: Ausführungen, Status, Ergebnisse und der E-Mail-Funnel.

# Schrittstatistiken abrufen

Gibt die Zählwerte für einen Schritt einer Automatisierung zurück. Erfordert einen API-Schlüssel mit dem Scope `full`. Die Felder sind dieselben wie unter [Statistiken abrufen](/de/docs/api-reference/automations/stats/).

`GET /automations/{id}/steps/{step_key}/stats`

## Pfadparameter

- `id` (string, erforderlich): Die ID der Automatisierung (`aut_…`).

- `step_key` (string, erforderlich): Der `key` des Schritts, zum Beispiel `welcome_email`.

## Query-Parameter

- `since` (string): Nur Schrittausführungen zählen, die zu oder nach diesem Zeitpunkt erstellt wurden. Datum und Uhrzeit nach RFC 3339.

- `until` (string): Nur Schrittausführungen zählen, die zu oder vor diesem Zeitpunkt erstellt wurden. Datum und Uhrzeit nach RFC 3339.

## Rückgabe

Gibt `data` mit `total`, `by_status`, `by_outcome` und bei Schritten vom Typ `send_email` mit `funnel` zurück. Gibt `404` zurück, wenn die Automatisierung oder der Schrittschlüssel nicht existiert.

**Anfrage** `GET /automations/{id}/steps/{step_key}/stats`

**cURL**

```bash
curl https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/steps/welcome_email/stats \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch(
  'https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/steps/welcome_email/stats',
  { headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` } },
);
const { data: stats } = await res.json();
```

**Python**

```python
import os, requests

r = requests.get(
    "https://api.emailit.com/v2/automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/steps/welcome_email/stats",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
stats = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->get('automations/aut_3xqC9YD79FZZA36uTekWTBO1ghe/steps/welcome_email/stats', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$stats = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "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
    }
  }
}
```

**404**

```json
{
  "message": "Step not found."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/automations/step-stats/
