Verejné API & API kľúče

Programový prístup k pracovnému priestoru — čítanie projektov, relácií, vlastných udalostí a segmentov a pripájanie ID zákazníkov k reláciám — chránený API kľúčmi s rozsahom pracovného priestoru.

1. Prehľad

API MousePlayer umožňuje získavať údaje z pracovného priestoru do vlastných prehľadov, dátového skladu či interných nástrojov. Okrem pripájania ID zákazníkov k reláciám (identify, vyžaduje kľúč s právom zápisu, pozrite Rozsahy kľúčov) je určené iba na čítanie: cez API nemožno údaje upravovať ani vymazávať.

  • Základná URL: https://www.mouseplayer.com/api/v1/
  • Všetky odpovede sú vo formáte JSON.
  • Každá požiadavka sa overuje API kľúčom a automaticky obmedzuje na pracovný priestor, ku ktorému kľúč patrí — kľúč jedného pracovného priestoru nikdy neuvidí údaje iného, ani náhodou.
  • Úplný záznam prehrávania relácie (pohyby myši, snímky DOM) nie je sprístupnený cez API. Dostanete metadáta relácií, zobrazenia stránok, vlastné udalosti a segmenty — dosť na tvorbu správ a prehľadov bez prenášania surových dátových balíkov prehrávania.

2. Overovanie

API kľúče vytvárate a spravujete v časti API kľúče v ponuke účtu (/api-keys). Kľúče môžu vytvárať a odvolávať iba vlastníci a administrátori pracovného priestoru.

Uchovávajte kľúč v tajnosti. Udeľuje prístup na čítanie všetkého v pracovnom priestore. Úplný kľúč sa zobrazí presne raz, hneď po vytvorení — uložte ho do správcu hesiel alebo trezoru tajných údajov. Pri strate ho odvolajte a vytvorte nový.

Kľúč posielajte ako token Bearer v hlavičke Authorization každej požiadavky:

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

Chýbajúce, nesprávne formátované alebo odvolané kľúče dostanú odpoveď 401:

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

Požiadavka na program

REST API je súčasťou programov Business a Enterprise. Program sa preberá od vlastníka pracovného priestoru, takže ho zdedia aj pozvaní členovia tímu. Kontrola prebieha pri každej požiadavke, nielen pri vytvorení kľúča — pri prechode pracovného priestoru na nižší program prestanú existujúce kľúče fungovať a vracajú 403.

Rozsahy kľúčov

Každý kľúč nesie svoj rozsah vo vlastnej predpone, takže jeho účel poznáte pohľadom — v .env, v požiadavke podpory či v termináli.

PredponaVýznam
mp_ro_Iba čítanie. Číta projekty, relácie, udalosti a segmenty. Nemôže nič meniť.
mp_rw_Čítanie a zápis. Všetko uvedené vyššie a navyše pripájanie ID zákazníkov cez koncový bod identify.
Rozsah vyberáte pri vytvorení kľúča; predvolené je iba čítanie. Použitie kľúča iba na čítanie na koncovom bode zápisu vráti 403 s hlásením uvádzajúcim rozsah kľúča a požiadavky koncového bodu. Rozsah nemožno neskôr zmeniť — vytvorte nový kľúč a odvolajte starý.

3. Limity požiadaviek

Každý API kľúč je obmedzený na 60 požiadaviek za minútu, sledovaných v priebežnom časovom okne. Po prekročení dostávajú požiadavky odpoveď 429 až do uvoľnenia okna:

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

Vytvárate niečo, čo potrebuje vyšší limit? Ozvite sa cez Podporu a opíšte svoj prípad použitia.

4. Koncové body

GET/api/v1/projects

Vypíše všetky projekty (sledované weby) v pracovnom priestore.

{ "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 relácie návštevníkov zaznamenané pre projekt, od najnovších. Stránkované.

Parameter požiadavkyOpis
pageČíslo stránky, predvolene 1.
per_pageVýsledkov na stránku, predvolene 25, najviac 100.
sinceIba relácie začínajúce v tento deň alebo neskôr (YYYY-MM-DD).
untilIba relácie začínajúce v tento deň alebo skôr.
{ "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}

Metadáta jednej relácie a jej zobrazenia stránok. Úplný dátový balík prehrávania je zámerne vynechaný — naň použite prehrávač v prehľade.

{ "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é udalosti spustené počas relácie (tie isté udalosti, ktoré posielate cez mp('event', ...)) vrátane ich parametrov.

{ "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števníkov definované pre projekt (projektové aj pre celý pracovný priestor).

{ "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. Pripojenie ID zákazníka zo serverového systému

Prehliadač často nevie, kto pri ňom sedí. V produkte B2B sa identita určí po prihlásení — vo vašom serverovom systéme. V obchode pri potvrdení objednávky. Tento koncový bod je určený presne na tento okamih.

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 sa potom zobrazí v zozname relácií, možno ho tam vyhľadať a spustí sa webhook session_identified — takto sa dostane do vášho CRM.

Dvojité volanie s rovnakým ID je bezpečné. Odpoveď sa vráti s "changed": false a žiadny webhook sa neodošle. Opakovaná objednávka nevytvorí druhý kontakt.
StavKedy
400Chýbajúce pole, user_id s viac než 128 znakmi alebo riadiacimi znakmi. Odmietame namiesto skracovania — potichu skrátené ID sa v CRM s ničím nezhoduje a stále vyzerá ako úspech.
404Relácia neexistuje alebo nepatrí do vášho pracovného priestoru. Zámerne rovnaká odpoveď pre oba prípady.
403Program pracovného priestoru nezahŕňa API.

6. Webhooky: Overenie podpisu

Webhooky sa konfigurujú za projekt v časti Integrácie, kde nájdete aj tajný podpisový kľúč. Každé doručenie obsahuje tieto hlavičky:

HlavičkaVýznam
X-MousePlayer-EventNázov udalosti, napr. session_identified
X-MousePlayer-TimestampUnixový čas v sekundách — súčasť podpisovaného textu
X-MousePlayer-Attempt1 pri prvom pokuse, viac pri opakovaných pokusoch
X-MousePlayer-Signaturesha256=<hex>

Podpis je HMAC-SHA256 nad timestamp + "." + raw bodys tajným podpisovým kľúčom vášho 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');
Podpisujte surové telo pred akýmkoľvek spracovaním JSON. Opätovná serializácia mení poradie kľúčov a biele znaky a podpis sa nikdy nezhodne. Odmietajte aj všetko s časovou pečiatkou staršou než niekoľko minút — práve na to časová pečiatka slúži.

Doručovanie a opakované pokusy

Neúspešné doručenie sa opakuje po 1 min, 5 min, 15 min, 1 h a 6 h, potom sa ukončí. 4xx odpovede iné než 408 a 429 sa neopakujú — hovoria "nie takto", nie "nie teraz". Odpovedzte 2xx rýchlo a prácu vykonajte neskôr; časový limit doručenia je 10 sekúnd.

Dostupné udalosti

UdalosťSpúšťa sa
session_identifiedKeď relácia prvýkrát dostane ID zákazníka — z prehliadača alebo API
session_endedRaz pri zatvorení relácie
goal_reachedRaz za reláciu, keď vlastná udalosť splní niektorý z vašich cieľov. Iba ciele typu „event“ — ciele URL, trvania, zobrazení stránok a lievikov sa nevyhodnocujú. Obsahuje goal_id, goal_name, goal_value a currency.
high_value_sessionKeď návštevník prvýkrát v daný deň prekročí prah hodnoty tohto projektu. Prah je odvodený z vášho vlastného rozloženia skóre (90. percentil posledných 90 dní), nie pevné číslo, a neexistuje, kým nie je ohodnotených aspoň 20 návštevníkov. Obsahuje visitor_id, value_score, threshold a najvhodnejšiu reláciu daného dňa na sledovanie.
funnel_dropoffNa konci relácie, ktorá vstúpila do niektorého z lievikov, no nedokončila ho. Uvádza krok, pri ktorom sa zastavila (dropped_at). Odchod je neprítomnosť udalosti, preto ho možno zistiť až po skončení relácie. Relácie, ktoré do lievika nikdy nevstúpili, nie sú odchody a udalosť nespúšťajú.
high_friction_sessionRaz za reláciu, keď jej skóre trenia prvýkrát dosiahne prah (predvolene 60 zo 100). Obsahuje friction_score, signály za týmto skóre (reasons) a signál, ktorý prekročil hranicu (trigger).
element_brokenRaz, keď sledovaný prvok niekoľko dní nenašiel nič v žiadnom kontrolovanom zobrazení stránky — zvyčajne po novom spustení webu. Znovu sa spustí iba po tom, čo označenie opäť nájde zhodu a znovu sa pokazí. Táto udalosť nepatrí k žiadnej relácii: session_id a session_url sú null, link_url namiesto toho otvorí označenie a subject_id pomenuje označenie — rovnako pre každú verziu, takže nový selektor, ktorý sa opäť pokazí, sa pripojí k otvorenému incidentu. Obsahuje rule_id, rule_name, selector, page, checked_page_views, window_days a last_matched. Bez údajov návštevníkov.
element_recoveredHlásenie obnovenia pre element_broken: keď označenie skutočne znovu nájde prvok — príliš málo zobrazení stránok nestačí. Odošle sa iba vtedy, ak element_broken odišlo cez webhook, a nemá vlastný prepínač: prihlásenie na element_broken ho zahŕňa. Rovnaké subject_id, takže PagerDuty vyrieši incident a Opsgenie zatvorí upozornenie. Navyše obsahuje matched_page_views a checked_page_views.
anomaly_detectedRaz denne, keď sa včerajšok jasne líšil od predchádzajúcich 28 dní: oveľa menej alebo viac relácií, pokles miery dosiahnutia cieľa, viac relácií s trením alebo chybami JS. Rovnaká metrika a smer zostávajú týždeň bez ďalšieho hlásenia (nastaviteľné). Táto udalosť nepatrí k žiadnej relácii: session_id a session_url sú null, link_url otvorí prehľad projektu a subject_id pomenuje metriku, smer a deň. 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 čitateľné summary a hint. Bez údajov návštevníkov. Pri Web Vitals measurements nahrádza sessions a page (prázdne pre celý web) a device (desktop alebo mobil) uvádzajú, kde sa to stalo; link_url potom otvorí kartu Web Vitals.
rage_clickPri rozpoznanom zúrivom kliknutí
error_detectedPri výnimke na strane klienta
ceSpoločné prihlásenie na vaše vlastné udalosti. Nezahŕňa vyššie uvedené udalosti — tie majú vlastné prepínače.

7. Chyby & stavové kódy

StavVýznam
200Úspech.
401Chýbajúci, nesprávne formátovaný alebo odvolaný API kľúč.
404Požadovaný projekt či relácia neexistuje alebo nepatrí do vášho pracovného priestoru.
429Prekročený limit požiadaviek — s týmto kľúčom posielate viac než 60 požiadaviek za minútu.
403Program pracovného priestoru nezahŕňa REST API. Hlásenie uvádza požadovaný aj aktuálny program.

8. Bezpečnostné poznámky

  • Kľúče iba na čítanie (mp_ro_) nemôžu nič meniť. Kľúče zápisu (mp_rw_) môžu iba pripájať ID zákazníkov; žiadny kľúč nemôže vymazávať údaje ani exportovať surové údaje prehrávania.
  • Každá požiadavka sa automaticky obmedzuje na vlastný pracovný priestor kľúča — nemožno odovzdať ID iného pracovného priestoru a vidieť cudzie údaje.
  • Kľúč môžete kedykoľvek odvolať na /api-keys; odvolanie sa prejaví okamžite.
  • S API kľúčom zaobchádzajte ako s heslom. Ak ho omylom commitnete do verejného repozitára, okamžite ho odvolajte a vytvorte nový.

Obmedzené stránky udalostí (API v1, 14. októbra 2026)

GET /api/v1/sessions/{session_id}/events predvolene vracia najviac 100 udalostí. Nastavte per_page na celé číslo od 1 do 100. Pokračujte podľa pagination.next_cursor odoslaním nezmeneného cursor v ďalšej požiadavke; zachovajte rovnakú reláciu a pracovný priestor. Udalosti sú zoradené podľa created_at a event_id. Kurzory sú podpísané a viazané na danú reláciu a pracovný priestor. Celkový počet ani číselná stránka sa nevracajú.

Existujúce pole data a mapa params zostávajú dostupné. pagination.returned je skutočný počet vrátených položiek; pagination.has_more označuje ďalšiu stránku. next_cursor je po dokončení null. Odpoveď je obmedzená na 524288 bajtov, preto môže stránka obsahovať menej udalostí než per_page. Za udalosť sa vracia najviac 128 riadkov parametrov; params_truncated je true, ak existujú ďalšie. Jednotlivé textové parametre zachovávajú databázový limit 255 znakov. Skrátené parametre nie sú cez tento koncový bod dostupné. Zníženie per_page nezvyšuje limit parametrov.

Neplatné veľkosti stránok, pozmenené kurzory a kurzory pre inú reláciu alebo pracovný priestor vracajú 400. Nadmerne veľké údaje jednej udalosti vracajú 413. Existujúce kontroly prístupu naďalej podľa okolností vracajú 401, 403, 404 alebo 409.

Limit zostáva 60 overených požiadaviek na API kľúč za minútu. Vyčerpanie vracia 429 s Retry-After: 60. Ak Redis alebo obmedzovač nie je dostupný, požiadavky vracajú 503 s Retry-After: 5; nikdy sa nepovolia bez limitu. Rešpektujte Retry-After a pridajte náhodné oneskorenie; neopakujte pokusy v tesnej slučke. Aj zlyhania databázy udalostí vracajú 503. Kurzory nezmrazujú snímku: súbežné vloženia so staršími časovými pečiatkami môžu vyžadovať nové prehľadanie.

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 riadiaca serverová cesta iba pre Dev, určená náhľadu natívneho SDK. V produkcii zostáva vypnutá. Serverové kľúče Bearer potrebujú rozsah čítania pre list/replay a zápisu pre register/grant/delete/disable. Platia ďalšie kontroly dostupnosti natívneho náhľadu. Trvalé API kľúče pracovného priestoru nikdy nevkladajte do mobilnej aplikácie.