Vai al contenuto

Aggiorna un codice

PATCH/v1/codes/{id}

Cambia la destinazione

richiestaPATCH /v1/codes/qr_8841ce2mxk
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"    }  }'
risposta200 OK
{  "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

richiestaPATCH /v1/codes/qr_8841ce2mxk
curl -X PATCH https://api.dotwick.com/v1/codes/qr_8841ce2mxk \  -H "Authorization: Bearer sk_live_…" \  -H "Content-Type: application/json" \  -d '{    "status": "paused"  }'
risposta200 OKestratto: chi scansiona ora vede la pagina in pausa; invia active per riprendere
{  "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.

richiestaPOST /v1/codes/qr_8841ce2mxk/duplicate
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"  }'
risposta201 Created
{  "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.
richiestaPATCH /v1/codes/bulk
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"    ]  }'
risposta200 OK
{  "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  }}