Agregācijas API
GET /v1/codes/:id/scans — laika rindas + populārākās valstis/ierīces/OS vienam koda objektam.
Katrs dinamiskā QR koda skenējums izveido skenēšanas ierakstu (Scan-Record) tavā darba vidē (Workspace). Datu apkopošana pilnībā notiek Cloudflare-Edge — bez ārējiem izsekošanas pakalpojumiem, bez sīkfailiem (cookies) un bez oriģinālās IP adreses nonākšanas tavā datubāzē.
Trīs veidi, kā piekļūt skenēšanas datiem:
Agregācijas API
GET /v1/codes/:id/scans — laika rindas + populārākās valstis/ierīces/OS vienam koda objektam.
Webhooks (reāllaikā)
qr.scanned notikums katram skenējumam, parakstīts ar HMAC-SHA256. Skatiet Webhooks.
Vadības panelis
Vizualizācija qr3.app vadības panelī — nav nepieciešams API izsaukums.
Katram skenējumam tiek izveidots ieraksts tabulā scans:
| Lauks | Avots | Piemērs |
|---|---|---|
id | Servera ģenerēts UUID | scn_d1f8… |
code_id | Skenētā QR koda ID | qr_a1b2c3d4 |
workspace_id | Koda darba vide (Workspace) | ws_xxx |
country | Cloudflare cf.country | AT |
region | Cloudflare cf.region | Vienna |
city | Cloudflare cf.city | Wien |
device_type | User-Agent parsēšana | mobile, tablet, desktop |
os | User-Agent parsēšana | iOS, Android, macOS, Windows |
browser | User-Agent parsēšana | Safari, Chrome, Firefox |
referer | HTTP Referer galvene | https://example.com/landing |
language | Accept-Language galvene (pirmā valoda) | de |
redirected_to | Faktiskais novirzīšanas mērķis | https://example.com |
ip_hash | SHA-256(IP + ikdienas sāls) — neatgriezenisks | 8f3a… |
scanned_at | ISO-8601 laika zīmogs | 2026-05-12T14:32:11.000Z |
Visi ģeogrāfiskie dati (country, region, city) nāk no Cloudflare cf objekta un ir balstīti uz Cloudflare Geo-IP datubāzi. Ārējie Geo-IP pakalpojumi netiek pieprasīti — noteikšana notiek tajā pašā Worker, kas veic novirzīšanu.
Tam ir trīs sekas:
city ne vienmēr ir pieejama (piemēram, izmantojot VPN, mobilo sakaru operatorus vai mazos reģionos). Rēķinieties ar null vērtībām un iekļaujiet tās savos vadības paneļos.GET /v1/codes/:id/scansNodrošina apkopotu analītiku vienam QR kodam izvēlētajā laika periodā.
curl "https://qr3.app/v1/codes/qr_a1b2c3d4/scans?days=30" \ -H "Authorization: Bearer qr3_sk_..."const analytics = await qr3.scans.get('qr_a1b2c3d4', { days: 30 });console.log(analytics.period_scans, analytics.top_countries);qr3 scans qr_a1b2c3d4 --days 30Vaicājuma parametri (Query Parameters):
| Parametrs | Tips | Noklusējums | Apraksts |
|---|---|---|---|
days | vesels skaitlis | 30 | Laika periods dienās (1–365) |
Atbilde (HTTP 200):
{ "data": { "code_id": "qr_a1b2c3d4", "short_code": "r7f3Kx", "total_scans": 1842, "period_days": 30, "period_scans": 367, "scans_by_day": [ { "date": "2026-04-13", "count": 12 }, { "date": "2026-04-14", "count": 18 } ], "top_countries": [ { "value": "AT", "count": 142 }, { "value": "DE", "count": 98 }, { "value": "CH", "count": 41 } ], "top_devices": [ { "value": "mobile", "count": 281 }, { "value": "desktop", "count": 72 }, { "value": "tablet", "count": 14 } ], "top_os": [ { "value": "iOS", "count": 158 }, { "value": "Android", "count": 123 }, { "value": "macOS", "count": 48 } ] }, "meta": { "request_id": "req_xyz123" }}Atbildes lauki:
| Lauks | Apraksts |
|---|---|
total_scans | Kopējais skenējumu skaits koda darbības laikā (neatkarīgi no days loga) |
period_scans | Skenējumu skaits izvēlētajā laika logā |
scans_by_day | Dienu grupas, augošā secībā pēc datuma, tukšās dienas tiek izlaistas |
top_countries | Top 8 valstis laika logā, dilstošā secībā |
top_devices | Top 5 ierīču tipi (mobile, tablet, desktop) |
top_os | Top 5 operētājsistēmas |
Darba vides mēroga kopsummas (piemēram, skenējumi mēnesī visiem kodiem) ir pieejamas, izmantojot GET /v1/workspaces/:id laukā scans_this_month. Starpkodu analīzei mēs iesakām izmantot vadības paneli vai periodisku eksportēšanu.
Ja vēlaties apstrādāt skenēšanas notikumus tiklīdz tie notiek — piemēram, tiešsaistes vadības paneļiem, kontaktu izsekošanai (Lead-Tracking) vai CRM integrācijām —, abonējiet qr.scanned notikumu:
curl -X POST https://qr3.app/v1/webhooks \ -H "Authorization: Bearer qr3_sk_..." \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com/webhooks/qr3", "events": ["qr.scanned"], "secret": "my-secret-key-min-16-chars" }'Datu kopa (Payload):
{ "id": "evt_abc123xyz", "type": "qr.scanned", "created": "2026-05-12T14:32:11.000Z", "data": { "code_id": "qr_a1b2c3d4", "short_code": "r7f3Kx", "scan_id": "scn_d1f8...", "country": "AT", "device_type": "mobile", "os": "iOS" }}Pilna dokumentācija par paraksta verifikāciju, atkārtošanas loģiku (Retry-Logik) un piegādes žurnāliem (Delivery-Logs) ir pieejama sadaļā API → Webhooks.
Skenēšanas ieraksti nesatur personas datus saturošas IP adreses. Sākotnējā IP adrese Edge-Worker vidē tiek aizstāta ar kriptogrāfisku jaucējfunkciju (SHA-256) ar katru dienu rotējošu sāli (salt). Tas nozīmē:
Datu glabāšanas ilgums (Retention) ir atkarīgs no plāna:
| Plāns | Uzglabāšana |
|---|---|
| Free | 7 dienas |
| Pro | 90 dienas |
| Business / Agency | 1 gads |
| Enterprise | Pielāgots (SLA) |
Katru dienu palaists Cron uzdevums (purgeOldScans) automātiski dzēš vecākus ierakstus — tas neietekmē total_scans vērtību koda objektā.
days=365) datu kopa (payload) var sasniegt vairākus KB. Veiciet kešatmiņu klienta pusē ar īsu TTL (piemēram, 60 s).top_countries, top_devices, top_os servera pusē ir ierobežoti attiecīgi līdz 8 vai 5 ierakstiem. Padziļinātai analīzei eksportējiet neapstrādātos datus.null vērtības: country, region, city, referer, language var būt null. Savā analīzē apstrādājiet tās kā “Nezināms”.