Ë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:

# List projects in your workspace curl -H "Authorization: Bearer mp_live_..." \ https://www.mouseplayer.com/api/v1/projects

Feelend, falsch formatéiert oder zréckgezunne Schlëssele kréien eng Äntwert 401 :

{ "error": "Invalid or missing API key. Use: Authorization: Bearer <key>" }

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äfixBedeitung
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.
Wielt de Scope beim Erstelle vum Schlëssel; de Standard ass nëmme Liesen. E reng Lieschlëssel op engem Schreifendpunkt liwwert 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:

{ "error": "Rate limit exceeded. Max 60 requests per minute." }

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.

{ "data": [ { "channelid": "955a45df5ee842cb", "domain": "yourdomain.com", "status": "active", "total_traffic_bytes": 27304765, "created_at": "2026-07-19 22:06:39", "last_used": "2026-08-05 01:12:55" } ] }

GET/api/v1/projects/{channelid}/sessions

Lëscht déi fir e Projet opgeholl Visiteursessiounen op, déi neisten als Éischt. Mat Säitenopdeelung.

UfroparameterBeschreiwung
pageSäitennummer, Standard: 1.
per_pageResultater pro Säit, Standard: 25, héchstens 100.
sinceNëmme Sessiounen, déi op oder no dësem Datum ufänken (YYYY-MM-DD).
untilNëmme Sessiounen, déi op oder virun dësem Datum ufänken.
{ "data": [ { "session_id": "s_kfmist058_1785795295504", "visitor_id": "v_sv90jdpzo_1785795296042", "custom_user_id": null, "country": "DE", "device_type": "desktop", "is_bot": 0, "start_time": "2026-08-04 00:14:56", "end_time": "2026-08-04 00:16:41", "duration_seconds": 105 } ], "pagination": { "page": 1, "per_page": 25, "total": 142, "total_pages": 6 } }

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.

{ "data": { "session_id": "s_kfmist058_1785795295504", "channelid": "955a45df5ee842cb", "visitor_id": "v_sv90jdpzo_1785795296042", "country": "DE", "asn_org": "Deutsche Telekom AG", "referrer": "https://duckduckgo.com/", "device_type": "desktop", "start_time": "2026-08-04 00:14:56", "end_time": "2026-08-04 00:16:41", "duration_seconds": 105, "pageviews": [ { "pageview_id": 1199, "url": "https://yourdomain.com/pricing", "page_title": "Pricing", "start_time": "2026-08-04 00:14:56", "end_time": "2026-08-04 00:16:41" } ] } }

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.

{ "data": [ { "event_id": 61, "pageview_id": 1199, "event_name": "add_to_cart", "created_at": "2026-08-04 00:14:59", "params": { "item_id": "SKU_98765", "price": 299.99 } } ] }

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).

{ "data": [ { "segment_id": 4, "name": "High Intent Visitors", "description": "Pageviews > 5", "badge_color": "cyan", "is_global": 0, "created_at": "2026-08-03 00:00:43" } ] }

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.

Zweemol mat därselwechter ID opruffen ass sécher. D'Äntwert kënnt mat "changed": false zeréck, a kee Webhook gëtt verschéckt. Eng widderholl Bestellung erstellt keen zweete potenzielle Client.
StatusWéini
400Feelend 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.
404D'Sessioun existéiert net oder gehéiert net zu Ärem Aarbechtsberäich. Bewosst déiselwecht Äntwert fir béides.
403Den 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:

HeaderBedeitung
X-MousePlayer-EventEventnumm, z. B. session_identified
X-MousePlayer-TimestampUnix-Sekonnen — Deel vum ënnerschriwwenen Text
X-MousePlayer-Attempt1 beim éischte Versuch, méi héich bei Widderhuelungen
X-MousePlayer-Signaturesha256=<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');
Ënnerschreift de réien Inhalt, virun all JSON-Auswäertung. Nees ze serialiséieren ännert d'Reiefolleg vu Schlësselen an d'Leerzeechen; d'Ënnerschrëft passt dann ni. Refuséiert och alles, deem säin Zäitstempel méi ewéi e puer Minutten al ass — dofir ass den Zäitstempel do.

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

EventAusléiser
session_identifiedWann eng Sessioun fir d'éischt eng Clients-ID kritt — aus dem Browser oder iwwer d'API
session_endedEemol, wann d'Sessioun zougemaach gëtt
goal_reachedEemol 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_sessionWann 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_dropoffUm 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_sessionEemol 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_brokenEemol, 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_recoveredEntwarnung 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_detectedEemol 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_clickBei engem erkannte Roserei-Klick
error_detectedBei enger Ausnam am Frontend
ceSammelabonnement fir Är eegen Eventer. Et enthält déi Eventer hei uewen net — déi hunn hir eege Schalteren.

7. Feeler & Statuscoden

StatusBedeitung
200Erfolleg.
401Feelenden, falsch formatéierten oder zréckgezunnen API-Schlëssel.
404De gefrote Projet oder d'Sessioun existéiert net oder gehéiert net zu Ärem Aarbechtsberäich.
429Ufrogrenz iwwerschratt — Dir schéckt mat dësem Schlëssel méi ewéi 60 Ufroen/Minutt.
403Den 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.