Pular para o conteúdo

Comparar e exportar

GET/v1/analytics/compare

Comparar códigos

GET /v1/analytics/compare recebe codeIds (até 4, separados por vírgula) e os habituais range, tz e groupBy. A resposta traz uma série por código sobre os mesmos intervalos: seus pontos, seus totais, o período anterior de mesma duração, a variação em relação a ele e a fatia do código nos escaneamentos comparados.

Os códigos que a chave não pode ver voltam em omitted em vez de fazer a requisição falhar. Um código estático aparece com tracked: false e zero pontos, porque seus escaneamentos não são contados.

requisiçãoGET /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_…"
resposta200 OKreduzido a três dias; há um ponto por dia do período
{  "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": []}

Baixar escaneamentos em CSV

GET /v1/analytics/export responde com o próprio CSV (text/csv, como anexo) para os filtros dos outros endpoints de estatísticas: codeId ou codeIds, folderId, tagId, gtin, country e um período. kind escolhe o arquivo: daily_totals, scan_rows, breakdowns.

daily_totals é uma linha por período (adicione splitByCode=true para uma linha por código), scan_rows é uma linha por escaneamento e breakdowns lista cada linha das dimensões que você indicar. Os três exigem um plano com exportação em CSV; scan_rows exige também estatísticas por escaneamento. Linhas mais antigas que o histórico do plano não entram no arquivo.

Acima de 10.000 linhas a resposta é 413 payload_too_large com details.reason use_export_job. Inicie então um job de exportação.

Períodos grandes: um job de exportação

POST /v1/analytics/exports recebe os mesmos filtros como corpo JSON (kind é obrigatório) e prepara o arquivo em segundo plano, até 1.000.000 linhas. Mais que isso é 413 com details.reason too_many_rows: reduza o período. Envie uma Idempotency-Key.

A resposta é 202 com um exportId. Consulte GET /v1/exports/{id} até ficar pronto e leia dali o link de download. Um e-mail também avisa do arquivo; envie email: false para dispensá-lo.

requisiçãoPOST /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  }'
resposta202 Accepted
{  "exportId": "exp_2m7x4k9q1c8v3b6n",  "status": "queued"}