Каждое событие уходит на сервер POST-запросом на https://<server><pathPrefix>/<urlMark>/t4k.json
с телом в JSON. Блоки page, sess, user, char, browser, lib одинаковы для всех событий,
data зависит от события, perf и scroll добавляются не ко всем.
{
"service": "track",
"name": "page",
"data": { "type": "content", "name": "Контакты" },
"projectId": 1617632140,
"uid": "6410748586712844288",
"user": {
"td": 0,
"id": "42",
"plan": "pro",
"ga4ClientId": "2039255293.1537236640",
"ymId": "1537242943246737376",
"ts": 1757960000000,
"tz": "Europe/Moscow",
"tzo": 10800000
},
"page": {
"title": "Rockstat",
"path": "/contacts",
"ref": "https://www.google.com/",
"url": "https://example.com/contacts?utm_source=g",
"query": { "utm_source": "g" },
"domain": "example.com",
"scheme": "https"
},
"sess": {
"pageNum": 3,
"eventNum": 17,
"num": 2,
"type": "campaign",
"engine": "google",
"refhost": "google.com",
"marks": { "utm_source": "g" },
"hasMarks": true,
"marksHash": 123456,
"start": 1757960000000
},
"char": { "ls": true, "ae": true, "pr": true, "sb": true, "ab": true, "wp": true },
"browser": {
"if1": 0, "if2": 0,
"w": 1440, "h": 415, "tw": 1440, "th": 900, "aw": 1440, "ah": 836,
"sopr": 2000, "soa": 0, "sot": "landscape-primary",
"plt": "MacIntel", "prd": "Gecko",
"uad": { "platform": "macOS", "platformVersion": "14.5.0", "mobile": false },
"nc": { "effectiveType": "4g", "rtt": 50 },
"ne": { "hc": 8, "dm": 8, "sq": 296630877388, "su": 12345 },
"nb": { "a": 1, "ch": 1, "l": 100, "ct": 0, "dt": -1 }
},
"perf": { "cs": 0, "ce": 0, "scs": -1, "rqs": 211, "rss": 1549, "rse": 1560, "dl": 1581, "di": 1812, "dc": -1 },
"scroll": { "dh": 1148, "ch": 326, "to": 479, "cs": 100, "ms": 100 },
"lib": { "id": "web-sdk", "v": 5002001, "sv": 5002001, "st": 1757960000000 }
}
В строке запроса передаются dig — хеш тела (cyrb53) и td_trans — использованный транспорт
(b — beacon, f — fetch). Подробнее в разделе Транспорт.
Блоки сообщения
| Блок | Содержимое |
|---|
name, data | Имя события и его данные. Список автоматических событий и их data — в разделе Автоматические события |
projectId | Идентификатор проекта из конфигурации или хеш домена |
uid | Идентификатор посетителя. Хранится в cookie и localStorage |
user | id и трейты из identify; ga4ClientId и ymId из автоматических синхронизаций с GA4 и Яндекс Метрикой; ts, tz, tzo — время и часовой пояс клиента; td — расхождение часов с сервером |
page | url, path, query (разобранная строка запроса, включая UTM, gclid, yclid), ref, title, domain, scheme |
sess | Сессия: номер, старт, счётчики, тип источника, метки. Подробнее в разделе Сессии |
char | Возможности браузера: ls localStorage, ae addEventListener, pr Promise, sb sendBeacon, ab atob, wp web push |
browser | w/h — область просмотра, tw/th — экран, aw/ah — доступная область, sopr — devicePixelRatio × 1000, soa/sot — ориентация, if1/if2 — признаки iframe, plt/prd — платформа и движок, uad — Client Hints, nc — сеть, ne — ядра, память и квота хранилища, nb — батарея |
perf | Navigation Timing: cs connectStart, ce connectEnd, scs secureConnectionStart, rqs requestStart, rss/rse responseStart/End, dl domLoading, di domInteractive, dc domComplete. Только у page и page_loaded |
scroll | dh — высота документа, ch — высота области просмотра, to — смещение сверху, cs — текущая прокрутка в процентах, ms — максимальная прокрутка на странице. У всех событий, кроме session, page, page_loaded, user_params, rec_start, rec_batch |
lib | id, v — версия библиотеки числом major × 1e6 + minor × 1e3 + patch, sv — версия сниппета, st — время старта библиотеки |
Значения в browser.uad, browser.nc, browser.ne.sq/su и browser.nb собираются асинхронно
и могут отсутствовать в первых сообщениях страницы. Отсутствующие оценки батареи передаются как -1.
Полная схема событий
Точками в ключах помечен переход на следующий уровень вложенности: page.title означает
{ page: { title } }. Тип {[string]:string} — обычный объект со строковыми ключами и значениями.
Колонка JavaScript описывает то, что отправляет браузер; поля без неё добавляет сервер.
| Property | JavaScript | Description |
|---|
| uid | string | rockstat visitor id, stored in cookie and localStorage |
| projectId | number | rockstat project id (received with event) |
| name | string | event name |
| service | string | target service, always "track" for events |
| data | {[string]:any} | event payload, depends on event |
| page.url | string | page full url |
| page.path | string | page path (pathname) |
| page.ref | string | page referrer |
| page.title | string | page title |
| page.domain | string | domain/hostname of browsed page |
| page.scheme | string | http/https |
| page.query | {[string]:string} | parsed query params, including utm_*, gclid, yclid |
| page.query.utm_source | string | marketing marks source |
| page.query.utm_campaign | string | marketing marks campaign |
| page.query.utm_medium | string | marketing marks channel |
| page.query.utm_content | string | marketing marks ad content |
| page.query.utm_term | string | marketing marks ad show criteria |
| page.query.gclid | string | google click id |
| page.query.yclid | string | yandex click id |
| sess.type | string | session type: campaign/organic/social/partner/referral/internal/direct/webview |
| sess.engine | string | search engine or social network: google/yandex/fb/vk/tiktok/telegram/etc |
| sess.num | number | visitor session number |
| sess.start | number | session start timestamp |
| sess.hasMarks | boolean | marks flag |
| sess.pageNum | number | page number in current session |
| sess.eventNum | number | event number in current session |
| sess.refhost | string | referrer hostname (without www) |
| sess.keyword | string | search keyword when the engine passes it in the referrer |
| sess.marks | {[string]:string} | session marks |
| sess.marks.utm_source | string | marketing marks source |
| sess.marks.utm_campaign | string | marketing marks campaign |
| sess.marks.utm_medium | string | marketing marks channel |
| sess.marks.utm_content | string | marketing marks ad content |
| sess.marks.utm_term | string | marketing marks ad show criteria |
| sess.marks.has_gclid | number | google click id present |
| sess.marks.has_yclid | number | yandex click id present |
| sess.marks.has_fbclid | number | facebook click id present (does not force campaign type) |
| sess.marks.pid, cid, sub1…sub5 | string | partner marks, force the "partner" session type |
| sess.marksHash | number | hash of campaign or partner marks set, used to detect a new campaign |
| user | {[string]:string} | user id, traits and synced ids |
| user.id | string | user id assigned by your website via identify |
| user.td | number | clock skew between client and server, ms |
| user.ts | number | client timestamp |
| user.tz | string | timezone name |
| user.tzo | number | timezone offset, ms |
| user.ga4ClientId | string | google analytics 4 client id (synced automatically) |
| user.ymId | string | yandex metrika client id (synced automatically) |
| char.ls | boolean | browser localStorage support |
| char.ae | boolean | browser addEventListener support |
| char.pr | boolean | browser Promise support |
| char.sb | boolean | browser sendBeacon support |
| char.ab | boolean | browser atob/btoa support |
| char.wp | boolean | browser web push support |
| browser.if1 | number | iframe detect #1 (window !== top) |
| browser.if2 | number | iframe detect #2 (parent has frames) |
| browser.w | number | viewport width |
| browser.h | number | viewport height |
| browser.tw | number | screen width |
| browser.th | number | screen height |
| browser.aw | number | screen available width |
| browser.ah | number | screen available height |
| browser.sopr | number | devicePixelRatio * 1000 |
| browser.soa | number | screen.orientation.angle |
| browser.sot | string | screen.orientation.type |
| browser.plt | string | navigator.platform |
| browser.prd | string | navigator.product |
| browser.uad | {[string]:string} | User-Agent Client Hints: architecture, bitness, mobile, model, platform, platformVersion, uaFullVersion |
| browser.nc | {[string]:string} | network: type, effectiveType, downlinkMax, rtt (navigator.connection) |
| browser.ne.hc | number | CPU cores (hardwareConcurrency) |
| browser.ne.dm | number | RAM in GB (deviceMemory) |
| browser.ne.sq | number | origin storage quota, bytes (navigator.storage.estimate) |
| browser.ne.su | number | origin storage usage, bytes |
| browser.nb.a | number | battery API available |
| browser.nb.ch | number | battery charging (0/1) |
| browser.nb.l | number | battery level, percent |
| browser.nb.ct | number | seconds until fully charged, -1 when unknown |
| browser.nb.dt | number | seconds until fully discharged, -1 when unknown |
| perf | {[string]:number} | Navigation Timing, only on "page" and "page_loaded" |
| perf.cs | number | timing.connectStart (reference point, always 0) |
| perf.ce | number | timing.connectEnd |
| perf.scs | number | timing.secureConnectionStart (num / -1) |
| perf.rqs | number | timing.requestStart |
| perf.rss | number | timing.responseStart |
| perf.rse | number | timing.responseEnd |
| perf.dl | number | timing.domLoading |
| perf.di | number | timing.domInteractive |
| perf.dc | number | timing.domComplete (num / -1) |
| scroll | {[string]:number} | Viewport position. On all events except "session", "page", "page_loaded", "user_params", "rec_start", "rec_batch" |
| scroll.dh | number | document height |
| scroll.ch | number | viewport height |
| scroll.to | number | top offset, pixels |
| scroll.cs | number | current scroll, percent |
| scroll.ms | number | max scroll on current page, percent |
| lib.id | string | library identifier: "web-sdk" |
| lib.v | number | library version packed as number: major*1e6 + minor*1e3 + patch (5.2.1 → 5002001) |
| lib.sv | number | snippet version, packed the same way |
| lib.st | number | library start timestamp |