Skip to content

Quickstart

1. Get a key

In the app, open Settings → API and choose New key. Pick the scopes the integration needs (codes:read and codes:write are enough here). The secret starts with sk_live_ and is shown once: store it in your server's secrets, never in a browser or a mobile app.

The API is included on Pro, Business and Enterprise. There is no separate test mode: use a second workspace for experiments.

2. Create a code

POST the destination to /v1/codes with your key as a bearer token and an Idempotency-Key, so a retried request never creates a duplicate.

requestPOST /v1/codes
curl -X POST https://api.dotwick.com/v1/codes \  -H "Authorization: Bearer sk_live_…" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: van-014-2026-09-10" \  -d '{    "name": "Van fleet – unit 14",    "content": {      "type": "url",      "url": "https://example.com/fleet/van-014"    },    "design": {      "pattern": "rounded",      "eyes": {        "frame": "circle",        "ball": "circle"      },      "colors": {        "fg": "#18181B",        "bg": "#FFFFFF"      }    },    "folderId": "fld_8k2m4q7x"  }'
response201 Createdexcerpt — the full object also carries design, rules and timestamps
{  "id": "qr_8841ce2mxk",  "name": "Van fleet – unit 14",  "type": "url",  "dynamic": true,  "status": "active",  "slug": "Xq7mK2p",  "shortUrl": "https://dotwick.co/Xq7mK2p",  "content": {    "type": "url",    "url": "https://example.com/fleet/van-014"  },  "folderId": "fld_8k2m4q7x",  "createdAt": "2026-09-10T09:41:08.000Z"}

3. Test it

The response's shortUrl works at once. Scan it or open it in a browser: it redirects to your destination and the scan shows up in analytics within a few seconds.

Next: change the destination with PATCH /v1/codes/{id}, or register a webhook to hear about every scan.