Atualizar um código
Mude o destino
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}Atualizações parciais
Envie só os campos a mudar; o resto fica como está. design e rules se mesclam chave a chave com o que está salvo, os arrays substituem o array salvo e null limpa um valor.
Um novo slug mantém o antigo funcionando também, então links já impressos nunca quebram. Cada mudança fica guardada no histórico do código (GET /v1/codes/{id}/versions) e envia um webhook code.updated.
Pausar e retomar
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"}Duplicar um código
POST /v1/codes/{id}/duplicate copia um código: tipo, conteúdo, design, regras, senha, tags, pasta e domínio vão junto. A cópia recebe seu próprio link curto, um nome como Table 4 (copy), nenhum escaneamento e o status active. Ela conta no plano como qualquer código novo e responde 201 com o novo código, cujo duplicatedFromId é o original.
Envie name, folderId (null para o nível superior) ou slug (Pro e acima, códigos dinâmicos) para defini-los na cópia. Códigos de cartão de visita, códigos GS1 e códigos desativados pela Dotwick não podem ser duplicados. Envie uma Idempotency-Key para que uma nova tentativa nunca crie duas cópias.
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"}Alterar vários códigos de uma vez
PATCH /v1/codes/bulk aplica uma ação a até 500 códigos: pause, resume, archive, unarchive, addTags ou removeTags (ambas com tagIds), move (com folderId, null para o nível superior) ou delete. Não confunda com POST /v1/codes/bulk, que cria códigos.
Cada código é tratado separadamente, com as mesmas regras, eventos e webhooks de uma alteração individual. A resposta é 200 mesmo quando alguns códigos falharam: results traz uma entrada por código na ordem da requisição, com ok e changed, ou com reason e message para um código que não pôde receber a ação, e counts soma tudo. Um código que já está no estado pedido é ok com changed: false.
Repetir a requisição é seguro, então ela não leva Idempotency-Key. Uma tag ou pasta desconhecida faz a requisição inteira falhar com 404 not_found sem gravar nada, assim como mover para uma pasta em um plano sem pastas (403 feature_not_in_plan).
- not_found: esse código não existe, ou está em uma pasta que a chave não pode ver.
- forbidden: o papel da chave pode ver o código, mas não alterá-lo.
- managed_code: o código pertence a um cartão de visita; pausar, arquivar e excluir passam pelo cartão.
- static_code e code_disabled: não há nada a pausar nem a retomar.
- not_resumable: o código parou por causa da data de validade ou do limite de escaneamentos; altere essa regra em vez disso.
- too_many_tags: addTags daria ao código mais tags do que ele comporta.
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 }}