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

# Créations en masse

> Créez jusqu'à 100 QR codes à la fois et téléchargez-les dans une archive ZIP.

> [!NOTE]
>
> L'API GetQR est en version bêta et réservée à certains espaces de travail. Certains détails peuvent changer avant la disponibilité générale.

Une création en masse transforme une liste de noms et d'URL en QR codes Website avec un design commun. Elle s'exécute en arrière-plan : lancez-la, suivez sa progression, puis téléchargez l'archive ZIP.

| Méthode | Chemin | Description |
| - | - | - |
| `GET` | `/api/v1/bulk-qr-creations` | [Récupérer la création en masse en cours](#récupérer-la-création-en-masse-en-cours) |
| `POST` | `/api/v1/bulk-qr-creations` | [Créer à partir de JSON](#créer-à-partir-de-json) |
| `POST` | `/api/v1/bulk-qr-creations/csv` | [Créer à partir d'un fichier CSV](#créer-à-partir-d-un-fichier-csv) |
| `GET` | `/api/v1/bulk-qr-creations/{id}` | [Récupérer une création en masse](#récupérer-une-création-en-masse) |
| `DELETE` | `/api/v1/bulk-qr-creations/{id}` | [Annuler une création en masse](#annuler-une-création-en-masse) |
| `GET` | `/api/v1/bulk-qr-creations/{id}/download` | [Télécharger l'archive](#télécharger-l-archive) |

## Fonctionnement

**1. Lancez la création en masse**

Envoyez vos lignes avec [Créer à partir de JSON](#créer-à-partir-de-json) ou [Créer à partir d'un fichier CSV](#créer-à-partir-d-un-fichier-csv). L'API répond `202` avec la création en masse et son `id`.

**2. Suivez sa progression**

Appelez [Récupérer une création en masse](#récupérer-une-création-en-masse) toutes les quelques secondes jusqu'à ce que `status` vaille `completed` ou `failed`.

**3. Téléchargez l'archive**

Quand `status` vaut `completed`, appelez [Télécharger l'archive](#télécharger-l-archive) pour obtenir un ZIP des images des QR codes.

* **Limite.** Jusqu'à 100 lignes par création en masse.
* **Une à la fois.** Une seule création en masse s'exécute par espace de travail. En lancer une autre pendant qu'une est en cours renvoie celle en cours.
* **Idempotence.** Chaque requête nécessite une `idempotencyKey`. Répéter une requête avec la même clé et le même corps renvoie la création en masse déjà lancée. La même clé avec un corps différent renvoie `422`.
* **Lignes.** Chaque ligne nécessite un `name` et une `url`. Consultez [Lignes](#lignes).
* **Offre.** La création en masse n'est pas disponible avec l'offre Single QR : la requête renvoie `403 exceeded_limit`.

## Lignes

* **Nom.** Devient le titre du QR code. Espaces superflus supprimés, tronqué à 40 caractères. Les noms répétés (sans tenir compte de la casse) reçoivent un numéro : `Menu`, `Menu 2`, `Menu 3`.
* **URL.** Devient la destination. Elle doit être une adresse `http` ou `https` avec un vrai domaine, comme `example.com/menu`, et ne contenir aucun espace. Une URL sans schéma reçoit `https://`.
* **Lignes vides.** Les lignes sans nom ni URL sont ignorées. Une ligne avec un seul des deux est refusée.

Chaque QR code est un QR code `website` sur un lien court. Consultez [Types de QR codes](https://docs.getqr.com/fr/api/guides/qr-types.md).

## En-têtes

**Authorization** `string` *required*

`Bearer` suivi de votre clé API. Consultez [Authentification](https://docs.getqr.com/fr/api/authentication.md).

**Content-Type** `string`

`application/json` pour [Créer à partir de JSON](#créer-à-partir-de-json), `multipart/form-data` pour [Créer à partir d'un fichier CSV](#créer-à-partir-d-un-fichier-csv).

## L'objet création en masse

**id** `string`

ID de la création en masse, par exemple `cm2k7x9qb0003ax8eb4f6gh2t`.

**status** `string`

`queued`, `processing`, `packaging` ou `completed`. Une création en masse échouée ou annulée passe par `rollingBack` avant `failed`.

**sourceFilename** `string`

Nom du fichier source.

**totalCount** `integer`

Nombre de lignes.

**createdCount** `integer`

QR codes créés jusqu'ici.

**renderedCount** `integer`

Images de QR codes générées jusqu'ici.

**percent** `integer`

Progression globale, de 0 à 100. La création va jusqu'à 40, le rendu jusqu'à 90, l'empaquetage correspond à 95, et `completed` à 100.

**stalled** `boolean`

`true` quand une création en masse en cours n'a pas progressé depuis 2 minutes. Continuez à interroger : [Récupérer une création en masse](#récupérer-une-création-en-masse) relance une création en masse bloquée.

**error** `object | null`

Quand `status` vaut `failed` : `code` et `message`. Une création en masse annulée a le code `cancelled_by_user`. Une création en masse échouée est annulée dans son intégralité : aucun de ses QR codes n'est conservé.

**downloadUrl** `string | null`

Chemin de [Télécharger l'archive](#télécharger-l-archive), une fois que `status` vaut `completed`.

**createdAt** `string`

Date de lancement, ISO 8601.

**updatedAt** `string`

Date de dernière mise à jour, ISO 8601.

**completedAt** `string | null`

Date de fin, ISO 8601.

**failedAt** `string | null`

Date d'échec, ISO 8601.

## Récupérer la création en masse en cours

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

Renvoie la création en masse encore en cours dans votre espace de travail. Si aucune n'est en cours, renvoie la dernière terminée (`completed` ou `failed`) jusqu'à ce qu'elle soit fermée : télécharger son archive ou la fermer dans le tableau de bord a cet effet. Sinon, renvoie `null`. Utilisez cet endpoint pour reprendre le suivi après un redémarrage.

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

## Créer à partir de JSON

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

Lance une création en masse à partir d'une liste de lignes. Répond `202 Accepted`. La création en masse s'exécute en arrière-plan.

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

QR codes à créer, jusqu'à 100. Chaque ligne est `{ "name": "...", "url": "..." }` et n'accepte aucun autre champ. Consultez [Lignes](#lignes).

**design** `object` *required*

Design appliqué à chaque QR code : `styles`, `frameOptions` et `logoOptions`, tous facultatifs. Envoyez `{}` pour le design par défaut. Les autres champs sont refusés. Consultez [Personnalisation](https://docs.getqr.com/fr/api/guides/customization.md).

**sourceFilename** `string` *required*

Nom affiché dans le tableau de bord et utilisé pour l'archive, de 1 à 255 caractères.

**idempotencyKey** `string` *required*

Votre propre clé pour cette création en masse, de 8 à 100 caractères.

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

## Créer à partir d'un fichier CSV

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

Identique à [Créer à partir de JSON](#créer-à-partir-de-json), mais reçoit les lignes sous forme de fichier CSV envoyé en `multipart/form-data`. Répond `202 Accepted`.

Le fichier doit être un `.csv` de 1 000 000 octets maximum. Sa ligne d'en-tête doit être exactement `name,url`, suivie de 100 lignes de données au maximum. Consultez [Format CSV](https://docs.getqr.com/fr/bulk/csv-format.md).

**file** `file` *required*

Le fichier CSV.

**design** `string` *required*

L'objet de design, sérialisé en JSON, par exemple `{"styles":{"dotsOptions":{"type":"rounded"}}}`. Envoyez `{}` pour le design par défaut.

**idempotencyKey** `string` *required*

Votre propre clé pour cette création en masse, de 8 à 100 caractères.

**sourceFilename** `string`

Nom affiché dans le tableau de bord et utilisé pour l'archive, jusqu'à 255 caractères. Par défaut, le nom du fichier importé.

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

## Récupérer une création en masse

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

Renvoie le statut et la progression d'une création en masse. Interrogez cet endpoint tant que `status` vaut `queued`, `processing` ou `packaging`. `downloadUrl` apparaît dès que l'archive est prête.

**id** `string` *required*

ID de la création en masse. Récupérez-le dans la réponse de création ou de création en masse en cours.

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

## Annuler une création en masse

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

Arrête une création en masse en cours et supprime les QR codes qu'elle a déjà créés. L'annulation s'effectue pendant la requête : la réponse a donc normalement le `status` `failed` et l'`error.code` `cancelled_by_user`. Annuler une création en masse déjà échouée la renvoie inchangée.

> [!WARNING]
>
> Une création en masse terminée ne peut pas être annulée : la requête renvoie `400`. Supprimez plutôt ses QR codes un par un avec [QR codes](https://docs.getqr.com/fr/api/endpoints/qr-codes.md).

**id** `string` *required*

ID de la création en masse.

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

## Télécharger l'archive

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

Renvoie une archive ZIP avec un JPEG de 1024 px par QR code, nommé d'après sa ligne : `001-Menu.jpg`, `002-Wine list.jpg`, etc. L'archive est nommée d'après `sourceFilename`. Disponible une fois que `status` vaut `completed`. Le téléchargement ferme la création en masse : [Récupérer la création en masse en cours](#récupérer-la-création-en-masse-en-cours) cesse donc de la renvoyer.

**id** `string` *required*

ID de la création en masse.

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

## Problèmes courants

> [accordion] 422 avec « contains an invalid HTTP(S) URL »
>
> Le message indique la ligne. Chaque URL doit être une adresse `http` ou `https` avec un vrai domaine, comme `example.com/menu`. Corrigez la ligne et renvoyez la requête.

> [accordion] 422 "CSV headers must be exactly: name,url."
>
> La première ligne du CSV doit être `name,url`, dans cet ordre et en minuscules, sans autre colonne.

> [accordion] 422 "This idempotencyKey was already used with a different request body."
>
> Une clé ne peut pas être réutilisée pour un autre lot. Envoyez une nouvelle `idempotencyKey`.

> [accordion] 409 "The bulk QR archive is not ready for download."
>
> La création en masse n'est pas encore terminée. Continuez à interroger l'API jusqu'à ce que `status` vaille `completed`.

> [accordion] 400 "Cannot cancel a finished bulk QR creation."
>
> La création en masse est déjà terminée : elle ne peut donc pas être annulée.

> [accordion] 403 exceeded\_limit
>
> Votre espace de travail utilise l'offre Single QR, qui n'inclut pas la création en masse. Passez à une offre supérieure.

> [accordion] J'ai reçu une ancienne création en masse au lieu d'une nouvelle
>
> Une autre création en masse est encore en cours dans votre espace de travail, ou vous avez réutilisé une `idempotencyKey`. Attendez qu'elle se termine, ou utilisez une nouvelle clé.

## Et ensuite

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

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

> [card] [Création en masse dans l'application](https://docs.getqr.com/fr/bulk/overview.md)

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


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