Veřejné API & klíče API

Programový přístup do pracovního prostoru — čtení projektů, relací, vlastních událostí a segmentů a přiřazování ID zákazníků k relacím — zabezpečený klíči API omezenými na pracovní prostor.

1. Přehled

API MousePlayer umožňuje načítat data z pracovního prostoru do vlastních dashboardů, datového skladu nebo interních nástrojů. S výjimkou přiřazování ID zákazníků k relacím (identify vyžaduje klíč s rozsahem zápisu, viz Rozsahy klíčů) slouží pouze ke čtení: přes API nelze data měnit ani mazat.

  • Základní adresa URL: https://www.mouseplayer.com/api/v1/
  • Všechny odpovědi jsou ve formátu JSON.
  • Každý požadavek se ověřuje klíčem API a automaticky se omezuje na pracovní prostor, kterému klíč patří — klíč jednoho prostoru nikdy neuvidí data jiného, ani náhodou.
  • Úplný záznam relace (pohyby myši, snímky DOM) přes API není dostupný. Získáte metadata relace, zobrazení stránek, vlastní události a segmenty — dost pro vytváření přehledů a dashboardů bez přenosu surových dat záznamu.

2. Ověřování

Klíče API vytvářejte a spravujte v části Klíče API v nabídce účtu (/api-keys). Vytvářet a odvolávat klíče mohou pouze vlastníci a správci pracovního prostoru.

Uchovávejte klíč v tajnosti. Umožňuje čtení všeho v pracovním prostoru. Úplný klíč se zobrazí přesně jednou, ihned po vytvoření — uložte ho do správce hesel nebo trezoru tajných údajů. Pokud ho ztratíte, odvolejte ho a vytvořte nový.

Klíč posílejte jako token Bearer v hlavičce Authorization každého požadavku:

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

Chybějící, nesprávně vytvořené nebo odvolané klíče dostanou odpověď 401 :

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

Požadovaný tarif

REST API je součástí tarifů Business a Enterprise . Rozhoduje tarif vlastníka pracovního prostoru, který tak přebírají i pozvaní členové týmu. Kontrola probíhá při každém požadavku, nejen při vytvoření klíče — po přechodu prostoru na nižší tarif přestanou stávající klíče fungovat a vracejí 403.

Rozsahy klíčů

Každý klíč uvádí svůj rozsah ve vlastní předponě, takže jeho možnosti poznáte na pohled — v souboru .env, v požadavku podpory nebo v terminálu.

PředponaVýznam
mp_ro_Pouze čtení. Čte projekty, relace, události a segmenty. Nemůže nic měnit.
mp_rw_Čtení a zápis. Vše výše uvedené a navíc přiřazování ID zákazníků přes endpoint identify.
Rozsah vyberete při vytváření klíče; výchozí je pouze čtení. Použití klíče jen pro čtení na zapisujícím endpointu vrátí 403 se zprávou uvádějící možnosti klíče i požadavky endpointu. Rozsah nelze dodatečně změnit — vytvořte nový klíč a starý odvolejte.

3. Limity požadavků

Každý klíč API má limit 60 požadavků za minutu, sledovaný v klouzavém časovém okně. Po překročení dostávají požadavky odpověď 429 do uvolnění okna:

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

Vytváříte něco, co potřebuje vyšší limit? Obraťte se na Podporu a popište své využití.

4. Endpointy

GET/api/v1/projects

Vypíše všechny projekty (sledované weby) v pracovním prostoru.

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

Vypíše zaznamenané relace návštěvníků projektu, od nejnovější. Se stránkováním.

Parametr dotazuPopis
pageČíslo stránky, výchozí 1.
per_pageVýsledků na stránku, výchozí 25, maximum 100.
sincePouze relace začínající v tento den nebo později (YYYY-MM-DD).
untilPouze relace začínající v tento den nebo dříve.
{ "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 jedné relace včetně zobrazení stránek. Úplná data záznamu jsou záměrně vynechána — pro přehrávání použijte přehrávač v dashboardu.

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

Vlastní události spuštěné během relace (stejné, jaké odesíláte pomocí mp('event', ...)), včetně parametrů.

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

Vypíše segmenty návštěvníků definované pro projekt, a to jak specifické pro projekt, tak společné pro pracovní prostor.

{ "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. Přiřazení ID zákazníka z backendu

Prohlížeč často neví, kdo ho používá. V B2B produktu se identita určí po přihlášení — ve vašem backendu. V obchodě při potvrzení objednávky. Tento endpoint je určen právě pro tento okamžik.

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 pak zobrazí v seznamu relací, lze podle něj hledat a spustí se webhook session_identified — tak se dostane do CRM.

Dvojí volání se stejným ID je bezpečné. Odpověď obsahuje "changed": false a webhook se neodešle. Opakovaná objednávka nevytvoří druhý potenciální kontakt.
StavKdy
400Chybí pole, user_id má více než 128 znaků nebo obsahuje řídicí znaky. Odmítáme místo zkrácení — tiše zkrácené ID se v CRM s ničím neshoduje a přesto vypadá jako úspěch.
404Relace neexistuje nebo nepatří do vašeho pracovního prostoru. Záměrně stejná odpověď pro oba případy.
403Tarif pracovního prostoru nezahrnuje API.

6. Webhooky: ověření podpisu

Webhooky se nastavují pro každý projekt v části Integrace, kde najdete i tajný klíč pro podepisování. Každé doručení obsahuje tyto hlavičky:

HlavičkaVýznam
X-MousePlayer-EventNázev události, například session_identified
X-MousePlayer-TimestampUnixový čas v sekundách — součást podepsaného textu
X-MousePlayer-Attempt1 při prvním pokusu, vyšší při opakování
X-MousePlayer-Signaturesha256=<hex>

Podpis je HMAC-SHA256 z timestamp + "." + raw body, s tajným podpisovým klíčem vašeho projektu.

// 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');
Podepisujte surové tělo před zpracováním JSON. Opětovná serializace změní pořadí klíčů a bílé znaky a podpis se už nebude shodovat. Odmítejte také vše s časovým razítkem starším než několik minut — právě k tomu razítko slouží.

Doručení a opakování

Neúspěšné doručení se opakuje po 1 min, 5 min, 15 min, 1 h a 6 h, potom se ukončí. Odpovědi 4xx jiné než 408 a 429 se neopakují — znamenají "ne takto", nikoli "ne právě teď". Odpovězte rychle stavem 2xx a práci proveďte později; doručení vyprší po 10 sekundách.

Dostupné události

UdálostSpouští se
session_identifiedKdyž relace poprvé získá ID zákazníka — z prohlížeče nebo API
session_endedJednou při ukončení relace
goal_reachedJednou za relaci, když vlastní událost splní některý cíl. Pouze cíle typu „event“ — cíle založené na URL, době trvání, zobrazeních stránek a trychtýřích se nevyhodnocují. Obsahuje goal_id, goal_name, goal_value a currency.
high_value_sessionKdyž návštěvník v daný den poprvé překročí hodnotový práh tohoto projektu. Práh je odvozen z vašeho vlastního rozdělení skóre (90. percentil za posledních 90 dní), nejde o pevné číslo a existuje až po ohodnocení nejméně 20 návštěvníků. Obsahuje visitor_id, value_score, threshold a relaci daného dne nejvhodnější ke sledování.
funnel_dropoffNa konci relace, která vstoupila do některého trychtýře, ale nedokončila ho. Uvádí krok, kde skončila (dropped_at). Opuštění znamená nepřítomnost události, takže ho lze zjistit až po skončení relace. Relace, které do trychtýře nikdy nevstoupily, nejsou opuštění a událost nespustí.
high_friction_sessionJednou za relaci, když skóre tření poprvé dosáhne prahu (výchozí 60 ze 100). Obsahuje friction_score, signály, které k němu vedly (reasons) a signál, který hranici překročil (trigger).
element_brokenJednou, když sledovaný prvek několik dní nic nenajde v žádném kontrolovaném zobrazení stránky — obvykle po novém spuštění webu. Znovu se spustí až poté, co označení opět nalezne shodu a znovu přestane fungovat. Tato událost nepatří k žádné relaci: session_id a session_url jsou null, link_url místo toho otevře označení a subject_id identifikuje označení — stejně pro každou verzi, takže nový selektor, který znovu selže, se přiřadí k otevřenému incidentu. Obsahuje rule_id, rule_name, selector, page, checked_page_views, window_days a last_matched. Bez dat návštěvníků.
element_recoveredZpráva o obnovení funkce pro element_broken: jakmile označení skutečně znovu najde prvek — příliš málo zobrazení stránek nestačí. Odesílá se jen tehdy, pokud událost element_broken odešla webhookem, a nemá vlastní přepínač: odběr element_broken zahrnuje i tuto zprávu. Stejné subject_id, takže PagerDuty vyřeší incident a Opsgenie zavře upozornění. Navíc obsahuje matched_page_views a checked_page_views .
anomaly_detectedJednou denně, když se včerejšek zřetelně lišil od předchozích 28 dní: výrazně méně nebo více relací, pokles míry splnění cílů, více relací s třením nebo chybami JS. Stejná metrika a směr týden nevytvářejí další upozornění (lze upravit). Tato událost nepatří k žádné relaci: session_id a session_url jsou null, link_url otevře přehled projektu a subject_id identifikuje metriku, směr a den. Obsahuje metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score a čitelné údaje summary a hint. Bez dat návštěvníků. Pro Web Vitals údaj measurements nahrazuje sessions, přičemž page (prázdné pro celý web) a device (desktop nebo mobil) uvádějí místo výskytu; link_url pak otevře kartu Web Vitals.
rage_clickPři zjištění vzteklého kliknutí
error_detectedPři výjimce ve frontendu
ceSpolečný odběr vašich vlastních událostí. Nezahrnuje výše uvedené události — ty mají vlastní přepínače.

7. Chyby & stavové kódy

StavVýznam
200Úspěch.
401Chybějící, nesprávně vytvořený nebo odvolaný klíč API.
404Požadovaný projekt či relace neexistuje nebo nepatří do vašeho pracovního prostoru.
429Překročen limit požadavků — tímto klíčem posíláte více než 60 požadavků za minutu.
403Tarif pracovního prostoru nezahrnuje REST API. Zpráva uvádí požadovaný i aktuální tarif.

8. Poznámky k zabezpečení

  • Klíče pouze pro čtení (mp_ro_) nemohou nic měnit. Zapisující klíče (mp_rw_) mohou jen přiřazovat ID zákazníků; žádný klíč nemůže mazat data ani exportovat surová data záznamu.
  • Každý požadavek je automaticky omezen na vlastní pracovní prostor klíče — nelze předat ID jiného prostoru a prohlížet cizí data.
  • Klíč můžete kdykoli odvolat na /api-keys; odvolání platí okamžitě.
  • S klíčem API zacházejte jako s heslem. Pokud ho omylem commitnete do veřejného repozitáře, ihned ho odvolejte a vytvořte nový.

Omezené stránky událostí (API v1, 14. října 2026)

GET /api/v1/sessions/{session_id}/events standardně vrací nejvýše 100 událostí. Nastavte per_page na celé číslo od 1 do 100. Pokračujte podle pagination.next_cursor tak, že v dalším požadavku předáte cursor beze změny; zachovejte stejnou relaci a pracovní prostor. Události jsou seřazeny podle created_at a event_id. Kurzory jsou podepsané a vázané na danou relaci a pracovní prostor. Celkový počet ani číselné označení stránky se nevrací.

Stávající pole data a mapa params zůstávají dostupné. pagination.returned je skutečný počet vrácených událostí; pagination.has_more označuje další stránku. Po dokončení je next_cursor null. Odpověď je omezena na 524288 bajtů, takže stránka může obsahovat méně událostí než per_page. Na událost se vrací nejvýše 128 řádků parametrů; params_truncated je true, pokud existují další. Jednotlivé textové parametry si zachovávají databázový limit 255 znaků. Zkrácené parametry nejsou přes tento endpoint dostupné. Snížení per_page nezvyšuje limit parametrů.

Neplatná velikost stránky, upravené kurzory a kurzory jiné relace či pracovního prostoru vracejí 400. Příliš velká data jednotlivé události vracejí 413. Stávající kontroly přístupu nadále podle situace vracejí 401, 403, 404 nebo 409.

Limit zůstává 60 ověřených požadavků na klíč API za minutu. Vyčerpání vrátí 429 s Retry-After: 60. Pokud není dostupný Redis nebo omezovač, požadavky vracejí 503 s Retry-After: 5; nikdy se nepřijímají bez limitu. Respektujte Retry-After a přidejte náhodný odstup; neopakujte požadavky ve smyčce bez prodlevy. Selhání databáze událostí také vrací 503. Kurzory nezmrazují snímek: současné vkládání se staršími časovými razítky může vyžadovat nové prohledání.

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 řídicí cesta backendu dostupná jen v Dev pro náhled nativního SDK. V produkci zůstává vypnutá. Klíče Bearer backendu potřebují rozsah čtení pro list/replay a zápisu pro register/grant/delete/disable. Platí další kontroly dostupnosti nativního náhledu. Nikdy nevkládejte trvalé klíče API pracovního prostoru do mobilní aplikace.