Pular para o conteúdo

Atualizar um código

PATCH/v1/codes/{id}

Mude o destino

requisiçãoPATCH /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"    }  }'
resposta200 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}

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

requisiçãoPATCH /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"  }'
resposta200 OKtrecho: quem escaneia agora vê a página pausada; envie active para retomar
{  "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.

requisiçãoPOST /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"  }'
resposta201 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"}

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.
requisiçãoPATCH /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"    ]  }'
resposta200 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  }}