Créer un code
POST/v1/codes
Paramètres du corps
namestringobligatoireLibellé interne du code, jamais montré à une personne qui scanne.content.typestringobligatoireL’un des types de code pris en charge, par exemple url, vcard, wifi.content.urlstringobligatoireDestination d’un code url. Les champs obligatoires varient selon le type.dynamicbooleanfacultatiftrue par défaut : un lien court que vous pouvez rediriger. false encode directement le contenu.designobjectfacultatifMotif, forme des yeux et couleurs. Par défaut, le design par défaut de Dotwick.folderIdstringfacultatifDossier dans lequel ranger le code. Obligatoire pour les clés limitées à des dossiers.templateIdstringfacultatifUn modèle de design enregistré à appliquer à la place de design.domainIdstring | nullfacultatifDomaine de lien court personnalisé (bientôt disponible: les domaines personnalisés ne sont pas encore activés). Omis = celui par défaut de l’espace de travail ; null = le domaine partagé.slugstringfacultatifUn slug de lien court personnalisé à la place d’un slug généré. Doit être unique sur le domaine.Exemple de requête
requêtePOST /v1/codes
curl -X POST https://api.dotwick.com/v1/codes \ -H "Authorization: Bearer sk_live_…" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: van-014-2026-09-10" \ -d '{ "name": "Van fleet – unit 14", "content": { "type": "url", "url": "https://example.com/fleet/van-014" }, "design": { "pattern": "rounded", "eyes": { "frame": "circle", "ball": "circle" }, "colors": { "fg": "#18181B", "bg": "#FFFFFF" } }, "folderId": "fld_8k2m4q7x" }'réponse201 Createdextrait : l’objet complet contient aussi le design, les règles et les horodatages
{ "id": "qr_8841ce2mxk", "name": "Van fleet – unit 14", "type": "url", "dynamic": true, "status": "active", "slug": "Xq7mK2p", "shortUrl": "https://dotwick.co/Xq7mK2p", "content": { "type": "url", "url": "https://example.com/fleet/van-014" }, "folderId": "fld_8k2m4q7x", "createdAt": "2026-09-10T09:41:08.000Z"}Erreurs
400validation_failedLe corps n’a pas passé la validation du schéma ; voir error.details pour les problèmes.401unauthorizedEn-tête Authorization manquant ou non valide.403forbiddenLa clé n’a pas codes:write, ou elle est limitée à d’autres dossiers.403plan_limit_reachedLa limite de codes dynamiques de l’offre est atteinte.409conflictLe slug est déjà pris sur ce domaine.422idempotency_conflictL’Idempotency-Key a été réutilisé avec un corps différent.422unsafe_destinationLa destination n’a pas passé la vérification Google Web Risk / liste de blocage.429rate_limitedBudget par minute ou en rafale dépassé : voir Retry-After.