Offentligt API & API-nycklar

Programmatisk åtkomst till din arbetsyta — läs projekt, sessioner, anpassade händelser och segment och koppla kund-ID:n till sessioner — skyddad med arbetsytebundna API-nycklar.

1. Översikt

Med MousePlayers API hämtar du data från arbetsytan till egna dashboarder, datalager eller interna verktyg. Förutom att koppla kund-ID:n till sessioner (identify, kräver en nyckel med skrivbehörighet, se Nyckelbehörigheter) ger det endast läsåtkomst: inga data kan ändras eller raderas via API:et.

  • Bas-URL: https://www.mouseplayer.com/api/v1/
  • Alla svar är JSON.
  • Varje anrop autentiseras med en API-nyckel och begränsas automatiskt till arbetsytan som nyckeln tillhör — en nyckel från en arbetsyta kan aldrig se en annan arbetsytas data, inte ens av misstag.
  • Hela sessionsinspelningen (musrörelser, DOM-ögonblicksbilder) är inte tillgänglig via API:et. Du får sessionsmetadata, sidvisningar, anpassade händelser och segment — tillräckligt för rapporter och dashboarder utan att flytta runt råa uppspelningsdata.

2. Autentisering

Skapa och hantera API-nycklar under API-nycklar i kontomenyn (/api-keys). Bara arbetsytans ägare och administratörer kan skapa eller återkalla nycklar.

Håll nyckeln hemlig. Den ger läsåtkomst till allt i arbetsytan. Hela nyckeln visas exakt en gång, direkt efter att den skapats — spara den i en lösenordshanterare eller ett hemlighetsvalv. Tappar du bort den återkallar du den och skapar en ny.

Skicka nyckeln som en Bearer-token i huvudet Authorization i varje anrop:

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

Saknade, felaktiga eller återkallade nycklar får svaret 401:

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

Abonnemangskrav

REST-API:et ingår i abonnemangen Business och Enterprise. Abonnemanget hämtas från arbetsytans ägare, så inbjudna teammedlemmar ärver det. Kontrollen görs vid varje anrop, inte bara när nyckeln skapas — om arbetsytan nedgraderas slutar befintliga nycklar fungera och returnerar 403.

Nyckelbehörigheter

Varje nyckels behörighet framgår av prefixet, så du ser vad den får göra bara genom att titta på den — i en .env, i ett ärende eller i en terminal.

PrefixBetydelse
mp_ro_Endast läsning. Läser projekt, sessioner, händelser och segment. Kan inte ändra något.
mp_rw_Läsning och skrivning. Allt ovan plus att koppla kund-ID:n via identify-slutpunkten.
Välj behörighet när du skapar nyckeln. Standard är endast läsning. En läsnyckel mot en skrivande slutpunkt ger 403 med ett meddelande om nyckelns behörighet och slutpunktens krav. Behörigheten kan inte ändras i efterhand — skapa en ny nyckel och återkalla den gamla.

3. Anropsgränser

Varje API-nyckel är begränsad till 60 anrop per minut, mätt i ett rullande tidsfönster. När gränsen överskrids får anrop svaret 429 tills tidsfönstret frigörs:

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

Bygger du något som kräver högre gräns? Kontakta supporten och berätta om ditt användningsfall.

4. Slutpunkter

GET/api/v1/projects

Listar varje projekt (spårad webbplats) i arbetsytan.

{ "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

Listar besökarsessioner inspelade för ett projekt, nyast först. Sidindelat.

FrågeparameterBeskrivning
pageSidnummer, standard 1.
per_pageResultat per sida, standard 25, högst 100.
sinceEndast sessioner som börjar detta datum eller senare (YYYY-MM-DD).
untilEndast sessioner som börjar detta datum eller tidigare.
{ "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}

Metadata för en session samt dess sidvisningar. Fullständiga uppspelningsdata utelämnas avsiktligt — använd spelaren i dashboarden för dem.

{ "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

Anpassade händelser som utlösts under en session (samma händelser som du skickar med mp('event', ...)), inklusive parametrar.

{ "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

Listar besökarsegmenten för ett projekt, både projektspecifika och gemensamma för arbetsytan.

{ "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. Koppla ett kund-ID från din backend

Webbläsaren vet ofta inte vem som sitter där. I en B2B-produkt fastställs identiteten efter inloggning — i din backend. I en butik sker det vid orderbekräftelsen. Slutpunkten är till för just det ögonblicket.

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:t visas sedan i sessionslistan, är sökbart där och webhooken session_identified utlöses — så når det ditt CRM.

Det är säkert att anropa två gånger med samma ID. Svaret kommer med "changed": false och ingen webhook skickas. En upprepad order skapar ingen andra kundförfrågan.
StatusNär
400Saknat fält, user_id över 128 tecken eller med kontrolltecken. Vi avvisar i stället för att korta — ett tyst förkortat ID matchar inget i ditt CRM men ser ändå ut att ha lyckats.
404Sessionen finns inte eller tillhör inte din arbetsyta. Avsiktligt samma svar för båda.
403Arbetsytans abonnemang omfattar inte API:et.

6. Webhookar: verifiera signaturen

Webhookar konfigureras per projekt under Integrationer, där även signeringshemligheten finns. Varje leverans har följande huvuden:

HuvudBetydelse
X-MousePlayer-EventHändelsenamn, t.ex. session_identified
X-MousePlayer-TimestampUnix-sekunder — del av den signerade texten
X-MousePlayer-Attempt1 vid första försöket, högre vid återförsök
X-MousePlayer-Signaturesha256=<hex>

Signaturen är en HMAC-SHA256 över timestamp + "." + raw body, med projektets signeringshemlighet som nyckel.

// 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');
Signera det råa innehållet före all JSON-tolkning. Ny serialisering ändrar nyckelordning och blanktecken och signaturen matchar aldrig. Avvisa även tidsstämplar äldre än några minuter — det är därför tidsstämpeln finns.

Leverans och återförsök

En misslyckad leverans görs om efter 1 min, 5 min, 15 min, 1 h och 6 h, sedan avslutas försöken. 4xx-svar, utom 408 och 429, görs inte om — de betyder "inte så här", inte "inte just nu". Svara 2xx snabbt och gör arbetet efteråt. Leveransen avbryts efter 10 sekunder.

Tillgängliga händelser

HändelseUtlöses
session_identifiedNär en session först får ett kund-ID — från webbläsaren eller API:et
session_endedEn gång när sessionen avslutas
goal_reachedEn gång per session när en anpassad händelse uppfyller ett av dina mål. Endast mål av typen ”event” — URL-, tids-, sidvisnings- och trattmål utvärderas inte. Innehåller goal_id, goal_name, goal_value och currency.
high_value_sessionNär en besökare för första gången under en dag passerar projektets värdetröskel. Tröskeln beräknas från din egen poängfördelning (90:e percentilen under de senaste 90 dagarna), är inget fast tal och finns inte förrän minst 20 besökare har poängsatts. Innehåller visitor_id, value_score, threshold och dagens mest sevärda session.
funnel_dropoffNär en session avslutas efter att ha påbörjat en av dina trattar utan att slutföra den. Anger steget där den stannade (dropped_at). Ett bortfall är frånvaron av en händelse och kan därför fastställas först när sessionen är över. Sessioner som aldrig påbörjade tratten är inga bortfall och utlöser inget.
high_friction_sessionEn gång per session när friktionspoängen först når tröskeln (som standard 60 av 100). Innehåller friction_score, signalerna bakom (reasons) och signalen som passerade gränsen (trigger).
element_brokenEn gång när ett markerat element inte har hittats i någon kontrollerad sidvisning på flera dagar — oftast efter en nylansering. Utlöses igen först när markeringen har matchat och därefter slutat matcha på nytt. Händelsen tillhör ingen session: session_id och session_url är null, link_url öppnar markeringen i stället och subject_id anger markeringen — samma för varje version, så att en ny selektor som slutar fungera kopplas till den öppna incidenten. Innehåller rule_id, rule_name, selector, page, checked_page_views, window_days och last_matched. Inga besökardata.
element_recoveredKlarsignalen för element_broken: en gång när markeringen faktiskt hittar ett element igen — för få sidvisningar räcker inte. Skickas bara om element_broken skickades via webhook och har inget eget reglage: en prenumeration på element_broken omfattar även denna. Samma subject_id, så PagerDuty löser incidenten och Opsgenie stänger aviseringen. Innehåller dessutom matched_page_views och checked_page_views.
anomaly_detectedEn gång om dagen när gårdagen tydligt avvek från de föregående 28 dagarna: betydligt färre eller fler sessioner, lägre måluppfyllelse eller fler sessioner med friktion eller JS-fel. Samma mätvärde och riktning förblir sedan tysta i en vecka (kan ändras). Händelsen tillhör ingen session: session_id och session_url är null, link_url öppnar projektöversikten och subject_id anger mätvärde, riktning och dag. Innehåller metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score och en läsbar summary och hint. Inga besökardata. För Web Vitals ersätter measurements värdet sessions, och page (tomt för hela webbplatsen) och device (desktop eller mobil) anger var det hände; link_url öppnar då fliken Web Vitals.
rage_clickVid ett upptäckt raseriklick
error_detectedVid ett frontend-undantag
ceGemensam prenumeration på dina egna anpassade händelser. Den omfattar inte händelserna ovan — de har egna reglage.

7. Fel & statuskoder

StatusBetydelse
200Lyckat.
401Saknad, felaktig eller återkallad API-nyckel.
404Begärt projekt eller session finns inte eller tillhör inte din arbetsyta.
429Anropsgränsen överskriden — du skickar fler än 60 anrop/minut med nyckeln.
403Arbetsytans abonnemang omfattar inte REST-API:et. Meddelandet anger både abonnemanget som krävs och det nuvarande.

8. Säkerhetsinformation

  • Läsnycklar (mp_ro_) kan inte ändra något. Skrivnycklar (mp_rw_) kan bara koppla kund-ID:n. Ingen nyckel kan radera data eller exportera råa uppspelningsdata.
  • Varje anrop begränsas automatiskt till nyckelns egen arbetsyta — det går inte att ange ett annat arbetsyte-ID och se någon annans data.
  • Återkalla en nyckel när som helst från /api-keys. Återkallandet gäller omedelbart.
  • Behandla API-nyckeln som ett lösenord. Om du av misstag committar den till ett offentligt kodarkiv återkallar du den direkt och skapar en ny.

Begränsade händelsesidor (API v1, 14 oktober 2026)

GET /api/v1/sessions/{session_id}/events returnerar högst 100 händelser som standard. Sätt per_page till ett heltal från 1 till 100. Följ pagination.next_cursor genom att skicka cursor oförändrat i nästa anrop. Behåll samma session och arbetsyta. Händelser ordnas efter created_at och event_id. Markörer är signerade och bundna till sessionen och arbetsytan. Inget totalantal eller numeriskt sidnummer returneras.

Den befintliga data-listan och params-mappningen finns kvar. pagination.returned är faktiskt returnerat antal och pagination.has_more anger att en sida till finns. next_cursor är null när allt är klart. Ett svar begränsas till 524288 byte, så en sida kan innehålla färre händelser än per_page. Högst 128 parameterrader returneras per händelse. params_truncated är true om fler finns. Enskilda strängparametrar behåller databasgränsen på 255 tecken. Trunkerade parametrar är inte tillgängliga via slutpunkten. Ett lägre per_page höjer inte parametergränsen.

Ogiltiga sidstorlekar, ändrade markörer och markörer för en annan session/arbetsyta ger 400. För stora data för en enskild händelse ger 413. Befintliga åtkomstkontroller ger fortfarande 401, 403, 404 eller 409 beroende på situation.

Gränsen är fortfarande 60 autentiserade anrop per API-nyckel och minut. När den nås returneras 429 med Retry-After: 60. Om Redis eller begränsaren är otillgänglig ger anrop 503 med Retry-After: 5. Inga anrop tillåts utan begränsning. Respektera Retry-After och använd slumpmässig väntetid mellan återförsök. Försök inte igen i en tät loop. Fel i händelsedatabasen ger också 503. Markörer fryser ingen ögonblicksbild. Samtidiga infogningar med äldre tidsstämplar kan kräva en ny genomsökning.

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 är en backend-kontrollväg endast för Dev för förhandsversionen av native-SDK:t. Den är fortsatt avstängd i produktion. Backendens Bearer-nycklar behöver läsbehörighet för list/replay och skrivbehörighet för register/grant/delete/disable. Ytterligare tillgänglighetskontroller för native-preview gäller. Bädda aldrig in permanenta API-nycklar för arbetsytan i en mobilapp.