API publikoa & API gakoak

Zure lan-eremurako sarbide programatikoa — irakurri proiektuak, saioak, gertaera pertsonalizatuak eta segmentuak, eta erantsi bezero-IDak saioei — lan-eremuari mugatutako API gakoekin babestuta.

1. Ikuspegi orokorra

MousePlayer APIak zure lan-eremuko datuak zure aginte-paneletara, datu-biltegira edo barne-tresnetara ateratzen uzten dizu. Saioei bezero-IDak eransteaz gain (identify, idazteko esparruko gakoa behar du; ikus Gakoen esparruak), sarbidea irakurtzeko soilik da: ezin da daturik aldatu edo ezabatu APIaren bidez.

  • Oinarrizko URLa: https://www.mouseplayer.com/api/v1/
  • Erantzun guztiak JSON dira.
  • Eskaera bakoitza API gakoarekin autentifikatzen da eta automatikoki mugatzen da gakoari dagokion lan-eremura — lan-eremu bateko gakoak ezin ditu inoiz beste lan-eremu baten datuak ikusi, ezta ustekabean ere.
  • Saioaren erreprodukzio-grabazio osoa (saguaren mugimenduak, DOM kapturak) ez da APIaren bidez eskaintzen. Saioen metadatuak, orri-ikustaldiak, gertaera pertsonalizatuak eta segmentuak jasotzen dituzu — nahikoa txostenak eta aginte-panelak eraikitzeko, erreprodukzioaren karga gordina alde batetik bestera eraman gabe.

2. Autentifikazioa

Sortu eta kudeatu zure API gakoak hemen: API gakoak zure kontuaren menuan (/api-keys). Lan-eremuaren jabeek eta administratzaileek soilik sor edo baliogabetu ditzakete gakoak.

Mantendu zure gakoa ezkutuan. Zure lan-eremuko guztia irakurtzeko sarbidea ematen du. Gako osoa behin zehazki erakusten da, sortu eta berehala — gorde pasahitz-kudeatzaile edo sekretu-biltegi batean. Galtzen baduzu, baliogabetu eta sortu berria.

Bidali gakoa Bearer token gisa eskaera bakoitzaren Authorization goiburuan:

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

Falta diren, gaizki osatutako edo baliogabetutako gakoek honako hau jasotzen dute: 401 erantzuna:

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

Planaren eskakizuna

REST APIa bi mailatan sartzen da: Business eta Enterprise planetan. Plana lan-eremuaren jabearengandik hartzen da; beraz, gonbidatutako taldekideek heredatzen dute. Egiaztapena eskaera guztietan egiten da, ez gakoa sortzean soilik — lan-eremua maila txikiagora aldatzen bada, lehendik dauden gakoek funtzionatzeari uzten diote eta honako hau itzultzen dute: 403.

Gakoen esparruak

Gako bakoitzak bere esparrua aurrizkian darama; beraz, begiratuta bakarrik jakin dezakezu zer egiten duen — honako honetan: .env, eskaera batean edo terminal batean.

AurrizkiaEsanahia
mp_ro_Irakurtzeko soilik. Proiektuak, saioak, gertaerak eta segmentuak irakurtzen ditu. Ezin du ezer aldatu.
mp_rw_Irakurtzeko eta idazteko. Aurreko guztia, eta bezero-IDak eranstea identifikazio-muturraren bidez.
Hautatu esparrua gakoa sortzean; lehenetsia irakurtzeko soilik da. Irakurtzeko gakoa idazteko muturrean erabiltzeak honako hau itzultzen du: 403 gakoa nolakoa den eta muturrak zer behar duen izendatzen duen mezuarekin. Esparrua ezin da gero aldatu — sortu gako berria eta baliogabetu zaharra.

3. Eskaera-mugak

API gako bakoitzak honako muga du: 60 eskaera minutuko, leiho mugikor batean zenbatuta. Gainditzean, eskaerek honako hau jasotzen dute: 429 erantzuna, leihoa libratu arte:

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

Muga handiagoa behar duen zerbait eraikitzen ari zara? Jarri gurekin harremanetan Laguntza bidez eta azaldu zure erabilera-kasua.

4. Muturrak

GET/api/v1/projects

Zure lan-eremuko proiektu guztiak (jarraitutako propietateak) zerrendatzen ditu.

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

Proiektu baterako grabatutako bisitari-saioak zerrendatzen ditu, berrienak lehenik. Orrikatuta.

Kontsulta-parametroaDeskribapena
pageOrri-zenbakia, lehenetsia: 1.
per_pageEmaitzak orriko, lehenetsia: 25, gehienez 100.
sinceData honetan edo ondoren hasten diren saioak soilik (YYYY-MM-DD).
untilData honetan edo aurretik hasten diren saioak soilik.
{ "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}

Saio bakar baten metadatuak eta haren orri-ikustaldiak. Erreprodukzioaren karga osoa nahita kanpoan uzten du — erabili aginte-paneleko erreproduzitzailea horretarako.

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

Saioan abiarazitako gertaera pertsonalizatuak (honako honekin bidaltzen dituzun gertaera berak: mp('event', ...)), beren parametroak barne.

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

Proiektu baterako definitutako bisitari-segmentuak zerrendatzen ditu, proiektuarenak nahiz lan-eremu osokoak.

{ "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. Zure backend-etik bezero-IDa eranstea

Nabigatzaileak askotan ez daki nor dagoen bertan. B2B produktu batean identitatea saioa hasi ondoren zehazten da — zure backend-ean. Denda batean eskaeraren berrespenarekin zehazten da. Mutur hau une horretarako da hain zuzen.

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}}

IDa saio-zerrendan agertzen da orduan, han bila daiteke, eta session_identified webhooka abiarazten da — horrela iristen da zure CRMra.

ID berarekin bi aldiz deitzea segurua da. Erantzunak honako hau dakar: "changed": false eta ez da webhookik bidaltzen. Eskaera errepikatuak ez du bigarren bezero potentzialik sortzen.
EgoeraNoiz
400Eremua falta da, user_id 128 karaktere baino gehiago ditu edo kontrol-karaktereak ditu. Moztu beharrean baztertzen dugu — isilean laburtutako IDa ez dator bat zure CRMko ezerrekin eta hala ere arrakasta dirudi.
404Saioa ez da existitzen edo ez da zure lan-eremukoa. Nahita erantzun bera bietarako.
403Lan-eremuaren planak ez du APIa barne.

6. Webhookak: sinadura egiaztatzea

Webhookak proiektuka konfiguratzen dira hemen: Integrazioak, eta sinadura-sekretua ere hor aurkituko duzu. Bidalketa bakoitzak goiburu hauek daramatza:

GoiburuaEsanahia
X-MousePlayer-EventGertaeraren izena, adib. session_identified
X-MousePlayer-TimestampUnix segundoak — sinatutako testuaren parte
X-MousePlayer-Attempt1 lehen saiakeran, handiagoa berriz saiatzean
X-MousePlayer-Signaturesha256=<hex>

Sinadura HMAC-SHA256 bat da honako honen gainean: timestamp + "." + raw body, zure proiektuaren sinadura-sekretua gakotzat erabiliz.

// 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');
Sinatu gorputz gordinaren gainean, JSON parseatu aurretik. Berriz serializatzeak gakoen ordena eta zuriuneak aldatzen ditu, eta sinadura ez da inoiz bat etorriko. Baztertu, gainera, minutu gutxi batzuk baino zaharragoa den denbora-marka duen edozer — horretarako da denbora-marka.

Bidalketa eta berriz saiatzea

Huts egindako bidalketa berriro saiatzen da epe hauen ondoren: 1 min, 5 min, 15 min, 1 h eta 6 h, eta gero etsi egiten da. Honako kodeko 4xx erantzunak — honako hauek izan ezik: 408 eta 429 — ez dira berriro saiatzen — "ez horrela" diote, ez "ez orain". Erantzun 2xx azkar eta egin lana ondoren; bidalketak 10 segundoren buruan gainditzen du denbora-muga.

Gertaera erabilgarriak

GertaeraNoiz abiarazten den
session_identifiedSaio batek lehen aldiz bezero-IDa jasotzen duenean — nabigatzailetik edo APItik
session_endedBehin, saioa ixten denean
goal_reachedBehin saio bakoitzeko, gertaera pertsonalizatu batek zure helburuetako bat betetzen duenean. «event» motako helburuak soilik — URL, iraupen, orri-ikustaldi eta inbutu helburuak ez dira ebaluatzen. Honako hauek daramatza: goal_id, goal_name, goal_value eta currency.
high_value_sessionBisitariak egun jakin batean proiektu honen balio-atalasea lehen aldiz gainditzen duenean. Atalasea zure puntuazio-banaketatik eratortzen da (azken 90 egunetako 90. pertzentila), ez zenbaki finko batetik, eta ez da existitzen gutxienez 20 bisitariri puntuazioa eman arte. Honako hauek daramatza: visitor_id, value_score, threshold eta egun horretako saiorik ikusgarriena.
funnel_dropoffZure inbutuetako batean sartu baina amaitu ez duen saioaren amaieran. Gelditu den urratsa izendatzen du (dropped_at). Uztea gertaera baten absentzia da; beraz, saioa amaitutakoan soilik jakin daiteke. Inbutuan inoiz sartu ez diren saioak ez dira uzteak eta ez dute abiarazten.
high_friction_sessionBehin saio bakoitzeko, marruskadura-puntuazioa lehen aldiz atalase batera iristen denean (lehenetsia: 60 / 100). Honako hau darama: friction_score, haren atzean dauden seinaleak (reasons) eta muga gainditu duen seinalea (trigger).
element_brokenBehin, jarraitutako elementuak hainbat egunez egiaztatutako orri-ikustaldi bakar batean ere ezer aurkitu ez duenean — normalean berrargitalpen baten ondoren. Markaketak berriro bat egin eta berriro huts egin ondoren soilik abiarazten da berriro. Gertaera hau ez da inongo saiokoa: session_id eta session_url honako balioarekin datoz: null, link_url markaketa irekitzen du horren ordez, eta subject_id markaketa izendatzen du — bertsio guztietan bera; beraz, berriro huts egiten duen hautatzaile berria gorabehera irekira batzen da. Honako hauek daramatza: rule_id, rule_name, selector, page, checked_page_views, window_days eta last_matched. Bisitari-daturik ez.
element_recoveredHonako honen normaltasun-berrespena: element_broken: markaketak benetan elementu bat berriro aurkitzen duenean behin — orri-ikustaldi gutxiegi izatea ez da nahikoa. Honako hau webhook bidez bidali bazen soilik bidaltzen da: element_broken gertaera, eta ez du berezko etengailurik: honako honetara harpidetzeak: element_broken barne hartzen du. Honako bera: subject_id; beraz, PagerDuty-k gorabehera ebazten du eta Opsgenie-k alerta ixten du. Honako hauek daramatza: matched_page_views eta checked_page_views gainera.
anomaly_detectedEgunean behin, atzo aurreko 28 egunetatik nabarmen desberdina izan zenean: saio askoz gutxiago edo gehiago, helburu-tasaren jaitsiera, marruskadura edo JS erroreak dituzten saio gehiago. Metrika eta noranzko berak isilik mantentzen dira astebetez (doigarria). Gertaera hau ez da inongo saiokoa: session_id eta session_url honako balioarekin datoz: null, link_url proiektuaren ikuspegi orokorra irekitzen du, eta subject_id metrika, noranzkoa eta eguna izendatzen ditu. Honako hauek daramatza: metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score eta irakurgarriak diren summary eta hint. Bisitari-daturik ez. Web Vitals-erako, measurements eremuak sessionsordezten du, eta page (hutsik webgune osorako) eta device (desktop edo mobil) gertatu den tokia adierazten dute; link_url ondoren Web Vitals fitxa irekitzen du.
rage_clickAmorru-klika hautematean
error_detectedFrontend-eko salbuespena gertatzean
ceZure gertaera pertsonalizatuetarako harpidetza kolektiboa. Goiko gertaerak ez ditu barne hartzen — haiek beren etengailuak dituzte.

7. Erroreak & egoera-kodeak

EgoeraEsanahia
200Arrakasta.
401API gakoa falta da, gaizki osatuta dago edo baliogabetuta dago.
404Eskatutako proiektua edo saioa ez da existitzen edo ez da zure lan-eremukoa.
429Eskaera-muga gainditu da — gako honekin 60 eskaera/minutu baino gehiago bidaltzen ari zara.
403Lan-eremuaren planak ez du REST APIa barne. Mezuak behar den plana eta unekoa izendatzen ditu.

8. Segurtasun-oharrak

  • Irakurtzeko soilik diren gakoek (mp_ro_) ezin dute ezer aldatu. Idazteko gakoek (mp_rw_) bezero-IDak soilik erants ditzakete; inolako gakok ezin ditu datuak ezabatu edo erreprodukzio-datu gordinak esportatu.
  • Eskaera bakoitza automatikoki mugatzen da gakoaren lan-eremura — ez dago beste lan-eremu baten IDa pasatu eta beste norbaiten datuak ikusteko modurik.
  • Baliogabetu gakoa edozein unetan hemen: /api-keys; baliogabetzeak berehala du eragina.
  • Tratatu zure API gakoa pasahitza bezala. Ustekabean biltegi publiko batera igotzen baduzu, baliogabetu berehala eta sortu berria.

Gertaeren orri mugatuak (API v1, 2026ko urriaren 14a)

GET /api/v1/sessions/{session_id}/events muturrak gehienez 100 gertaera itzultzen ditu lehenespenez. Ezarri per_page 1 eta 100 arteko zenbaki oso batera. Jarraitu pagination.next_cursor balioari, hurrengo eskaeran cursor aldatu gabe bidaliz; mantendu saio eta lan-eremu berak. Gertaerak created_at eta event_id arabera ordenatzen dira. Kurtsoreak sinatuta daude eta saio eta lan-eremu horiei lotuta. Ez da guztizko kopururik edo zenbakizko orririk itzultzen.

Lehendik dauden data arraya eta params mapa erabilgarri mantentzen dira. pagination.returned benetan itzulitako kopurua da; pagination.has_more beste orri bat dagoela adierazten du. next_cursor null da osatutakoan. Erantzuna 524288 bytera mugatuta dago; beraz, orriak per_page baino gertaera gutxiago izan ditzake. Gertaera bakoitzeko gehienez 128 parametro-errenkada itzultzen dira; params_truncated true da gehiago badaude. Banakako testu-kateen parametroek datu-basearen 255 karaktereko muga mantentzen dute. Moztutako parametroak ez daude eskuragarri mutur honen bidez. Per_page murrizteak ez du parametro-muga handitzen.

Orri-tamaina baliogabeek, aldatutako kurtsoreek eta beste saio/lan-eremu bateko kurtsoreek 400 itzultzen dute. Banakako gertaera-datu handiegiek 413 itzultzen dute. Lehendik dauden sarbide-egiaztapenek 401, 403, 404 edo 409 itzultzen jarraitzen dute, dagokion bezala.

Muga API gako bakoitzeko minutuko autentifikatutako 60 eskaera izaten jarraitzen du. Agortzeak 429 itzultzen du Retry-After: 60 goiburuarekin. Redis edo mugatzailea erabilgarri ez badago, eskaerek 503 itzultzen dute Retry-After: 5 goiburuarekin; ez dira inoiz mugarik gabe onartzen. Errespetatu Retry-After eta gehitu ausazko itxaronaldi gehigarria; ez saiatu berriro begizta estu batean. Gertaeren datu-basearen hutsegiteek ere 503 itzultzen dute. Kurtsoreek ez dute kaptura finkorik izozten: denbora-marka zaharragoekin aldi berean txertatutako datuek berriro eskaneatzea eska dezakete.

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 Dev ingurunerako soilik den backend-kontroleko bidea da, SDK natiboaren aurrebistarako. Produkzioan desaktibatuta mantentzen da. Backend-eko Bearer gakoek irakurtzeko esparrua behar dute list/replay eragiketetarako, eta idazteko esparrua register/grant/delete/disable eragiketetarako. Aurrebista natiboaren erabilgarritasun-egiaztapen gehigarriak aplikatzen dira. Ez txertatu inoiz lan-eremuaren API gako iraunkorrak mugikorretarako aplikazio batean.