API v1
API dla kodów, które zostają na wydruku.
{ "id": "qr_8841ce2mxk", "type": "url", "dynamic": true, "status": "active", "shortUrl": "https://dotwick.co/Xq7mK2p", "createdAt": "2026-09-10T09:41:08.000Z"}REST API na tych samych obiektach, których używa aplikacja. Twórz kody, zmieniaj adresy, pobieraj skany i eksportuj pliki gotowe do druku. SDK nie jest potrzebne: wystarczy curl, fetch lub requests.
w cenie planu Pro i wyższych · 60 zapytań/min w Pro, 600 w Business
Klucze utworzysz w aplikacji w Ustawienia → API, z samymi zakresami (scope), których potrzebują.
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 przez JSON
Przewidywalne zasoby, paginacja kursorowa i klucze idempotentności przy każdym POST. Błędy wracają jako { error: { code, message, requestId } }.
Typy zdarzeń: 11
Webhooki
Skany, zmiany kodów, zakończone zadania zbiorcze i eksporty, status domen i odpowiedzi z formularzy. Podpisane zgodnie ze Standard Webhooks i ponawiane przez 24 godz.
POST /v1/codes/bulk
Zbiorczo i eksporty
Utwórz do 500 kodów jednym żądaniem, a potem pobierz je jako SVG, PNG, PDF lub EPS w jednym pliku ZIP generowanym w tle.
api.dotwick.com/openapi.json
OpenAPI
Każda publiczna trasa jest opisana w OpenAPI 3.1, generowanym z tych samych kontraktów, którymi API waliduje dane, a każda operacja wskazuje potrzebny zakres (scope).
- 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
Endpointy
Każda trasa, którą może wywołać klucz API. Cała reszta, czyli rozliczenia, członkowie i zarządzanie kluczami, zostaje w aplikacji.
| Metoda | Ścieżka | Zakres (scope) | Cel |
|---|---|---|---|
| Kody | |||
| GET | /v1/codes | codes:read | Lista kodów, filtrowanie według folderu, typu lub statusu |
| POST | /v1/codes | codes:write | Utwórz kod |
| GET | /v1/codes/{id} | codes:read | Pobierz kod z jego wyglądem i regułami |
| PATCH | /v1/codes/{id} | codes:write | Zmień adres docelowy, nazwę, wygląd i reguły |
| DELETE | /v1/codes/{id} | codes:write | Usuń kod (jego krótki link odpowiada 410) |
| POST | /v1/codes/move | codes:write | Przenieś kody do folderu |
| POST | /v1/codes/move-domain | codes:write | Przenieś kody do innej domeny |
| POST | /v1/codes/tags | codes:write | Dodaj lub usuń tagi w wielu kodach |
| POST | /v1/codes/{id}/duplicate | codes:write | Zduplikuj kod |
| PATCH | /v1/codes/bulk | codes:write | Wstrzymaj, wznów, zarchiwizuj, otaguj, przenieś lub usuń wiele kodów |
| GET | /v1/utm-presets | codes:read | Lista zapisanych ustawień UTM |
| GET | /v1/codes/{id}/versions | codes:read | Historia adresów docelowych kodu |
| GET | /v1/codes/{id}/activity | codes:read | Strumień aktywności kodu |
| GET | /v1/codes/{id}/export | codes:read | Pobierz jako SVG, PNG, JPG, PDF lub EPS |
| GET | /v1/codes/{id}/hosted-stats | codes:read | Liczniki kodu hostowanego |
| GET | /v1/codes/{id}/submissions | submissions:read | Odpowiedzi na kod z formularzem |
| GET | /v1/codes/{id}/submissions/export | submissions:read | Odpowiedzi z formularza jako CSV |
| GET | /v1/gs1/products | codes:read | Lista produktów GS1 (kody gs1) |
| GET | /v1/codes/{id}/gs1/qualifiers | codes:read | Poziomy partii, CPV i numeru seryjnego kodu GS1 |
| GET | /v1/codes/{id}/gs1/print-runs | codes:read | Nakłady kodu GS1 |
| GET | /v1/codes/{id}/gs1/print-runs/{runId} | codes:read | Sprawdź nakład i pobierz linki do plików |
| Zadania zbiorcze | |||
| POST | /v1/codes/bulk | codes:write | Utwórz do 500 kodów w jednym zadaniu |
| GET | /v1/bulk-imports | codes:read | Lista zadań zbiorczych |
| GET | /v1/bulk-imports/{id} | codes:read | Sprawdź zadanie zbiorcze |
| GET | /v1/bulk-imports/{id}/rows | codes:read | Wiersze zadania zbiorczego |
| GET | /v1/bulk-imports/{id}/results.csv | codes:read | Wyniki zadania jako CSV |
| POST | /v1/bulk-imports/{id}/cancel | codes:write | Anuluj zadanie w kolejce lub w toku |
| POST | /v1/bulk-imports/{id}/retry | codes:write | Ponów nieudane wiersze zadania |
| Statystyki | |||
| GET | /v1/analytics/summary | analytics:read | Łączna liczba skanów w okresie |
| GET | /v1/analytics/timeseries | analytics:read | Skany w czasie |
| GET | /v1/analytics/breakdown | analytics:read | Najczęstsze kraje, urządzenia i więcej |
| GET | /v1/analytics/scans | analytics:read | Rekordy poszczególnych skanów |
| GET | /v1/analytics/sparklines | analytics:read | Dzienne liczby dla kodów |
| GET | /v1/analytics/compare | analytics:read | Porównaj do 4 kodów |
| GET | /v1/analytics/export | analytics:read | Skany jako CSV (krótkie okresy) |
| POST | /v1/analytics/exports | analytics:read | Skany jako CSV, przygotowywane w tle |
| GET | /v1/codes/{id}/analytics/summary | analytics:read | Sumy jednego kodu |
| GET | /v1/codes/{id}/analytics/timeseries | analytics:read | Jeden kod w czasie |
| GET | /v1/codes/{id}/analytics/breakdown | analytics:read | Rankingi jednego kodu |
| GET | /v1/codes/{id}/scans | analytics:read | Rekordy skanów jednego kodu |
| GET | /v1/codes/{id}/gs1/batches | analytics:read | Skany według partii kodu GS1 |
| GET | /v1/codes/{id}/downloads | analytics:read | Pobrania według pliku kodu Dokumenty |
| GET | /v1/analytics/locations | analytics:read | Mapa GPS skanów za zgodą |
| GET | /v1/codes/{id}/analytics/locations | analytics:read | Mapa GPS jednego kodu |
| GET | /v1/alerts | analytics:read | Lista reguł alertów o skanach |
| Eksporty | |||
| POST | /v1/exports | codes:read | Wyeksportuj wiele kodów jako jeden ZIP |
| GET | /v1/exports | codes:read | Lista eksportów |
| GET | /v1/exports/{id} | codes:read | Sprawdź eksport i pobierz link do ZIP |
| Foldery | |||
| GET | /v1/folders | folders:read | Lista folderów |
| POST | /v1/folders | folders:write | Utwórz folder |
| GET | /v1/folders/{id} | folders:read | Pobierz folder |
| PATCH | /v1/folders/{id} | folders:write | Zmień nazwę folderu lub go przenieś |
| DELETE | /v1/folders/{id} | folders:write | Usuń folder (kody przejdą poziom wyżej) |
| Szablony | |||
| GET | /v1/templates | templates:read | Lista szablonów wyglądu |
| POST | /v1/templates | templates:write | Utwórz szablon |
| GET | /v1/templates/{id} | templates:read | Pobierz szablon |
| PATCH | /v1/templates/{id} | templates:write | Zmień szablon |
| DELETE | /v1/templates/{id} | templates:write | Usuń szablon |
| Przesłane pliki | |||
| POST | /v1/assets | codes:write | Prześlij logo lub plik |
| GET | /v1/assets/{id} | codes:read | Pobierz przesłany plik z podpisanym adresem URL |
| Domeny | |||
| GET | /v1/domains | domains:read | Lista własnych domen |
| GET | /v1/domains/{id} | domains:read | Pobierz domenę i jej status |
| GET | /v1/subdomain | domains:read | Subdomena obszaru roboczego i jej linki |
| GET | /v1/subdomain/availability | domains:read | Sprawdź, czy nazwa subdomeny jest wolna |
| Obszar roboczy | |||
| GET | /v1/workspaces/current | dowolny klucz | Obszar roboczy klucza i jego plan |
| GET | /v1/usage | dowolny klucz | Limity planu i zużycie w tym miesiącu |
| Webhooki | |||
| GET | /v1/webhooks | webhooks:read | Lista endpointów webhooków |
| POST | /v1/webhooks | webhooks:write | Zarejestruj endpoint i typy zdarzeń |
| GET | /v1/webhooks/{id} | webhooks:read | Pobierz endpoint |
| PATCH | /v1/webhooks/{id} | webhooks:write | Zmień lub ponownie włącz endpoint |
| DELETE | /v1/webhooks/{id} | webhooks:write | Usuń endpoint |
| POST | /v1/webhooks/{id}/test | webhooks:write | Wyślij zdarzenie webhook.test |
| GET | /v1/webhooks/{id}/deliveries | webhooks:read | Dostarczenia endpointu |
| GET | /v1/webhooks/{id}/deliveries/{deliveryId} | webhooks:read | Dostarczenie wraz z próbami |
| POST | /v1/webhooks/{id}/deliveries/{deliveryId}/redeliver | webhooks:write | Wyślij dostarczenie ponownie |
| POST | /v1/webhooks/{id}/recover | webhooks:write | Wyślij ponownie nieudane dostarczenia |
| Tagi | |||
| GET | /v1/tags | tags:read | Lista tagów |
| POST | /v1/tags | tags:write | Utwórz tag |
| GET | /v1/tags/{id} | tags:read | Pobierz tag |
| PATCH | /v1/tags/{id} | tags:write | Zmień nazwę lub kolor tagu |
| DELETE | /v1/tags/{id} | tags:write | Usuń tag (zostanie usunięty z jego kodów) |
| Raporty | |||
| POST | /v1/reports | analytics:read | Wygeneruj raport statystyk w PDF lub CSV |
| GET | /v1/reports | analytics:read | Lista wygenerowanych raportów |
| GET | /v1/reports/{id} | analytics:read | Sprawdź raport i pobierz link |
| Hooki Zapier i Make | |||
| GET | /v1/hooks | webhooks:read | Lista hooków integracji |
| POST | /v1/hooks | webhooks:write | Zapisz hook na jedno zdarzenie |
| DELETE | /v1/hooks/{id} | webhooks:write | Wypisz hook |
| GET | /v1/hooks/samples/{event} | webhooks:read | Ostatnie zdarzenia danego typu, jako próbka dla wyzwalacza |
| Wizytówki | |||
| GET | /v1/cards | cards:read | Lista wizytówek zespołu |
| POST | /v1/cards | cards:write | Utwórz wizytówkę |
| GET | /v1/cards/{id} | cards:read | Pobierz wizytówkę |
| PATCH | /v1/cards/{id} | cards:write | Zmień wizytówkę |
| POST | /v1/cards/{id}/deactivate | cards:write | Dezaktywuj wizytówkę |
| GET | /v1/cards/{id}/analytics | cards:read | Wyświetlenia, zapisy i stuknięcia wizytówki |
| Konwersje | |||
| POST | /v1/conversions | conversions:write | Zapisz konwersję |
| GET | /v1/analytics/funnel | analytics:read | Lejek od skanu do przychodu |
| Tagi NFC | |||
| GET | /v1/nfc/tags | codes:read | Lista tagów NFC |
| POST | /v1/nfc/tags | codes:write | Zarejestruj tag NFC w kodzie |
Schematy żądań i odpowiedzi każdej trasy są w dokumentacji API i w dokumencie OpenAPI. Dokumentacja API →
Limity zapytań
- Pro
- Zapytań/min: 60 · burst 20 / 10 s
- Business
- Zapytań/min: 600 · burst 200 / 10 s
- Enterprise
- indywidualnie
- Zadania eksportu i zbiorcze · Pro / Business
- Równolegle: 2 / Równolegle: 5
- Limity obowiązują na obszar roboczy i są wspólne dla wszystkich jego kluczy API
- Burst: maksymalnie 2× tempa na minutę w dowolnych 10 sekundach
- Odpowiedzi 429 zawierają Retry-After w sekundach
- Każda odpowiedź zawiera X-RateLimit-Limit, -Remaining i -Reset (sekundy do wyzerowania okna)
- Każdy POST przyjmuje nagłówek Idempotency-Key, honorowany przez 24 godz.
Uwierzytelnianie
Wysyłaj tajny klucz jako token bearer. Klucze zaczynają się od sk_live_, są pokazywane raz przy tworzeniu, mają zakresy (scope) i działają w swoim obszarze roboczym z rolą twórcy, co najwyżej Editor.
Uwierzytelnianie i zakresy →