Açıq API & API açarları

İş sahənizə proqram vasitəsilə giriş — layihələri, seansları, fərdi hadisələri və seqmentləri oxuyun, müştəri ID-lərini seanslara bağlayın — iş sahəsi ilə məhdud API açarları ilə qorunur.

1. İcmal

MousePlayer API məlumatları iş sahənizdən öz idarə panellərinizə, məlumat anbarınıza və ya daxili alətlərinizə çıxarmağa imkan verir. Müştəri ID-lərinin seanslara bağlanması (identify, yazma səlahiyyətli açar tələb edir, Açar səlahiyyətlərinə baxın) istisna olmaqla yalnız oxumaüçündür: API vasitəsilə heç bir məlumat dəyişdirilə və ya silinə bilməz.

  • Əsas URL: https://www.mouseplayer.com/api/v1/
  • Bütün cavablar JSON-dur.
  • Hər sorğu API açarı ilə autentifikasiya olunur və avtomatik həmin açarın aid olduğu iş sahəsi ilə məhdudlaşır — bir iş sahəsinin açarı başqa iş sahəsinin məlumatını təsadüfən belə görə bilməz.
  • Tam seans təkrar oynatma qeydi (siçan hərəkətləri, DOM anlıq görüntüləri) API vasitəsilə təqdim edilmir . Seans metaməlumatlarını, səhifə baxışlarını, fərdi hadisələri və seqmentləri alırsınız — xam təkrar oynatma yükünü daşımadan hesabat və idarə panelləri qurmaq üçün kifayətdir.

2. Autentifikasiya

API açarlarınızı hesab menyunuzda bu bölmədə yaradın və idarə edin: API açarları (/api-keys). Açarları yalnız iş sahəsinin sahibləri və adminlər yarada və ya ləğv edə bilər.

Açarınızı gizli saxlayın. İş sahənizdəki hər şeyə oxuma girişi verir. Tam açar məhz bir dəfə, yaradıldıqdan dərhal sonra göstərilir — parol menecerində və ya məxfi məlumat anbarında saxlayın. İtirsəniz, ləğv edib yenisini yaradın.

Açarı hər sorğunun bu başlığında Bearer tokeni kimi göndərin: Authorization :

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

Çatışmayan, yanlış formatlı və ya ləğv edilmiş açarlar bu cavabı alır: 401 :

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

Plan tələbi

REST API bu planlara daxildir: Business və Enterprise . Plan iş sahəsinin sahibindən götürülür, buna görə dəvət edilmiş komanda üzvləri də ondan yararlanır. Yoxlama yalnız açar yaradılarkən deyil, hər sorğudaişləyir — iş sahəsinin planı aşağı salınsa, mövcud açarlar dayanıb bunu qaytarır: 403.

Açar səlahiyyətləri

Hər açar səlahiyyətini öz prefiksində daşıyır, buna görə ona baxmaqla nə etdiyini bilmək olar — bu yerdə: .env, sorğuda və ya terminalda.

PrefiksMəna
mp_ro_Yalnız oxuma. Layihələri, seansları, hadisələri və seqmentləri oxuyur. Heç nəyi dəyişə bilməz.
mp_rw_Oxuma və yazma. Yuxarıdakıların hamısı və əlavə olaraq identify son nöqtəsi ilə müştəri ID-lərinin bağlanması.
Açarı yaradanda səlahiyyəti seçin; standart yalnız oxumadır. Yazma son nöqtəsində yalnız oxuma açarı istifadə etmək bu cavabı qaytarır: 403 və açarın nə olduğunu, son nöqtənin nə tələb etdiyini bildirən mesaj verir. Səlahiyyət sonradan dəyişdirilə bilməz — yeni açar yaradıb köhnəni ləğv edin.

3. Sorğu tezliyi limitləri

Hər API açarı bu limitlə məhdudlaşdırılır: dəqiqədə 60 sorğu, sürüşən zaman aralığı üzrə izlənir. Aşdıqdan sonra aralıq boşalanadək sorğular bu cavabı alır: 429 :

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

Daha yüksək limit tələb edən bir şey qurursunuz? Bu bölmədən əlaqə saxlayın: Dəstək və istifadə halınızı bildirin.

4. Son nöqtələr

GET/api/v1/projects

İş sahənizdəki bütün layihələri (izlənən resursları) siyahıya alır.

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

Layihə üçün qeydə alınmış ziyarətçi seanslarını, ən yenilər əvvəl olmaqla siyahıya alır. Səhifələnir.

Sorğu parametriTəsvir
pageSəhifə nömrəsi, standart: 1.
per_pageHər səhifədə nəticə sayı, standart: 25, maksimum: 100.
sinceYalnız bu tarixdə və ya sonra başlayan seanslar (YYYY-MM-DD).
untilYalnız bu tarixdə və ya əvvəl başlayan seanslar.
{ "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}

Tək seansın metaməlumatları və səhifə baxışları. Tam təkrar oynatma yükü qəsdən daxil deyil — onun üçün idarə panelinin pleyerindən istifadə edin.

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

Seans ərzində baş vermiş fərdi hadisələr (bu üsulla göndərdiyiniz eyni hadisələr: mp('event', ...)), parametrləri ilə birlikdə.

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

Layihə üçün müəyyən edilmiş ziyarətçi seqmentlərini (həm layihəyə xüsusi, həm də bütün iş sahəsi üzrə) siyahıya alır.

{ "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. Arxa tərəfinizdən müştəri ID-si bağlamaq

Brauzer çox vaxt qarşısında kimin olduğunu bilmir. B2B məhsulunda kimlik girişdən sonra — arxa tərəfinizdə müəyyənləşir. Mağazada sifariş təsdiqi ilə müəyyənləşir. Bu son nöqtə məhz həmin an üçündür.

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

Sonra ID seans siyahısında görünür, orada axtarıla bilir və bu vebhuk: session_identified işə düşür — CRM sisteminizə belə çatır.

Eyni ID ilə iki dəfə çağırmaq təhlükəsizdir. Cavab bu dəyərlə qayıdır: "changed": false və vebhuk göndərilmir. Təkrar sifariş ikinci potensial müştəri yaratmır.
VəziyyətNə vaxt
400Sahə çatışmır, user_id 128 simvoldan uzundur və ya daxilində idarəetmə simvolları var. Kəsmək əvəzinə rədd edirik — səssiz qısaldılmış ID CRM sisteminizdə heç nə ilə uyğun gəlməz, amma yenə uğur kimi görünər.
404Seans mövcud deyil və ya iş sahənizə aid deyil. Hər ikisinə qəsdən eyni cavab verilir.
403İş sahəsinin planına API daxil deyil.

6. Vebhuklar: imzanın yoxlanması

Vebhuklar hər layihə üçün bu bölmədə tənzimlənir: İnteqrasiyalar, imzalama sirrini də orada tapırsınız. Hər çatdırılma bu başlıqları daşıyır:

BaşlıqMəna
X-MousePlayer-EventHadisənin adı, məsələn: session_identified
X-MousePlayer-TimestampUnix saniyələri — imzalanan mətnin bir hissəsi
X-MousePlayer-Attemptİlk cəhddə 1, təkrar cəhdlərdə daha yüksək
X-MousePlayer-Signaturesha256=<hex>

İmza bu mətn üzərində HMAC-SHA256-dır: timestamp + "." + raw body, layihənizin imzalama sirri açar kimi istifadə olunur.

// 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');
JSON təhlilindən əvvəl sorğunun xam mətnini imzalayın. Yenidən seriallaşdırmaq açar sırasını və boşluqları dəyişir və imza heç vaxt uyğun gəlməz. Vaxt nişanı bir neçə dəqiqədən köhnə olan hər şeyi də rədd edin — vaxt nişanı bunun üçündür.

Çatdırılma və təkrar cəhdlər

Uğursuz çatdırılma bu fasilələrlə yenidən sınanır: 1 dəq, 5 dəq, 15 dəq, 1 saat və 6 saat, sonra cəhdlər dayandırılır. 4xx Bu cavablardan başqa: 408 və 429 olan cavablar yenidən sınanmır — onlar "belə olmaz" deyir, "indi olmaz" deyil. Tez bu cavabı verin: 2xx və işi sonra görün; çatdırılma 10 saniyədən sonra vaxt limitinə çatır.

Əlçatan hadisələr

Hadisəİşə düşdüyü vaxt
session_identifiedSeans ilk dəfə müştəri ID-si alanda — brauzerdən və ya API-dən
session_endedBir dəfə, seans bağlananda
goal_reachedFərdi hadisə hədəflərinizdən birini yerinə yetirdikdə hər seansda bir dəfə. Yalnız “hadisə” növlü hədəflər — URL, müddət, səhifə baxışı və qıf hədəfləri qiymətləndirilmir. Bu sahələri daşıyır: goal_id, goal_name, goal_value və currency.
high_value_sessionZiyarətçi müəyyən gündə bu layihənin dəyər həddini ilk dəfə keçdikdə. Hədd öz xal bölgünüzdən çıxarılır (son 90 günün 90-cı persentili), sabit rəqəm deyil və ən azı 20 ziyarətçi qiymətləndirilənədək mövcud olmur. Bu sahələri daşıyır: visitor_id, value_score, threshold və həmin günün baxmağa ən uyğun seansını.
funnel_dropoffQıflarınızdan birinə daxil olub tamamlamayan seansın sonunda. Dayandığı addımı bildirir (dropped_at). Ayrılma hadisənin olmamasıdır, buna görə yalnız seans bitdikdən sonra məlum ola bilər. Qıfa heç daxil olmayan seanslar ayrılma deyil və hadisə yaratmır.
high_friction_sessionSeansın maneə xalı ilk dəfə həddə çatanda hər seansda bir dəfə (standart 60, maksimum 100). Bu sahəni: friction_score, onun arxasındakı siqnalları (reasons) və həddi keçirən siqnalı daşıyır (trigger).
element_brokenİzlənən element bir neçə gün ərzində yoxlanmış heç bir səhifə baxışında heç nə tapmadıqda bir dəfə — adətən sayt yeniləndikdən sonra. Yalnız işarələmə yenidən uyğun gəlib bir daha pozulduqdan sonra təkrar işə düşür. Bu hadisə heç bir seansaaid deyil: session_id və session_url bu dəyərdədir: null, link_url əvəzində işarələməni açır və subject_id işarələməni adlandırır — hər versiya üçün eyni, beləliklə yenidən pozulan yeni selektor açıq insidentə qoşulur. Bu sahələri daşıyır: rule_id, rule_name, selector, page, checked_page_views, window_days və last_matched. Ziyarətçi məlumatı yoxdur.
element_recoveredBu hadisə üçün bərpa bildirişi: element_broken: işarələmə həqiqətən yenidən element tapdıqda bir dəfə — səhifə baxışlarının çox az olması kifayət deyil. Yalnız bu hadisə: element_broken vebhukla göndərilibsə göndərilir və öz ayrıca keçidi yoxdur: bu hadisəyə abunəlik: element_broken onu da əhatə edir. Eyni subject_idistifadə olunur, beləliklə PagerDuty insidenti həll edir, Opsgenie xəbərdarlığı bağlayır. Əlavə olaraq bu sahələri daşıyır: matched_page_views və checked_page_views .
anomaly_detectedDünən əvvəlki 28 gündən aydın fərqləndikdə gündə bir dəfə: xeyli az və ya çox seans, azalmış hədəfə çatma nisbəti, daha çox maneəli və ya JS xətalı seans. Eyni göstərici və istiqamət bir həftə susur (tənzimlənə bilər). Bu hadisə heç bir seansaaid deyil: session_id və session_url bu dəyərdədir: null, link_url layihə icmalını açır və subject_id göstəricini, istiqaməti və günü adlandırır. Bu sahəni daşıyır: metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score və oxunaqlı bu mətni: summary və hint. Ziyarətçi məlumatı yoxdur. Web Vitals üçün, measurements bu sahəni əvəz edir: sessions, həmçinin page (bütün sayt üçün boşdur) və device (desktop və ya mobil) harada baş verdiyini bildirir; link_url sonra Web Vitals vərəqini açır.
rage_clickQəzəbli klik aşkarlananda
error_detectedÖn tərəf istisnası baş verəndə
ceÖz fərdi hadisələriniz üçün ümumi abunəlik. Yuxarıdakı hadisələr buna daxil deyil — onların ayrıca keçidləri var.

7. Xətalar & vəziyyət kodları

VəziyyətMəna
200Uğur.
401API açarı çatışmır, yanlış formatdadır və ya ləğv edilib.
404İstənilən layihə və ya seans mövcud deyil, yaxud iş sahənizə aid deyil.
429Sorğu tezliyi limiti aşılıb — bu açarla dəqiqədə 60-dan çox sorğu göndərirsiniz.
403İş sahəsinin planına REST API daxil deyil. Mesaj həm tələb olunan, həm də cari planın adını bildirir.

8. Təhlükəsizlik qeydləri

  • Yalnız oxuma açarları (mp_ro_) heç nəyi dəyişə bilməz. Yazma açarları (mp_rw_) yalnız müştəri ID-lərini bağlaya bilər; heç bir açar məlumat silə və ya xam təkrar oynatma məlumatlarını ixrac edə bilməz.
  • Hər sorğu avtomatik açarın öz iş sahəsi ilə məhdudlaşır — başqa iş sahəsinin ID-sini ötürüb başqasının məlumatlarını görmək mümkün deyil.
  • Açarı istənilən vaxt bu səhifədən ləğv edin: /api-keys; ləğv dərhal qüvvəyə minir.
  • API açarınıza parol kimi yanaşın. Təsadüfən açıq repozitoriyaya əlavə etsəniz, dərhal ləğv edib yenisini yaradın.

Məhdud hadisə səhifələri (API v1, 14 oktyabr 2026)

GET /api/v1/sessions/{session_id}/events standart olaraq ən çox 100 hadisə qaytarır. per_page parametrini 1-dən 100-ə qədər tam ədədə təyin edin. Növbəti sorğuda cursor parametrini dəyişmədən göndərərək pagination.next_cursor dəyərini izləyin; eyni seansı və iş sahəsini saxlayın. Hadisələr created_at və event_id üzrə sıralanır. Kursorlar imzalanır, həmin seansa və iş sahəsinə bağlanır. Ümumi say və ya rəqəmli səhifə qaytarılmır.

Mövcud data massivi və params xəritəsi əlçatan qalır. pagination.returned həqiqətən qaytarılan saydır; pagination.has_more başqa səhifənin olduğunu bildirir. Tamamlandıqda next_cursor null olur. Cavab 524288 baytla məhdudlaşır, buna görə səhifədə per_page dəyərindən az hadisə ola bilər. Hər hadisə üçün ən çox 128 parametr sətri qaytarılır; daha çoxdursa, params_truncated true olur. Ayrı mətn parametrləri verilənlər bazasının 255 simvol limitini saxlayır. Kəsilmiş parametrlər bu son nöqtədən əlçatan deyil. per_page dəyərini azaltmaq parametr limitini artırmır.

Yanlış səhifə ölçüləri, dəyişdirilmiş kursorlar və başqa seans/iş sahəsi üçün kursorlar 400 qaytarır. Həddindən böyük fərdi hadisə məlumatları 413 qaytarır. Mövcud giriş yoxlamaları müvafiq olaraq yenə 401, 403, 404 və ya 409 qaytarır.

Limit hər API açarına dəqiqədə 60 autentifikasiya olunmuş sorğu olaraq qalır. Tükəndikdə Retry-After: 60 ilə 429 qaytarılır. Redis və ya limitləyici əlçatmazdırsa, sorğular Retry-After: 5 ilə 503 qaytarır; limitsiz heç vaxt qəbul edilmir. Retry-After-a əməl edin və təsadüfi gözləmə əlavə edin; sıx dövrədə təkrar cəhd etməyin. Hadisə bazası xətaları da 503 qaytarır. Kursorlar anlıq görüntünü sabitləmir: daha köhnə vaxt nişanlı paralel əlavələr yeni skan tələb edə bilər.

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 nativ SDK önbaxışı üçün yalnız Dev arxa tərəf idarəetmə yoludur. İstehsalda deaktiv qalır. Arxa tərəf Bearer açarlarına list/replay üçün oxuma, register/grant/delete/disable üçün yazma səlahiyyəti lazımdır. Əlavə nativ önbaxış əlçatanlıq yoxlamaları tətbiq olunur. Mobil tətbiqə heç vaxt daimi iş sahəsi API açarları yerləşdirməyin.