Création en masse
Paramètres du corps
itemsarrayobligatoire1–500 codes. Chacun est { content, name?, slug?, folder?, fileName?, ref? }.items[].contentobjectobligatoireLe contenu du code ; son type doit être égal à codeType.items[].refstringfacultatifVotre propre référence (SKU, identifiant CRM), reprise dans les lignes et le fichier de résultats.items[].folderstringfacultatifUn nom de sous-dossier sous folderId, créé s’il n’existe pas.codeTypestringfacultatifUn type par requête. url par défaut.dynamicbooleanfacultatiftrue par défaut.folderIdstring | nullfacultatifOù vont les codes. Par défaut, la racine de l’espace de travail.templateIdstring | nullfacultatifLe design de chaque code. Par défaut, le design par défaut de Dotwick.exportobject | nullfacultatifGénère aussi un ZIP à la fin de la série, par exemple { formats: ["svg", "pdf"] }.Exemple de requête
curl -X POST https://api.dotwick.com/v1/codes/bulk \ -H "Authorization: Bearer sk_live_…" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: fleet-2026-09-batch-3" \ -d '{ "codeType": "url", "folderId": "fld_8k2m4q7x", "items": [ { "name": "Van 15", "content": { "type": "url", "url": "https://example.com/fleet/van-015" }, "ref": "VAN-015" }, { "name": "Van 16", "content": { "type": "url", "url": "https://example.com/fleet/van-016" }, "ref": "VAN-016" } ], "export": { "formats": [ "svg", "pdf" ] } }'{ "id": "blk_9f24ab7c3e1d5f80", "status": "queued", "source": "api", "codeType": "url", "dynamic": true, "counts": { "total": 2, "valid": 2, "invalid": 0, "created": 0, "failed": 0, "canceled": 0 }, "progress": 0, "folderId": "fld_8k2m4q7x", "exportId": null, "createdAt": "2026-09-12T14:03:51.000Z"}Suivre la série
La réponse est 202 Accepted avec la série. Interrogez GET /v1/bulk-imports/{id} jusqu’à ce que son statut soit succeeded, partially_succeeded ou failed, puis lisez les codes avec GET /v1/bulk-imports/{id}/rows ou téléchargez GET /v1/bulk-imports/{id}/results.csv. Ou abonnez-vous à bulk.completed et évitez l’interrogation.
Un élément mal formé fait échouer toute la requête avec validation_failed à items.N. Les éléments qui échouent aux contrôles de base de données (un slug déjà pris) sont ignorés et comptés comme non valides ; les autres sont créés. Réessayez ceux qui ont échoué avec POST /v1/bulk-imports/{id}/retry.
Limites
Un type de code par requête : envoyez une requête par type. Le plafond de lignes en masse de l’offre et sa limite de codes dynamiques s’appliquent, et les séries au-delà des tâches simultanées de l’offre attendent dans une file.