Јавен API & API-клучеви
Програмски пристап до работниот простор — читајте проекти, сесии, приспособени настани и сегменти и додавајте ID на клиенти во сесии — заштитен со API-клучеви ограничени на работниот простор.
1. Преглед
API на MousePlayer ви овозможува да преземате податоци од работниот простор во сопствени контролни табли, складиште на податоци или внатрешни алатки. Освен додавање ID на клиенти во сесии (identify, бара клуч со опсег за запишување, видете Опсези на клучеви), тој е само за читање: преку API не може да се менуваат или бришат податоци.
- Основна URL-адреса:
https://www.mouseplayer.com/api/v1/ - Сите одговори се JSON.
- Секое барање се автентицира со API-клуч и автоматски се ограничува на работниот простор на кој му припаѓа клучот — клуч од еден работен простор никогаш не може да гледа податоци од друг, дури ни случајно.
- Целосната снимка за репродукција на сесијата (движења на глувчето, моментални DOM-снимки) не е достапна преку API. Добивате метаподатоци на сесии, прегледи на страници, приспособени настани и сегменти — доволно за извештаи и контролни табли без пренесување на необработените податоци за репродукција.
2. Автентикација
Создавајте и управувајте со API-клучевите во API-клучеви во менито на сметката (/api-keys). Само сопственици и администратори на работниот простор може да создаваат или отповикуваат клучеви.
Чувајте го клучот тајно. Дава пристап за читање до сè во работниот простор. Целосниот клуч се прикажува точно еднаш, веднаш по создавањето — зачувајте го во управувач со лозинки или сеф за тајни. Ако го изгубите, отповикајте го и создајте нов.
Испратете го клучот како Bearer-токен во заглавието Authorization на секое барање:
Недостасувачки, неправилно составени или отповикани клучеви добиваат одговор 401 :
Потребен план
REST API е дел од плановите Business и Enterprise . Планот се зема од сопственикот на работниот простор, па поканетите членови на тимот го наследуваат. Проверката се врши на секое барање, не само при создавање клуч — ако работниот простор премине на понизок план, постојните клучеви престануваат да работат и враќаат 403.
Опсези на клучеви
Секој клуч го носи својот опсег во сопствениот префикс, па може да кажете што прави само со поглед — во .env, во тикет, во терминал.
| Префикс | Значење |
|---|---|
mp_ro_ | Само за читање. Чита проекти, сесии, настани и сегменти. Не може ништо да промени. |
mp_rw_ | Читање и запишување. Сè погоре, плус додавање ID на клиенти преку крајната точка за идентификација. |
403 со порака што наведува каков е клучот и што бара крајната точка. Опсегот не може подоцна да се промени — создајте нов клуч и отповикајте го стариот.3. Ограничувања на стапката
Секој API-клуч е ограничен на 60 барања во минута, следени во подвижен временски прозорец. Откако ќе го надминете тоа, барањата добиваат одговор 429 додека не се ослободи прозорецот:
Градите нешто што бара повисоко ограничување? Контактирајте нè преку Поддршка и кажете ни за случајот на употреба.
4. Крајни точки
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 — така стигнува до вашиот 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 | Еднаш по сесија, кога приспособен настан исполнува една од вашите цели. Само цели од тип „настан“ — цели со 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-клучот како лозинка. Ако случајно го зачувате во јавно складиште за код, веднаш отповикајте го и создајте нов.
Ограничени страници со настани (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 знаци. Скратените параметри не се достапни преку оваа крајна точка. Намалувањето на per_page не го зголемува ограничувањето на параметри.
Невалидни големини на страници, изменети курсори и курсори за друга сесија/работен простор враќаат 400. Преголеми податоци на поединечен настан враќаат 413. Постојните проверки на пристап сè уште враќаат 401, 403, 404 или 409 според случајот.
Ограничувањето останува 60 автентицирани барања по API-клуч во минута. Исцрпувањето враќа 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. Важат дополнителни проверки за достапност на изворниот преглед. Никогаш не вградувајте трајни API-клучеви на работниот простор во мобилна апликација.