Pampublikong API & mga API Key
Programmatic na access sa inyong workspace — basahin ang mga project, session, custom event at segment, at maglakip ng mga customer ID sa session — ligtas gamit ang mga API key na saklaw ang workspace.
1. Pangkalahatang-ideya
Sa API ng MousePlayer, makukuha ninyo ang datos ng inyong workspace para sa sarili ninyong dashboard, data warehouse o internal na mga tool. Bukod sa paglakip ng customer ID sa session (identify, kailangan ng key na may write scope, tingnan ang Mga saklaw ng key), ito ay read-only: walang datos na mababago o mabubura sa API.
- Base URL:
https://www.mouseplayer.com/api/v1/ - JSON ang lahat ng response.
- Bawat request ay pinatutunayan gamit ang API key at awtomatikong saklaw lamang ang workspace ng key — hindi kailanman makikita ng key ng isang workspace ang datos ng iba, kahit aksidente.
- Ang buong recording ng replay ng session (galaw ng mouse, mga snapshot ng DOM) ay hindi inilalabas sa API. Metadata ng session, mga page view, custom event at segment ang makukuha — sapat para sa ulat at dashboard nang hindi inililipat ang raw na payload ng replay.
2. Pagpapatunay
Gumawa at mamahala ng mga API key sa Mga API Key sa menu ng inyong account (/api-keys). Mga may-ari at admin lamang ng workspace ang maaaring gumawa o bumawi ng key.
Panatilihing lihim ang inyong key. Nagbibigay ito ng read access sa lahat ng nasa workspace. Eksaktong isang beses lamang ipinapakita ang buong key pagkatapos gawin — itago sa password manager o secrets vault. Kung mawala, bawiin ito at gumawa ng bago.
Ipadala ang key bilang Bearer token sa header na Authorization ng bawat request:
Tumatanggap ng response na 401 ang mga nawawala, maling anyo o binawing key:
Kinakailangang Plan
Bahagi ang REST API ng mga plan na Business at Enterprise. Sinusunod ang plan ng may-ari ng workspace, kaya namamana ito ng inimbitahang miyembro ng team. Sinusuri ito sa bawat request, hindi lamang sa paggawa ng key — kung ibababa ang plan ng workspace, titigil ang mga dating key at magbabalik ng 403.
Mga Saklaw ng Key
Nasa sariling prefix ng bawat key ang saklaw, kaya malalaman ang ginagawa nito sa pagtingin lamang — sa .env, sa ticket, sa terminal.
| Prefix | Kahulugan |
|---|---|
mp_ro_ | Pagbasa lamang. Binabasa ang mga project, session, event at segment. Walang mababago. |
mp_rw_ | Pagbasa at pagsusulat. Lahat ng nasa itaas, kasama ang paglakip ng customer ID gamit ang identify endpoint. |
403 na may mensaheng nagsasabi ng uri ng key at kailangan ng endpoint. Hindi mababago ang saklaw pagkatapos — gumawa ng bagong key at bawiin ang luma.3. Mga Limitasyon sa Rate
Bawat API key ay limitado sa 60 request bawat minuto, sinusukat sa rolling window. Kapag lumampas, tatanggap ang mga request ng response na 429 hanggang ma-clear ang window:
Gumagawa ba kayo ng nangangailangan ng mas mataas na limitasyon? Makipag-ugnayan sa Support at sabihin ang inyong gamit.
4. Mga Endpoint
GET/api/v1/projects
Inililista ang bawat project (sinusubaybayang site) sa inyong workspace.
GET/api/v1/projects/{channelid}/sessions
Inililista ang mga na-record na session ng bisita para sa project, pinakabago muna. May pagination.
| Parameter ng Query | Paglalarawan |
|---|---|
page | Numero ng pahina, default 1. |
per_page | Resulta sa bawat pahina, default 25, hanggang 100. |
since | Mga session lamang na nagsimula sa o pagkatapos ng petsang ito (YYYY-MM-DD). |
until | Mga session lamang na nagsimula sa o bago ang petsang ito. |
GET/api/v1/sessions/{session_id}
Metadata ng isang session, kasama ang mga page view. Sadyang hindi kasama ang buong payload ng replay — gamitin ang Player ng dashboard para roon.
GET/api/v1/sessions/{session_id}/events
Mga custom event na na-trigger sa session (parehong mga event na ipinapadala gamit ang mp('event', ...)), kasama ang mga parameter.
GET/api/v1/projects/{channelid}/segments
Inililista ang mga segment ng bisita na tinukoy sa project (kapwa para sa project at para sa buong workspace).
5. Paglakip ng Customer ID Mula sa Inyong Backend
Madalas hindi alam ng browser kung sino ang gumagamit. Sa B2B na produkto, nalalaman ang pagkakakilanlan pagkatapos ng login — sa inyong backend. Sa tindahan, sa kumpirmasyon ng order. Para mismo sa sandaling iyon ang endpoint na ito.
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}}Lumilitaw pagkatapos ang ID sa listahan ng session, mahahanap doon, at gumagana ang webhook na session_identified — na nagdadala nito sa inyong CRM.
"changed": false at walang webhook na ipinapadala. Hindi lumilikha ng ikalawang lead ang inulit na order.| Status | Kailan |
|---|---|
400 | Nawawalang field, user_id na higit sa 128 character, o may control character. Tinatanggihan namin sa halip na putulin — walang tutugma sa tahimik na pinaikling ID sa CRM kahit mukhang matagumpay. |
404 | Hindi umiiral ang session o hindi kabilang sa inyong workspace. Sadyang pareho ang sagot sa dalawa. |
403 | Hindi kasama ang API sa plan ng workspace. |
6. Mga Webhook: Pagsuri ng Pirma
Ise-set up ang mga webhook sa bawat project sa Mga Integration, kung saan makikita rin ang signing secret. Bawat paghahatid ay may mga header na ito:
| Header | Kahulugan |
|---|---|
X-MousePlayer-Event | Pangalan ng event, hal. session_identified |
X-MousePlayer-Timestamp | Unix seconds — bahagi ng pinirmahang teksto |
X-MousePlayer-Attempt | 1 sa unang pagsubok, mas mataas sa mga susunod |
X-MousePlayer-Signature | sha256=<hex> |
HMAC-SHA256 ang pirma sa timestamp + "." + raw body, gamit ang signing secret ng inyong project bilang key.
// 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');
Paghahatid at Muling Pagsubok
Muling sinusubukan ang bigong paghahatid pagkatapos ng 1 min, 5 min, 15 min, 1 h at 6 h, pagkatapos ay itinitigil. 4xx na response, maliban sa 408 at 429, ay hindi muling sinusubukan — sinasabi nilang "hindi sa ganitong paraan", hindi "hindi ngayon". Tumugon ng 2xx agad at saka gawin ang trabaho; nagta-timeout ang paghahatid pagkalipas ng 10 segundo.
Mga Available na Event
| Event | Kailan Gumagana |
|---|---|
session_identified | Kapag unang nagkaroon ng customer ID ang session — mula sa browser o API |
session_ended | Isang beses, kapag nagsara ang session |
goal_reached | Isang beses sa bawat session, kapag may custom event na tumupad sa isa sa inyong mga goal. Mga goal lamang na may uring “event” — hindi sinusuri ang mga goal na URL, tagal, page view o funnel. Kasama ang goal_id, goal_name, goal_value at currency. |
high_value_session | Kapag unang lumampas ang bisita sa value threshold ng project sa isang araw. Ang threshold ay hinango sa sarili ninyong distribusyon ng score (ika-90 percentile ng huling 90 araw), hindi nakapirming bilang, at wala ito hangga't hindi pa nabibigyan ng score ang kahit 20 bisita. Kasama ang visitor_id, value_score, threshold at ang session ng araw na iyon na pinakakapaki-pakinabang panoorin. |
funnel_dropoff | Sa dulo ng session na pumasok sa isa sa inyong mga funnel ngunit hindi nagtapos. Tinutukoy ang hakbang kung saan huminto (dropped_at). Kawalan ng event ang pag-alis, kaya malalaman lamang kapag tapos na ang session. Hindi pag-alis ang session na hindi pumasok sa funnel at hindi ito nagti-trigger. |
high_friction_session | Isang beses sa bawat session, kapag unang umabot sa threshold ang friction score nito (default 60 sa 100). Kasama ang friction_score, ang mga senyas sa likod nito (reasons) at ang senyas na lumampas sa hangganan (trigger). |
element_broken | Isang beses, kapag ilang araw nang walang makita ang sinusubaybayang elemento sa anumang sinuring page view — karaniwan pagkatapos ng relaunch. Muli lamang gagana kapag tumugma ang marking at nasira muli. Ang event na ito ay walang kaugnayan sa anumang session: session_id at session_url ay null, link_url ang nagbubukas ng marking sa halip, at subject_id ang tumutukoy sa marking — pareho sa bawat bersiyon, kaya sumasama sa bukas na insidente ang bagong selector na nasirang muli. Kasama ang rule_id, rule_name, selector, page, checked_page_views, window_days at last_matched. Walang datos ng bisita. |
element_recovered | Pagbalik sa maayos para sa element_broken: isang beses kapag talagang may makitang elemento muli ang marking — hindi sapat ang kakaunting page view. Ipinapadala lamang kung naipadala sa webhook ang element_broken, at wala itong sariling switch: kasama ito sa pag-subscribe sa element_broken. Pareho ang subject_id, kaya nalulutas ng PagerDuty ang insidente at isinasara ng Opsgenie ang alerto. Kasama rin ang matched_page_views at checked_page_views. |
anomaly_detected | Isang beses sa bawat araw, kapag malinaw na iba ang kahapon sa naunang 28 araw: mas kaunti o mas maraming session, bumabang goal rate, mas maraming session na may friction o error sa JS. Tahimik ang parehong metric at direksiyon sa loob ng isang linggo (maaaring baguhin). Ang event na ito ay walang kaugnayan sa anumang session: session_id at session_url ay null, link_url ang nagbubukas ng pangkalahatang view ng project, at subject_id ang tumutukoy sa metric, direksiyon at araw. Kasama ang metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score at nababasang summary at hint. Walang datos ng bisita. Para sa Web Vitals, measurements ang pumapalit sa sessions, at page (walang laman para sa buong site) at device (desktop o mobil) ang nagsasabi kung saan nangyari; link_url ang nagbubukas naman ng tab ng Web Vitals. |
rage_click | Kapag may nakitang rage click |
error_detected | Kapag may front-end na exception |
ce | Sama-samang subscription para sa sarili ninyong mga custom event. Hindi nito isinasama ang mga event sa itaas — may sarili silang mga switch. |
7. Mga Error & Status Code
| Status | Kahulugan |
|---|---|
200 | Matagumpay. |
401 | Nawawala, maling anyo o binawing API key. |
404 | Hindi umiiral ang hiniling na project o session, o hindi kabilang sa inyong workspace. |
429 | Lumampas sa limitasyon ng rate — mahigit 60 request/minuto ang ipinapadala ninyo gamit ang key na ito. |
403 | Hindi kasama ang REST API sa plan ng workspace. Tinutukoy ng mensahe ang kailangang plan at ang kasalukuyan. |
8. Mga Paalala sa Seguridad
- Walang mababago ang mga read-only key (mp_ro_). Makapaglalakip lamang ng customer ID ang mga write key (mp_rw_); walang key na makabubura ng datos o makapag-e-export ng raw na datos ng replay.
- Awtomatikong saklaw lamang ng bawat request ang sariling workspace ng key — walang paraan upang magpasa ng ibang workspace ID at makita ang datos ng iba.
- Bawiin ang key anumang oras mula sa /api-keys; agad na magkakabisa ang pagbawi.
- Ituring na password ang API key. Kung aksidenteng ma-commit sa pampublikong repository, bawiin agad at gumawa ng bago.
Mga Limitadong Pahina ng Event (API v1, 14 Oktubre 2026)
Hanggang 100 event bilang default ang ibinabalik ng GET /api/v1/sessions/{session_id}/events. Itakda ang per_page sa integer na 1 hanggang 100. Sundin ang pagination.next_cursor sa pagpapadala ng cursor nang hindi binabago sa susunod na request; panatilihin ang parehong session at workspace. Nakaayos ang mga event ayon sa created_at at event_id. Pinirmahan ang mga cursor at nakatali sa session at workspace na iyon. Walang kabuuang bilang o numerong pahina na ibinabalik.
Nananatili ang dati nang data array at params map. Ang pagination.returned ang aktuwal na bilang na ibinalik; ang pagination.has_more ay nagsasabing may kasunod na pahina. Null ang next_cursor kapag kumpleto. Hanggang 524288 byte ang response, kaya maaaring mas kaunti sa per_page ang event sa pahina. Hanggang 128 row ng parameter sa bawat event ang ibinabalik; true ang params_truncated kung may higit pa. Nananatili ang limitasyon ng database na 255 character sa bawat string parameter. Hindi makukuha sa endpoint na ito ang pinutol na parameter. Hindi tataas ang limitasyon ng parameter sa pagpapababa ng per_page.
Nagbabalik ng 400 ang maling laki ng pahina, binagong cursor at cursor para sa ibang session/workspace. Nagbabalik ng 413 ang sobrang laki ng datos ng indibidwal na event. Patuloy na nagbabalik ng 401, 403, 404 o 409 ang mga dati nang pagsusuri ng access kung naaangkop.
Nananatili ang limitasyong 60 authenticated na request sa bawat API key bawat minuto. Kapag naubos, 429 ang sagot na may Retry-After: 60. Kung hindi available ang Redis o limiter, 503 ang sagot na may Retry-After: 5; hindi kailanman pinapayagan ang mga request nang walang limitasyon. Sundin ang Retry-After at magdagdag ng random na paghihintay; huwag ulit-ulitin nang walang pahinga. Nagbabalik din ng 503 ang mga pagkabigo sa event database. Hindi nagyeyelo ng snapshot ang mga cursor: maaaring mangailangan ng bagong scan ang kasabay na pagpasok ng datos na mas lumang timestamp.
GET /api/v1/sessions/s_example/events?per_page=25 GET /api/v1/sessions/s_example/events?per_page=25&cursor=SIGNED_CURSOR
Ang /api/v1/native ay Dev-only na backend control route para sa preview ng native SDK. Nananatili itong hindi pinagana sa production. Kailangan ng read scope ng mga backend Bearer key para sa list/replay at write scope para sa register/grant/delete/disable. May karagdagang pagsusuri ng availability ng native preview. Huwag kailanman mag-embed ng permanenteng API key ng workspace sa mobile app.