API v1
Eine API für Codes, die gedruckt bleiben.
{ "id": "qr_8841ce2mxk", "type": "url", "dynamic": true, "status": "active", "shortUrl": "https://dotwick.co/Xq7mK2p", "createdAt": "2026-09-10T09:41:08.000Z"}Eine REST-API über dieselben Objekte, die die App nutzt. Erstellen Sie Codes, ändern Sie Ziele, rufen Sie Scans ab und exportieren Sie druckfertige Dateien – ein SDK brauchen Sie nicht: curl, fetch oder requests genügen.
ab Pro enthalten · 60 Anfragen/Min. bei Pro, 600 bei Business
Erstellen Sie Schlüssel in der App unter Settings → API, jeweils nur mit den Scopes, die sie brauchen.
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 über JSON
Vorhersehbare Ressourcen, Cursor-Paginierung, Idempotency-Keys bei jedem POST. Fehler kommen als { error: { code, message, requestId } } zurück.
11 Ereignistypen
Webhooks
Scans, Code-Änderungen, beendete Massenläufe und Exporte, Domain-Status und Formularantworten. Signiert nach Standard Webhooks und 24 Stunden lang wiederholt.
POST /v1/codes/bulk
Massenerstellung und Exporte
Erstellen Sie bis zu 500 Codes in einer Anfrage und laden Sie sie dann als SVG, PNG, PDF oder EPS in einem einzigen ZIP herunter, das im Hintergrund erzeugt wird.
api.dotwick.com/openapi.json
OpenAPI
Jede öffentliche Route ist in OpenAPI 3.1 beschrieben, erzeugt aus denselben Verträgen, mit denen die API validiert, und jede Operation ist mit dem Scope getaggt, den sie braucht.
- 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
Endpunkte
Jede Route, die ein API-Schlüssel aufrufen kann. Alles andere – Abrechnung, Mitglieder, Schlüsselverwaltung – bleibt in der App.
| Methode | Pfad | Scope | Zweck |
|---|---|---|---|
| Codes | |||
| GET | /v1/codes | codes:read | Codes auflisten, nach Ordner, Typ oder Status filtern |
| POST | /v1/codes | codes:write | Einen Code erstellen |
| GET | /v1/codes/{id} | codes:read | Einen Code mit Design und Regeln abrufen |
| PATCH | /v1/codes/{id} | codes:write | Ziel, Namen, Design und Regeln ändern |
| DELETE | /v1/codes/{id} | codes:write | Einen Code löschen (sein Kurzlink antwortet mit 410) |
| POST | /v1/codes/move | codes:write | Codes in einen Ordner verschieben |
| POST | /v1/codes/move-domain | codes:write | Codes auf eine andere Domain verschieben |
| POST | /v1/codes/tags | codes:write | Tags bei mehreren Codes hinzufügen oder entfernen |
| POST | /v1/codes/{id}/duplicate | codes:write | Einen Code duplizieren |
| PATCH | /v1/codes/bulk | codes:write | Mehrere Codes pausieren, fortsetzen, archivieren, mit Tags versehen, verschieben oder löschen |
| GET | /v1/utm-presets | codes:read | Gespeicherte UTM-Vorlagen auflisten |
| GET | /v1/codes/{id}/versions | codes:read | Zielverlauf eines Codes |
| GET | /v1/codes/{id}/activity | codes:read | Aktivitätsfeed eines Codes |
| GET | /v1/codes/{id}/export | codes:read | Als SVG, PNG, PDF oder EPS herunterladen |
| GET | /v1/codes/{id}/hosted-stats | codes:read | Zähler eines gehosteten Codes |
| GET | /v1/codes/{id}/submissions | submissions:read | Antworten auf einen Formular-Code |
| GET | /v1/codes/{id}/submissions/export | submissions:read | Formularantworten als CSV |
| GET | /v1/gs1/products | codes:read | GS1-Produkte auflisten (die gs1-Codes) |
| GET | /v1/codes/{id}/gs1/qualifiers | codes:read | Chargen-, CPV- und Seriennummern-Ebenen eines GS1-Codes |
| GET | /v1/codes/{id}/gs1/print-runs | codes:read | Druckaufträge eines GS1-Codes |
| GET | /v1/codes/{id}/gs1/print-runs/{runId} | codes:read | Druckauftrag abfragen und die Links zu seinen Dateien abrufen |
| Massenläufe | |||
| POST | /v1/codes/bulk | codes:write | Bis zu 500 Codes als einen Lauf erstellen |
| GET | /v1/bulk-imports | codes:read | Massenläufe auflisten |
| GET | /v1/bulk-imports/{id} | codes:read | Einen Massenlauf abfragen |
| GET | /v1/bulk-imports/{id}/rows | codes:read | Zeilen eines Massenlaufs |
| GET | /v1/bulk-imports/{id}/results.csv | codes:read | Ergebnisse eines Laufs als CSV |
| POST | /v1/bulk-imports/{id}/cancel | codes:write | Einen wartenden oder laufenden Lauf abbrechen |
| POST | /v1/bulk-imports/{id}/retry | codes:write | Die fehlgeschlagenen Zeilen eines Laufs wiederholen |
| Statistiken | |||
| GET | /v1/analytics/summary | analytics:read | Scan-Summen für einen Zeitraum |
| GET | /v1/analytics/timeseries | analytics:read | Scans im Zeitverlauf |
| GET | /v1/analytics/breakdown | analytics:read | Top-Länder, -Geräte,… |
| GET | /v1/analytics/scans | analytics:read | Datensätze pro Scan |
| GET | /v1/analytics/sparklines | analytics:read | Tageszahlen für Codes |
| GET | /v1/analytics/compare | analytics:read | Bis zu 4 Codes vergleichen |
| GET | /v1/analytics/export | analytics:read | Scans als CSV (kurze Zeiträume) |
| POST | /v1/analytics/exports | analytics:read | Scans als CSV, im Hintergrund erstellt |
| GET | /v1/codes/{id}/analytics/summary | analytics:read | Summen eines Codes |
| GET | /v1/codes/{id}/analytics/timeseries | analytics:read | Ein Code im Zeitverlauf |
| GET | /v1/codes/{id}/analytics/breakdown | analytics:read | Top-Listen eines Codes |
| GET | /v1/codes/{id}/scans | analytics:read | Datensätze pro Scan eines Codes |
| GET | /v1/codes/{id}/gs1/batches | analytics:read | Scans pro Charge eines GS1-Codes |
| GET | /v1/codes/{id}/downloads | analytics:read | Downloads pro Datei eines Dokumente-Codes |
| GET | /v1/analytics/locations | analytics:read | GPS-Karte der Scans mit Einwilligung |
| GET | /v1/codes/{id}/analytics/locations | analytics:read | Die GPS-Karte eines Codes |
| GET | /v1/alerts | analytics:read | Scan-Alarmregeln auflisten |
| Exporte | |||
| POST | /v1/exports | codes:read | Viele Codes als ein ZIP exportieren |
| GET | /v1/exports | codes:read | Exporte auflisten |
| GET | /v1/exports/{id} | codes:read | Einen Export abfragen und den ZIP-Link erhalten |
| Ordner | |||
| GET | /v1/folders | folders:read | Ordner auflisten |
| POST | /v1/folders | folders:write | Einen Ordner erstellen |
| GET | /v1/folders/{id} | folders:read | Einen Ordner abrufen |
| PATCH | /v1/folders/{id} | folders:write | Einen Ordner umbenennen oder verschieben |
| DELETE | /v1/folders/{id} | folders:write | Einen Ordner löschen (Codes rücken nach oben) |
| Vorlagen | |||
| GET | /v1/templates | templates:read | Design-Vorlagen auflisten |
| POST | /v1/templates | templates:write | Eine Vorlage erstellen |
| GET | /v1/templates/{id} | templates:read | Eine Vorlage abrufen |
| PATCH | /v1/templates/{id} | templates:write | Eine Vorlage ändern |
| DELETE | /v1/templates/{id} | templates:write | Eine Vorlage löschen |
| Uploads | |||
| POST | /v1/assets | codes:write | Ein Logo oder eine Datei hochladen |
| GET | /v1/assets/{id} | codes:read | Einen Upload mit signierter URL abrufen |
| Domains | |||
| GET | /v1/domains | domains:read | Eigene Domains auflisten |
| GET | /v1/domains/{id} | domains:read | Eine Domain und ihren Status abrufen |
| GET | /v1/subdomain | domains:read | Die Subdomain des Arbeitsbereichs und ihre Links |
| GET | /v1/subdomain/availability | domains:read | Prüfen, ob ein Subdomain-Name frei ist |
| Arbeitsbereich | |||
| GET | /v1/workspaces/current | jeder Schlüssel | Der Arbeitsbereich und Tarif des Schlüssels |
| GET | /v1/usage | jeder Schlüssel | Tariflimits und Nutzung in diesem Monat |
| Webhooks | |||
| GET | /v1/webhooks | webhooks:read | Webhook-Endpunkte auflisten |
| POST | /v1/webhooks | webhooks:write | Einen Endpunkt und Ereignistypen registrieren |
| GET | /v1/webhooks/{id} | webhooks:read | Einen Endpunkt abrufen |
| PATCH | /v1/webhooks/{id} | webhooks:write | Einen Endpunkt ändern oder wieder aktivieren |
| DELETE | /v1/webhooks/{id} | webhooks:write | Einen Endpunkt löschen |
| POST | /v1/webhooks/{id}/test | webhooks:write | Ein webhook.test-Ereignis senden |
| GET | /v1/webhooks/{id}/deliveries | webhooks:read | Zustellungen eines Endpunkts |
| GET | /v1/webhooks/{id}/deliveries/{deliveryId} | webhooks:read | Eine Zustellung mit ihren Versuchen |
| POST | /v1/webhooks/{id}/deliveries/{deliveryId}/redeliver | webhooks:write | Eine Zustellung erneut senden |
| POST | /v1/webhooks/{id}/recover | webhooks:write | Fehlgeschlagene Zustellungen erneut senden |
| Tags | |||
| GET | /v1/tags | tags:read | Tags auflisten |
| POST | /v1/tags | tags:write | Einen Tag erstellen |
| GET | /v1/tags/{id} | tags:read | Einen Tag abrufen |
| PATCH | /v1/tags/{id} | tags:write | Einen Tag umbenennen oder umfärben |
| DELETE | /v1/tags/{id} | tags:write | Einen Tag löschen (wird von seinen Codes entfernt) |
| Berichte | |||
| POST | /v1/reports | analytics:read | Einen Statistikbericht als PDF oder CSV erstellen |
| GET | /v1/reports | analytics:read | Erstellte Berichte auflisten |
| GET | /v1/reports/{id} | analytics:read | Einen Bericht abfragen und seinen Link erhalten |
| Zapier- und Make-Hooks | |||
| GET | /v1/hooks | webhooks:read | Integrations-Hooks auflisten |
| POST | /v1/hooks | webhooks:write | Einen Hook auf ein Ereignis abonnieren |
| DELETE | /v1/hooks/{id} | webhooks:write | Einen Hook abbestellen |
| GET | /v1/hooks/samples/{event} | webhooks:read | Letzte Ereignisse eines Typs als Beispiel für einen Trigger |
| Visitenkarten | |||
| GET | /v1/cards | cards:read | Team-Visitenkarten auflisten |
| POST | /v1/cards | cards:write | Eine Visitenkarte erstellen |
| GET | /v1/cards/{id} | cards:read | Eine Visitenkarte abrufen |
| PATCH | /v1/cards/{id} | cards:write | Eine Visitenkarte ändern |
| POST | /v1/cards/{id}/deactivate | cards:write | Eine Visitenkarte deaktivieren |
| GET | /v1/cards/{id}/analytics | cards:read | Aufrufe, Speicherungen und Klicks einer Karte |
| Conversions | |||
| POST | /v1/conversions | conversions:write | Eine Conversion erfassen |
| GET | /v1/analytics/funnel | analytics:read | Trichter vom Scan zum Umsatz |
| NFC-Tags | |||
| GET | /v1/nfc/tags | codes:read | NFC-Tags auflisten |
| POST | /v1/nfc/tags | codes:write | Einen NFC-Tag für einen Code registrieren |
Anfrage- und Antwortschemata jeder Route stehen in der API-Referenz und im OpenAPI-Dokument. API-Referenz →
Ratenbegrenzungen
- Pro
- 60 Anfragen / Min. · Spitze 20 / 10 s
- Business
- 600 Anfragen / Min. · Spitze 200 / 10 s
- Enterprise
- individuell
- Export- und Massen-Jobs · Pro / Business
- 2 gleichzeitig / 5 gleichzeitig
- Die Limits gelten pro Arbeitsbereich und werden von allen seinen API-Schlüsseln geteilt
- Spitzen: höchstens das 2-Fache der Rate pro Minute in beliebigen 10 Sekunden
- 429-Antworten tragen Retry-After in Sekunden
- Jede Antwort trägt X-RateLimit-Limit, -Remaining und -Reset (Sekunden bis zum Zurücksetzen des Fensters)
- Jeder POST nimmt einen Idempotency-Key-Header, der 24 Stunden lang gilt
Authentifizierung
Senden Sie Ihren geheimen Schlüssel als Bearer-Token. Schlüssel beginnen mit sk_live_, werden beim Erstellen einmal angezeigt, tragen Scopes und handeln in ihrem Arbeitsbereich mit der Rolle ihres Erstellers, höchstens Editor.
Authentifizierung und Scopes →