Ëffentlech API & API-Schlësselen
Programmateschen Zougrëff op Ären Aarbechtsberäich — Projeten, Sessiounen, eege Eventer a Segmenter liesen a Clients-IDen u Sessiounen hänken — ofgeséchert duerch API-Schlësselen, déi op den Aarbechtsberäich begrenzt sinn.
1. Iwwerbléck
Mat der MousePlayer-API kënnt Dir Donnéeën aus Ärem Aarbechtsberäich an Är eegen Dashboards, Äert Datewarehouse oder intern Instrumenter ofruffen. Ausser dem Zouuerdne vu Clients-IDen u Sessiounen (identify, brauch e Schlëssel mat Schreifscope, kuckt Schlësselscopen) erlaabt si nëmme Liesen: Iwwer d'API kënne keng Donnéeë geännert oder geläscht ginn.
- Basis-URL:
https://www.mouseplayer.com/api/v1/ - All Äntwerte si JSON.
- All Ufro gëtt mat engem API-Schlëssel authentifizéiert an automatesch op deen Aarbechtsberäich begrenzt, deem de Schlëssel gehéiert — e Schlëssel aus engem Aarbechtsberäich kann ni d'Donnéeë vun engem anere gesinn, och net zoufälleg.
- Déi komplett Sessiouns-Widdergab-Opnam (Mausbeweegungen, DOM-Ofbiller) ass net iwwer d'API zougänglech. Dir kritt Sessiounsmetadonnéeën, Säitenusiichten, eege Eventer a Segmenter — genuch, fir Berichter an Dashboards ze bauen, ouni déi réi Ofspilldonnéeë ronderëm ze verschécken.
2. Authentifikatioun
Erstellt a verwalt Är API-Schlësselen ënner API-Schlësselen an Ärem Kontmenü (/api-keys). Nëmme Besëtzer an Administrateure vum Aarbechtsberäich kënne Schlësselen erstellen oder zréckzéien.
Halt Äre Schlëssel geheim. E gëtt Lieszougrëff op alles an Ärem Aarbechtsberäich. De ganze Schlëssel gëtt genee eemol gewisen, direkt nom Erstellen — späichert en an engem Passwuertmanager oder Geheimnisspäicher. Wann Dir e verléiert, zitt en zeréck an erstellt en neien.
Schéckt de Schlëssel als Bearer-Token am Header Authorization vun all Ufro:
Feelend, falsch formatéiert oder zréckgezunne Schlëssele kréien eng Äntwert 401 :
Tarifviraussetzung
D'REST-API ass Deel vun de Tariffer Business an Enterprise . Et gëllt den Tarif vum Besëtzer vum Aarbechtsberäich; agelueden Ekippmembere profitéieren also dovun. D'Kontroll geschitt bei all Ufro, net nëmmen, wann e Schlëssel erstallt gëtt — wann den Aarbechtsberäich op e méi klengen Tarif wiesselt, hale bestoend Schlësselen op ze funktionéieren a liwweren 403zeréck.
Schlësselscopen
All Schlëssel dréit säi Scope am eegene Präfix. Dir erkennt also schonn un him, wat e mécht — an engem .env, an engem Ticket, an engem Terminal.
| Präfix | Bedeitung |
|---|---|
mp_ro_ | Nëmme Liesen. Liest Projeten, Sessiounen, Eventer a Segmenter. Kann näischt änneren. |
mp_rw_ | Liesen a Schreiwen. Alles hei uewen, plus d'Zouuerdne vu Clients-IDen iwwer den Identifikatiounsendpunkt. |
403 mat enger Meldung, déi seet, wat de Schlëssel erlaabt a wat den Endpunkt brauch. De Scope kann duerno net geännert ginn — erstellt en neie Schlëssel an zitt deen alen zeréck.3. Ufrogrenzen
All API-Schlëssel ass op 60 Ufroe pro Minuttbegrenzt, an enger rullender Zäitfënster gezielt. Wann Dir dat iwwerschreit, kréien Ufroen eng Äntwert 429 , bis d'Zäitfënster nees fräi ass:
Baut Dir eppes, wat eng méi héich Limit brauch? Kontaktéiert eis iwwer Hëllef a beschreift Ären Asazfall.
4. Endpunkten
GET/api/v1/projects
Lëscht all Projet (verfollegt Websäit) an Ärem Aarbechtsberäich op.
GET/api/v1/projects/{channelid}/sessions
Lëscht déi fir e Projet opgeholl Visiteursessiounen op, déi neisten als Éischt. Mat Säitenopdeelung.
| Ufroparameter | Beschreiwung |
|---|---|
page | Säitennummer, Standard: 1. |
per_page | Resultater pro Säit, Standard: 25, héchstens 100. |
since | Nëmme Sessiounen, déi op oder no dësem Datum ufänken (YYYY-MM-DD). |
until | Nëmme Sessiounen, déi op oder virun dësem Datum ufänken. |
GET/api/v1/sessions/{session_id}
Metadonnéeë vun enger eenzeler Sessioun plus hir Säitenusiichten. Déi komplett Ofspilldonnéeë si bewosst ausgeschloss — benotzt dofir de Player um Dashboard.
GET/api/v1/sessions/{session_id}/events
Eegendefinéiert Eventer, déi wärend enger Sessioun ausgeléist goufen (déi selwecht Eventer, déi Dir mat mp('event', ...)schéckt), mat hire Parameteren.
GET/api/v1/projects/{channelid}/segments
Lëscht d'Visiteurssegmenter op, déi fir e Projet definéiert sinn (souwuel projetsspezifesch ewéi iwwer den Aarbechtsberäich ewech).
5. Eng Clients-ID aus Ärem Backend zouuerdnen
De Browser weess dacks net, wien do sëtzt. Bei engem B2B-Produit gëtt d'Identitéit nom Umellen gekläert — an Ärem Backend. Bei engem Shop mat der Bestellbestätegung. Dësen Endpunkt ass genee fir dee Moment geduecht.
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}}D'ID erschéngt duerno an der Sessiounslëscht, ass do sichbar, an de Webhook session_identified gëtt ausgeléist — esou erreecht se Äert CRM.
"changed": false zeréck, a kee Webhook gëtt verschéckt. Eng widderholl Bestellung erstellt keen zweete potenzielle Client.| Status | Wéini |
|---|---|
400 | Feelend Feld, user_id méi ewéi 128 Zeechen oder Kontrollzeechen dran. Mir refuséieren amplaz ze kierzen — eng onbemierkt gekierzt ID passt op näischt an Ärem CRM a gesäit trotzdem wéi Erfolleg aus. |
404 | D'Sessioun existéiert net oder gehéiert net zu Ärem Aarbechtsberäich. Bewosst déiselwecht Äntwert fir béides. |
403 | Den Tarif vum Aarbechtsberäich enthält d'API net. |
6. Webhooks: D'Ënnerschrëft iwwerpréiwen
Webhooks ginn pro Projet ënner Integratiounenageriicht; do fannt Dir och d'Ënnerschrëftsgeheimnis. All Liwwerung enthält dës Headeren:
| Header | Bedeitung |
|---|---|
X-MousePlayer-Event | Eventnumm, z. B. session_identified |
X-MousePlayer-Timestamp | Unix-Sekonnen — Deel vum ënnerschriwwenen Text |
X-MousePlayer-Attempt | 1 beim éischte Versuch, méi héich bei Widderhuelungen |
X-MousePlayer-Signature | sha256=<hex> |
D'Ënnerschrëft ass en HMAC-SHA256 iwwer timestamp + "." + raw body, mam Ënnerschrëftsgeheimnis vun Ärem Projet als Schlëssel.
// 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');
Liwwerung a Widderhuelungen
Eng feelgeschloe Liwwerung gëtt no 1 Min., 5 Min., 15 Min., 1 St. a 6 St.widderholl; duerno gëtt opgehalen. 4xx Äntwerten ausser 408 an 429 ginn net widderholl — si soen "net esou", net "net elo". Äntwert séier mat 2xx a maacht d'Aarbecht duerno; d'Liwwerung leeft no 10 Sekonnen an eng Zäitlimit.
Verfügbar Eventer
| Event | Ausléiser |
|---|---|
session_identified | Wann eng Sessioun fir d'éischt eng Clients-ID kritt — aus dem Browser oder iwwer d'API |
session_ended | Eemol, wann d'Sessioun zougemaach gëtt |
goal_reached | Eemol pro Sessioun, wann en eegendefinéierten Event ee vun Ären Ziler erfëllt. Nëmmen Ziler vum Typ „event“ — URL-, Dauer-, Säitenusiichts- an Trichterziler ginn net ausgewäert. Enthält goal_id, goal_name, goal_value an currency. |
high_value_session | Wann e Visiteur fir d'éischt op engem bestëmmten Dag d'Wäertschwell vun dësem Projet iwwerschreit. D'Schwell gëtt aus Ärer eegener Verdeelung vu Punktzuelen ofgeleet (90. Perzentil vun de leschten 90 Deeg), ass keng fest Zuel an existéiert eréischt, wann op d'mannst 20 Visiteure bewäert goufen. Enthält visitor_id, value_score, threshold an déi am beschten ukuckbar Sessioun vun deem Dag. |
funnel_dropoff | Um Enn vun enger Sessioun, déi an ee vun Ären Trichtere koum, en awer net ofgeschloss huet. Nennt déi Stuf, bei där se opgehalen huet (dropped_at). En Ofbroch ass d'Feele vun engem Event a kann dofir eréischt bekannt sinn, wann d'Sessioun eriwwer ass. Sessiounen, déi ni an den Trichter koumen, si keng Ofbréch a léisen näischt aus. |
high_friction_session | Eemol pro Sessioun, wann hir Hindernispunktzuel fir d'éischt d'Schwell erreecht (Standard 60 vun 100). Enthält friction_score, d'Signaler dohannert (reasons) an d'Signal, dat d'Schwell iwwerschratt huet (trigger). |
element_broken | Eemol, wann e verfollegt Element säit e puer Deeg a kenger kontrolléierter Säitenusiicht méi en Treffer fonnt huet — meeschtens no engem Neistart vun der Websäit. Et gëtt eréischt erëm ausgeléist, nodeems d'Markéierung nees gepasst huet an nach eng Kéier futti gaangen ass. Dësen Event gehéiert zu kenger Sessioun: session_id an session_url sinn null, link_url mécht amplaz d'Markéierung op, an subject_id nennt d'Markéierung — fir all Versioun déiselwecht, soudatt en neie Selektor, deen nach eng Kéier ausfält, beim oppene Virfall lant. Enthält rule_id, rule_name, selector, page, checked_page_views, window_days an last_matched. Keng Visiteursdonnéeën. |
element_recovered | Entwarnung fir element_broken: soubal d'Markéierung tatsächlech erëm en Element fënnt — ze wéineg Säitenusiichte ginn net duer. Gëtt nëmme verschéckt, wann element_broken per Webhook erausgaangen ass, an huet keen eegene Schalter: En Abonnement op element_broken enthält et. Déiselwecht subject_id, soudatt PagerDuty de Virfall léist an Opsgenie d'Warnung zoumécht. Enthält zousätzlech matched_page_views an checked_page_views . |
anomaly_detected | Eemol pro Dag, wann de gëschtegen Dag kloer vun den 28 Deeg virdrun ofgewach ass: vill manner oder vill méi Sessiounen, e gefallenen Ziltaux, méi Sessioune mat Hindernisser oder mat JS-Feeler. Déiselwecht Metrik a Richtung bleiwe fir eng Woch roueg (astellbar). Dësen Event gehéiert zu kenger Sessioun: session_id an session_url sinn null, link_url mécht de Projetsiwwerbléck op, an subject_id nennt Metrik, Richtung an Dag. Enthält metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score an e liesbare summary an hint. Keng Visiteursdonnéeën. Fir Web Vitals ersetzt measurements de Wäert sessions, an page (eidel fir déi ganz Websäit) an device (desktop oder mobil) soen, wou et geschitt ass; link_url mécht dann de Reider Web Vitals op. |
rage_click | Bei engem erkannte Roserei-Klick |
error_detected | Bei enger Ausnam am Frontend |
ce | Sammelabonnement fir Är eegen Eventer. Et enthält déi Eventer hei uewen net — déi hunn hir eege Schalteren. |
7. Feeler & Statuscoden
| Status | Bedeitung |
|---|---|
200 | Erfolleg. |
401 | Feelenden, falsch formatéierten oder zréckgezunnen API-Schlëssel. |
404 | De gefrote Projet oder d'Sessioun existéiert net oder gehéiert net zu Ärem Aarbechtsberäich. |
429 | Ufrogrenz iwwerschratt — Dir schéckt mat dësem Schlëssel méi ewéi 60 Ufroen/Minutt. |
403 | Den Tarif vum Aarbechtsberäich enthält d'REST-API net. D'Meldung nennt souwuel deen néidegen ewéi den aktuellen Tarif. |
8. Sécherheetshinweiser
- Reng Lieschlësselen (mp_ro_) kënnen näischt änneren. Schreifschlësselen (mp_rw_) kënnen nëmme Clients-IDen zouuerdnen; kee Schlëssel kann Donnéeë läschen oder réi Ofspilldonnéeën exportéieren.
- All Ufro ass automatesch op den eegenen Aarbechtsberäich vum Schlëssel begrenzt — et gëtt kee Wee, eng aner Aarbechtsberäichs-ID matzeginn an d'Donnéeë vun aneren ze gesinn.
- Zitt e Schlëssel zu all Moment ënner /api-keyszeréck; d'Zréckzéie wierkt direkt.
- Behandelt Ären API-Schlëssel ewéi e Passwuert. Wann Dir een zoufälleg an en ëffentlecht Repository committ, zitt en direkt zeréck an erstellt en neien.
Begrenzten Eventsäiten (API v1, 14. Oktober 2026)
GET /api/v1/sessions/{session_id}/events liwwert standardméisseg bis zu 100 Eventer. Setzt per_page op eng ganz Zuel vun 1 bis 100. Follegt pagination.next_cursor, andeems Dir cursor bei der nächster Ufro onverännert schéckt; behalt déiselwecht Sessioun an dee selwechten Aarbechtsberäich. D'Eventer ginn no created_at an event_id zortéiert. Cursore sinn ënnerschriwwen an un déi Sessioun an deen Aarbechtsberäich gebonnen. Keng Gesamtunzuel a keng numeresch Säit gëtt zeréckginn.
De bestoenden data-Array an d'params-Zouuerdnung bleiwen verfügbar. pagination.returned ass déi tatsächlech zeréckginn Unzuel; pagination.has_more weist eng weider Säit un. next_cursor ass null, wann alles ofgeschloss ass. Eng Äntwert ass op 524288 Bytes begrenzt; eng Säit kann also manner Eventer ewéi per_page enthalen. Pro Event ginn héchstens 128 Parameterzeilen zeréckginn; params_truncated ass true, wa méi existéieren. Eenzel Zeechekettenparameter behalen d'Datebanklimit vun 255 Zeechen. Gekierzt Parametere sinn iwwer dësen Endpunkt net verfügbar. per_page ze verklengeren, erhéicht d'Parametergrenz net.
Ongülteg Säitegréissten, verännert Cursoren a Cursore fir eng aner Sessioun/en aneren Aarbechtsberäich liwweren 400. Ze grouss Donnéeë vun engem eenzelen Event liwweren 413. Bestoend Zougrëffskontrolle liwwere weider jee no Fall 401, 403, 404 oder 409.
D'Limit bleift bei 60 authentifizéierten Ufroe pro API-Schlëssel a Minutt. Wann se opgebraucht ass, kënnt 429 mat Retry-After: 60. Wann Redis oder d'Begrenzung net verfügbar ass, liwweren Ufroen 503 mat Retry-After: 5; si ginn ni ouni Limit zougelooss. Respektéiert Retry-After a benotzt en zoufällege Waardofstand; widderhuelt net an enger enker Schläif. Feeler an der Eventdatebank liwweren och 503. Cursore halen keen Ofbild fest: Gläichzäiteg nei Entréeë mat eeleren Zäitstempele kënnen en neie komplette Scan erfuerderen.
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 ass eng nëmmen am Dev verfügbare Backend-Kontrollstreck fir d'nativ SDK-Virusiicht. Si bleift an der Produktioun ausgeschalt. Backend-Bearer-Schlëssele brauchen e Liesscope fir list/replay an e Schreifscope fir register/grant/delete/disable. Zousätzlech Verfügbarkeetskontrolle fir d'nativ Virusiicht gëllen. Baut ni dauerhaft Aarbechtsberäichs-API-Schlësselen an eng mobil App an.