# Formulare API

> Anmeldeformulare erstellen, veröffentlichen und ihr öffentliches Token rotieren.

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

## Formular erstellen — POST /forms

> Erstellen Sie ein Anmeldeformular als Entwurf (Pop-up, Ganzseiten-Formular, Flyout, eingebettetes Formular oder Banner) mit einer Startdefinition und einem öffentlichen Token.

# Formular erstellen

Erstellt ein Anmeldeformular mit dem Status `draft` und einem öffentlichen `token`. Erfordert einen API-Schlüssel mit dem Scope `full`. Formulare sind im Early Access.

Wenn Sie `definition` weglassen, generiert Emailit ein Startformular: einen Schritt mit einer Überschrift, einem Pflichtfeld für die E-Mail-Adresse und der Schaltfläche **Subscribe** sowie einen Erfolgsschritt. Erstellen und gestalten Sie Formulare in der Weboberfläche unter **Email Marketing → Forms** und [veröffentlichen](/de/docs/api-reference/forms/publish/) Sie sie anschließend.

`POST /forms`

## Body-Parameter

- `name` (string, erforderlich): Name des Formulars. Besucher sehen ihn nicht.

- `type` (string): Wie das Formular erscheint: `popup`, `full_page`, `flyout`, `embed` oder `banner`.

- `definition` (object): Der Inhalt des Formulars, unverändert gespeichert. Emailit prüft ihn erst beim Veröffentlichen. Felder der obersten Ebene: - `version` (Integer): `1`. - `type` (String): der Formulartyp. - `steps` (Array): Jeder Schritt hat `id`, `name`, `kind` (`form` oder `success`) und `blocks`. Blöcke haben eine `id` und einen `type`: `text`, `button` (`action`: `submit`, `next`, `close` oder `go_to_url`), `image` oder ein Eingabefeld (`email`, `text_input`, `phone`, `date`, `radio`, `checkbox`, `dropdown`) mit Feldname (`name`), `label` und `required`. - `styles`, `targeting`, `experiments` (Objekte): Darstellungs- und Anzeigeregeln, die der Formular-Editor festlegt.

- `settings` (object): Beliebige Einstellungen, die mit dem Formular gespeichert werden. Standardwert: `{}`.

## Rückgabe

Gibt `201 Created` mit dem Formular-Objekt einschließlich `definition` und `settings` zurück.

- `token` (string): Öffentliches Token, mit dem das Einbettungsskript das Formular lädt. Siehe [Formular einbinden](/de/docs/forms/install/).

- `status` (string): `draft`, bis Sie das Formular veröffentlichen, danach `live`.

- `published_at` (string | null): Zeitpunkt der letzten Veröffentlichung des Formulars.

Gibt `400` zurück, wenn `name` fehlt oder leer ist oder `type` keiner der erlaubten Werte ist.

**Anfrage** `POST /forms`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/forms \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Newsletter popup", "type": "popup" }'
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/forms', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EMAILIT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: 'Newsletter popup', type: 'popup' }),
});
const form = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/forms",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    json={"name": "Newsletter popup", "type": "popup"},
)
form = r.json()
```

**PHP**

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

$response = $client->post('forms', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'json' => ['name' => 'Newsletter popup', 'type' => 'popup'],
]);
$form = json_decode($response->getBody(), true);
```

**201**

```json
{
  "object": "form",
  "id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
  "name": "Newsletter popup",
  "type": "popup",
  "status": "draft",
  "token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
  "created_at": "2026-10-01T11:20:31.000000+00:00",
  "updated_at": "2026-10-01T11:20:31.000000+00:00",
  "published_at": null,
  "definition": {
    "version": 1,
    "type": "popup",
    "steps": [
      {
        "id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
        "name": "Step 1",
        "kind": "form",
        "blocks": [
          { "id": "3Rb7Lq5TgB2kVw7Nn1Ps4Fd9QzA", "type": "text", "content": "<p>Join our list</p>" },
          {
            "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU",
            "type": "email",
            "label": "<p>Email</p>",
            "placeholder": "you@example.com",
            "required": true,
            "name": "email"
          },
          { "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
        ]
      },
      {
        "id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
        "name": "Success",
        "kind": "success",
        "blocks": [
          { "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }
        ]
      }
    ],
    "styles": {
      "backgroundColor": "#ffffff",
      "textColor": "#0f172a",
      "primaryColor": "#03a071",
      "borderRadius": 12,
      "fontFamily": "Inter, system-ui, sans-serif",
      "buttonStyle": "solid"
    },
    "targeting": {},
    "experiments": {}
  },
  "settings": {}
}
```

**400**

```json
{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "Validation error",
  "details": [
    {
      "instancePath": "",
      "schemaPath": "#/required",
      "keyword": "required",
      "params": { "missingProperty": "name" },
      "message": "must have required property 'name'"
    }
  ]
}
```

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

## Formular abrufen — GET /forms/{id}

> Rufen Sie ein Anmeldeformular per ID ab, mit Typ, Status, öffentlichem Token, vollständiger Definition und Einstellungen.

# Formular abrufen

Ruft ein Formular mit seiner vollständigen Definition ab. Erfordert einen API-Schlüssel mit dem Scope `full`.

`GET /forms/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die Formular-ID (`frm_…`).

## Rückgabe

Gibt das Formular-Objekt zurück.

- `object` (string): Immer `form`.

- `id` (string): Formular-ID mit dem Präfix `frm_`.

- `name` (string): Name des Formulars.

- `type` (string): `popup`, `full_page`, `flyout`, `embed` oder `banner`.

- `status` (string): `draft` oder `live`. Nur Formulare mit dem Status `live` werden auf Ihrer Website geladen.

- `token` (string): Öffentliches Token, das das Einbettungsskript verwendet.

- `definition` (object): Schritte, Blöcke, Styles und Targeting. Siehe [Formular erstellen](/de/docs/api-reference/forms/create/).

- `settings` (object): Beliebige Einstellungen.

- `created_at, updated_at, published_at` (string | null): Zeitstempel in UTC. `published_at` ist bis zur ersten Veröffentlichung `null`.

Gibt `404` zurück, wenn das Formular nicht existiert.

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

**cURL**

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

**Node.js**

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

**Python**

```python
import os, requests

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

**PHP**

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

$response = $client->get('forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$form = json_decode($response->getBody(), true);
```

**200**

```json
{
  "object": "form",
  "id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
  "name": "Newsletter popup",
  "type": "popup",
  "status": "live",
  "token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
  "created_at": "2026-10-01T11:20:31.000000+00:00",
  "updated_at": "2026-10-01T11:48:02.000000+00:00",
  "published_at": "2026-10-01T11:48:02.000000+00:00",
  "definition": {
    "version": 1,
    "type": "popup",
    "steps": [
      {
        "id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
        "name": "Step 1",
        "kind": "form",
        "blocks": [
          { "id": "3Rb7Lq5TgB2kVw7Nn1Ps4Fd9QzA", "type": "text", "content": "<p>Get our monthly product notes</p>" },
          {
            "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU",
            "type": "email",
            "label": "<p>Email</p>",
            "placeholder": "you@example.com",
            "required": true,
            "name": "email"
          },
          { "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
        ]
      },
      {
        "id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
        "name": "Success",
        "kind": "success",
        "blocks": [
          { "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }
        ]
      }
    ],
    "styles": {
      "backgroundColor": "#ffffff",
      "textColor": "#0f172a",
      "primaryColor": "#03a071",
      "borderRadius": 12,
      "fontFamily": "Inter, system-ui, sans-serif",
      "buttonStyle": "solid"
    },
    "targeting": {},
    "experiments": {}
  },
  "settings": {}
}
```

**404**

```json
{
  "error": "Form not found"
}
```

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

## Formular aktualisieren — POST /forms/{id}

> Ändern Sie Name, Typ, Definition oder Einstellungen eines Formulars. Änderungen an einem live geschalteten Formular erscheinen sofort auf Ihrer Website.

# Formular aktualisieren

Aktualisiert die übergebenen Felder und lässt die übrigen unverändert. Erfordert einen API-Schlüssel mit dem Scope `full`.

Änderungen an einem Formular mit dem Status `live` sind für Besucher sofort sichtbar; Sie müssen es nicht erneut veröffentlichen. Um es zu bearbeiten, ohne dass Besucher davon betroffen sind, [ziehen Sie zuerst die Veröffentlichung zurück](/de/docs/api-reference/forms/unpublish/).

`POST /forms/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die Formular-ID (`frm_…`).

## Body-Parameter

- `name` (string): Neuer Name. Darf nicht leer sein.

- `type` (string): `popup`, `full_page`, `flyout`, `embed` oder `banner`. Passen Sie `definition.type` entsprechend an.

- `definition` (object): Ersetzt die gesamte Definition. Ihre Struktur finden Sie unter [Formular erstellen](/de/docs/api-reference/forms/create/).

- `settings` (object): Ersetzt das Einstellungsobjekt.

## Rückgabe

Gibt das aktualisierte Formular-Objekt zurück. Gibt `400` zurück, wenn ein Feld den falschen Typ hat oder `name` leer ist, und `404`, wenn das Formular nicht existiert.

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

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5 \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Newsletter popup (October)" }'
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EMAILIT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: 'Newsletter popup (October)' }),
});
const form = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    json={"name": "Newsletter popup (October)"},
)
form = r.json()
```

**PHP**

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

$response = $client->post('forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'json' => ['name' => 'Newsletter popup (October)'],
]);
$form = json_decode($response->getBody(), true);
```

**200**

```json
{
  "object": "form",
  "id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
  "name": "Newsletter popup (October)",
  "type": "popup",
  "status": "live",
  "token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
  "created_at": "2026-10-01T11:20:31.000000+00:00",
  "updated_at": "2026-10-02T08:05:14.000000+00:00",
  "published_at": "2026-10-01T11:48:02.000000+00:00",
  "definition": {
    "version": 1,
    "type": "popup",
    "steps": [
      {
        "id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
        "name": "Step 1",
        "kind": "form",
        "blocks": [
          { "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU", "type": "email", "label": "<p>Email</p>", "required": true, "name": "email" },
          { "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
        ]
      },
      {
        "id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
        "name": "Success",
        "kind": "success",
        "blocks": [{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }]
      }
    ],
    "styles": { "primaryColor": "#03a071", "borderRadius": 12, "buttonStyle": "solid" },
    "targeting": {},
    "experiments": {}
  },
  "settings": {}
}
```

**400**

```json
{
  "error": "Invalid name"
}
```

**404**

```json
{
  "error": "Form not found"
}
```

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

## Formulare auflisten — GET /forms

> Listen Sie die Anmeldeformulare eines Workspaces auf, neueste zuerst, mit Paginierung, Namenssuche und Filtern nach Typ und Status.

# Formulare auflisten

Gibt die Formulare des Workspaces zurück, neueste zuerst, ohne `definition` und `settings`. Erfordert einen API-Schlüssel mit dem Scope `full`.

`GET /forms`

## Query-Parameter

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

- `limit` (integer): Formulare pro Seite, von 1 bis 100.

- `search` (string): Abgleich mit einem Teil des Formularnamens, ohne Beachtung der Groß-/Kleinschreibung.

- `match`, `order`, `direction`: siehe [Filtern und Sortieren](https://emailit.com/de/docs/api-reference/filtering/).

### Filterschlüssel

Filter verwenden Query-Parameter der Form `key.condition=value`, zum Beispiel `status.exact=live`. Siehe [Filtern](/de/docs/api-reference/filtering/).

| Schlüssel | Typ | Hinweise |
| --- | --- | --- |
| `name` | string | |
| `type` | enum | `popup`, `full_page`, `flyout`, `embed`, `banner` |
| `status` | enum | `draft`, `live` |
| `created_at` | date | |

Sortierschlüssel für `order`: `name`, `type`, `status`, `created_at`.

## Rückgabe

- `data` (object[]): Formulare auf dieser Seite: `object`, `id`, `name`, `type`, `status`, `token`, `created_at`, `updated_at`, `published_at`.

- `total_records` (integer): Anzahl der Formulare, die der Abfrage entsprechen.

- `next_page_url` (string | null): Pfad der nächsten Seite oder `null` auf der letzten Seite. Er enthält nur `page` und `limit`; fügen Sie Ihre Suche und Filter erneut hinzu, wenn Sie ihm folgen.

- `previous_page_url` (string | null): Pfad der vorherigen Seite oder `null` auf der ersten Seite.

**Anfrage** `GET /forms`

**cURL**

```bash
curl -G https://api.emailit.com/v2/forms \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -d status.exact=live
```

**Node.js**

```javascript
const params = new URLSearchParams({ 'status.exact': 'live' });
const res = await fetch(`https://api.emailit.com/v2/forms?${params}`, {
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const { data: forms } = await res.json();
```

**Python**

```python
import os, requests

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

**PHP**

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

$response = $client->get('forms', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'query' => ['status.exact' => 'live'],
]);
$forms = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "data": [
    {
      "object": "form",
      "id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
      "name": "Newsletter popup",
      "type": "popup",
      "status": "live",
      "token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
      "created_at": "2026-10-01T11:20:31.000000+00:00",
      "updated_at": "2026-10-01T11:48:02.000000+00:00",
      "published_at": "2026-10-01T11:48:02.000000+00:00"
    }
  ],
  "total_records": 1,
  "next_page_url": null,
  "previous_page_url": null
}
```

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

## Formular veröffentlichen — POST /forms/{id}/publish

> Schalten Sie ein Anmeldeformular live, damit das Einbettungsskript es auf Ihrer Website anzeigt. Das Formular braucht einen Formularschritt und einen Erfolgsschritt.

# Formular veröffentlichen

Setzt den Status des Formulars auf `live` und aktualisiert `published_at`. Formulare mit dem Status `live` werden auf jeder Website geladen, auf der das Emailit-Skript [eingebunden](/de/docs/forms/install/) ist, und können Einsendungen empfangen. Erfordert einen API-Schlüssel mit dem Scope `full`.

Die Definition braucht mindestens einen Schritt mit `kind: "form"` und einen mit `kind: "success"`, sonst gibt die Anfrage `422` zurück. Einsendungen werden mit dem Formular gespeichert und erzeugen noch keine Kontakte.

`POST /forms/{id}/publish`

## Pfadparameter

- `id` (string, erforderlich): Die Formular-ID (`frm_…`).

## Rückgabe

Gibt das Formular-Objekt mit `status` auf `live` zurück. Gibt `422` zurück, wenn die Definition unvollständig ist, und `404`, wenn das Formular nicht existiert.

**Anfrage** `POST /forms/{id}/publish`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/publish \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/publish', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const form = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/publish",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
form = r.json()
```

**PHP**

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

$response = $client->post('forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/publish', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$form = json_decode($response->getBody(), true);
```

**200**

```json
{
  "object": "form",
  "id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
  "name": "Newsletter popup",
  "type": "popup",
  "status": "live",
  "token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
  "created_at": "2026-10-01T11:20:31.000000+00:00",
  "updated_at": "2026-10-01T11:48:02.000000+00:00",
  "published_at": "2026-10-01T11:48:02.000000+00:00",
  "definition": {
    "version": 1,
    "type": "popup",
    "steps": [
      {
        "id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
        "name": "Step 1",
        "kind": "form",
        "blocks": [
          { "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU", "type": "email", "label": "<p>Email</p>", "required": true, "name": "email" },
          { "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
        ]
      },
      {
        "id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
        "name": "Success",
        "kind": "success",
        "blocks": [{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }]
      }
    ],
    "styles": { "primaryColor": "#03a071", "borderRadius": 12, "buttonStyle": "solid" },
    "targeting": {},
    "experiments": {}
  },
  "settings": {}
}
```

**422**

```json
{
  "error": "Form must have a success step"
}
```

**404**

```json
{
  "error": "Form not found"
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/forms/publish/

## Veröffentlichung eines Formulars zurückziehen — POST /forms/{id}/unpublish

> Nehmen Sie ein live geschaltetes Anmeldeformular offline, indem Sie es auf Entwurf zurücksetzen. Das Einbettungsskript zeigt es nicht mehr an und es nimmt keine Einsendungen mehr an.

# Veröffentlichung eines Formulars zurückziehen

Setzt den Status des Formulars auf `draft` zurück. Das Einbettungsskript lädt es nicht mehr und neue Einsendungen werden abgelehnt. Token, Definition und `published_at` bleiben unverändert, sodass Sie das Formular später erneut [veröffentlichen](/de/docs/api-reference/forms/publish/) können. Erfordert einen API-Schlüssel mit dem Scope `full`.

`POST /forms/{id}/unpublish`

## Pfadparameter

- `id` (string, erforderlich): Die Formular-ID (`frm_…`).

## Rückgabe

Gibt das Formular-Objekt mit `status` auf `draft` zurück. Gibt `404` zurück, wenn das Formular nicht existiert.

**Anfrage** `POST /forms/{id}/unpublish`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/unpublish \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/unpublish', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const form = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/unpublish",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
form = r.json()
```

**PHP**

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

$response = $client->post('forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/unpublish', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$form = json_decode($response->getBody(), true);
```

**200**

```json
{
  "object": "form",
  "id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
  "name": "Newsletter popup",
  "type": "popup",
  "status": "draft",
  "token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
  "created_at": "2026-10-01T11:20:31.000000+00:00",
  "updated_at": "2026-10-06T07:30:00.000000+00:00",
  "published_at": "2026-10-01T11:48:02.000000+00:00",
  "definition": {
    "version": 1,
    "type": "popup",
    "steps": [
      {
        "id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
        "name": "Step 1",
        "kind": "form",
        "blocks": [
          { "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU", "type": "email", "label": "<p>Email</p>", "required": true, "name": "email" },
          { "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
        ]
      },
      {
        "id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
        "name": "Success",
        "kind": "success",
        "blocks": [{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }]
      }
    ],
    "styles": { "primaryColor": "#03a071", "borderRadius": 12, "buttonStyle": "solid" },
    "targeting": {},
    "experiments": {}
  },
  "settings": {}
}
```

**404**

```json
{
  "error": "Form not found"
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/forms/unpublish/

## Öffentliches Token zurücksetzen — POST /forms/{id}/reset-token

> Ersetzen Sie das öffentliche Token eines Formulars. Einbettungscodes mit dem alten Token laden das Formular ab sofort nicht mehr.

# Öffentliches Token zurücksetzen

Generiert ein neues öffentliches `token` für das Formular. Das alte Token funktioniert ab sofort nicht mehr: Websites, die das Formular damit laden, zeigen es nicht mehr an und können keine Einsendungen mehr übermitteln. Aktualisieren Sie Ihren Einbettungscode mit dem neuen Token. Erfordert einen API-Schlüssel mit dem Scope `full`.

`POST /forms/{id}/reset-token`

## Pfadparameter

- `id` (string, erforderlich): Die Formular-ID (`frm_…`).

## Rückgabe

Gibt das Formular-Objekt mit dem neuen `token` zurück. Der Status ändert sich nicht. Gibt `404` zurück, wenn das Formular nicht existiert.

**Anfrage** `POST /forms/{id}/reset-token`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/reset-token \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/reset-token', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const { token } = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/reset-token",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
token = r.json()["token"]
```

**PHP**

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

$response = $client->post('forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5/reset-token', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$token = json_decode($response->getBody(), true)['token'];
```

**200**

```json
{
  "object": "form",
  "id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
  "name": "Newsletter popup",
  "type": "popup",
  "status": "live",
  "token": "e5ed3f9ec299ae1c5dc043c45f2a616c352e47a13b6b763b",
  "created_at": "2026-10-01T11:20:31.000000+00:00",
  "updated_at": "2026-10-06T09:12:44.000000+00:00",
  "published_at": "2026-10-01T11:48:02.000000+00:00",
  "definition": {
    "version": 1,
    "type": "popup",
    "steps": [
      {
        "id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
        "name": "Step 1",
        "kind": "form",
        "blocks": [
          { "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU", "type": "email", "label": "<p>Email</p>", "required": true, "name": "email" },
          { "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
        ]
      },
      {
        "id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
        "name": "Success",
        "kind": "success",
        "blocks": [{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }]
      }
    ],
    "styles": { "primaryColor": "#03a071", "borderRadius": 12, "buttonStyle": "solid" },
    "targeting": {},
    "experiments": {}
  },
  "settings": {}
}
```

**404**

```json
{
  "error": "Form not found"
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/forms/reset-token/

## Formular löschen — DELETE /forms/{id}

> Löschen Sie ein Anmeldeformular endgültig, zusammen mit allen gespeicherten Einsendungen. Gibt 204 ohne Body zurück.

# Formular löschen

Löscht ein Formular und alle gespeicherten Einsendungen endgültig. Websites, die es einbetten, zeigen es nicht mehr an. Erfordert einen API-Schlüssel mit dem Scope `full`.

`DELETE /forms/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die Formular-ID (`frm_…`).

## Rückgabe

Gibt `204 No Content` mit leerem Body zurück. Gibt `404` zurück, wenn das Formular nicht existiert.

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

**cURL**

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

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
console.log(res.status); // 204
```

**Python**

```python
import os, requests

r = requests.delete(
    "https://api.emailit.com/v2/forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
print(r.status_code)  # 204
```

**PHP**

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

$response = $client->delete('forms/frm_3Bzpif9xswMlVbFvGZSPNixm5j5', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
echo $response->getStatusCode(); // 204
```

**204**

```text
(empty body)
```

**404**

```json
{
  "error": "Form not found"
}
```

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