Ochiq API & API kalitlari

Ish maydoningizga dasturiy kirish — loyihalar, sessiyalar, maxsus hodisalar va segmentlarni o‘qing, sessiyalarga mijoz ID’sini qo‘shing — ish maydoniga cheklangan API kalitlari bilan himoyalangan.

1. Umumiy ko‘rinish

MousePlayer API ish maydoni ma’lumotini o‘z panel, ombor yoki ichki vositangizga olishga imkon beradi. Sessiyaga mijoz ID’sini qo‘shishdan tashqari (identify, yozish doirali kalit kerak, Kalit doiralariga qarang), u faqat o‘qish uchun: API orqali ma’lumotni o‘zgartirib yoki o‘chirib bo‘lmaydi.

  • Asosiy URL: https://www.mouseplayer.com/api/v1/
  • Barcha javoblar JSON.
  • Har so‘rov API kaliti bilan tekshiriladi va avtomatik o‘sha kalit ish maydoniga cheklanadi — bir ish maydoni kaliti boshqasining ma’lumotini hatto tasodifan ham ko‘rolmaydi.
  • To‘liq sessiya qayta ijro yozuvi (sichqoncha harakati, DOM tasvirlari) API orqali berilmaydi . Sessiya metama’lumoti, sahifa ko‘rishlar, maxsus hodisa va segmentlarni olasiz — xom ijro yuklamasini ko‘chirmasdan hisobot va panel yaratishga yetarli.

2. Autentifikatsiya

API kalitlarini hisob menyusidagi shu bo‘limda yarating va boshqaring: API kalitlari (/api-keys). Faqat ish maydoni egalari va administratorlar kalit yarata yoki bekor qila oladi.

Kalitni maxfiy tuting. Ish maydonidagi hamma narsaga o‘qish ruxsatini beradi. To‘liq kalit yaratilishi bilanoq aynan bir marta ko‘rsatiladi — parol menejeri yoki maxfiy ma’lumot omborida saqlang. Yo‘qotsangiz, bekor qilib yangisini yarating.

Kalitni har so‘rovning shu Authorization sarlavhasida Bearer tokeni qilib yuboring:

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

Yo‘q, noto‘g‘ri yoki bekor kalitlar shu 401 javobini oladi:

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

Tarif talabi

REST API shu Business va Enterprise tariflariga kiradi. Tarif ish maydoni egasidan olinadi, taklif qilingan a’zolar meros oladi. Tekshiruv har so‘rovda, faqat kalit yaratilganda emas — tarif tushirilsa, mavjud kalitlar ishlamay, shuni qaytaradi: 403.

Kalit doiralari

Har kalit doirasi o‘z prefiksida, shuning uchun vazifasini qarab bilasiz — shu yerda: .env, so‘rovda yoki terminalda.

PrefiksMa’no
mp_ro_Faqat o‘qish. Loyiha, sessiya, hodisa va segmentlarni o‘qiydi. Hech narsani o‘zgartira olmaydi.
mp_rw_O‘qish va yozish. Yuqoridagilar va identify endpoint’i orqali mijoz ID’sini qo‘shish.
Kalit yaratganda doirasini tanlang; standart faqat o‘qish. Yozuvchi endpoint’da o‘qish kaliti ishlatilsa, shu qaytadi: 403 va kalit turi hamda endpoint talabi haqida xabar. Doira keyin o‘zgarmaydi — yangi kalit yaratib, eskisini bekor qiling.

3. Tezlik limitlari

Har API kaliti shu bilan cheklangan: daqiqasiga 60 ta so‘rov, siljiydigan oraliqda kuzatiladi. Oshsangiz, oraliq tozalanguncha so‘rovlar shu 429 javobini oladi:

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

Yuqoriroq limit kerak bo‘lsa, shu orqali bog‘laning: Yordam va foydalanish holatingizni ayting.

4. Endpoint’lar

GET/api/v1/projects

Ish maydoningizdagi har loyihani (kuzatilgan saytni) ro‘yxatlaydi.

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

Loyiha uchun yozilgan tashrifchi sessiyalarini avval yangilari bilan ro‘yxatlaydi. Sahifalangan.

So‘rov parametriTavsif
pageSahifa raqami, standart: 1.
per_pageHar sahifadagi natijalar, standart: 25, ko‘pi bilan 100.
sinceFaqat shu sanada yoki keyin boshlangan sessiyalar (YYYY-MM-DD).
untilFaqat shu sanada yoki oldin boshlangan sessiyalar.
{ "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}

Bitta sessiya metama’lumoti va sahifa ko‘rishlari. To‘liq qayta ijro yuklamasi ataylab yo‘q — buning uchun panel Pleyeridan foydalaning.

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

Sessiyada yuz bergan maxsus hodisalar (shu bilan yuborganlaringiz: mp('event', ...)), parametrlari bilan.

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

Loyiha uchun belgilangan tashrifchi segmentlarini ro‘yxatlaydi (loyihaga xos va ish maydoni bo‘ylab).

{ "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. Backend’ingizdan mijoz ID’sini qo‘shish

Brauzer ko‘pincha kim o‘tirganini bilmaydi. B2B mahsulotda shaxs kirgach aniqlanadi — backend’da. Do‘konda buyurtma tasdig‘i bilan. Endpoint aynan shu payt uchun.

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 keyin sessiya ro‘yxatida ko‘rinadi, qidiriladi va shu session_identified webhook ishlaydi — CRM’ingizga shunday yetadi.

Bir ID bilan ikki marta chaqirish xavfsiz. Javob shuni qaytaradi: "changed": false va webhook yuborilmaydi. Takroriy buyurtma ikkinchi potensial mijoz yaratmaydi.
HolatQachon
400Maydon yo‘q, user_id 128 belgidan uzun yoki boshqaruv belgili. Kesmaymiz, rad etamiz — bildirmay qisqargan ID CRM’da hech narsaga mos kelmay, baribir muvaffaqiyatdek ko‘rinadi.
404Sessiya yo‘q yoki ish maydoningizga tegishli emas. Ikkalasiga ataylab bir xil javob.
403Ish maydoni tarifiga API kirmaydi.

6. Webhook’lar: imzoni tekshirish

Webhook’lar har loyiha uchun shu yerda sozlanadi: Integratsiyalar, imzolash maxfiy kaliti ham o‘sha yerda. Har yetkazishda shu sarlavhalar bor:

SarlavhaMa’no
X-MousePlayer-EventHodisa nomi, masalan, session_identified
X-MousePlayer-TimestampUnix soniyalari — imzolangan matnning qismi
X-MousePlayer-Attemptilk urinishda 1, qayta urinishlarda yuqoriroq
X-MousePlayer-Signaturesha256=<hex>

Imzo HMAC-SHA256 bo‘lib, shu ustidan: timestamp + "." + raw body, loyiha imzolash maxfiy kalitingiz bilan kalitlangan.

// 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 tahlilidan oldin tananing xom shaklini imzolang. Qayta seriyalash kalit tartibi va bo‘shliqlarni o‘zgartiradi, imzo hech mos kelmaydi. Vaqt belgisi bir necha daqiqadan eski bo‘lganini ham rad eting — vaqt belgisi shuning uchun.

Yetkazish va qayta urinishlar

Muvaffaqiyatsiz yetkazishdan keyin shu vaqtlarda qayta uriniladi: 1 daqiqa, 5 daqiqa, 15 daqiqa, 1 soat va 6 soat, keyin voz kechiladi. 4xx javoblari uchun, quyidagilar bundan mustasno: 408 va 429 , qayta urinilmaydi — ular "hozir emas" emas, "bunday emas" deydi. Shunday javob bering: 2xx tezda, ishni keyin qiling; yetkazish vaqti 10 soniyada tugaydi.

Mavjud hodisalar

HodisaQachon ishlaydi
session_identifiedSessiya ilk mijoz ID’sini olganda — brauzer yoki API’dan
session_endedBir marta, sessiya yopilganda
goal_reachedHar sessiyada bir marta, maxsus hodisa maqsadingizni bajarganda. Faqat “hodisa” turidagi maqsadlar — URL, davomiylik, sahifa ko‘rish va voronka maqsadlari baholanmaydi. Shuni uzatadi: goal_id, goal_name, goal_value va currency.
high_value_sessionTashrifchi muayyan kunda loyiha qiymat chegarasidan ilk bor o‘tganda. Chegara o‘z ballaringiz taqsimotidan olinadi (oxirgi 90 kunning 90-pertsentili), qat’iy raqam emas va kamida 20 tashrifchi baholanmaguncha yo‘q. Shuni uzatadi: visitor_id, value_score, threshold va o‘sha kunning ko‘rishga eng arziydigan sessiyasi.
funnel_dropoffVoronkaga kirib, tugatmagan sessiya oxirida. To‘xtagan qadamni nomlaydi (dropped_at). Chiqish hodisaning yo‘qligi, faqat sessiya tugagach ma’lum. Voronkaga hech kirmagan sessiya chiqish emas va ishga tushirmaydi.
high_friction_sessionHar sessiyada bir marta, to‘siq balli ilk chegaraga yetganda (standart 60 / 100). Shuni uzatadi: friction_score, ortidagi signallar (reasons) va chegaradan oshirgan signal (trigger).
element_brokenBir marta, kuzatilgan element bir necha kun hech bir tekshirilgan sahifa ko‘rishda hech narsa topmaganda — odatda qayta ishga tushirishdan keyin. Belgi yana mos kelib, yana buzilgachgina qayta ishlaydi. Bu hodisa hech bir sessiyaga tegishli emas: session_id va session_url shu: null, link_url o‘rniga belgini ochadi va subject_id belgini nomlaydi — har versiya uchun bir xil, yana buzilgan yangi selektor ochiq muammoga qo‘shiladi. Shuni uzatadi: rule_id, rule_name, selector, page, checked_page_views, window_days va last_matched. Tashrifchi ma’lumoti yo‘q.
element_recoveredShu uchun tiklanish xabari: element_broken: belgi haqiqatan yana element topganda — sahifa ko‘rishlar juda kamligi yetmaydi. Faqat shu element_broken webhook orqali yuborilgan bo‘lsa jo‘natiladi, o‘z tugmasi yo‘q: shu hodisaga obuna: element_broken buni ham oladi. O‘sha subject_id, shunda PagerDuty muammoni hal etadi, Opsgenie ogohlantirishni yopadi. Qo‘shimcha shularni uzatadi: matched_page_views va checked_page_views .
anomaly_detectedKuniga bir marta, kecha oldingi 28 kundan aniq farq qilganda: ancha kam yoki ko‘p sessiya, maqsad ulushi pasayishi, to‘siqli yoki JS xatoli sessiyalar ko‘payishi. Bir ko‘rsatkich va yo‘nalish bir hafta jim turadi (sozlanadi). Bu hodisa hech bir sessiyaga tegishli emas: session_id va session_url shu: null, link_url loyiha umumiy ko‘rinishini ochadi va subject_id ko‘rsatkich, yo‘nalish va kunni nomlaydi. Shuni uzatadi: metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score va o‘qiladigan shu: summary va hint. Tashrifchi ma’lumoti yo‘q. Web Vitals uchun, measurements shuni almashtiradi: sessions va page (butun sayt uchun bo‘sh) va device (desktop yoki mobil) qayerda bo‘lganini aytadi; link_url keyin Web Vitals varag‘ini ochadi.
rage_clickG‘azabli bosish aniqlanganda
error_detectedFront-end istisnosi bo‘lganda
ceO‘z maxsus hodisalaringiz uchun umumiy obuna. U o‘z ichiga olmaydi yuqoridagi hodisalarni — ularning o‘z tugmalari bor.

7. Xatolar & holat kodlari

HolatMa’no
200Muvaffaqiyatli.
401Yo‘q, noto‘g‘ri yoki bekor qilingan API kaliti.
404So‘ralgan loyiha yoki sessiya yo‘q yoki ish maydoningizga tegishli emas.
429Tezlik limiti oshdi — bu kalit bilan daqiqasiga 60 tadan ortiq so‘rov yuboryapsiz.
403Ish maydoni tarifiga REST API kirmaydi. Xabar kerakli va joriy tarifni nomlaydi.

8. Xavfsizlik eslatmalari

  • O‘qish kalitlari (mp_ro_) hech narsani o‘zgartira olmaydi. Yozish kalitlari (mp_rw_) faqat mijoz ID’sini qo‘sha oladi; hech bir kalit ma’lumotni o‘chira yoki xom qayta ijroni eksport qila olmaydi.
  • Har so‘rov avtomatik kalitning o‘z ish maydoniga cheklanadi — boshqa ish maydoni ID’sini berib, o‘zga ma’lumotni ko‘rish yo‘li yo‘q.
  • Kalitni istalgan payt shu yerda bekor qiling: /api-keys; bekor qilish darhol ta’sir qiladi.
  • API kalitingizga paroldek qarang. Ochiq repozitoriyga tasodifan commit qilsangiz, darhol bekor qilib yangisini yarating.

Chegaralangan hodisa sahifalari (API v1, 14 oktabr 2026)

GET /api/v1/sessions/{session_id}/events sukut bo‘yicha 100 tagacha hodisa qaytaradi. per_page ni 1 dan 100 gacha butun son qiling. Keyingi so‘rovda cursor ni o‘zgartirmay yuborib pagination.next_cursor ga ergashing; sessiya va ish maydonini bir xil tuting. Hodisalar created_at va event_id bo‘yicha tartiblangan. Kursorlar imzolangan va shu sessiya/ish maydoniga bog‘langan. Jami son yoki raqamli sahifa qaytarilmaydi.

Mavjud data massivi va params xaritasi qoladi. pagination.returned haqiqiy qaytgan son; pagination.has_more keyingi sahifani bildiradi. Tugaganda next_cursor null. Javob 524288 bayt bilan cheklangan, shu sababli sahifada per_page dan kam hodisa bo‘lishi mumkin. Har hodisada ko‘pi bilan 128 parametr qatori qaytadi; ko‘proq bo‘lsa params_truncated true. Alohida satr parametrlari bazaning 255 belgi limitini saqlaydi. Qisqargan parametrlar bu endpoint orqali mavjud emas. per_page ni kamaytirish parametr chegarasini oshirmaydi.

Yaroqsiz sahifa hajmi, o‘zgartirilgan kursor va boshqa sessiya/ish maydoni kursorlari 400 qaytaradi. Haddan katta bitta hodisa 413 qaytaradi. Mavjud ruxsat tekshiruvlari mos ravishda 401, 403, 404 yoki 409 qaytaradi.

Limit har API kalitiga daqiqasiga 60 ta tasdiqlangan so‘rov. Tugasa 429 va Retry-After: 60 qaytadi. Redis yoki cheklagich mavjud bo‘lmasa, 503 va Retry-After: 5 qaytadi; limitsiz hech qabul qilinmaydi. Retry-After’ga amal qilib, tasodifiy kutish qo‘shing; zich siklda qayta urinmang. Hodisa bazasi xatosi ham 503 qaytaradi. Kursorlar tasvirni muzlatmaydi: eski vaqtli parallel qo‘shishlar yangi skan talab qilishi mumkin.

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 ko‘rib chiqishi uchun faqat Dev backend boshqaruv yo‘li. Amaldagi muhitda o‘chiq qoladi. Backend Bearer kalitlariga list/replay uchun o‘qish, register/grant/delete/disable uchun yozish doirasi kerak. Qo‘shimcha nativ-ko‘rib-chiqish mavjudlik tekshiruvlari amal qiladi. Doimiy ish maydoni API kalitini mobil ilovaga hech joylashtirmang.