> ## 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.

# Creare QR în masă

> Creați până la 100 de coduri QR deodată și descărcați-le ca arhivă ZIP.

> [!NOTE]
>
> API-ul GetQR este în versiune beta și este disponibil pentru anumite spații de lucru. Detaliile se pot schimba înainte de lansarea generală.

O creare în masă transformă o listă de nume și URL-uri în coduri QR Website cu un design comun. Rulează în fundal: o porniți, îi urmăriți progresul, apoi descărcați arhiva ZIP.

| Metodă | Cale | Descriere |
| - | - | - |
| `GET` | `/api/v1/bulk-qr-creations` | [Obținerea creării în masă curente](#obținerea-creării-în-masă-curente) |
| `POST` | `/api/v1/bulk-qr-creations` | [Crearea din JSON](#crearea-din-json) |
| `POST` | `/api/v1/bulk-qr-creations/csv` | [Crearea dintr-un fișier CSV](#crearea-dintr-un-fișier-csv) |
| `GET` | `/api/v1/bulk-qr-creations/{id}` | [Obținerea unei creări în masă](#obținerea-unei-creări-în-masă) |
| `DELETE` | `/api/v1/bulk-qr-creations/{id}` | [Anularea unei creări în masă](#anularea-unei-creări-în-masă) |
| `GET` | `/api/v1/bulk-qr-creations/{id}/download` | [Descărcarea arhivei](#descărcarea-arhivei) |

## Cum funcționează

**1. Porniți crearea în masă**

Trimiteți rândurile cu [Crearea din JSON](#crearea-din-json) sau [Crearea dintr-un fișier CSV](#crearea-dintr-un-fișier-csv). API-ul răspunde cu `202`, crearea în masă și `id`-ul ei.

**2. Urmăriți progresul**

Apelați [Obținerea unei creări în masă](#obținerea-unei-creări-în-masă) la câteva secunde, până când `status` este `completed` sau `failed`.

**3. Descărcați arhiva**

Când `status` este `completed`, apelați [Descărcarea arhivei](#descărcarea-arhivei) pentru a obține un ZIP cu imaginile codurilor QR.

* **Limită.** Până la 100 de rânduri per creare în masă.
* **Una singură odată.** Într-un spațiu de lucru rulează o singură creare în masă. Dacă porniți alta cât timp una rulează, primiți înapoi pe cea care rulează.
* **Idempotență.** Fiecare cerere necesită un `idempotencyKey`. Dacă repetați o cerere cu aceeași cheie și același corp, primiți crearea în masă deja pornită. Aceeași cheie cu un alt corp returnează `422`.
* **Rânduri.** Fiecare rând are nevoie de `name` și `url`. Consultați [Rânduri](#rânduri).
* **Plan.** Crearea în masă nu este disponibilă pe planul Single QR: cererea returnează `403 exceeded_limit`.

## Rânduri

* **Nume.** Devine titlul codului QR. Spațiile de la capete sunt eliminate, iar numele este trunchiat la 40 de caractere. Numele repetate (indiferent de majuscule) primesc un număr: `Menu`, `Menu 2`, `Menu 3`.
* **URL.** Devine destinația. Trebuie să fie o adresă `http` sau `https` cu un domeniu real, cum ar fi `example.com/menu`, și să nu conțină spații. Un URL fără schemă primește `https://`.
* **Rânduri goale.** Rândurile fără nume și fără URL sunt omise. Un rând care are doar unul dintre ele este respins.

Fiecare cod QR este un cod QR `website` cu link scurt. Consultați [Tipuri de coduri QR](https://docs.getqr.com/ro/api/guides/qr-types.md).

## Anteturi

**Authorization** `string` *required*

`Bearer` urmat de cheia dvs. API. Consultați [Autentificare](https://docs.getqr.com/ro/api/authentication.md).

**Content-Type** `string`

`application/json` pentru [Crearea din JSON](#crearea-din-json), `multipart/form-data` pentru [Crearea dintr-un fișier CSV](#crearea-dintr-un-fișier-csv).

## Obiectul creare în masă

**id** `string`

ID-ul creării în masă, de exemplu `cm2k7x9qb0003ax8eb4f6gh2t`.

**status** `string`

`queued`, `processing`, `packaging` sau `completed`. O creare în masă eșuată sau anulată trece prin `rollingBack` până la `failed`.

**sourceFilename** `string`

Numele fișierului sursă.

**totalCount** `integer`

Numărul de rânduri.

**createdCount** `integer`

Codurile QR create până acum.

**renderedCount** `integer`

Imaginile codurilor QR randate până acum.

**percent** `integer`

Progresul total, de la 0 la 100. Crearea ajunge până la 40, randarea până la 90, împachetarea este 95, iar `completed` este 100.

**stalled** `boolean`

`true` când o creare în masă care rulează nu a mai progresat de 2 minute. Continuați să interogați: [Obținerea unei creări în masă](#obținerea-unei-creări-în-masă) repornește o creare în masă blocată.

**error** `object | null`

Când `status` este `failed`: `code` și `message`. O creare în masă anulată are codul `cancelled_by_user`. O creare în masă eșuată este anulată integral, așa că niciunul dintre codurile ei QR nu este păstrat.

**downloadUrl** `string | null`

Calea pentru [Descărcarea arhivei](#descărcarea-arhivei), după ce `status` este `completed`.

**createdAt** `string`

Data pornirii, ISO 8601.

**updatedAt** `string`

Data ultimei actualizări, ISO 8601.

**completedAt** `string | null`

Data finalizării, ISO 8601.

**failedAt** `string | null`

Data eșecului, ISO 8601.

## Obținerea creării în masă curente

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

Returnează crearea în masă care încă rulează în spațiul dvs. de lucru. Când nu rulează niciuna, returnează ultima creare încheiată (`completed` sau `failed`) până când aceasta este închisă: descărcarea arhivei sau închiderea ei în panou are acest efect. Altfel, returnează `null`. Folosiți-l pentru a relua urmărirea după o repornire.

```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
```

## Crearea din JSON

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

Pornește o creare în masă dintr-o listă de rânduri. Răspunde cu `202 Accepted`. Crearea în masă rulează în fundal.

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

Codurile QR de creat, până la 100. Fiecare rând este `{ "name": "...", "url": "..." }` și nu acceptă alte câmpuri. Consultați [Rânduri](#rânduri).

**design** `object` *required*

Designul aplicat fiecărui cod QR: `styles`, `frameOptions` și `logoOptions`, toate opționale. Trimiteți `{}` pentru designul implicit. Alte câmpuri sunt respinse. Consultați [Personalizare](https://docs.getqr.com/ro/api/guides/customization.md).

**sourceFilename** `string` *required*

Numele afișat în panou și folosit pentru arhivă, între 1 și 255 de caractere.

**idempotencyKey** `string` *required*

Propria dvs. cheie pentru această creare în masă, între 8 și 100 de caractere.

```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
}
```

## Crearea dintr-un fișier CSV

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

La fel ca [Crearea din JSON](#crearea-din-json), dar primește rândurile ca fișier CSV trimis ca `multipart/form-data`. Răspunde cu `202 Accepted`.

Fișierul trebuie să fie un `.csv` de cel mult 1.000.000 de octeți. Rândul de antet trebuie să fie exact `name,url`, urmat de cel mult 100 de rânduri de date. Consultați [Formatul CSV](https://docs.getqr.com/ro/bulk/csv-format.md).

**file** `file` *required*

Fișierul CSV.

**design** `string` *required*

Obiectul de design, serializat ca JSON, de exemplu `{"styles":{"dotsOptions":{"type":"rounded"}}}`. Trimiteți `{}` pentru designul implicit.

**idempotencyKey** `string` *required*

Propria dvs. cheie pentru această creare în masă, între 8 și 100 de caractere.

**sourceFilename** `string`

Numele afișat în panou și folosit pentru arhivă, până la 255 de caractere. Implicit, numele fișierului încărcat.

```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
}
```

## Obținerea unei creări în masă

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

Returnează starea și progresul unei creări în masă. Interogați-l cât timp `status` este `queued`, `processing` sau `packaging`. `downloadUrl` apare când arhiva este gata.

**id** `string` *required*

ID-ul creării în masă. Preluați-l din răspunsul creării sau din cel al creării în masă curente.

```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
}
```

## Anularea unei creări în masă

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

Oprește o creare în masă care rulează și șterge codurile QR pe care le-a creat deja. Anularea modificărilor are loc în timpul cererii, așa că, în mod normal, răspunsul are `status` `failed` și `error.code` `cancelled_by_user`. Anularea unei creări în masă care a eșuat deja o returnează neschimbată.

> [!WARNING]
>
> O creare în masă finalizată nu poate fi anulată: cererea returnează `400`. Ștergeți în schimb codurile ei QR unul câte unul cu [Coduri QR](https://docs.getqr.com/ro/api/endpoints/qr-codes.md).

**id** `string` *required*

ID-ul creării în masă.

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

## Descărcarea arhivei

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

Returnează o arhivă ZIP cu câte un JPEG de 1024 px pentru fiecare cod QR, denumit după rândul său: `001-Menu.jpg`, `002-Wine list.jpg` și așa mai departe. Arhiva este denumită după `sourceFilename`. Disponibilă după ce `status` este `completed`. Descărcarea închide crearea în masă, așa că [Obținerea creării în masă curente](#obținerea-creării-în-masă-curente) nu o mai returnează.

**id** `string` *required*

ID-ul creării în masă.

```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>
```

## Probleme frecvente

> [accordion] 422 cu "contains an invalid HTTP(S) URL"
>
> Mesajul indică rândul. Fiecare URL trebuie să fie o adresă `http` sau `https` cu un domeniu real, cum ar fi `example.com/menu`. Corectați rândul și trimiteți din nou cererea.

> [accordion] 422 "CSV headers must be exactly: name,url."
>
> Primul rând al fișierului CSV trebuie să fie `name,url`, în această ordine și cu litere mici, fără alte coloane.

> [accordion] 422 "This idempotencyKey was already used with a different request body."
>
> Cheile nu pot fi refolosite pentru un alt lot. Trimiteți un `idempotencyKey` nou.

> [accordion] 409 "The bulk QR archive is not ready for download."
>
> Crearea în masă nu s-a finalizat încă. Continuați să interogați până când `status` este `completed`.

> [accordion] 400 "Cannot cancel a finished bulk QR creation."
>
> Crearea în masă s-a finalizat deja, așa că nu mai poate fi anulată.

> [accordion] 403 exceeded\_limit
>
> Spațiul dvs. de lucru folosește planul Single QR, care nu include crearea în masă. Treceți la un plan superior.

> [accordion] Am primit o creare în masă mai veche în locul uneia noi
>
> O altă creare în masă încă rulează în spațiul dvs. de lucru sau ați refolosit un `idempotencyKey`. Așteptați să se termine sau folosiți o cheie nouă.

## Ce urmează

> [card] [Personalizare](https://docs.getqr.com/ro/api/guides/customization.md)

> [card] [Coduri QR](https://docs.getqr.com/ro/api/endpoints/qr-codes.md)

> [card] [Crearea în masă în aplicație](https://docs.getqr.com/ro/bulk/overview.md)

> [card] [Formatul CSV](https://docs.getqr.com/ro/bulk/csv-format.md)


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