Javni API & API ključi

Programski dostop do delovnega prostora — berite projekte, seje, prilagojene dogodke in segmente ter sejam pripnite ID-je strank — zaščiten z API ključi, omejenimi na delovni prostor.

1. Pregled

API MousePlayer omogoča pridobivanje podatkov iz delovnega prostora v lastne nadzorne plošče, podatkovno skladišče ali interna orodja. Razen pripenjanja ID-jev strank sejam (identify, zahteva ključ z obsegom pisanja, glejte Obsegi ključev) je samo za branje: prek API-ja podatkov ni mogoče spreminjati ali brisati.

  • Osnovni URL: https://www.mouseplayer.com/api/v1/
  • Vsi odgovori so JSON.
  • Vsaka zahteva se overi z API ključem in samodejno omeji na njegov delovni prostor — ključ enega delovnega prostora nikoli ne vidi podatkov drugega, niti po pomoti.
  • Celoten posnetek seje (gibanje miške, posnetki stanja DOM) prek API-ja ni dostopen. Dobite metapodatke sej, oglede strani, prilagojene dogodke in segmente — dovolj za poročila in nadzorne plošče brez prenašanja neobdelanih podatkov za predvajanje.

2. Preverjanje pristnosti

API ključe ustvarite in upravljate pod API ključi v meniju računa (/api-keys). Samo lastniki in administratorji delovnega prostora lahko ustvarjajo ali preklicujejo ključe.

Ključ naj ostane skrivnost. Omogoča branje vsega v delovnem prostoru. Celoten ključ se pokaže natanko enkrat, takoj po ustvarjanju — shranite ga v upravljalnik gesel ali varno shrambo skrivnosti. Če ga izgubite, ga prekličite in ustvarite novega.

Ključ pošljite kot žeton Bearer v glavi Authorization vsake zahteve:

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

Manjkajoči, napačno oblikovani ali preklicani ključi prejmejo odgovor 401:

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

Zahtevani paket

REST API je del paketov Business in Enterprise. Paket se določi po lastniku delovnega prostora, zato ga povabljeni člani ekipe podedujejo. Preverjanje se izvede pri vsaki zahtevi, ne le ob ustvarjanju ključa — pri prehodu delovnega prostora na nižji paket obstoječi ključi prenehajo delovati in vrnejo 403.

Obsegi ključev

Vsak ključ ima obseg v lastni predponi, zato že po videzu veste, kaj omogoča — v .env, zahtevku ali terminalu.

PredponaPomen
mp_ro_Samo branje. Bere projekte, seje, dogodke in segmente. Ničesar ne more spremeniti.
mp_rw_Branje in pisanje. Vse zgoraj ter pripenjanje ID-jev strank prek končne točke identify.
Obseg izberete pri ustvarjanju ključa; privzeto je samo branje. Uporaba takega ključa na končni točki za pisanje vrne 403 s sporočilom o vrsti ključa in zahtevi končne točke. Obsega pozneje ni mogoče spremeniti — ustvarite nov ključ in prekličite starega.

3. Omejitve pogostosti

Vsak API ključ je omejen na 60 zahtev na minuto, spremljanih v drsečem časovnem oknu. Ko omejitev presežete, zahteve do sprostitve okna prejmejo odgovor 429:

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

Razvijate nekaj, kar potrebuje višjo omejitev? Obrnite se na podporo in opišite primer uporabe.

4. Končne točke

GET/api/v1/projects

Navede vse projekte (sledena spletna mesta) v delovnem 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

Navede posnete seje obiskovalcev projekta, najnovejše najprej. S straničenjem.

Parameter poizvedbeOpis
pageŠtevilka strani, privzeto 1.
per_pageRezultati na stran, privzeto 25, največ 100.
sinceSamo seje z začetkom na ta datum ali pozneje (YYYY-MM-DD).
untilSamo seje z začetkom na ta datum ali prej.
{ "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}

Metapodatki posamezne seje in njeni ogledi strani. Namenoma brez celotnih podatkov za predvajanje — uporabite predvajalnik nadzorne plošče.

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

Prilagojeni dogodki seje (isti dogodki, ki jih pošiljate z mp('event', ...)), vključno s parametri.

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

Navede segmente obiskovalcev projekta (projektne in za celoten delovni 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. Pripenjanje ID-ja stranke iz zaledja

Brskalnik pogosto ne ve, kdo je na drugi strani. V izdelku B2B se identiteta določi po prijavi — v vašem zaledju. V trgovini se določi s potrditvijo naročila. Ta končna točka je za natanko ta trenutek.

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 nato prikaže na seznamu sej, kjer ga je mogoče iskati, sproži pa se tudi Webhook session_identified — tako prispe v vaš CRM.

Ponovni klic z istim ID-jem je varen. Odgovor vsebuje "changed": false in Webhook se ne pošlje. Ponovljeno naročilo ne ustvari druge potencialne stranke.
StanjeKdaj
400Manjkajoče polje, user_id z več kot 128 znaki ali kontrolnimi znaki. Zavrnemo namesto krajšanja — tiho skrajšan ID se v CRM-ju ne ujema z ničimer, pa je vseeno videti kot uspeh.
404Seja ne obstaja ali ne pripada vašemu delovnemu prostoru. Namenoma isti odgovor za oboje.
403Paket delovnega prostora ne vključuje API-ja.

6. Webhooks: preverjanje podpisa

Webhooks nastavite za vsak projekt pod Integracije, kjer najdete tudi skrivnost za podpisovanje. Vsaka dostava vsebuje naslednje glave:

GlavaPomen
X-MousePlayer-EventIme dogodka, npr. session_identified
X-MousePlayer-TimestampUnix sekunde — del podpisanega besedila
X-MousePlayer-Attempt1 ob prvem poskusu, višje pri ponovnih poskusih
X-MousePlayer-Signaturesha256=<hex>

Podpis je HMAC-SHA256 nad timestamp + "." + raw body, s skrivnostjo za podpisovanje vašega projekta.

// 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');
Podpišite neobdelano telo pred kakršnim koli razčlenjevanjem JSON. Ponovna serializacija spremeni vrstni red ključev in presledke, zato se podpis ne bo ujemal. Zavrnite tudi časovne oznake, starejše od nekaj minut — temu so namenjene.

Dostava in ponovni poskusi

Neuspešna dostava se ponovi po 1 min, 5 min, 15 min, 1 h in 6 h, nato se opusti. 4xx odgovori razen 408 in 429 se ne ponavljajo — pomenijo "ne tako", ne "ne zdaj". Hitro odgovorite z 2xx in delo opravite pozneje; časovna omejitev dostave je 10 sekund.

Razpoložljivi dogodki

DogodekSproži se
session_identifiedKo seja prvič dobi ID stranke — iz brskalnika ali API-ja
session_endedEnkrat ob zaključku seje
goal_reachedEnkrat na sejo, ko prilagojeni dogodek izpolni vaš cilj. Samo cilji vrste „dogodek“ — cilji URL-ja, trajanja, ogledov strani in lijaka se ne vrednotijo. Vsebuje goal_id, goal_name, goal_value in currency.
high_value_sessionKo obiskovalec na določen dan prvič preseže prag vrednosti projekta. Prag izhaja iz porazdelitve vaših ocen (90. percentil zadnjih 90 dni), ni fiksna številka in ne obstaja, dokler ni ocenjenih vsaj 20 obiskovalcev. Vsebuje visitor_id, value_score, threshold in sejo tega dne, najvrednejšo ogleda.
funnel_dropoffOb koncu seje, ki je vstopila v vaš lijak, vendar ga ni dokončala. Navede korak, pri katerem se je ustavila (dropped_at). Odhod je odsotnost dogodka, zato ga je mogoče ugotoviti šele po koncu seje. Seje, ki nikoli niso vstopile v lijak, niso odhodi in ga ne sprožijo.
high_friction_sessionEnkrat na sejo, ko ocena trenja prvič doseže prag (privzeto 60 od 100). Vsebuje friction_score, signale, na katerih temelji (reasons), in signal, ki je presegel mejo (trigger).
element_brokenEnkrat, ko spremljani element več dni ni našel ničesar v nobenem preverjenem ogledu strani — običajno po prenovi. Ponovno se sproži šele po vnovičnem ujemanju in ponovni odpovedi oznake. Ta dogodek ne pripada nobeni seji: session_id in session_url sta null, link_url namesto tega odpre oznako, polje subject_id pa poimenuje oznako — enako za vse različice, zato se novi selektor, ki znova odpove, pridruži odprtemu incidentu. Vsebuje rule_id, rule_name, selector, page, checked_page_views, window_days in last_matched. Brez podatkov obiskovalcev.
element_recoveredSporočilo o odpravi težave za element_broken: ko oznaka dejansko znova najde element — premalo ogledov strani ne zadostuje. Pošlje se samo, če je bil prek Webhook poslan element_broken, in nima lastnega stikala: naročnina na element_broken ga vključuje. Isti subject_id, zato PagerDuty razreši incident, Opsgenie pa zapre opozorilo. Dodatno vsebuje matched_page_views in checked_page_views.
anomaly_detectedEnkrat na dan, ko se je včerajšnji dan izrazito razlikoval od prejšnjih 28 dni: precej manj ali več sej, nižji delež doseženih ciljev, več sej s trenjem ali napakami JS. Ista metrika in smer ostaneta tihi en teden (nastavljivo). Ta dogodek ne pripada nobeni seji: session_id in session_url sta null, link_url odpre pregled projekta, polje subject_id pa poimenuje metriko, smer in dan. Vsebuje metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score in berljivo summary ter hint. Brez podatkov obiskovalcev. Pri Web Vitals polje measurements nadomesti sessions, polji page (prazno za celotno spletno mesto) in device (desktop ali mobil) pa povesta, kje se je zgodilo; link_url nato odpre zavihek Web Vitals.
rage_clickOb zaznanem besnem kliku
error_detectedOb izjemi v uporabniškem delu aplikacije
ceSkupna naročnina za vaše prilagojene dogodke. Zgornjih dogodkov ne vključuje — ti imajo lastna stikala.

7. Napake & kode stanja

StanjePomen
200Uspeh.
401Manjkajoč, napačno oblikovan ali preklican API ključ.
404Zahtevani projekt ali seja ne obstaja ali ne pripada vašemu delovnemu prostoru.
429Omejitev pogostosti presežena — s tem ključem pošiljate več kot 60 zahtev na minuto.
403Paket delovnega prostora ne vključuje REST API-ja. Sporočilo navede zahtevani in trenutni paket.

8. Varnostne opombe

  • Ključi samo za branje (mp_ro_) ne morejo ničesar spremeniti. Ključi za pisanje (mp_rw_) lahko samo pripenjajo ID-je strank; noben ključ ne more brisati podatkov ali izvažati neobdelanih posnetkov.
  • Vsaka zahteva je samodejno omejena na delovni prostor ključa — ni mogoče posredovati ID-ja drugega delovnega prostora in videti tujih podatkov.
  • Ključ kadar koli prekličite pod /api-keys; preklic začne veljati takoj.
  • API ključ obravnavajte kot geslo. Če ga pomotoma objavite v javnem repozitoriju, ga takoj prekličite in ustvarite novega.

Omejene strani dogodkov (API v1, 14. oktober 2026)

GET /api/v1/sessions/{session_id}/events privzeto vrne največ 100 dogodkov. Nastavite per_page na celo število od 1 do 100. Sledite pagination.next_cursor tako, da cursor nespremenjen pošljete v naslednji zahtevi; ohranite isto sejo in delovni prostor. Dogodki so urejeni po created_at in event_id. Kazalci so podpisani in vezani na sejo ter delovni prostor. Skupno število ali številska stran se ne vračata.

Obstoječe polje data in preslikava params ostaneta na voljo. pagination.returned je dejansko vrnjeno število; pagination.has_more označuje naslednjo stran. next_cursor je ob zaključku null. Odgovor je omejen na 524288 bajtov, zato stran lahko vsebuje manj dogodkov kot per_page. Na dogodek se vrne največ 128 vrstic parametrov; params_truncated je true, če jih je več. Posamezni besedilni parametri ohranijo omejitev zbirke podatkov na 255 znakov. Odrezani parametri prek te končne točke niso na voljo. Zmanjšanje per_page ne zviša omejitve parametrov.

Neveljavne velikosti strani, spremenjeni kazalci in kazalci druge seje ali delovnega prostora vrnejo 400. Preveliki podatki posameznega dogodka vrnejo 413. Obstoječa preverjanja dostopa še vedno ustrezno vrnejo 401, 403, 404 ali 409.

Omejitev ostaja 60 overjenih zahtev na API ključ na minuto. Izčrpanje vrne 429 z Retry-After: 60. Če Redis ali omejevalnik ni na voljo, zahteve vrnejo 503 z Retry-After: 5; nikoli niso sprejete brez omejitve. Upoštevajte Retry-After in dodajte naključni zamik; ne ponavljajte v tesni zanki. Tudi napake zbirke dogodkov vrnejo 503. Kazalci ne zamrznejo posnetka stanja: sočasni vnosi s starejšimi časovnimi oznakami lahko zahtevajo nov pregled.

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 krmilna pot zaledja samo na Dev za predogled izvornega SDK-ja. V produkciji ostaja onemogočena. Ključi Bearer zaledja potrebujejo obseg branja za list/replay in pisanja za register/grant/delete/disable. Veljajo dodatna preverjanja razpoložljivosti izvornega predogleda. Trajnih API ključev delovnega prostora nikoli ne vdelajte v mobilno aplikacijo.