# Formuláře API

> Vytvářejte přihlašovací formuláře, publikujte je a vyměňujte jejich veřejný token.

Základní URL: `https://api.emailit.com/v2`. Autentizujte se hlavičkou `Authorization: Bearer <API key>`.

## Vytvoření formuláře — POST /forms

> Vytvořte koncept přihlašovacího formuláře (vyskakovací okno, celostránkový formulář, boční panel, vložený formulář nebo lišta) s výchozí definicí a veřejným tokenem.

# Vytvoření formuláře

Vytvoří přihlašovací formulář ve stavu `draft` s veřejným tokenem `token`. Vyžaduje API klíč s oprávněním `full`. Formuláře jsou v předběžném přístupu.

Pokud `definition` vynecháte, Emailit vygeneruje výchozí formulář: jeden krok s nadpisem, povinným polem pro e-mail a tlačítkem **Subscribe** a k tomu krok s potvrzením úspěchu. Formuláře sestavíte a nastylujete ve webovém rozhraní v sekci **Email Marketing → Forms** a pak je [publikujete](/cs/docs/api-reference/forms/publish/).

`POST /forms`

## Parametry v těle požadavku

- `name` (string, povinné): Název formuláře. Návštěvníci ho neuvidí.

- `type` (string): Jak se formulář zobrazí: `popup`, `full_page`, `flyout`, `embed` nebo `banner`.

- `definition` (object): Obsah formuláře, uložený beze změn. Emailit ho kontroluje až při publikování. Pole nejvyšší úrovně: - `version` (celé číslo): `1`. - `type` (řetězec): typ formuláře. - `steps` (pole): každý krok má `id`, `name`, `kind` (`form`, nebo `success`) a `blocks`. Bloky mají `id` a `type`: `text`, `button` (`action`: `submit`, `next`, `close` nebo `go_to_url`), `image` nebo vstupní pole (`email`, `text_input`, `phone`, `date`, `radio`, `checkbox`, `dropdown`) s názvem pole `name`, popiskem `label` a příznakem `required`. - `styles`, `targeting`, `experiments` (objekty): pravidla vzhledu a zobrazení, která nastavuje editor formulářů.

- `settings` (object): Volné nastavení uložené s formulářem. Výchozí hodnota je `{}`.

## Odpověď

Vrací `201 Created` s objektem formuláře včetně `definition` a `settings`.

- `token` (string): Veřejný token, kterým vkládací skript formulář načítá. Viz [Instalace formulářů na web](/cs/docs/forms/install/).

- `status` (string): `draft`, dokud formulář nepublikujete, potom `live`.

- `published_at` (string | null): Kdy byl formulář naposledy publikován.

Pokud `name` chybí nebo je prázdné, nebo `type` není jednou z povolených hodnot, vrací `400`.

**Požadavek** `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'"
    }
  ]
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/forms/create/

## Načtení formuláře — GET /forms/{id}

> Načtěte přihlašovací formulář podle ID s jeho typem, stavem, veřejným tokenem, celou definicí a nastavením.

# Načtení formuláře

Načte formulář s celou jeho definicí. Vyžaduje API klíč s oprávněním `full`.

`GET /forms/{id}`

## Parametry v cestě

- `id` (string, povinné): ID formuláře (`frm_…`).

## Odpověď

Vrací objekt formuláře.

- `object` (string): Vždy `form`.

- `id` (string): ID formuláře s předponou `frm_`.

- `name` (string): Název formuláře.

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

- `status` (string): `draft`, nebo `live`. Na vašem webu se načítají jen formuláře ve stavu `live`.

- `token` (string): Veřejný token, který používá vkládací skript.

- `definition` (object): Kroky, bloky, styly a cílení. Viz [Vytvoření formuláře](/cs/docs/api-reference/forms/create/).

- `settings` (object): Volné nastavení.

- `created_at, updated_at, published_at` (string | null): Časová razítka v UTC. `published_at` má hodnotu `null` až do prvního publikování.

Pokud formulář neexistuje, vrací `404`.

**Požadavek** `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"
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/forms/get/

## Úprava formuláře — POST /forms/{id}

> Změňte název, typ, definici nebo nastavení formuláře. Změny zveřejněného formuláře se na vašem webu projeví okamžitě.

# Úprava formuláře

Upraví pole, která předáte, a ostatní ponechá beze změny. Vyžaduje API klíč s oprávněním `full`.

Změny formuláře ve stavu `live` návštěvníci uvidí okamžitě; znovu ho publikovat nemusíte. Pokud chcete formulář upravit, aniž by to návštěvníci viděli, nejdřív ho [stáhněte](/cs/docs/api-reference/forms/unpublish/).

`POST /forms/{id}`

## Parametry v cestě

- `id` (string, povinné): ID formuláře (`frm_…`).

## Parametry v těle požadavku

- `name` (string): Nový název. Nesmí být prázdný.

- `type` (string): `popup`, `full_page`, `flyout`, `embed` nebo `banner`. Odpovídajícím způsobem upravte i `definition.type`.

- `definition` (object): Nahradí celou definici. Její strukturu popisuje stránka [Vytvoření formuláře](/cs/docs/api-reference/forms/create/).

- `settings` (object): Nahradí objekt nastavení.

## Odpověď

Vrací upravený objekt formuláře. Pokud má některé pole špatný typ nebo je `name` prázdné, vrací `400`, a pokud formulář neexistuje, vrací `404`.

**Požadavek** `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"
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/forms/update/

## Výpis formulářů — GET /forms

> Vypište přihlašovací formuláře ve workspace od nejnovějšího se stránkováním, vyhledáváním podle názvu a filtry podle typu a stavu.

# Výpis formulářů

Vrací formuláře workspace od nejnovějšího, bez `definition` a `settings`. Vyžaduje API klíč s oprávněním `full`.

`GET /forms`

## Parametry dotazu

- `page` (integer): Číslo stránky, začíná na 1.

- `limit` (integer): Počet formulářů na stránce, od 1 do 100.

- `search` (string): Hledá část názvu formuláře bez ohledu na velikost písmen.

- `match`, `order`, `direction`: viz [Filtrování](https://emailit.com/cs/docs/api-reference/filtering/).

### Klíče filtrů

Filtry se zadávají parametry dotazu ve tvaru `key.condition=value`, například `status.exact=live`. Viz [Filtrování](/cs/docs/api-reference/filtering/).

| Klíč | Typ | Poznámky |
| --- | --- | --- |
| `name` | string | |
| `type` | enum | `popup`, `full_page`, `flyout`, `embed`, `banner` |
| `status` | enum | `draft`, `live` |
| `created_at` | date | |

Klíče řazení pro `order`: `name`, `type`, `status`, `created_at`.

## Odpověď

- `data` (object[]): Formuláře na této stránce: `object`, `id`, `name`, `type`, `status`, `token`, `created_at`, `updated_at`, `published_at`.

- `total_records` (integer): Počet formulářů, které odpovídají dotazu.

- `next_page_url` (string | null): Cesta k další stránce, nebo `null` na poslední stránce. Obsahuje jen `page` a `limit`; když na ni přejdete, přidejte znovu vyhledávání a filtry.

- `previous_page_url` (string | null): Cesta k předchozí stránce, nebo `null` na první stránce.

**Požadavek** `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
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/forms/list/

## Publikování formuláře — POST /forms/{id}/publish

> Zveřejněte přihlašovací formulář, aby ho vkládací skript zobrazoval na vašem webu. Formulář potřebuje krok s formulářem a krok s potvrzením úspěchu.

# Publikování formuláře

Nastaví formuláři stav `live` a aktualizuje `published_at`. Formuláře ve stavu `live` se načítají na každém webu, kde je [nainstalovaný](/cs/docs/forms/install/) skript Emailitu, a mohou přijímat odpovědi. Vyžaduje API klíč s oprávněním `full`.

Definice potřebuje alespoň jeden krok s `kind: "form"` a jeden s `kind: "success"`, jinak požadavek vrátí `422`. Odpovědi se ukládají u formuláře a zatím nevytvářejí kontakty.

`POST /forms/{id}/publish`

## Parametry v cestě

- `id` (string, povinné): ID formuláře (`frm_…`).

## Odpověď

Vrací objekt formuláře s polem `status` nastaveným na `live`. Pokud je definice neúplná, vrací `422`, a pokud formulář neexistuje, vrací `404`.

**Požadavek** `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"
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/forms/publish/

## Stažení formuláře — POST /forms/{id}/unpublish

> Stáhněte zveřejněný přihlašovací formulář vrácením do konceptu. Vkládací skript ho přestane zobrazovat a odpovědi přestanou přicházet.

# Stažení formuláře

Vrátí formulář do stavu `draft`. Vkládací skript ho přestane načítat a nové odpovědi se odmítají. Token, definice a `published_at` zůstanou beze změny, takže ho můžete později znovu [publikovat](/cs/docs/api-reference/forms/publish/). Vyžaduje API klíč s oprávněním `full`.

`POST /forms/{id}/unpublish`

## Parametry v cestě

- `id` (string, povinné): ID formuláře (`frm_…`).

## Odpověď

Vrací objekt formuláře s polem `status` nastaveným na `draft`. Pokud formulář neexistuje, vrací `404`.

**Požadavek** `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"
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/forms/unpublish/

## Obnovení veřejného tokenu — POST /forms/{id}/reset-token

> Nahraďte veřejný token formuláře. Vkládací kódy se starým tokenem formulář okamžitě přestanou načítat.

# Obnovení veřejného tokenu

Vygeneruje pro formulář nový veřejný `token`. Starý token okamžitě přestane fungovat: weby, které s ním formulář načítají, ho už nezobrazí a nemohou do něj odesílat odpovědi. Aktualizujte vkládací kód novým tokenem. Vyžaduje API klíč s oprávněním `full`.

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

## Parametry v cestě

- `id` (string, povinné): ID formuláře (`frm_…`).

## Odpověď

Vrací objekt formuláře s novým `token`. Stav se nemění. Pokud formulář neexistuje, vrací `404`.

**Požadavek** `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"
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/forms/reset-token/

## Smazání formuláře — DELETE /forms/{id}

> Trvale smažte přihlašovací formulář spolu se všemi uloženými odpověďmi. Vrací 204 bez těla.

# Smazání formuláře

Trvale smaže formulář a všechny jeho uložené odpovědi. Weby, které ho mají vložený, ho přestanou zobrazovat. Vyžaduje API klíč s oprávněním `full`.

`DELETE /forms/{id}`

## Parametry v cestě

- `id` (string, povinné): ID formuláře (`frm_…`).

## Odpověď

Vrací `204 No Content` s prázdným tělem. Pokud formulář neexistuje, vrací `404`.

**Požadavek** `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"
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/forms/delete/
