Zum Inhalt springen

Code aktualisieren

PATCH/v1/codes/{id}

Das Ziel ändern

AnfragePATCH /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"    }  }'
Antwort200 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}

Teilweise Aktualisierungen

Senden Sie nur die Felder, die sich ändern sollen; der Rest bleibt, wie er ist. design und rules werden Schlüssel für Schlüssel in das Gespeicherte gemischt, Arrays ersetzen das gespeicherte Array, und null löscht einen Wert.

Ein neuer Slug lässt auch den alten weiter funktionieren, sodass bereits gedruckte Links nie brechen. Jede Änderung wird im Verlauf des Codes festgehalten (GET /v1/codes/{id}/versions) und löst einen code.updated-Webhook aus.

Pausieren und fortsetzen

AnfragePATCH /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"  }'
Antwort200 OKAuszug – Beim Scannen erscheint jetzt die Pausenseite; senden Sie active, um fortzusetzen
{  "id": "qr_8841ce2mxk",  "status": "paused",  "updatedAt": "2026-09-12T14:03:51.000Z"}

Einen Code duplizieren

POST /v1/codes/{id}/duplicate kopiert einen Code: Typ, Inhalt, Design, Regeln, Passwort, Tags, Ordner und Domain gehen mit. Die Kopie erhält einen eigenen Kurzlink, einen Namen wie Table 4 (copy), keine Scans und den Status active. Sie zählt wie jeder neue Code gegen den Tarif und antwortet mit 201 und dem neuen Code, dessen duplicatedFromId das Original ist.

Senden Sie name, folderId (null für die oberste Ebene) oder slug (ab Pro, dynamische Codes), um sie an der Kopie zu setzen. Visitenkarten-Codes, GS1-Codes und von Dotwick deaktivierte Codes lassen sich nicht duplizieren. Senden Sie einen Idempotency-Key, damit eine Wiederholung nie zwei Kopien erzeugt.

AnfragePOST /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"  }'
Antwort201 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"}

Viele Codes auf einmal ändern

PATCH /v1/codes/bulk führt eine Aktion für bis zu 500 Codes aus: pause, resume, archive, unarchive, addTags oder removeTags (beide mit tagIds), move (mit folderId, null für die oberste Ebene) oder delete. Nicht zu verwechseln mit POST /v1/codes/bulk, das Codes erstellt.

Jeder Code wird für sich behandelt, mit denselben Regeln, Ereignissen und Webhooks wie bei einer einzelnen Änderung. Die Antwort ist 200, auch wenn einzelne Codes fehlgeschlagen sind: results enthält pro Code einen Eintrag in der Reihenfolge der Anfrage, mit ok und changed oder mit reason und message für einen Code, der die Aktion nicht annehmen konnte, und counts zählt sie zusammen. Ein Code, der schon im gewünschten Zustand ist, ist ok mit changed: false.

Die Anfrage zu wiederholen ist sicher, daher braucht sie keinen Idempotency-Key. Ein unbekannter Tag oder Ordner lässt die ganze Anfrage mit 404 not_found scheitern, ohne etwas zu schreiben; ebenso das Verschieben in einen Ordner bei einem Tarif ohne Ordner (403 feature_not_in_plan).

  • not_found: Es gibt diesen Code nicht, oder er liegt in einem Ordner, den der Schlüssel nicht sehen darf.
  • forbidden: Die Rolle des Schlüssels darf den Code ansehen, aber nicht ändern.
  • managed_code: Der Code gehört zu einer Visitenkarte; Pausieren, Archivieren und Löschen laufen über die Karte.
  • static_code und code_disabled: Es gibt nichts zu pausieren oder fortzusetzen.
  • not_resumable: Der Code wurde wegen seines Ablaufdatums oder Scan-Limits gestoppt; ändern Sie stattdessen diese Regel.
  • too_many_tags: addTags würde dem Code mehr Tags geben, als er tragen kann.
AnfragePATCH /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"    ]  }'
Antwort200 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  }}