API v1
Een API voor codes die gedrukt blijven.
{ "id": "qr_8841ce2mxk", "type": "url", "dynamic": true, "status": "active", "shortUrl": "https://dotwick.co/Xq7mK2p", "createdAt": "2026-09-10T09:41:08.000Z"}Een REST API op dezelfde objecten die de app gebruikt. Maak codes, pas bestemmingen aan, haal scans op en exporteer printklare bestanden. Geen SDK nodig: curl, fetch of requests volstaat.
inbegrepen vanaf Pro · 60 verzoeken/min bij Pro, 600 bij Business
Maak sleutels aan in de app onder Instellingen → API, met alleen de scopes die ze nodig hebben.
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" }'{ "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"}api.dotwick.com/v1
REST over JSON
Voorspelbare resources, cursorpaginering en idempotentiesleutels bij elke POST. Fouten komen terug als { error: { code, message, requestId } }.
11 eventtypen
Webhooks
Scans, codewijzigingen, afgeronde bulkruns en exports, domeinstatus en formulierantwoorden. Ondertekend volgens Standard Webhooks en 24 uur lang opnieuw geprobeerd.
POST /v1/codes/bulk
Bulk en exports
Maak tot 500 codes in één verzoek en download ze als SVG, PNG, PDF of EPS in één ZIP die op de achtergrond wordt gemaakt.
api.dotwick.com/openapi.json
OpenAPI
Elke publieke route is beschreven in OpenAPI 3.1, gegenereerd uit dezelfde contracten waarmee de API valideert, en elke bewerking noemt de scope die ervoor nodig is.
- POST/v1/codes
- GET/v1/codes
- GET/v1/codes/{id}
- PATCH/v1/codes/{id}
- DELETE/v1/codes/{id}
- POST/v1/codes/bulk
- GET/v1/codes/{id}/scans
- POST/v1/webhooks
Endpoints
Elke route die een API-sleutel kan aanroepen. Al het andere, zoals facturering, leden en sleutelbeheer, blijft in de app.
| Methode | Pad | Scope | Doel |
|---|---|---|---|
| Codes | |||
| GET | /v1/codes | codes:read | Codes ophalen, filteren op map, type of status |
| POST | /v1/codes | codes:write | Een code aanmaken |
| GET | /v1/codes/{id} | codes:read | Een code ophalen met ontwerp en regels |
| PATCH | /v1/codes/{id} | codes:write | Bestemming, naam, ontwerp en regels wijzigen |
| DELETE | /v1/codes/{id} | codes:write | Een code verwijderen (de korte link antwoordt met 410) |
| POST | /v1/codes/move | codes:write | Codes naar een map verplaatsen |
| POST | /v1/codes/move-domain | codes:write | Codes naar een ander domein verplaatsen |
| POST | /v1/codes/tags | codes:write | Tags toevoegen of verwijderen bij veel codes |
| POST | /v1/codes/{id}/duplicate | codes:write | Een code dupliceren |
| PATCH | /v1/codes/bulk | codes:write | Veel codes pauzeren, hervatten, archiveren, taggen, verplaatsen of verwijderen |
| GET | /v1/utm-presets | codes:read | Opgeslagen UTM-presets ophalen |
| GET | /v1/codes/{id}/versions | codes:read | Bestemmingsgeschiedenis van een code |
| GET | /v1/codes/{id}/activity | codes:read | Activiteitenfeed van een code |
| GET | /v1/codes/{id}/export | codes:read | Downloaden als SVG, PNG, JPG, PDF of EPS |
| GET | /v1/codes/{id}/hosted-stats | codes:read | Tellers van een gehoste code |
| GET | /v1/codes/{id}/submissions | submissions:read | Antwoorden op een formuliercode |
| GET | /v1/codes/{id}/submissions/export | submissions:read | Formulierantwoorden als CSV |
| GET | /v1/gs1/products | codes:read | GS1-producten ophalen (de gs1-codes) |
| GET | /v1/codes/{id}/gs1/qualifiers | codes:read | Batch-, CPV- en serieniveaus van een GS1-code |
| GET | /v1/codes/{id}/gs1/print-runs | codes:read | Drukruns van een GS1-code |
| GET | /v1/codes/{id}/gs1/print-runs/{runId} | codes:read | Een drukrun opvragen en de bestandslinks ophalen |
| Bulkruns | |||
| POST | /v1/codes/bulk | codes:write | Tot 500 codes aanmaken als één run |
| GET | /v1/bulk-imports | codes:read | Bulkruns ophalen |
| GET | /v1/bulk-imports/{id} | codes:read | Een bulkrun opvragen |
| GET | /v1/bulk-imports/{id}/rows | codes:read | Rijen van een bulkrun |
| GET | /v1/bulk-imports/{id}/results.csv | codes:read | Resultaten van een run als CSV |
| POST | /v1/bulk-imports/{id}/cancel | codes:write | Een run in de wachtrij of lopende run annuleren |
| POST | /v1/bulk-imports/{id}/retry | codes:write | De mislukte rijen van een run opnieuw proberen |
| Analyse | |||
| GET | /v1/analytics/summary | analytics:read | Totaal aantal scans voor een periode |
| GET | /v1/analytics/timeseries | analytics:read | Scans in de tijd |
| GET | /v1/analytics/breakdown | analytics:read | Top-landen, -apparaten en meer |
| GET | /v1/analytics/scans | analytics:read | Records per scan |
| GET | /v1/analytics/sparklines | analytics:read | Dagelijkse aantallen voor codes |
| GET | /v1/analytics/compare | analytics:read | Tot 4 codes vergelijken |
| GET | /v1/analytics/export | analytics:read | Scans als CSV (korte periodes) |
| POST | /v1/analytics/exports | analytics:read | Scans als CSV, op de achtergrond voorbereid |
| GET | /v1/codes/{id}/analytics/summary | analytics:read | Totalen van één code |
| GET | /v1/codes/{id}/analytics/timeseries | analytics:read | Eén code in de tijd |
| GET | /v1/codes/{id}/analytics/breakdown | analytics:read | Toplijsten van één code |
| GET | /v1/codes/{id}/scans | analytics:read | Records per scan van één code |
| GET | /v1/codes/{id}/gs1/batches | analytics:read | Scans per batch van een GS1-code |
| GET | /v1/codes/{id}/downloads | analytics:read | Downloads per bestand van een Documenten-code |
| GET | /v1/analytics/locations | analytics:read | GPS-kaart van scans met toestemming |
| GET | /v1/codes/{id}/analytics/locations | analytics:read | GPS-kaart van één code |
| GET | /v1/alerts | analytics:read | Regels voor scanmeldingen ophalen |
| Exports | |||
| POST | /v1/exports | codes:read | Veel codes exporteren als één ZIP |
| GET | /v1/exports | codes:read | Exports ophalen |
| GET | /v1/exports/{id} | codes:read | Een export opvragen en de ZIP-link ophalen |
| Mappen | |||
| GET | /v1/folders | folders:read | Mappen ophalen |
| POST | /v1/folders | folders:write | Een map aanmaken |
| GET | /v1/folders/{id} | folders:read | Een map ophalen |
| PATCH | /v1/folders/{id} | folders:write | Een map hernoemen of verplaatsen |
| DELETE | /v1/folders/{id} | folders:write | Een map verwijderen (codes gaan een niveau omhoog) |
| Sjablonen | |||
| GET | /v1/templates | templates:read | Ontwerpsjablonen ophalen |
| POST | /v1/templates | templates:write | Een sjabloon aanmaken |
| GET | /v1/templates/{id} | templates:read | Een sjabloon ophalen |
| PATCH | /v1/templates/{id} | templates:write | Een sjabloon wijzigen |
| DELETE | /v1/templates/{id} | templates:write | Een sjabloon verwijderen |
| Uploads | |||
| POST | /v1/assets | codes:write | Een logo of bestand uploaden |
| GET | /v1/assets/{id} | codes:read | Een upload ophalen met een ondertekende URL |
| Domeinen | |||
| GET | /v1/domains | domains:read | Eigen domeinen ophalen |
| GET | /v1/domains/{id} | domains:read | Een domein en zijn status ophalen |
| GET | /v1/subdomain | domains:read | Het subdomein van de werkruimte en de bijbehorende links |
| GET | /v1/subdomain/availability | domains:read | Controleren of een subdomeinnaam vrij is |
| Werkruimte | |||
| GET | /v1/workspaces/current | elke sleutel | De werkruimte en het abonnement van de sleutel |
| GET | /v1/usage | elke sleutel | Abonnementslimieten en gebruik deze maand |
| Webhooks | |||
| GET | /v1/webhooks | webhooks:read | Webhook-endpoints ophalen |
| POST | /v1/webhooks | webhooks:write | Een endpoint en eventtypen registreren |
| GET | /v1/webhooks/{id} | webhooks:read | Een endpoint ophalen |
| PATCH | /v1/webhooks/{id} | webhooks:write | Een endpoint wijzigen of weer inschakelen |
| DELETE | /v1/webhooks/{id} | webhooks:write | Een endpoint verwijderen |
| POST | /v1/webhooks/{id}/test | webhooks:write | Een webhook.test-event sturen |
| GET | /v1/webhooks/{id}/deliveries | webhooks:read | Leveringen van een endpoint |
| GET | /v1/webhooks/{id}/deliveries/{deliveryId} | webhooks:read | Een levering met zijn pogingen |
| POST | /v1/webhooks/{id}/deliveries/{deliveryId}/redeliver | webhooks:write | Een levering opnieuw sturen |
| POST | /v1/webhooks/{id}/recover | webhooks:write | Mislukte leveringen opnieuw sturen |
| Tags | |||
| GET | /v1/tags | tags:read | Tags ophalen |
| POST | /v1/tags | tags:write | Een tag aanmaken |
| GET | /v1/tags/{id} | tags:read | Een tag ophalen |
| PATCH | /v1/tags/{id} | tags:write | Een tag hernoemen of van kleur veranderen |
| DELETE | /v1/tags/{id} | tags:write | Een tag verwijderen (wordt bij zijn codes verwijderd) |
| Rapporten | |||
| POST | /v1/reports | analytics:read | Een PDF- of CSV-analyserapport genereren |
| GET | /v1/reports | analytics:read | Gegenereerde rapporten ophalen |
| GET | /v1/reports/{id} | analytics:read | Een rapport opvragen en de link ophalen |
| Zapier- en Make-hooks | |||
| GET | /v1/hooks | webhooks:read | Integratiehooks ophalen |
| POST | /v1/hooks | webhooks:write | Een hook abonneren op één event |
| DELETE | /v1/hooks/{id} | webhooks:write | Een hook afmelden |
| GET | /v1/hooks/samples/{event} | webhooks:read | Recente events van een type, als voorbeeld voor een trigger |
| Visitekaartjes | |||
| GET | /v1/cards | cards:read | Visitekaartjes van het team ophalen |
| POST | /v1/cards | cards:write | Een visitekaartje aanmaken |
| GET | /v1/cards/{id} | cards:read | Een visitekaartje ophalen |
| PATCH | /v1/cards/{id} | cards:write | Een visitekaartje wijzigen |
| POST | /v1/cards/{id}/deactivate | cards:write | Een visitekaartje deactiveren |
| GET | /v1/cards/{id}/analytics | cards:read | Weergaven, opslagen en tikken van een kaartje |
| Conversies | |||
| POST | /v1/conversions | conversions:write | Een conversie registreren |
| GET | /v1/analytics/funnel | analytics:read | Funnel van scan tot omzet |
| NFC-tags | |||
| GET | /v1/nfc/tags | codes:read | NFC-tags ophalen |
| POST | /v1/nfc/tags | codes:write | Een NFC-tag registreren op een code |
De request- en responseschema’s van elke route staan in de API-referentie en in het OpenAPI-document. API-referentie →
Aanvraaglimieten
- Pro
- 60 verzoeken/min · burst 20 / 10 s
- Business
- 600 verzoeken/min · burst 200 / 10 s
- Enterprise
- op maat
- Export- en bulkjobs · Pro / Business
- 2 gelijktijdig / 5 gelijktijdig
- Limieten gelden per werkruimte en worden gedeeld door al haar API-sleutels
- Bursts: maximaal 2× het tempo per minuut binnen 10 seconden
- Antwoorden met 429 bevatten Retry-After in seconden
- Elk antwoord bevat X-RateLimit-Limit, -Remaining en -Reset (seconden tot de periode wordt gereset)
- Elke POST accepteert een Idempotency-Key-header, die 24 uur wordt gerespecteerd
Authenticatie
Stuur je geheime sleutel mee als bearer-token. Sleutels beginnen met sk_live_, worden één keer getoond bij het aanmaken, hebben scopes en handelen in hun werkruimte met de rol van de maker, maximaal Editor.
Authenticatie en scopes →