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:
Yo‘q, noto‘g‘ri yoki bekor kalitlar shu 401 javobini oladi:
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.
| Prefiks | Ma’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. |
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:
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.
GET/api/v1/projects/{channelid}/sessions
Loyiha uchun yozilgan tashrifchi sessiyalarini avval yangilari bilan ro‘yxatlaydi. Sahifalangan.
| So‘rov parametri | Tavsif |
|---|---|
page | Sahifa raqami, standart: 1. |
per_page | Har sahifadagi natijalar, standart: 25, ko‘pi bilan 100. |
since | Faqat shu sanada yoki keyin boshlangan sessiyalar (YYYY-MM-DD). |
until | Faqat shu sanada yoki oldin boshlangan sessiyalar. |
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.
GET/api/v1/sessions/{session_id}/events
Sessiyada yuz bergan maxsus hodisalar (shu bilan yuborganlaringiz: mp('event', ...)), parametrlari bilan.
GET/api/v1/projects/{channelid}/segments
Loyiha uchun belgilangan tashrifchi segmentlarini ro‘yxatlaydi (loyihaga xos va ish maydoni bo‘ylab).
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.
"changed": false va webhook yuborilmaydi. Takroriy buyurtma ikkinchi potensial mijoz yaratmaydi.| Holat | Qachon |
|---|---|
400 | Maydon 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. |
404 | Sessiya yo‘q yoki ish maydoningizga tegishli emas. Ikkalasiga ataylab bir xil javob. |
403 | Ish 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:
| Sarlavha | Ma’no |
|---|---|
X-MousePlayer-Event | Hodisa nomi, masalan, session_identified |
X-MousePlayer-Timestamp | Unix soniyalari — imzolangan matnning qismi |
X-MousePlayer-Attempt | ilk urinishda 1, qayta urinishlarda yuqoriroq |
X-MousePlayer-Signature | sha256=<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');
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
| Hodisa | Qachon ishlaydi |
|---|---|
session_identified | Sessiya ilk mijoz ID’sini olganda — brauzer yoki API’dan |
session_ended | Bir marta, sessiya yopilganda |
goal_reached | Har 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_session | Tashrifchi 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_dropoff | Voronkaga 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_session | Har 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_broken | Bir 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_recovered | Shu 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_detected | Kuniga 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_click | G‘azabli bosish aniqlanganda |
error_detected | Front-end istisnosi bo‘lganda |
ce | O‘z maxsus hodisalaringiz uchun umumiy obuna. U o‘z ichiga olmaydi yuqoridagi hodisalarni — ularning o‘z tugmalari bor. |
7. Xatolar & holat kodlari
| Holat | Ma’no |
|---|---|
200 | Muvaffaqiyatli. |
401 | Yo‘q, noto‘g‘ri yoki bekor qilingan API kaliti. |
404 | So‘ralgan loyiha yoki sessiya yo‘q yoki ish maydoningizga tegishli emas. |
429 | Tezlik limiti oshdi — bu kalit bilan daqiqasiga 60 tadan ortiq so‘rov yuboryapsiz. |
403 | Ish 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.