API publike & çelësat API

Hyrje programatike në hapësirën tuaj të punës — lexoni projekte, seanca, ngjarje të personalizuara dhe segmente dhe bashkëngjitni ID klientësh në seanca — e siguruar me çelësa API të kufizuar në hapësirën e punës.

1. Përmbledhje

API-ja MousePlayer ju lejon të nxirrni të dhëna nga hapësira juaj e punës në panelet, depon e të dhënave ose mjetet tuaja të brendshme. Përveç bashkëngjitjes së ID-ve të klientëve në seanca (identify, kërkon çelës me fushëveprim shkrimi, shihni Fushëveprimet e çelësave), është vetëm për lexim: asnjë e dhënë nuk mund të ndryshohet ose fshihet përmes API-së.

  • URL-ja bazë: https://www.mouseplayer.com/api/v1/
  • Të gjitha përgjigjet janë JSON.
  • Çdo kërkesë autentikohet me çelës API dhe kufizohet automatikisht në hapësirën e punës së cilës i përket çelësi — një çelës nga një hapësirë pune nuk mund të shohë kurrë të dhënat e një tjetre, as rastësisht.
  • Regjistrimi i plotë i riprodhimit të seancës (lëvizje miu, pamje DOM të ruajtura) nuk ofrohet përmes API-së. Merrni metadata seancash, shikime faqesh, ngjarje të personalizuara dhe segmente — mjaft për të ndërtuar raporte dhe panele pa shpërndarë të dhënat e papërpunuara të riprodhimit.

2. Autentikimi

Krijoni dhe menaxhoni çelësat tuaj API te Çelësat API në menynë e llogarisë suaj (/api-keys). Vetëm pronarët dhe administratorët e hapësirës së punës mund të krijojnë ose revokojnë çelësa.

Mbajeni sekret çelësin tuaj. Jep hyrje për lexim në gjithçka në hapësirën tuaj të punës. Çelësi i plotë shfaqet saktësisht një herë, menjëherë pas krijimit — ruajeni në menaxher fjalëkalimesh ose kasafortë sekretesh. Nëse e humbni, revokojeni dhe krijoni një të ri.

Dërgojeni çelësin si token Bearer në header-in Authorization të çdo kërkese:

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

Çelësat e munguar, të keqformuar ose të revokuar marrin një përgjigje 401 përkatëse:

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

Kërkesa e planit

REST API është pjesë e planeve Business dhe Enterprise për këtë shërbim. Plani merret nga pronari i hapësirës së punës, ndaj anëtarët e ftuar të ekipit e trashëgojnë. Kontrolli kryhet në çdo kërkesë, jo vetëm kur krijohet një çelës — nëse hapësira e punës kalon në nivel më të ulët, çelësat ekzistues ndalojnë së funksionuari dhe kthejnë 403.

Fushëveprimet e çelësave

Çdo çelës mbart fushëveprimin në prefiksin e vet, që ta kuptoni çfarë bën vetëm duke e parë — në një .env, në një kërkesë mbështetjeje, në një terminal.

PrefiksiKuptimi
mp_ro_Vetëm lexim. Lexon projekte, seanca, ngjarje dhe segmente. Nuk mund të ndryshojë asgjë.
mp_rw_Lexim dhe shkrim. Gjithçka më sipër, plus bashkëngjitjen e ID-ve të klientëve përmes pikës fundore të identifikimit.
Zgjidhni fushëveprimin kur krijoni çelësin; parazgjedhja është vetëm lexim. Përdorimi i një çelësi vetëm për lexim në një pikë fundore shkrimi kthen 403 me një mesazh që emërton llojin e çelësit dhe çfarë kërkon pika fundore. Fushëveprimi nuk mund të ndryshohet më pas — krijoni një çelës të ri dhe revokoni të vjetrin.

3. Kufijtë e ritmit

Çdo çelës API kufizohet në 60 kërkesa në minutë, të ndjekura në një interval rrëshqitës. Pasi e tejkaloni, kërkesat marrin përgjigjen 429 derisa intervali të pastrohet:

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

Po ndërtoni diçka që kërkon kufi më të lartë? Na kontaktoni përmes Mbështetjes dhe na tregoni rastin tuaj të përdorimit.

4. Pika fundore

GET/api/v1/projects

Liston çdo projekt (pronë të ndjekur) në hapësirën tuaj të punës.

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

Liston seancat e vizitorëve të regjistruara për një projekt, më të rejat së pari. Me faqe.

Parametri i kërkesësPërshkrimi
pageNumri i faqes, parazgjedhja 1.
per_pageRezultate për faqe, parazgjedhja 25, maksimumi 100.
sinceVetëm seancat që fillojnë në/pas kësaj date (YYYY-MM-DD).
untilVetëm seancat që fillojnë në/para kësaj date.
{ "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 për një seancë të vetme, plus shikimet e faqeve të saj. Qëllimisht përjashton të dhënat e plota të riprodhimit — për atë përdorni luajtësin e panelit.

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

Ngjarje të personalizuara të aktivizuara gjatë një seance (të njëjtat që dërgoni me mp('event', ...)), përfshirë parametrat e tyre.

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

Liston segmentet e vizitorëve të përcaktuara për një projekt (si segmentet specifike të projektit, ashtu edhe ato të gjithë hapësirës së punës).

{ "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. Bashkëngjitja e ID-së së klientit nga serveri juaj

Shfletuesi shpesh nuk e di kush është aty. Në një produkt B2B identiteti përcaktohet pas hyrjes në llogari — në serverin tuaj. Në një dyqan përcaktohet me konfirmimin e porosisë. Kjo pikë fundore është pikërisht për atë çast.

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-ja pastaj shfaqet në listën e seancave, është e kërkueshme aty dhe webhook-u session_identified aktivizohet — kështu arrin te CRM-ja juaj.

Thirrja dy herë me të njëjtën ID është e sigurt. Përgjigjja kthehet me "changed": false dhe nuk dërgohet webhook. Një porosi e përsëritur nuk krijon klient të dytë të mundshëm.
GjendjaKur
400Fushë e munguar, user_id mbi 128 karaktere ose me karaktere kontrolli brenda. Refuzojmë në vend që të shkurtojmë — një ID e shkurtuar në heshtje nuk përputhet me asgjë në CRM-në tuaj dhe përsëri duket si sukses.
404Seanca nuk ekziston ose nuk i përket hapësirës suaj të punës. Qëllimisht e njëjta përgjigje për të dyja.
403Plani i hapësirës së punës nuk e përfshin API-në.

6. Webhook-et: verifikimi i nënshkrimit

Webhook-et konfigurohen për çdo projekt te Integrimet, ku gjeni edhe sekretin e nënshkrimit. Çdo dërgesë mbart këto headers:

Header-iKuptimi
X-MousePlayer-EventEmri i ngjarjes, p.sh. session_identified
X-MousePlayer-TimestampSekonda Unix — pjesë e tekstit të nënshkruar
X-MousePlayer-Attempt1 në përpjekjen e parë, më i lartë në riprovime
X-MousePlayer-Signaturesha256=<hex>

Nënshkrimi është HMAC-SHA256 mbi timestamp + "." + raw body, me sekretin e nënshkrimit të projektit tuaj si çelës.

// 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');
Nënshkruani trupin e papërpunuar para çdo analizimi JSON. Serializimi përsëri ndryshon rendin e çelësave dhe hapësirat dhe nënshkrimi nuk do të përputhet kurrë. Refuzoni gjithashtu gjithçka me kohë më të vjetër se pak minuta — për këtë shërben koha.

Dërgimi dhe riprovimet

Një dërgesë e dështuar riprovohet pas 1 min, 5 min, 15 min, 1 h dhe 6 h, pastaj hiqet dorë. Përgjigjet 4xx që ndryshojnë nga 408 dhe 429 nuk riprovohen — ato thonë "jo kështu", jo "jo tani". Përgjigjuni 2xx shpejt dhe kryejeni punën më pas; dërgimi skadon pas 10 sekondash.

Ngjarje të disponueshme

NgjarjaAktivizohet
session_identifiedKur një seancë merr për herë të parë ID klienti — nga shfletuesi ose API-ja
session_endedNjë herë, kur mbyllet seanca
goal_reachedNjë herë për seancë, kur një ngjarje e personalizuar përmbush një nga objektivat tuaja. Vetëm objektiva të llojit „event“ — objektivat URL, kohëzgjatje, shikime faqesh dhe hinka nuk vlerësohen. Mbart goal_id, goal_name, goal_value dhe currency.
high_value_sessionKur një vizitor kalon për herë të parë pragun e vlerës së këtij projekti në një ditë të caktuar. Pragu nxirret nga shpërndarja juaj e pikëve (percentili i 90-të i 90 ditëve të fundit), jo nga një numër fiks dhe nuk ekziston derisa të jenë vlerësuar të paktën 20 vizitorë. Mbart visitor_id, value_score, threshold dhe seancën më të përshtatshme për t'u parë të asaj dite.
funnel_dropoffNë fund të një seance që hyri në një nga hinkat tuaja, por nuk e përfundoi. Emërton hapin ku ndaloi (dropped_at). Largimi është mungesa e një ngjarjeje, ndaj mund të dihet vetëm pasi seanca përfundon. Seancat që nuk hynë kurrë në hinkë nuk janë largime dhe nuk aktivizohen.
high_friction_sessionNjë herë për seancë, kur pikët e pengesave arrijnë për herë të parë pragun (parazgjedhja 60 nga 100). Mbart friction_score, sinjalet pas tyre (reasons) dhe sinjalin që kaloi kufirin (trigger).
element_brokenNjë herë, kur një element i ndjekur nuk ka gjetur asgjë në asnjë shikim faqeje të kontrolluar për disa ditë — zakonisht pas një rilançimi. Aktivizohet sërish vetëm pasi shënimi të jetë përputhur dhe prishur përsëri. Kjo ngjarje nuk i përket asnjë seance: session_id dhe session_url janë null, link_url hap shënimin në vend të saj dhe subject_id emërton shënimin — i njëjti për çdo version, që një selektor i ri që prishet sërish t'i bashkohet incidentit të hapur. Mbart rule_id, rule_name, selector, page, checked_page_views, window_days dhe last_matched. Pa të dhëna vizitorësh.
element_recoveredNjoftimi i rikuperimit për element_broken: një herë, kur shënimi gjen vërtet një element sërish — shumë pak shikime faqesh nuk mjaftojnë. Dërgohet vetëm nëse element_broken u dërgua me webhook dhe nuk ka çelësin e vet të aktivizimit: abonimi në element_broken e përfshin. I njëjti subject_id, që PagerDuty ta zgjidhë incidentin dhe Opsgenie ta mbyllë njoftimin. Mbart matched_page_views dhe checked_page_views si shtesë.
anomaly_detectedNjë herë në ditë, kur dita e djeshme ndryshoi qartë nga 28 ditët e mëparshme: shumë më pak ose më shumë seanca, rënie të normës së objektivave, më shumë seanca me pengesa ose gabime JS. E njëjta metrikë dhe drejtim qëndrojnë të heshtura për një javë (e ndryshueshme). Kjo ngjarje nuk i përket asnjë seance: session_id dhe session_url janë null, link_url hap përmbledhjen e projektit dhe subject_id emërton metrikën, drejtimin dhe ditën. Mbart metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score dhe një summary të lexueshëm dhe hint përkatës. Pa të dhëna vizitorësh. Për Web Vitals, measurements zëvendëson sessions, ndërsa page (bosh për gjithë sajtin) dhe device (desktop ose mobil) tregojnë ku ndodhi; link_url pastaj hap skedën Web Vitals.
rage_clickNë një klikim zemërimi të zbuluar
error_detectedNë një përjashtim të anës së klientit
ceAbonim i përbashkët për ngjarjet tuaja të personalizuara. Nuk përfshin ngjarjet më sipër — ato kanë çelësat e veta të aktivizimit.

7. Gabime & kode gjendjeje

GjendjaKuptimi
200Sukses.
401Çelës API i munguar, i keqformuar ose i revokuar.
404Projekti ose seanca e kërkuar nuk ekziston ose nuk i përket hapësirës suaj të punës.
429U tejkalua kufiri i ritmit — po dërgoni më shumë se 60 kërkesa/minutë me këtë çelës.
403Plani i hapësirës së punës nuk e përfshin REST API. Mesazhi emërton si planin e kërkuar, ashtu edhe atë aktual.

8. Shënime sigurie

  • Çelësat vetëm për lexim (mp_ro_) nuk mund të ndryshojnë gjë. Çelësat e shkrimit (mp_rw_) mund të bashkëngjitin vetëm ID klientësh; asnjë çelës nuk mund të fshijë të dhëna ose të eksportojë të dhëna të papërpunuara riprodhimi.
  • Çdo kërkesë kufizohet automatikisht në hapësirën e punës së vetë çelësit — nuk ka mënyrë për të kaluar ID hapësire tjetër pune dhe për të parë të dhënat e dikujt tjetër.
  • Revokojeni një çelës kurdoherë nga /api-keys; revokimi hyn në fuqi menjëherë.
  • Trajtojeni çelësin API si fjalëkalim. Nëse e vendosni rastësisht në një depo publike me commit, revokojeni menjëherë dhe krijoni një të ri.

Faqe të kufizuara ngjarjesh (API v1, 14 tetor 2026)

GET /api/v1/sessions/{session_id}/events kthen deri në 100 ngjarje si parazgjedhje. Vendosni per_page si numër të plotë nga 1 deri në 100. Ndiqni pagination.next_cursor duke dërguar cursor të pandryshuar në kërkesën pasuese; mbani të njëjtën seancë dhe hapësirë pune. Ngjarjet renditen sipas created_at dhe event_id. Kursorët nënshkruhen dhe lidhen me atë seancë dhe hapësirë pune. Nuk kthehet numër total ose faqe numerike.

Vargu ekzistues data dhe harta params mbeten të disponueshme. pagination.returned është numri real i kthyer; pagination.has_more tregon një faqe tjetër. next_cursor është null kur përfundon. Një përgjigje kufizohet në 524288 bajte, ndaj një faqe mund të përmbajë më pak ngjarje se per_page. Për çdo ngjarje kthehen maksimumi 128 rreshta parametrash; params_truncated është true nëse ka më shumë. Parametrat tekstualë individualë ruajnë kufirin e bazës së të dhënave prej 255 karakteresh. Parametrat e shkurtuar nuk janë të disponueshëm përmes kësaj pike fundore. Ulja e per_page nuk e rrit kufirin e parametrave.

Madhësi të pavlefshme faqesh, kursorë të ndryshuar dhe kursorë për një seancë/hapësirë tjetër pune kthejnë 400. Të dhënat individuale tepër të mëdha të ngjarjeve kthejnë 413. Kontrollet ekzistuese të hyrjes vazhdojnë të kthejnë 401, 403, 404 ose 409 sipas rastit.

Kufiri mbetet 60 kërkesa të autentikuara për çelës API në minutë. Shterimi kthen 429 me Retry-After: 60. Nëse Redis ose kufizuesi është i padisponueshëm, kërkesat kthejnë 503 me Retry-After: 5; nuk pranohen kurrë pa kufi. Respektoni Retry-After dhe shtoni vonesë të rastësishme; mos riprovoni në cikël të ngushtë. Edhe dështimet e bazës së të dhënave të ngjarjeve kthejnë 503. Kursorët nuk ngrijnë një pamje të ruajtur: futjet e njëkohshme me kohë më të vjetra mund të kërkojnë skanim të ri.

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 është rrugë kontrolli e serverit vetëm për Dev për pamjen paraprake të SDK-së native. Mbetet e çaktivizuar në prodhim. Çelësat Bearer të serverit kërkojnë fushëveprim leximi për list/replay dhe shkrimi për register/grant/delete/disable. Zbatohen kontrolle shtesë të disponueshmërisë së pamjes paraprake native. Mos futni kurrë çelësa të përhershëm API të hapësirës së punës në një aplikacion celular.