Przejdź do treści

Zaktualizuj kod

PATCH/v1/codes/{id}

Zmień adres docelowy

żądaniePATCH /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"    }  }'
odpowiedź200 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}

Aktualizacje częściowe

Wyślij tylko pola do zmiany; reszta pozostaje bez zmian. design i rules łączą się klucz po kluczu z tym, co zapisano, tablice zastępują zapisaną tablicę, a null czyści wartość.

Nowy slug sprawia, że stary też nadal działa, więc wydrukowane już linki nigdy się nie psują. Każda zmiana jest zachowana w historii kodu (GET /v1/codes/{id}/versions) i wysyła webhook code.updated.

Wstrzymanie i wznowienie

żądaniePATCH /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"  }'
odpowiedź200 OKfragment: skanujący widzą teraz wstrzymaną stronę; wyślij active, aby wznowić
{  "id": "qr_8841ce2mxk",  "status": "paused",  "updatedAt": "2026-09-12T14:03:51.000Z"}

Duplikowanie kodu

POST /v1/codes/{id}/duplicate kopiuje kod: jego typ, treść, projekt, reguły, hasło, tagi, folder i domena przechodzą do kopii. Kopia dostaje własny krótki link, nazwę w rodzaju Table 4 (copy), zero skanów i status active. Liczy się do planu jak każdy nowy kod i odpowiada 201 z nowym kodem, którego duplicatedFromId wskazuje oryginał.

Wyślij name, folderId (null dla najwyższego poziomu) lub slug (Pro i wyżej, kody dynamiczne), by ustawić je w kopii. Kodów wizytówek, kodów GS1 i kodów wyłączonych przez Dotwick nie można duplikować. Wyślij Idempotency-Key, by ponowna próba nigdy nie zrobiła dwóch kopii.

żądaniePOST /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"  }'
odpowiedź201 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"}

Zmiana wielu kodów naraz

PATCH /v1/codes/bulk wykonuje jedną akcję na maksymalnie 500 kodach: pause, resume, archive, unarchive, addTags lub removeTags (obie z tagIds), move (z folderId, null dla najwyższego poziomu) albo delete. Nie mylić z POST /v1/codes/bulk, który tworzy kody.

Każdy kod jest obsługiwany osobno, z tymi samymi regułami, zdarzeniami i webhookami co pojedyncza zmiana. Odpowiedź to 200, nawet gdy część kodów się nie powiodła: results ma po jednym wpisie na kod w kolejności żądania, z ok i changed albo z reason i message dla kodu, który nie mógł przyjąć akcji, a counts je sumuje. Kod już w żądanym stanie to ok z changed: false.

Powtórzenie żądania jest bezpieczne, więc nie wymaga Idempotency-Key. Nieznany tag lub folder powoduje błąd całego żądania z 404 not_found bez zapisu czegokolwiek, podobnie jak przeniesienie do folderu w planie bez folderów (403 feature_not_in_plan).

  • not_found: nie ma takiego kodu albo leży w folderze, którego klucz nie widzi.
  • forbidden: rola klucza może oglądać kod, ale nie zmieniać go.
  • managed_code: kod należy do wizytówki; wstrzymanie, archiwizacja i usunięcie idą przez wizytówkę.
  • static_code i code_disabled: nie ma czego wstrzymać ani wznowić.
  • not_resumable: kod zatrzymał się z powodu daty ważności lub limitu skanów; zmień raczej tę regułę.
  • too_many_tags: addTags nadałoby kodowi więcej tagów, niż może mieć.
żądaniePATCH /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"    ]  }'
odpowiedź200 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  }}