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:
Chybějící, nesprávně vytvořené nebo odvolané klíče dostanou odpověď 401 :
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ředpona | Vý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. |
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:
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.
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 dotazu | Popis |
|---|---|
page | Číslo stránky, výchozí 1. |
per_page | Výsledků na stránku, výchozí 25, maximum 100. |
since | Pouze relace začínající v tento den nebo později (YYYY-MM-DD). |
until | Pouze relace začínající v tento den nebo dříve. |
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.
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ů.
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.
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.
"changed": false a webhook se neodešle. Opakovaná objednávka nevytvoří druhý potenciální kontakt.| Stav | Kdy |
|---|---|
400 | Chybí 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. |
404 | Relace neexistuje nebo nepatří do vašeho pracovního prostoru. Záměrně stejná odpověď pro oba případy. |
403 | Tarif 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čka | Význam |
|---|---|
X-MousePlayer-Event | Název události, například session_identified |
X-MousePlayer-Timestamp | Unixový čas v sekundách — součást podepsaného textu |
X-MousePlayer-Attempt | 1 při prvním pokusu, vyšší při opakování |
X-MousePlayer-Signature | sha256=<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');
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álost | Spouští se |
|---|---|
session_identified | Když relace poprvé získá ID zákazníka — z prohlížeče nebo API |
session_ended | Jednou při ukončení relace |
goal_reached | Jednou 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_session | Když 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_dropoff | Na 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_session | Jednou 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_broken | Jednou, 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_recovered | Zprá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_detected | Jednou 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_click | Při zjištění vzteklého kliknutí |
error_detected | Při výjimce ve frontendu |
ce | Společ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
| Stav | Význam |
|---|---|
200 | Úspěch. |
401 | Chybějící, nesprávně vytvořený nebo odvolaný klíč API. |
404 | Požadovaný projekt či relace neexistuje nebo nepatří do vašeho pracovního prostoru. |
429 | Překročen limit požadavků — tímto klíčem posíláte více než 60 požadavků za minutu. |
403 | Tarif 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.