> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getqr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Hromadné vytváření QR kódů

> Vytvořte až 100 QR kódů najednou a stáhněte je jako archiv ZIP.

> [!NOTE]
>
> GetQR API je v beta verzi a je dostupné pro vybrané pracovní prostory. Do obecného vydání se podrobnosti mohou změnit.

Hromadné vytváření převede seznam názvů a URL na QR kódy typu Website se společným designem. Běží na pozadí: spusťte ho, sledujte jeho průběh a pak stáhněte archiv ZIP.

| Metoda | Cesta | Popis |
| - | - | - |
| `GET` | `/api/v1/bulk-qr-creations` | [Získání aktuálního hromadného vytváření](#získání-aktuálního-hromadného-vytváření) |
| `POST` | `/api/v1/bulk-qr-creations` | [Vytvoření z JSON](#vytvoření-z-json) |
| `POST` | `/api/v1/bulk-qr-creations/csv` | [Vytvoření ze souboru CSV](#vytvoření-ze-souboru-csv) |
| `GET` | `/api/v1/bulk-qr-creations/{id}` | [Získání hromadného vytváření](#získání-hromadného-vytváření) |
| `DELETE` | `/api/v1/bulk-qr-creations/{id}` | [Přerušení hromadného vytváření](#přerušení-hromadného-vytváření) |
| `GET` | `/api/v1/bulk-qr-creations/{id}/download` | [Stažení archivu](#stažení-archivu) |

## Jak to funguje

**1. Spusťte hromadné vytváření**

Pošlete své řádky pomocí [vytvoření z JSON](#vytvoření-z-json) nebo [vytvoření ze souboru CSV](#vytvoření-ze-souboru-csv). API odpoví `202` s hromadným vytvářením a jeho `id`.

**2. Sledujte průběh**

Každých pár sekund volejte [získání hromadného vytváření](#získání-hromadného-vytváření), dokud `status` nebude `completed` nebo `failed`.

**3. Stáhněte archiv**

Když je `status` rovno `completed`, zavolejte [stažení archivu](#stažení-archivu) a získáte ZIP s obrázky QR kódů.

* **Limit.** Nejvýše 100 řádků na jedno hromadné vytváření.
* **Jedno po druhém.** V pracovním prostoru běží vždy jen jedno hromadné vytváření. Pokus o spuštění dalšího, zatímco jedno běží, vrátí to běžící.
* **Idempotence.** Každý požadavek potřebuje `idempotencyKey`. Zopakování požadavku se stejným klíčem a stejným tělem vrátí už spuštěné hromadné vytváření. Stejný klíč s jiným tělem vrátí `422`.
* **Řádky.** Každý řádek potřebuje `name` a `url`. Viz [Řádky](#řádky).
* **Tarif.** Hromadné vytváření není v tarifu Single QR k dispozici: požadavek vrátí `403 exceeded_limit`.

## Řádky

* **Název.** Stane se názvem QR kódu. Ořízne se a zkrátí na 40 znaků. Opakované názvy (bez ohledu na velikost písmen) dostanou číslo: `Menu`, `Menu 2`, `Menu 3`.
* **URL.** Stane se cílem. Musí to být adresa `http` nebo `https` se skutečnou doménou, například `example.com/menu`, a nesmí obsahovat mezery. URL bez schématu dostane `https://`.
* **Prázdné řádky.** Řádky bez názvu i bez URL se přeskočí. Řádek, který má jen jedno z nich, se odmítne.

Každý QR kód je QR kód `website` s krátkým odkazem. Viz [Typy QR kódů](https://docs.getqr.com/cs/api/guides/qr-types.md).

## Hlavičky

**Authorization** `string` *required*

`Bearer` následovaný vaším API klíčem. Viz [Ověřování](https://docs.getqr.com/cs/api/authentication.md).

**Content-Type** `string`

`application/json` pro [vytvoření z JSON](#vytvoření-z-json), `multipart/form-data` pro [vytvoření ze souboru CSV](#vytvoření-ze-souboru-csv).

## Objekt hromadného vytváření

**id** `string`

ID hromadného vytváření, například `cm2k7x9qb0003ax8eb4f6gh2t`.

**status** `string`

`queued`, `processing`, `packaging` nebo `completed`. Neúspěšné nebo přerušené hromadné vytváření přejde přes `rollingBack` do stavu `failed`.

**sourceFilename** `string`

Název zdrojového souboru.

**totalCount** `integer`

Počet řádků.

**createdCount** `integer`

Dosud vytvořené QR kódy.

**renderedCount** `integer`

Dosud vykreslené obrázky QR kódů.

**percent** `integer`

Celkový průběh, 0 až 100. Vytváření zabere až 40, vykreslování až 90, balení je 95 a `completed` je 100.

**stalled** `boolean`

`true`, když běžící hromadné vytváření 2 minuty nepokročilo. Pokračujte v dotazování: [získání hromadného vytváření](#získání-hromadného-vytváření) zaseknuté hromadné vytváření znovu spustí.

**error** `object | null`

Když je `status` rovno `failed`: `code` a `message`. Přerušené hromadné vytváření má kód `cancelled_by_user`. Neúspěšné hromadné vytváření se vrátí zpět, takže se žádný z jeho QR kódů nezachová.

**downloadUrl** `string | null`

Cesta ke [stažení archivu](#stažení-archivu), jakmile je `status` rovno `completed`.

**createdAt** `string`

Datum spuštění, ISO 8601.

**updatedAt** `string`

Datum poslední změny, ISO 8601.

**completedAt** `string | null`

Datum dokončení, ISO 8601.

**failedAt** `string | null`

Datum selhání, ISO 8601.

## Získání aktuálního hromadného vytváření

`GET /api/v1/bulk-qr-creations`

Vrátí hromadné vytváření, které ve vašem pracovním prostoru ještě běží. Pokud žádné neběží, vrací poslední dokončené (`completed` nebo `failed`), dokud ho nezavřete: zavře ho stažení archivu nebo jeho zavření v dashboardu. Jinak vrátí `null`. Použijte ho k obnovení sledování po restartu.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/bulk-qr-creations" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "processing",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 50,
  "createdCount": 18,
  "renderedCount": 12,
  "percent": 26,
  "stalled": false,
  "error": null,
  "downloadUrl": null,
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:00:20.000Z",
  "completedAt": null,
  "failedAt": null
}
```

```json 200 (nothing to resume) theme={null}
null
```

## Vytvoření z JSON

`POST /api/v1/bulk-qr-creations`

Spustí hromadné vytváření ze seznamu řádků. Odpoví `202 Accepted`. Hromadné vytváření běží na pozadí.

**rows** `object[]` *required*

QR kódy k vytvoření, nejvýše 100. Každý řádek má tvar `{ "name": "...", "url": "..." }` a nepřijímá žádná další pole. Viz [Řádky](#řádky).

**design** `object` *required*

Design použitý pro všechny QR kódy: `styles`, `frameOptions` a `logoOptions`, všechny nepovinné. Pro výchozí design pošlete `{}`. Jiná pole se odmítnou. Viz [Přizpůsobení](https://docs.getqr.com/cs/api/guides/customization.md).

**sourceFilename** `string` *required*

Název zobrazený v dashboardu a použitý pro archiv, 1 až 255 znaků.

**idempotencyKey** `string` *required*

Váš vlastní klíč pro toto hromadné vytváření, 8 až 100 znaků.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/bulk-qr-creations" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "rows": [
      { "name": "Menu", "url": "https://example.com/menu" },
      { "name": "Wine list", "url": "example.com/wine" }
    ],
    "design": { "styles": { "dotsOptions": { "type": "rounded" } } },
    "sourceFilename": "campaign-links.csv",
    "idempotencyKey": "campaign-2026-08-14"
  }'
```

```json 202 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "queued",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 2,
  "createdCount": 0,
  "renderedCount": 0,
  "percent": 0,
  "stalled": false,
  "error": null,
  "downloadUrl": null,
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:00:00.000Z",
  "completedAt": null,
  "failedAt": null
}
```

## Vytvoření ze souboru CSV

`POST /api/v1/bulk-qr-creations/csv`

Totéž jako [vytvoření z JSON](#vytvoření-z-json), ale řádky přijímá jako soubor CSV odeslaný jako `multipart/form-data`. Odpoví `202 Accepted`.

Soubor musí být `.csv` o velikosti nejvýše 1 000 000 bajtů. Jeho záhlaví musí být přesně `name,url` a po něm může následovat nejvýše 100 datových řádků. Viz [Formát CSV](https://docs.getqr.com/cs/bulk/csv-format.md).

**file** `file` *required*

Soubor CSV.

**design** `string` *required*

Objekt designu serializovaný jako JSON, například `{"styles":{"dotsOptions":{"type":"rounded"}}}`. Pro výchozí design pošlete `{}`.

**idempotencyKey** `string` *required*

Váš vlastní klíč pro toto hromadné vytváření, 8 až 100 znaků.

**sourceFilename** `string`

Název zobrazený v dashboardu a použitý pro archiv, nejvýše 255 znaků. Výchozí hodnota je název nahraného souboru.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/bulk-qr-creations/csv" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -F "file=@campaign-links.csv" \
  -F 'design={"styles":{"dotsOptions":{"type":"rounded"}}}' \
  -F "idempotencyKey=campaign-2026-08-14"
```

```csv campaign-links.csv theme={null}
name,url
Menu,https://example.com/menu
Wine list,example.com/wine
```

```json 202 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "queued",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 2,
  "createdCount": 0,
  "renderedCount": 0,
  "percent": 0,
  "stalled": false,
  "error": null,
  "downloadUrl": null,
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:00:00.000Z",
  "completedAt": null,
  "failedAt": null
}
```

## Získání hromadného vytváření

`GET /api/v1/bulk-qr-creations/{id}`

Vrátí stav a průběh hromadného vytváření. Dotazujte se, dokud je `status` rovno `queued`, `processing` nebo `packaging`. Jakmile je archiv připravený, objeví se `downloadUrl`.

**id** `string` *required*

ID hromadného vytváření. Najdete ho v odpovědi na vytvoření nebo na získání aktuálního hromadného vytváření.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/bulk-qr-creations/cm2k7x9qb0003ax8eb4f6gh2t" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "completed",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 50,
  "createdCount": 50,
  "renderedCount": 50,
  "percent": 100,
  "stalled": false,
  "error": null,
  "downloadUrl": "/api/v1/bulk-qr-creations/cm2k7x9qb0003ax8eb4f6gh2t/download",
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:02:10.000Z",
  "completedAt": "2026-08-14T08:02:10.000Z",
  "failedAt": null
}
```

## Přerušení hromadného vytváření

`DELETE /api/v1/bulk-qr-creations/{id}`

Zastaví běžící hromadné vytváření a smaže QR kódy, které už vytvořilo. Vrácení zpět proběhne během požadavku, takže odpověď má obvykle `status` `failed` a `error.code` `cancelled_by_user`. Přerušení hromadného vytváření, které už selhalo, ho vrátí beze změny.

> [!WARNING]
>
> Dokončené hromadné vytváření nelze přerušit: požadavek vrátí `400`. Jeho QR kódy místo toho smažte jeden po druhém přes [QR kódy](https://docs.getqr.com/cs/api/endpoints/qr-codes.md).

**id** `string` *required*

ID hromadného vytváření.

```bash cURL theme={null}
curl -X DELETE "https://getqr.com/api/v1/bulk-qr-creations/cm2k7x9qb0003ax8eb4f6gh2t" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "failed",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 50,
  "createdCount": 18,
  "renderedCount": 12,
  "percent": 26,
  "stalled": false,
  "error": {
    "code": "cancelled_by_user",
    "message": "Bulk QR creation was cancelled."
  },
  "downloadUrl": null,
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:00:40.000Z",
  "completedAt": null,
  "failedAt": "2026-08-14T08:00:40.000Z"
}
```

## Stažení archivu

`GET /api/v1/bulk-qr-creations/{id}/download`

Vrátí archiv ZIP s jedním obrázkem JPEG o velikosti 1024 px na každý QR kód, pojmenovaným podle jeho řádku: `001-Menu.jpg`, `002-Wine list.jpg` a tak dále. Archiv je pojmenovaný podle `sourceFilename`. K dispozici, jakmile je `status` rovno `completed`. Stažení hromadné vytváření zavře, takže ho [získání aktuálního hromadného vytváření](#získání-aktuálního-hromadného-vytváření) přestane vracet.

**id** `string` *required*

ID hromadného vytváření.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/bulk-qr-creations/cm2k7x9qb0003ax8eb4f6gh2t/download" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  --output qr-codes.zip
```

```http 200 theme={null}
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="campaign-links-qr-codes.zip"

<binary archive data>
```

## Časté problémy

> [accordion] 422 s "contains an invalid HTTP(S) URL"
>
> Zpráva uvádí řádek. Každá URL musí být adresa `http` nebo `https` se skutečnou doménou, například `example.com/menu`. Opravte řádek a pošlete požadavek znovu.

> [accordion] 422 "CSV headers must be exactly: name,url."
>
> První řádek CSV musí být `name,url`, v tomto pořadí, malými písmeny a bez dalších sloupců.

> [accordion] 422 "This idempotencyKey was already used with a different request body."
>
> Klíče nelze znovu použít pro jinou dávku. Pošlete nový `idempotencyKey`.

> [accordion] 409 "The bulk QR archive is not ready for download."
>
> Hromadné vytváření ještě není dokončené. Pokračujte v dotazování, dokud `status` nebude `completed`.

> [accordion] 400 "Cannot cancel a finished bulk QR creation."
>
> Hromadné vytváření už je dokončené, takže ho nelze vrátit zpět.

> [accordion] 403 exceeded\_limit
>
> Váš pracovní prostor má tarif Single QR, který hromadné vytváření nezahrnuje. Přejděte na vyšší tarif.

> [accordion] Místo nového hromadného vytváření se vrátilo starší
>
> Ve vašem pracovním prostoru ještě běží jiné hromadné vytváření, nebo jste znovu použili `idempotencyKey`. Počkejte, až doběhne, nebo použijte nový klíč.

## Co dál

> [card] [Přizpůsobení](https://docs.getqr.com/cs/api/guides/customization.md)

> [card] [QR kódy](https://docs.getqr.com/cs/api/endpoints/qr-codes.md)

> [card] [Hromadné vytváření v aplikaci](https://docs.getqr.com/cs/bulk/overview.md)

> [card] [Formát CSV](https://docs.getqr.com/cs/bulk/csv-format.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.