Przejdź do treści

Porównanie i eksport

GET/v1/analytics/compare

Porównanie kodów

GET /v1/analytics/compare przyjmuje codeIds (do 4, rozdzielone przecinkami) oraz zwykłe range, tz i groupBy. Odpowiedź zawiera po jednej serii na kod w tych samych przedziałach: jego punkty, sumy, poprzedni okres tej samej długości, zmianę względem niego i udział kodu w porównywanych skanach.

Kody, których klucz nie może zobaczyć, wracają w omitted zamiast powodować błąd żądania. Kod statyczny pojawia się z tracked: false i zerem punktów, bo jego skany nie są liczone.

żądanieGET /v1/analytics/compare
curl "https://api.dotwick.com/v1/analytics/compare?codeIds=qr_8841ce2mxk%2Cqr_2k8m4q7x1c9v&range=7d&tz=Europe%2FBerlin" \  -H "Authorization: Bearer sk_live_…"
odpowiedź200 OKskrócone do trzech dni; na każdy dzień okresu przypada jeden punkt
{  "groupBy": "day",  "tz": "Europe/Berlin",  "from": "2026-09-09T00:00:00+02:00",  "to": "2026-09-12T00:00:00+02:00",  "previous": {    "from": "2026-09-06T00:00:00+02:00",    "to": "2026-09-09T00:00:00+02:00"  },  "buckets": [    "2026-09-09T00:00:00+02:00",    "2026-09-10T00:00:00+02:00",    "2026-09-11T00:00:00+02:00"  ],  "series": [    {      "codeId": "qr_8841ce2mxk",      "name": "Van fleet – unit 14",      "tracked": true,      "points": [        {          "ts": "2026-09-09T00:00:00+02:00",          "scans": 40,          "uniques": 31        },        {          "ts": "2026-09-10T00:00:00+02:00",          "scans": 52,          "uniques": 44        },        {          "ts": "2026-09-11T00:00:00+02:00",          "scans": 58,          "uniques": 47        }      ],      "totals": {        "scans": 150,        "uniques": 122,        "bots": 3      },      "previous": {        "scans": 100,        "uniques": 80      },      "deltas": {        "scans": 0.5,        "uniques": 0.525      },      "share": 0.75    },    {      "codeId": "qr_2k8m4q7x1c9v",      "name": "Van fleet – unit 15",      "tracked": true,      "points": [        {          "ts": "2026-09-09T00:00:00+02:00",          "scans": 12,          "uniques": 10        },        {          "ts": "2026-09-10T00:00:00+02:00",          "scans": 20,          "uniques": 17        },        {          "ts": "2026-09-11T00:00:00+02:00",          "scans": 18,          "uniques": 15        }      ],      "totals": {        "scans": 50,        "uniques": 42,        "bots": 0      },      "previous": {        "scans": 60,        "uniques": 51      },      "deltas": {        "scans": -0.167,        "uniques": -0.176      },      "share": 0.25    }  ],  "omitted": []}

Pobieranie skanów jako CSV

GET /v1/analytics/export odpowiada samym plikiem CSV (text/csv, jako załącznik) dla filtrów pozostałych endpointów statystyk: codeId lub codeIds, folderId, tagId, gtin, country i okres. kind wybiera plik: daily_totals, scan_rows, breakdowns.

daily_totals to jeden wiersz na okres (dodaj splitByCode=true, by mieć jeden wiersz na kod), scan_rows to jeden wiersz na skan, a breakdowns wypisuje każdy wiersz podanych wymiarów. Wszystkie trzy wymagają planu z eksportem CSV; scan_rows wymaga też statystyk pojedynczych skanów. Wiersze starsze niż historia planu nie trafiają do pliku.

Powyżej 10 000 wierszy odpowiedzią jest 413 payload_too_large z details.reason use_export_job. Uruchom wtedy zadanie eksportu.

Duże okresy: zadanie eksportu

POST /v1/analytics/exports przyjmuje te same filtry jako treść JSON (kind jest wymagane) i przygotowuje plik w tle, do 1 000 000 wierszy. Więcej to 413 z details.reason too_many_rows: zawęź okres. Wyślij Idempotency-Key.

Odpowiedzią jest 202 z exportId. Odpytuj GET /v1/exports/{id}, aż będzie gotowy, i odczytaj z niego link do pobrania. E-mail również zapowiada plik; wyślij email: false, by go pominąć.

żądaniePOST /v1/analytics/exports
curl -X POST https://api.dotwick.com/v1/analytics/exports \  -H "Authorization: Bearer sk_live_…" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: van-014-scans-q3" \  -d '{    "kind": "scan_rows",    "range": "90d",    "tz": "Europe/Berlin",    "codeIds": [      "qr_8841ce2mxk"    ],    "email": false  }'
odpowiedź202 Accepted
{  "exportId": "exp_2m7x4k9q1c8v3b6n",  "status": "queued"}