Javni API & API ključi
Programski dostop do delovnega prostora — berite projekte, seje, prilagojene dogodke in segmente ter sejam pripnite ID-je strank — zaščiten z API ključi, omejenimi na delovni prostor.
1. Pregled
API MousePlayer omogoča pridobivanje podatkov iz delovnega prostora v lastne nadzorne plošče, podatkovno skladišče ali interna orodja. Razen pripenjanja ID-jev strank sejam (identify, zahteva ključ z obsegom pisanja, glejte Obsegi ključev) je samo za branje: prek API-ja podatkov ni mogoče spreminjati ali brisati.
- Osnovni URL:
https://www.mouseplayer.com/api/v1/ - Vsi odgovori so JSON.
- Vsaka zahteva se overi z API ključem in samodejno omeji na njegov delovni prostor — ključ enega delovnega prostora nikoli ne vidi podatkov drugega, niti po pomoti.
- Celoten posnetek seje (gibanje miške, posnetki stanja DOM) prek API-ja ni dostopen. Dobite metapodatke sej, oglede strani, prilagojene dogodke in segmente — dovolj za poročila in nadzorne plošče brez prenašanja neobdelanih podatkov za predvajanje.
2. Preverjanje pristnosti
API ključe ustvarite in upravljate pod API ključi v meniju računa (/api-keys). Samo lastniki in administratorji delovnega prostora lahko ustvarjajo ali preklicujejo ključe.
Ključ naj ostane skrivnost. Omogoča branje vsega v delovnem prostoru. Celoten ključ se pokaže natanko enkrat, takoj po ustvarjanju — shranite ga v upravljalnik gesel ali varno shrambo skrivnosti. Če ga izgubite, ga prekličite in ustvarite novega.
Ključ pošljite kot žeton Bearer v glavi Authorization vsake zahteve:
Manjkajoči, napačno oblikovani ali preklicani ključi prejmejo odgovor 401:
Zahtevani paket
REST API je del paketov Business in Enterprise. Paket se določi po lastniku delovnega prostora, zato ga povabljeni člani ekipe podedujejo. Preverjanje se izvede pri vsaki zahtevi, ne le ob ustvarjanju ključa — pri prehodu delovnega prostora na nižji paket obstoječi ključi prenehajo delovati in vrnejo 403.
Obsegi ključev
Vsak ključ ima obseg v lastni predponi, zato že po videzu veste, kaj omogoča — v .env, zahtevku ali terminalu.
| Predpona | Pomen |
|---|---|
mp_ro_ | Samo branje. Bere projekte, seje, dogodke in segmente. Ničesar ne more spremeniti. |
mp_rw_ | Branje in pisanje. Vse zgoraj ter pripenjanje ID-jev strank prek končne točke identify. |
403 s sporočilom o vrsti ključa in zahtevi končne točke. Obsega pozneje ni mogoče spremeniti — ustvarite nov ključ in prekličite starega.3. Omejitve pogostosti
Vsak API ključ je omejen na 60 zahtev na minuto, spremljanih v drsečem časovnem oknu. Ko omejitev presežete, zahteve do sprostitve okna prejmejo odgovor 429:
Razvijate nekaj, kar potrebuje višjo omejitev? Obrnite se na podporo in opišite primer uporabe.
4. Končne točke
GET/api/v1/projects
Navede vse projekte (sledena spletna mesta) v delovnem prostoru.
GET/api/v1/projects/{channelid}/sessions
Navede posnete seje obiskovalcev projekta, najnovejše najprej. S straničenjem.
| Parameter poizvedbe | Opis |
|---|---|
page | Številka strani, privzeto 1. |
per_page | Rezultati na stran, privzeto 25, največ 100. |
since | Samo seje z začetkom na ta datum ali pozneje (YYYY-MM-DD). |
until | Samo seje z začetkom na ta datum ali prej. |
GET/api/v1/sessions/{session_id}
Metapodatki posamezne seje in njeni ogledi strani. Namenoma brez celotnih podatkov za predvajanje — uporabite predvajalnik nadzorne plošče.
GET/api/v1/sessions/{session_id}/events
Prilagojeni dogodki seje (isti dogodki, ki jih pošiljate z mp('event', ...)), vključno s parametri.
GET/api/v1/projects/{channelid}/segments
Navede segmente obiskovalcev projekta (projektne in za celoten delovni prostor).
5. Pripenjanje ID-ja stranke iz zaledja
Brskalnik pogosto ne ve, kdo je na drugi strani. V izdelku B2B se identiteta določi po prijavi — v vašem zaledju. V trgovini se določi s potrditvijo naročila. Ta končna točka je za natanko ta trenutek.
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 se nato prikaže na seznamu sej, kjer ga je mogoče iskati, sproži pa se tudi Webhook session_identified — tako prispe v vaš CRM.
"changed": false in Webhook se ne pošlje. Ponovljeno naročilo ne ustvari druge potencialne stranke.| Stanje | Kdaj |
|---|---|
400 | Manjkajoče polje, user_id z več kot 128 znaki ali kontrolnimi znaki. Zavrnemo namesto krajšanja — tiho skrajšan ID se v CRM-ju ne ujema z ničimer, pa je vseeno videti kot uspeh. |
404 | Seja ne obstaja ali ne pripada vašemu delovnemu prostoru. Namenoma isti odgovor za oboje. |
403 | Paket delovnega prostora ne vključuje API-ja. |
6. Webhooks: preverjanje podpisa
Webhooks nastavite za vsak projekt pod Integracije, kjer najdete tudi skrivnost za podpisovanje. Vsaka dostava vsebuje naslednje glave:
| Glava | Pomen |
|---|---|
X-MousePlayer-Event | Ime dogodka, npr. session_identified |
X-MousePlayer-Timestamp | Unix sekunde — del podpisanega besedila |
X-MousePlayer-Attempt | 1 ob prvem poskusu, višje pri ponovnih poskusih |
X-MousePlayer-Signature | sha256=<hex> |
Podpis je HMAC-SHA256 nad timestamp + "." + raw body, s skrivnostjo za podpisovanje vašega projekta.
// 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');
Dostava in ponovni poskusi
Neuspešna dostava se ponovi po 1 min, 5 min, 15 min, 1 h in 6 h, nato se opusti. 4xx odgovori razen 408 in 429 se ne ponavljajo — pomenijo "ne tako", ne "ne zdaj". Hitro odgovorite z 2xx in delo opravite pozneje; časovna omejitev dostave je 10 sekund.
Razpoložljivi dogodki
| Dogodek | Sproži se |
|---|---|
session_identified | Ko seja prvič dobi ID stranke — iz brskalnika ali API-ja |
session_ended | Enkrat ob zaključku seje |
goal_reached | Enkrat na sejo, ko prilagojeni dogodek izpolni vaš cilj. Samo cilji vrste „dogodek“ — cilji URL-ja, trajanja, ogledov strani in lijaka se ne vrednotijo. Vsebuje goal_id, goal_name, goal_value in currency. |
high_value_session | Ko obiskovalec na določen dan prvič preseže prag vrednosti projekta. Prag izhaja iz porazdelitve vaših ocen (90. percentil zadnjih 90 dni), ni fiksna številka in ne obstaja, dokler ni ocenjenih vsaj 20 obiskovalcev. Vsebuje visitor_id, value_score, threshold in sejo tega dne, najvrednejšo ogleda. |
funnel_dropoff | Ob koncu seje, ki je vstopila v vaš lijak, vendar ga ni dokončala. Navede korak, pri katerem se je ustavila (dropped_at). Odhod je odsotnost dogodka, zato ga je mogoče ugotoviti šele po koncu seje. Seje, ki nikoli niso vstopile v lijak, niso odhodi in ga ne sprožijo. |
high_friction_session | Enkrat na sejo, ko ocena trenja prvič doseže prag (privzeto 60 od 100). Vsebuje friction_score, signale, na katerih temelji (reasons), in signal, ki je presegel mejo (trigger). |
element_broken | Enkrat, ko spremljani element več dni ni našel ničesar v nobenem preverjenem ogledu strani — običajno po prenovi. Ponovno se sproži šele po vnovičnem ujemanju in ponovni odpovedi oznake. Ta dogodek ne pripada nobeni seji: session_id in session_url sta null, link_url namesto tega odpre oznako, polje subject_id pa poimenuje oznako — enako za vse različice, zato se novi selektor, ki znova odpove, pridruži odprtemu incidentu. Vsebuje rule_id, rule_name, selector, page, checked_page_views, window_days in last_matched. Brez podatkov obiskovalcev. |
element_recovered | Sporočilo o odpravi težave za element_broken: ko oznaka dejansko znova najde element — premalo ogledov strani ne zadostuje. Pošlje se samo, če je bil prek Webhook poslan element_broken, in nima lastnega stikala: naročnina na element_broken ga vključuje. Isti subject_id, zato PagerDuty razreši incident, Opsgenie pa zapre opozorilo. Dodatno vsebuje matched_page_views in checked_page_views. |
anomaly_detected | Enkrat na dan, ko se je včerajšnji dan izrazito razlikoval od prejšnjih 28 dni: precej manj ali več sej, nižji delež doseženih ciljev, več sej s trenjem ali napakami JS. Ista metrika in smer ostaneta tihi en teden (nastavljivo). Ta dogodek ne pripada nobeni seji: session_id in session_url sta null, link_url odpre pregled projekta, polje subject_id pa poimenuje metriko, smer in dan. Vsebuje metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score in berljivo summary ter hint. Brez podatkov obiskovalcev. Pri Web Vitals polje measurements nadomesti sessions, polji page (prazno za celotno spletno mesto) in device (desktop ali mobil) pa povesta, kje se je zgodilo; link_url nato odpre zavihek Web Vitals. |
rage_click | Ob zaznanem besnem kliku |
error_detected | Ob izjemi v uporabniškem delu aplikacije |
ce | Skupna naročnina za vaše prilagojene dogodke. Zgornjih dogodkov ne vključuje — ti imajo lastna stikala. |
7. Napake & kode stanja
| Stanje | Pomen |
|---|---|
200 | Uspeh. |
401 | Manjkajoč, napačno oblikovan ali preklican API ključ. |
404 | Zahtevani projekt ali seja ne obstaja ali ne pripada vašemu delovnemu prostoru. |
429 | Omejitev pogostosti presežena — s tem ključem pošiljate več kot 60 zahtev na minuto. |
403 | Paket delovnega prostora ne vključuje REST API-ja. Sporočilo navede zahtevani in trenutni paket. |
8. Varnostne opombe
- Ključi samo za branje (mp_ro_) ne morejo ničesar spremeniti. Ključi za pisanje (mp_rw_) lahko samo pripenjajo ID-je strank; noben ključ ne more brisati podatkov ali izvažati neobdelanih posnetkov.
- Vsaka zahteva je samodejno omejena na delovni prostor ključa — ni mogoče posredovati ID-ja drugega delovnega prostora in videti tujih podatkov.
- Ključ kadar koli prekličite pod /api-keys; preklic začne veljati takoj.
- API ključ obravnavajte kot geslo. Če ga pomotoma objavite v javnem repozitoriju, ga takoj prekličite in ustvarite novega.
Omejene strani dogodkov (API v1, 14. oktober 2026)
GET /api/v1/sessions/{session_id}/events privzeto vrne največ 100 dogodkov. Nastavite per_page na celo število od 1 do 100. Sledite pagination.next_cursor tako, da cursor nespremenjen pošljete v naslednji zahtevi; ohranite isto sejo in delovni prostor. Dogodki so urejeni po created_at in event_id. Kazalci so podpisani in vezani na sejo ter delovni prostor. Skupno število ali številska stran se ne vračata.
Obstoječe polje data in preslikava params ostaneta na voljo. pagination.returned je dejansko vrnjeno število; pagination.has_more označuje naslednjo stran. next_cursor je ob zaključku null. Odgovor je omejen na 524288 bajtov, zato stran lahko vsebuje manj dogodkov kot per_page. Na dogodek se vrne največ 128 vrstic parametrov; params_truncated je true, če jih je več. Posamezni besedilni parametri ohranijo omejitev zbirke podatkov na 255 znakov. Odrezani parametri prek te končne točke niso na voljo. Zmanjšanje per_page ne zviša omejitve parametrov.
Neveljavne velikosti strani, spremenjeni kazalci in kazalci druge seje ali delovnega prostora vrnejo 400. Preveliki podatki posameznega dogodka vrnejo 413. Obstoječa preverjanja dostopa še vedno ustrezno vrnejo 401, 403, 404 ali 409.
Omejitev ostaja 60 overjenih zahtev na API ključ na minuto. Izčrpanje vrne 429 z Retry-After: 60. Če Redis ali omejevalnik ni na voljo, zahteve vrnejo 503 z Retry-After: 5; nikoli niso sprejete brez omejitve. Upoštevajte Retry-After in dodajte naključni zamik; ne ponavljajte v tesni zanki. Tudi napake zbirke dogodkov vrnejo 503. Kazalci ne zamrznejo posnetka stanja: sočasni vnosi s starejšimi časovnimi oznakami lahko zahtevajo nov pregled.
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 je krmilna pot zaledja samo na Dev za predogled izvornega SDK-ja. V produkciji ostaja onemogočena. Ključi Bearer zaledja potrebujejo obseg branja za list/replay in pisanja za register/grant/delete/disable. Veljajo dodatna preverjanja razpoložljivosti izvornega predogleda. Trajnih API ključev delovnega prostora nikoli ne vdelajte v mobilno aplikacijo.