Aggiorna un codice
Cambia la destinazione
curl -X PATCH https://api.dotwick.com/v1/codes/qr_8841ce2mxk \ -H "Authorization: Bearer sk_live_…" \ -H "Content-Type: application/json" \ -d '{ "content": { "type": "url", "url": "https://example.com/fleet/van-014-spring" } }'{ "id": "qr_8841ce2mxk", "workspaceId": "ws_8f21ac4e9d0b7c11", "name": "Van fleet – unit 14", "type": "url", "dynamic": true, "status": "active", "slug": "Xq7mK2p", "domainId": null, "shortUrl": "https://dotwick.co/Xq7mK2p", "content": { "type": "url", "url": "https://example.com/fleet/van-014-spring" }, "design": { "pattern": "rounded", "eyes": { "frame": "circle", "ball": "circle" }, "colors": { "fg": "#18181B", "bg": "#FFFFFF" } }, "rules": { "routes": [], "expiresAt": null, "scanLimit": null, "inactiveUrl": null, "passwordProtected": false }, "folderId": "fld_8k2m4q7x", "templateId": null, "createdBy": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF", "createdAt": "2026-09-10T09:41:08.000Z", "updatedAt": "2026-09-12T14:03:51.000Z", "scans": 0}Aggiornamenti parziali
Invia solo i campi da cambiare; gli altri restano com’erano. design e rules si fondono chiave per chiave in ciò che è salvato, gli array sostituiscono l’array salvato e null cancella un valore.
Un nuovo slug mantiene funzionante anche il vecchio, quindi i link già stampati non si rompono mai. Ogni modifica è conservata nella cronologia del codice (GET /v1/codes/{id}/versions) e invia un webhook code.updated.
Pausa e ripresa
curl -X PATCH https://api.dotwick.com/v1/codes/qr_8841ce2mxk \ -H "Authorization: Bearer sk_live_…" \ -H "Content-Type: application/json" \ -d '{ "status": "paused" }'{ "id": "qr_8841ce2mxk", "status": "paused", "updatedAt": "2026-09-12T14:03:51.000Z"}Duplicare un codice
POST /v1/codes/{id}/duplicate copia un codice: tipo, contenuto, design, regole, password, tag, cartella e dominio passano alla copia. La copia riceve un proprio link breve, un nome come Table 4 (copy), nessuna scansione e lo stato active. Conta nel piano come ogni nuovo codice e risponde 201 con il nuovo codice, il cui duplicatedFromId è l’originale.
Invia name, folderId (null per il livello principale) o slug (da Pro in su, codici dinamici) per impostarli sulla copia. I codici dei biglietti da visita, i codici GS1 e quelli disattivati da Dotwick non si possono duplicare. Invia una Idempotency-Key perché un nuovo tentativo non crei mai due copie.
curl -X POST https://api.dotwick.com/v1/codes/qr_8841ce2mxk/duplicate \ -H "Authorization: Bearer sk_live_…" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: van-014-copy-1" \ -d '{ "name": "Van fleet – unit 14 (spring)", "folderId": "fld_8k2m4q7x" }'{ "id": "qr_5d3b7e1f9a2c", "workspaceId": "ws_8f21ac4e9d0b7c11", "name": "Van fleet – unit 14 (spring)", "type": "url", "dynamic": true, "status": "active", "slug": "van14b", "domainId": null, "shortUrl": "https://dotwick.co/van14b", "content": { "type": "url", "url": "https://example.com/fleet/van-014" }, "design": { "pattern": "rounded", "eyes": { "frame": "circle", "ball": "circle" }, "colors": { "fg": "#18181B", "bg": "#FFFFFF" } }, "rules": { "routes": [], "expiresAt": null, "scanLimit": null, "inactiveUrl": null, "passwordProtected": false }, "folderId": "fld_8k2m4q7x", "templateId": null, "createdBy": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF", "createdAt": "2026-09-12T14:03:51.000Z", "updatedAt": "2026-09-12T14:03:51.000Z", "scans": 0, "duplicatedFromId": "qr_8841ce2mxk"}Modificare molti codici in una volta
PATCH /v1/codes/bulk esegue un’azione su fino a 500 codici: pause, resume, archive, unarchive, addTags o removeTags (entrambe con tagIds), move (con folderId, null per il livello principale) o delete. Da non confondere con POST /v1/codes/bulk, che crea codici.
Ogni codice è trattato a sé, con le stesse regole, eventi e webhook di una modifica singola. La risposta è 200 anche se alcuni codici sono falliti: results ha una voce per codice nell’ordine della richiesta, con ok e changed, oppure con reason e message per un codice che non ha potuto accettare l’azione, e counts le somma. Un codice già nello stato richiesto è ok con changed: false.
Ripetere la richiesta è sicuro, quindi non serve una Idempotency-Key. Un tag o una cartella sconosciuti fanno fallire l’intera richiesta con 404 not_found senza scrivere nulla, come lo spostamento in una cartella con un piano senza cartelle (403 feature_not_in_plan).
- not_found: il codice non esiste, oppure è in una cartella che la chiave non può vedere.
- forbidden: il ruolo della chiave può vedere il codice ma non modificarlo.
- managed_code: il codice appartiene a un biglietto da visita; mettere in pausa, archiviare ed eliminare passano dal biglietto.
- static_code e code_disabled: niente da mettere in pausa o riattivare.
- not_resumable: il codice si è fermato per la data di scadenza o il limite di scansioni; cambia invece quella regola.
- too_many_tags: addTags darebbe al codice più tag di quanti ne possa portare.
curl -X PATCH https://api.dotwick.com/v1/codes/bulk \ -H "Authorization: Bearer sk_live_…" \ -H "Content-Type: application/json" \ -d '{ "action": "pause", "codeIds": [ "qr_8841ce2mxk", "qr_2k8m4q7x1c9v" ] }'{ "action": "pause", "results": [ { "codeId": "qr_8841ce2mxk", "ok": true, "changed": true }, { "codeId": "qr_2k8m4q7x1c9v", "ok": false, "reason": "static_code", "message": "Static codes can't be paused: they work without our server." } ], "counts": { "ok": 1, "changed": 1, "failed": 1 }}