Viešoji API & API raktai
Programinė prieiga prie darbo srities — skaitykite projektus, seansus, pasirinktinius įvykius ir segmentus bei priskirkite klientų ID seansams — apsaugota darbo sričiai priskirtais API raktais.
1. Apžvalga
MousePlayer API leidžia gauti darbo srities duomenis savo suvestinėms, duomenų sandėliui ar vidiniams įrankiams. Išskyrus klientų ID priskyrimą seansams (identify, reikia rašymo apimties rakto, žr. „Raktų apimtys“), ji skirta tik skaitymui: per API negalima keisti ar ištrinti jokių duomenų.
- Bazinis URL:
https://www.mouseplayer.com/api/v1/ - Visi atsakymai pateikiami JSON formatu.
- Kiekviena užklausa autentifikuojama API raktu ir automatiškai apribojama darbo sritimi, kuriai jis priklauso — vienos darbo srities raktas niekada nemato kitos duomenų, net atsitiktinai.
- Visas seanso atkūrimo įrašas (pelės judesiai, DOM būsenos kopijos) nepateikiamas per API. Gaunate seanso metaduomenis, puslapių peržiūras, pasirinktinius įvykius ir segmentus — pakankamai ataskaitoms bei suvestinėms kurti neperduodant pirminių atkūrimo duomenų.
2. Autentifikavimas
Kurkite ir tvarkykite API raktus paskyros meniu skiltyje API raktai (/api-keys). Tik darbo srities savininkai ir administratoriai gali kurti ar atšaukti raktus.
Laikykite raktą paslaptyje. Jis suteikia skaitymo prieigą prie visko darbo srityje. Visas raktas parodomas tiksliai vieną kartą, iš karto sukūrus — saugokite slaptažodžių tvarkytuvėje ar paslapčių saugykloje. Praradę atšaukite ir sukurkite naują.
Siųskite raktą kaip Bearer žetoną kiekvienos užklausos antraštėje Authorization:
Jei rakto trūksta, jis netinkamas ar atšauktas, gaunamas 401 atsakymas:
Paketo reikalavimas
REST API įtraukta į Business ir Enterprise paketus. Paketas nustatomas pagal darbo srities savininką, todėl pakviesti komandos nariai jį paveldi. Tikrinama kiekviena užklausa, ne tik rakto kūrimas — sumažinus darbo srities paketą esami raktai nustoja veikti ir grąžina 403.
Raktų apimtys
Kiekvieno rakto apimtis nurodyta jo prefikse, todėl iš karto matote, ką jis leidžia — faile .env, užklausoje ar terminale.
| Prefiksas | Reikšmė |
|---|---|
mp_ro_ | Tik skaitymui. Skaito projektus, seansus, įvykius ir segmentus. Nieko keisti negali. |
mp_rw_ | Skaitymui ir rašymui. Visa, kas pirmiau, ir klientų ID priskyrimas per identify galinį adresą. |
403 su pranešimu, nurodančiu rakto ir galinio adreso reikalaujamas apimtis. Vėliau apimties pakeisti negalima — sukurkite naują raktą ir atšaukite senąjį.3. Užklausų dažnio ribos
Kiekvienam API raktui taikoma riba: 60 užklausų per minutę, skaičiuojant slenkančiu laikotarpiu. Viršijus užklausos gauna 429 atsakymą, kol laikotarpis atsilaisvina:
Kuriate tai, kam reikia didesnio limito? Kreipkitės per pagalbos tarnybą ir aprašykite naudojimo atvejį.
4. Galiniai adresai
GET/api/v1/projects
Pateikia visus jūsų darbo srities projektus (sekamus objektus).
GET/api/v1/projects/{channelid}/sessions
Pateikia projekto lankytojų seansus, pirmiausia naujausius. Su puslapiavimu.
| Užklausos parametras | Aprašas |
|---|---|
page | Puslapio numeris, numatytasis 1. |
per_page | Rezultatų puslapyje skaičius, numatytasis 25, didžiausias 100. |
since | Tik seansai, prasidedantys šią datą arba vėliau (YYYY-MM-DD). |
until | Tik seansai, prasidedantys šią datą arba anksčiau. |
GET/api/v1/sessions/{session_id}
Vieno seanso metaduomenys ir jo puslapių peržiūros. Sąmoningai neįtraukiami visi atkūrimo duomenys — tam naudokite suvestinės leistuvę.
GET/api/v1/sessions/{session_id}/events
Seanso metu suaktyvinti pasirinktiniai įvykiai (tie patys, kuriuos siunčiate su mp('event', ...)) kartu su jų parametrais.
GET/api/v1/projects/{channelid}/segments
Pateikia projektui apibrėžtus lankytojų segmentus: konkretaus projekto ir visos darbo srities.
5. Kliento ID priskyrimas iš serverio
Naršyklė dažnai nežino, kas ja naudojasi. B2B produkte tapatybė nustatoma prisijungus — jūsų serveryje. Parduotuvėje – patvirtinus užsakymą. Šis galinis adresas skirtas būtent tam momentui.
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}}Tada ID pasirodo seansų sąraše, jo galima ieškoti, o įvykis session_identified suaktyvina Webhook — taip jis pasiekia CRM.
"changed": false ir Webhook nesiunčiamas. Pakartotas užsakymas nesukuria antro potencialaus kliento.| Būsena | Kada |
|---|---|
400 | Trūksta lauko, user_id ilgesnis nei 128 ženklai arba turi valdymo ženklų. Atmetame, o ne trumpiname — tyliai sutrumpintas ID nieko neatitinka CRM, tačiau vis tiek atrodo sėkmingas. |
404 | Seanso nėra arba jis nepriklauso jūsų darbo sričiai. Abiem atvejais sąmoningai toks pat atsakymas. |
403 | Darbo srities paketas neapima API. |
6. Webhook: parašo tikrinimas
Webhook konfigūruojami kiekvienam projektui skiltyje Integracijos, kur taip pat rasite pasirašymo paslaptį. Kiekvienas siuntimas turi šias antraštes:
| Antraštė | Reikšmė |
|---|---|
X-MousePlayer-Event | Įvykio pavadinimas, pvz., session_identified |
X-MousePlayer-Timestamp | Unix sekundės — pasirašomo teksto dalis |
X-MousePlayer-Attempt | 1 per pirmą bandymą, daugiau kartojant |
X-MousePlayer-Signature | sha256=<hex> |
Parašas yra HMAC-SHA256, apskaičiuotas iš timestamp + "." + raw body, naudojant projekto pasirašymo paslaptį kaip raktą.
// 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');
Pristatymas ir kartojimai
Nepavykęs siuntimas kartojamas po 1 min., 5 min., 15 min., 1 val. ir 6 val., vėliau bandymų atsisakoma. 4xx atsakymai, išskyrus 408 ir 429, yra nekartojami — jie reiškia "ne taip", o ne "ne dabar". Greitai atsakykite 2xx ir darbą atlikite vėliau; siuntimo skirtasis laikas – 10 sekundžių.
Galimi įvykiai
| Įvykis | Suveikia |
|---|---|
session_identified | Kai seansas pirmą kartą gauna kliento ID — iš naršyklės arba API |
session_ended | Vieną kartą uždarant seansą |
goal_reached | Kartą per seansą, kai pasirinktinis įvykis įgyvendina vieną iš jūsų tikslų. Tik „event“ tipo tikslai — URL, trukmės, puslapių peržiūrų ir piltuvėlių tikslai nevertinami. Perduoda goal_id, goal_name, goal_value ir currency. |
high_value_session | Kai lankytojas konkrečią dieną pirmą kartą viršija projekto vertės ribą. Riba nustatoma pagal jūsų pačių balų pasiskirstymą (paskutinių 90 dienų 90-asis procentilis), o ne fiksuotą skaičių; jos nėra, kol neįvertinta bent 20 lankytojų. Perduoda visitor_id, value_score, threshold ir atkūrimui tinkamiausią tos dienos seansą. |
funnel_dropoff | Seanso, kuris įėjo į vieną iš jūsų piltuvėlių, tačiau jo neužbaigė, pabaigoje. Nurodo sustojimo žingsnį (dropped_at). Pasitraukimas yra neįvykęs įvykis, todėl nustatomas tik seansui pasibaigus. Į piltuvėlį neįėję seansai nėra pasitraukimai ir įvykio nesukelia. |
high_friction_session | Kartą per seansą, kai trinties balas pirmą kartą pasiekia ribą (numatytoji – 60 iš 100). Perduoda friction_score, jį nulėmusius signalus (reasons) ir ribą peržengusį signalą (trigger). |
element_broken | Vieną kartą, kai sekamas elementas kelias dienas nieko nerado nė vienoje patikrintoje puslapio peržiūroje — paprastai po svetainės atnaujinimo. Vėl suveikia tik tada, kai žymėjimas vėl rado atitiktį ir dar kartą nustojo veikti. Šis įvykis nepriklauso jokiam seansui: session_id ir session_url yra null, link_url vietoje to atidaro žymėjimą, o subject_id nurodo žymėjimą — tą patį visoms versijoms, todėl vėl sugedęs naujas selektorius prisijungia prie atviro incidento. Perduoda rule_id, rule_name, selector, page, checked_page_views, window_days ir last_matched. Be lankytojų duomenų. |
element_recovered | Pranešimas apie atkūrimą įvykiui element_broken: kartą, kai žymėjimas iš tikrųjų vėl randa elementą — nepakanka vien per mažo puslapių peržiūrų skaičiaus. Siunčiama tik jei element_broken buvo išsiųstas per Webhook; atskiro jungiklio nėra: prenumeruojant element_broken jis įtraukiamas. Toks pat subject_id, todėl PagerDuty išsprendžia incidentą, o Opsgenie uždaro įspėjimą. Papildomai perduoda matched_page_views ir checked_page_views. |
anomaly_detected | Kartą per dieną, kai vakarykštė diena aiškiai skyrėsi nuo ankstesnių 28 dienų: daug mažiau ar daugiau seansų, sumažėjęs tikslų pasiekimo rodiklis, daugiau seansų su trintimi ar JS klaidomis. Tas pats rodiklis ir kryptis savaitę nebepranešami (keičiama). Šis įvykis nepriklauso jokiam seansui: session_id ir session_url yra null, link_url atidaro projekto apžvalgą, o subject_id nurodo rodiklį, kryptį ir dieną. Perduoda metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score ir įskaitomą summary bei hint. Be lankytojų duomenų. Web Vitals atveju measurements pakeičia sessions, o page (tuščia visai svetainei) ir device (desktop arba mobil) nurodo įvykio vietą; link_url tada atidaro Web Vitals kortelę. |
rage_click | Aptikus įnirtingą paspaudimą |
error_detected | Įvykus sąsajos išimčiai |
ce | Bendra jūsų pasirinktinių įvykių prenumerata. Ji neapima pirmiau nurodytų įvykių — jie turi atskirus jungiklius. |
7. Klaidos & būsenos kodai
| Būsena | Reikšmė |
|---|---|
200 | Sėkmė. |
401 | Trūkstamas, netinkamas arba atšauktas API raktas. |
404 | Prašomo projekto ar seanso nėra arba jis nepriklauso jūsų darbo sričiai. |
429 | Viršyta užklausų dažnio riba — šiuo raktu siunčiate daugiau kaip 60 užklausų per minutę. |
403 | Darbo srities paketas neapima REST API. Pranešime nurodomas reikiamas ir dabartinis paketas. |
8. Saugumo pastabos
- Tik skaitymui skirti raktai (mp_ro_) nieko nekeičia. Rašymo raktai (mp_rw_) gali tik priskirti klientų ID; joks raktas negali ištrinti duomenų ar eksportuoti pirminių atkūrimo duomenų.
- Kiekviena užklausa automatiškai apribojama rakto darbo sritimi — negalima perduoti kitos darbo srities ID ir matyti svetimų duomenų.
- Bet kada atšaukite raktą skiltyje /api-keys; atšaukimas įsigalioja iš karto.
- API raktą saugokite kaip slaptažodį. Jei netyčia įtraukėte jį į viešą saugyklos commit, iš karto atšaukite ir sukurkite naują.
Riboto dydžio įvykių puslapiai (API v1, 2026 m. spalio 14 d.)
GET /api/v1/sessions/{session_id}/events pagal numatytuosius nustatymus grąžina iki 100 įvykių. Nustatykite per_page sveikąjį skaičių nuo 1 iki 100. Sekite pagination.next_cursor, kitoje užklausoje perduodami nepakeistą cursor; išlaikykite tą patį seansą ir darbo sritį. Įvykiai rikiuojami pagal created_at ir event_id. Žymekliai pasirašyti ir susieti su tuo seansu bei darbo sritimi. Bendras skaičius ar skaitinis puslapis negrąžinamas.
Esamas data masyvas ir params žemėlapis išlieka pasiekiami. pagination.returned yra tikras grąžintų įrašų skaičius; pagination.has_more nurodo kitą puslapį. Baigus next_cursor yra null. Atsakymas ribojamas iki 524288 baitų, todėl puslapyje gali būti mažiau įvykių nei per_page. Vienam įvykiui grąžinama iki 128 parametrų eilučių; params_truncated yra true, jei jų daugiau. Atskiri tekstiniai parametrai išlaiko duomenų bazės 255 ženklų ribą. Nukirsti parametrai per šį galinį adresą nepasiekiami. Mažinant per_page parametrų riba nedidėja.
Netinkami puslapio dydžiai, pakeisti žymekliai ir kito seanso ar darbo srities žymekliai grąžina 400. Per dideli atskiro įvykio duomenys grąžina 413. Esamos prieigos patikros toliau pagal situaciją grąžina 401, 403, 404 arba 409.
Riba lieka 60 autentifikuotų užklausų vienam API raktui per minutę. Išnaudojus grąžinama 429 su Retry-After: 60. Jei Redis ar ribotuvas nepasiekiamas, užklausos grąžina 503 su Retry-After: 5; jos niekada nepriimamos be ribos. Paisykite Retry-After ir pridėkite atsitiktinį laukimo intervalą; nekartokite intensyviu ciklu. Įvykių duomenų bazės klaidos taip pat grąžina 503. Žymekliai nefiksuoja būsenos kopijos: dėl lygiagrečių įterpimų su senesnėmis laiko žymomis gali reikėti naujos peržiūros.
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 yra tik Dev aplinkos serverio valdymo kelias savosios SDK peržiūrai. Produkcijoje lieka išjungtas. Serverio Bearer raktams reikia skaitymo apimties list/replay ir rašymo apimties register/grant/delete/disable. Taikomos papildomos savosios peržiūros pasiekiamumo patikros. Niekada neįterpkite nuolatinių darbo srities API raktų į mobiliąją programėlę.