Адкрыты API & API-ключы
Праграмны доступ да прасторы — чытанне праектаў, сеансаў, уласных падзей і сегментаў, далучэнне ID кліентаў — з абаронай ключамі ўзроўню прасторы.
1. Агляд
API MousePlayer дазваляе атрымліваць даныя ў свае панэлі, сховішчы і ўнутраныя інструменты. Акрамя далучэння ID кліентаў (identify, патрэбны ключ з правам запісу, гл. Правы ключоў), ён працуе толькі для чытання: праз API нельга змяняць або выдаляць даныя.
- Базавы URL:
https://www.mouseplayer.com/api/v1/ - Усе адказы ў JSON.
- Кожны запыт аўтарызуецца ключом і аўтаматычна абмежаваны яго працоўнай прасторай — ключ адной прасторы ніколі не бачыць іншую, нават выпадкова.
- Поўны запіс прайгравання (рух мышы, здымкі DOM) не адкрываецца праз API. Вы атрымліваеце метаданыя, прагляды, падзеі і сегменты — дастаткова для справаздач без перамяшчэння сырога запісу.
2. Аўтэнтыфікацыя
Стварайце і кіруйце ключамі ў раздзеле API-ключы меню акаўнта (/api-keys). Толькі ўладальнікі і адміністратары могуць ствараць і адклікаць ключы.
Захоўвайце ключ у сакрэце. Ён адкрывае чытанне ўсёй прасторы. Поўны ключ паказваецца роўна аднойчы пасля стварэння — захавайце ў менеджары пароляў або сховішчы сакрэтаў. Пры страце адклічце і стварыце новы.
Перадавайце ключ як Bearer-токен у загалоўку Authorization кожнага запыту:
Адсутныя, няправільныя або адкліканыя ключы атрымліваюць адказ 401 :
Патрабаванне плана
REST API уваходзіць у планы Business і Enterprise . План бярэцца ва ўладальніка прасторы, таму запрошаныя ўдзельнікі яго пераймаюць. Праверка на кожным запыце, не толькі пры стварэнні ключа — пры паніжэнні плана існыя ключы спыняюць працу і вяртаюць 403.
Правы ключоў
Кожны ключ мае правы ва ўласным прэфіксе, таму дзеянні бачныя з выгляду — у .env, задачы або тэрмінале.
| Прэфікс | Значэнне |
|---|---|
mp_ro_ | Толькі чытанне. Чытае праекты, сеансы, падзеі і сегменты. Нічога не змяняе. |
mp_rw_ | Чытанне і запіс. Усё вышэй плюс далучэнне ID кліентаў праз identify. |
403 з указаннем правоў ключа і патрабаванняў кропкі. Правы потым не змяняюцца — стварыце новы ключ і адклічце стары.3. Ліміты частаты
Кожны ключ абмежаваны 60 запытамі за хвілінуу рухомым акне. Пры перавышэнні запыты атрымліваюць адказ 429 да вызвалення акна:
Патрэбны вышэйшы ліміт? Звярніцеся ў Падтрымку і раскажыце пра сцэнарый.
4. Кропкі API
GET/api/v1/projects
Спіс усіх праектаў (рэсурсаў адсочвання) прасторы.
GET/api/v1/projects/{channelid}/sessions
Запісаныя сеансы праекта, найноўшыя першымі, з пагінацыяй.
| Параметр запыту | Апісанне |
|---|---|
page | Нумар старонкі, па змаўчанні 1. |
per_page | Вынікаў на старонку, па змаўчанні 25, максімум 100. |
since | Толькі сеансы, пачатыя ў або пасля гэтай даты (YYYY-MM-DD). |
until | Толькі сеансы, пачатыя ў або да гэтай даты. |
GET/api/v1/sessions/{session_id}
Метаданыя сеанса і яго прагляды. Поўны запіс наўмысна выключаны — для яго выкарыстоўвайце плэер панэлі.
GET/api/v1/sessions/{session_id}/events
Уласныя падзеі сеанса (адпраўленыя праз mp('event', ...)) разам з параметрамі.
GET/api/v1/projects/{channelid}/segments
Сегменты наведвальнікаў праекта, як праектныя, так і агульныя для прасторы.
5. Далучэнне ID кліента з бэкэнда
Браўзер часта не ведае, хто перад ім. У B2B ідэнтычнасць усталёўваецца пасля ўваходу — на бэкэндзе, у краме — пры пацвярджэнні замовы. Гэта кропка менавіта для таго моманту.
POST /api/v1/sessions/{session_id}/identify
Authorization: Bearer mp_live_xxxxxxxxxxxx
Content-Type: application/json
{"user_id": "customer-4711"}
// 200 OK
{"data": {"session_id": "s_a1b2c3", "user_id": "customer-4711",
"changed": true, "previous": null, "webhook_queued": true}}ID з'яўляецца ў спісе сеансаў і даступны для пошуку; вэбхук session_identified спрацоўвае — так ID трапляе ў CRM.
"changed": false , вэбхук не адпраўляецца. Паўтор замовы не стварае другі лід.| Статус | Калі |
|---|---|
400 | Адсутнічае поле, user_id даўжэй за 128 сімвалаў або мае кіруючыя сімвалы. Мы адхіляем, а не абразаем — скарочаны ID не супадзе ў CRM, але выглядаў бы поспехам. |
404 | Сеанс не існуе або не належыць прасторы. Наўмысна адзін адказ для абодвух. |
403 | План прасторы не ўключае API. |
6. Вэбхукі: праверка подпісу
Вэбхукі наладжваюцца па праектах у раздзеле Інтэграцыі, дзе ёсць і сакрэт подпісу. Кожная дастаўка мае загалоўкі:
| Загаловак | Значэнне |
|---|---|
X-MousePlayer-Event | Назва падзеі, напрыклад session_identified |
X-MousePlayer-Timestamp | Unix-секунды — частка падпісанага тэксту |
X-MousePlayer-Attempt | 1 пры першай спробе, больш пры паўторах |
X-MousePlayer-Signature | sha256=<hex> |
Подпіс — HMAC-SHA256 над timestamp + "." + raw bodyз сакрэтам подпісу вашага праекта як ключом.
// PHP $erwartet = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $rawBody, $secret); if (!hash_equals($erwartet, $signature)) { http_response_code(401); exit; } // Node const expected = 'sha256=' + crypto.createHmac('sha256', secret) .update(timestamp + '.' + rawBody).digest('hex');
Дастаўка і паўторы
Няўдалая дастаўка паўтараецца праз 1 хв, 5 хв, 15 хв, 1 г і 6 г, потым спыняецца. 4xx адказы, за выключэннем 408 і 429 , не паўтараюцца — яны кажуць "не так", а не "не зараз". Адказвайце 2xx хутка і працуйце потым; тайм-аўт дастаўкі — 10 секунд.
Даступныя падзеі
| Падзея | Спрацоўвае |
|---|---|
session_identified | Пры першым атрыманні ID кліента — з браўзера або API |
session_ended | Аднойчы пры закрыцці сеанса |
goal_reached | Аднойчы на сеанс, калі ўласная падзея дасягае мэты. Толькі мэты тыпу «event» — URL, час, прагляды і варонкі не ацэньваюцца. Перадае goal_id, goal_name, goal_value і currency. |
high_value_session | Калі наведвальнік упершыню за дзень пераходзіць парог каштоўнасці праекта. Парог паходзіць з вашага размеркавання балаў (90-ы працэнтыль апошніх 90 дзён), не фіксаваная лічба, і ўзнікае толькі пасля ацэнкі хаця б 20 наведвальнікаў. Перадае visitor_id, value_score, threshold і найбольш цікавы для прагляду сеанс дня. |
funnel_dropoff | У канцы сеанса, які ўвайшоў у варонку і не завяршыў яе. Называе крок спынення (dropped_at). Сыход — адсутнасць падзеі, вядомая толькі пасля канца сеанса. Сеансы, якія не ўвайшлі ў варонку, не лічацца сыходамі і не спрацоўваюць. |
high_friction_session | Аднойчы на сеанс пры першым дасягненні парога перашкод (па змаўчанні 60 са 100). Перадае friction_score, сігналы за ім (reasons) і сігнал пераходу мяжы (trigger). |
element_broken | Аднойчы, калі адсочваны элемент некалькі дзён нічога не знаходзіў у правераных праглядах — звычайна пасля перазапуску. Паўторна толькі пасля аднаўлення і новай паломкі пазнакі. Падзея не належыць ніводнаму сеансу: session_id і session_url маюць значэнне null, link_url замест гэтага адкрывае пазнаку, а subject_id называе пазнаку — аднолькава для ўсіх версій, таму новы зламаны селектар далучыцца да адкрытага інцыдэнту. Перадае rule_id, rule_name, selector, page, checked_page_views, window_days і last_matched. Без даных наведвальніка. |
element_recovered | Адбой для element_broken: калі пазнака зноў сапраўды знаходзіць элемент — недастаткова малой колькасці праглядаў. Адпраўляецца толькі калі element_broken быў адпраўлены вэбхукам; асобнага пераключальніка няма: падпіска на element_broken уключае і яго. Той жа subject_id, таму PagerDuty вырашае інцыдэнт, а Opsgenie закрывае папярэджанне. Дадаткова перадае matched_page_views і checked_page_views . |
anomaly_detected | Раз у дзень, калі ўчора выразна адрознівалася ад папярэдніх 28 дзён: значна менш або больш сеансаў, падзенне мэт, больш сеансаў з перашкодамі або JS. Тая ж метрыка і напрамак маўчаць тыдзень (наладжваецца). Падзея не належыць ніводнаму сеансу: session_id і session_url маюць значэнне null, link_url адкрывае агляд праекта, а subject_id называе метрыку, напрамак і дзень. Перадае metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score і чытэльныя summary і hint. Без даных наведвальніка. Для Web Vitals measurements замяняе sessions, а page (пуста для ўсяго сайта) і device (desktop або mobil) паказваюць месца; link_url тады адкрывае ўкладку Web Vitals. |
rage_click | Пры выяўленым раздражнёным кліку |
error_detected | Пры кліенцкім выключэнні |
ce | Агульная падпіска на ўласныя падзеі. Яна не ўключае падзеі вышэй — у іх асобныя пераключальнікі. |
7. Памылкі & коды статусу
| Статус | Значэнне |
|---|---|
200 | Поспех. |
401 | Адсутны, няправільны або адкліканы API-ключ. |
404 | Праект або сеанс не існуе ці не належыць вашай прасторы. |
429 | Перавышаны ліміт — больш за 60 запытаў/хвіліну з гэтым ключом. |
403 | План прасторы не ўключае REST API. Паведамленне называе патрэбны і бягучы планы. |
8. Заўвагі бяспекі
- Ключы чытання (mp_ro_) нічога не змяняюць. Ключы запісу (mp_rw_) толькі далучаюць ID; ніякі ключ не выдаляе даныя і не экспартуе сырыя запісы.
- Кожны запыт абмежаваны ўласнай прасторай ключа — перадаць чужы ID і ўбачыць даныя немагчыма.
- Адклікайце ключ у любы момант у /api-keys; гэта дзейнічае адразу.
- Стаўцеся да ключа як да пароля. Пры выпадковым каміце ў адкрыты рэпазіторый адразу адклічце і стварыце новы.
Абмежаваныя старонкі падзей (API v1, 14 кастрычніка 2026)
GET /api/v1/sessions/{session_id}/events па змаўчанні вяртае да 100 падзей. per_page — цэлы лік ад 1 да 100. Перадавайце pagination.next_cursor без змен як cursor наступнага запыту, захоўваючы сеанс і прастору. Парадак паводле created_at і event_id. Курсоры падпісаны і прывязаны да сеанса і прасторы. Агульная колькасць і лікавая старонка не вяртаюцца.
Існыя масіў data і карта params застаюцца. pagination.returned — фактычная колькасць; pagination.has_more паказвае наступную старонку. next_cursor — null пры завяршэнні. Адказ абмежаваны 524288 байтамі, таму падзей можа быць менш за per_page. Да 128 радкоў параметраў на падзею; params_truncated — true пры перавышэнні. Радкі маюць ліміт базы 255 сімвалаў. Абрэзаныя параметры праз API недаступныя. Памяншэнне per_page не павышае ліміт параметраў.
Няправільны памер, зменены курсор або курсор іншага сеанса/прасторы вяртаюць 400. Завялікія даныя асобнай падзеі — 413. Існыя праверкі доступу вяртаюць 401, 403, 404 або 409 паводле выпадку.
Ліміт — 60 аўтарызаваных запытаў на ключ за хвіліну. Вычарпанне дае 429 з Retry-After: 60. Пры недаступным Redis або абмежавальніку — 503 з Retry-After: 5; без ліміту запыты не прымаюцца. Выконвайце Retry-After і дадавайце выпадковую затрымку, не паўтарайце ў шчыльным цыкле. Збоі базы падзей таксама даюць 503. Курсоры не фіксуюць здымак: паралельныя ўстаўкі са старым часам могуць патрабаваць новага сканавання.
GET /api/v1/sessions/s_example/events?per_page=25 GET /api/v1/sessions/s_example/events?per_page=25&cursor=SIGNED_CURSOR
/api/v1/native — серверны маршрут кіравання толькі Dev для папярэдняга прагляду натыўнага SDK. У вытворчасці выключаны. Серверныя Bearer-ключы патрабуюць чытання для list/replay і запісу для register/grant/delete/disable. Дзейнічаюць дадатковыя праверкі даступнасці. Ніколі не ўбудоўвайце пастаянныя ключы прасторы ў мабільную праграму.