Herkese Açık API & API Anahtarları

Çalışma alanınıza programatik erişim — projeleri, oturumları, özel olayları ve segmentleri okuyun, oturumlara müşteri kimlikleri ekleyin — çalışma alanı kapsamlı API anahtarlarıyla korunur.

1. Genel bakış

MousePlayer API, çalışma alanınızdaki verileri kendi gösterge panellerinize, veri ambarınıza veya dahili araçlarınıza almanızı sağlar. Oturumlara müşteri kimliği ekleme dışında (identify; yazma kapsamlı anahtar gerektirir, bkz. Anahtar kapsamları) salt okunurdur: API üzerinden veri değiştirilemez veya silinemez.

  • Temel URL: https://www.mouseplayer.com/api/v1/
  • Tüm yanıtlar JSON biçimindedir.
  • Her istek bir API anahtarıyla doğrulanır ve otomatik olarak anahtarın ait olduğu çalışma alanıyla sınırlandırılır — bir çalışma alanının anahtarı, yanlışlıkla bile olsa başka bir çalışma alanının verilerini asla göremez.
  • Tam oturum yeniden oynatma kaydı (fare hareketleri, DOM anlık görüntüleri) API üzerinden sunulmaz . Oturum üstverisini, sayfa görüntülemelerini, özel olayları ve segmentleri alırsınız — ham yeniden oynatma verisini taşımadan rapor ve gösterge panelleri oluşturmak için yeterlidir.

2. Kimlik doğrulama

API anahtarlarınızı hesap menünüzdeki API Anahtarları bölümünde (/api-keys) oluşturun ve yönetin. Yalnızca çalışma alanı sahipleri ve yöneticileri anahtar oluşturabilir veya iptal edebilir.

Anahtarınızı gizli tutun. Çalışma alanınızdaki her şeye okuma erişimi verir. Tam anahtar, oluşturulduktan hemen sonra tam olarak bir kez gösterilir — bir parola yöneticisinde veya gizli bilgi kasasında saklayın. Kaybederseniz iptal edip yeni bir anahtar oluşturun.

Anahtarı her istekte Bearer belirteci olarak şu başlıkta gönderin Authorization :

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

Eksik, hatalı biçimli veya iptal edilmiş anahtarlar şu yanıtı alır 401 :

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

Plan gereksinimi

REST API, Business ve Enterprise planlarına dahildir. Plan, çalışma alanının sahibinden alınır; böylece davet edilen ekip üyeleri de aynı plandan yararlanır. Kontrol yalnızca anahtar oluşturulurken değil, her istekte çalışır — çalışma alanının planı düşürülürse mevcut anahtarlar çalışmayı durdurur ve şu yanıtı döndürür: 403.

Anahtar kapsamları

Her anahtar, kapsamını kendi önekinde taşır. Böylece bir anahtarın ne yaptığını ona bakarak anlayabilirsiniz — bir .env içinde, bir destek kaydında veya terminalde.

ÖnekAnlamı
mp_ro_Salt okunur. Projeleri, oturumları, olayları ve segmentleri okur. Hiçbir şeyi değiştiremez.
mp_rw_Okuma ve yazma. Yukarıdakilerin tümü ve ayrıca tanımlama uç noktası üzerinden müşteri kimliği ekleme.
Anahtarı oluştururken kapsamı seçin; varsayılan salt okunurdur. Yazma yapan bir uç noktada salt okunur anahtar kullanmak şu yanıtı döndürür: 403 ; mesaj, anahtarın türünü ve uç noktanın gereksinimini belirtir. Kapsam sonradan değiştirilemez — yeni bir anahtar oluşturun ve eskisini iptal edin.

3. İstek sınırları

Her API anahtarı kayan zaman aralığında izlenerek dakikada 60 istekle sınırlandırılır. Bu sınırı aştığınızda zaman aralığı temizlenene kadar istekler şu yanıtı alır 429 :

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

Daha yüksek bir sınıra ihtiyaç duyan bir şey mi geliştiriyorsunuz? Şu bölümden bize ulaşın: Destek ; kullanım senaryonuzu anlatın.

4. Uç noktalar

GET/api/v1/projects

Çalışma alanınızdaki her projeyi (takip edilen siteyi) listeler.

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

Bir proje için kaydedilen ziyaretçi oturumlarını en yeniden başlayarak listeler. Sayfalandırılır.

Sorgu parametresiAçıklama
pageSayfa numarası; varsayılan: 1.
per_pageSayfa başına sonuç; varsayılan: 25, en fazla: 100.
sinceYalnızca bu tarihte veya sonrasında başlayan oturumlar (YYYY-MM-DD).
untilYalnızca bu tarihte veya öncesinde başlayan oturumlar.
{ "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}

Tek bir oturumun üstverisi ve sayfa görüntülemeleri. Tam yeniden oynatma verisi özellikle dahil edilmez — bunun için gösterge panelindeki Oynatıcıyı kullanın.

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

Oturum sırasında tetiklenen özel olaylar (şu yöntemle gönderdiğiniz olaylarla aynıdır: mp('event', ...)) ve parametreleri.

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

Bir proje için tanımlanmış ziyaretçi segmentlerini listeler (hem projeye özgü hem çalışma alanı genelindeki segmentler).

{ "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. Arka ucunuzdan müşteri kimliği ekleme

Tarayıcı çoğu zaman karşısında kimin olduğunu bilmez. B2B ürününde kimlik girişten sonra — arka ucunuzda belirlenir. Mağazada ise sipariş onayıyla belirlenir. Bu uç nokta tam olarak o an içindir.

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

Kimlik daha sonra oturum listesinde görünür, orada aranabilir ve şu webhook tetiklenir: session_identified — CRM'inize bu yolla ulaşır.

Aynı kimlikle iki kez çağırmak güvenlidir. Yanıt şu değerle döner: "changed": false ; webhook gönderilmez. Yinelenen sipariş ikinci bir potansiyel müşteri oluşturmaz.
DurumNe zaman?
400Eksik alan, user_id 128 karakterden uzun veya kontrol karakterleri içeriyor. Kısaltmak yerine reddederiz — sessizce kısaltılan bir kimlik CRM'inizde hiçbir şeyle eşleşmez ve yine de başarılı görünür.
404Oturum mevcut değil veya çalışma alanınıza ait değil. Her ikisi için özellikle aynı yanıt verilir.
403Çalışma alanı planı API'yi içermiyor.

6. Webhook'lar: imzayı doğrulama

Webhook'lar proje başına şu bölümde yapılandırılır: Entegrasyonlar. İmzalama gizli anahtarını da burada bulursunuz. Her teslim şu başlıkları taşır:

BaşlıkAnlamı
X-MousePlayer-EventOlay adı; örneğin session_identified
X-MousePlayer-TimestampUnix saniyeleri — imzalanan metnin parçasıdır
X-MousePlayer-Attemptİlk denemede 1; yeniden denemelerde daha yüksek
X-MousePlayer-Signaturesha256=<hex>

İmza, şu veri üzerinde hesaplanan HMAC-SHA256 değeridir: timestamp + "." + raw body; anahtar olarak projenizin imzalama gizli anahtarı kullanılır.

// 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');
Herhangi bir JSON ayrıştırmasından önce ham gövdeyi imzalayın. Yeniden serileştirmek anahtar sırasını ve boşlukları değiştirir; imza asla eşleşmez. Ayrıca zaman damgası birkaç dakikadan eski olan her şeyi reddedin — zaman damgasının amacı budur.

Teslim ve yeniden denemeler

Başarısız teslim şu aralıklarla yeniden denenir: 1 dk, 5 dk, 15 dk, 1 sa ve 6 sa; ardından vazgeçilir. 4xx türü yanıtlardan şu iki durum dışındakiler: 408 ve 429 , yeniden denenmez — bunlar "şimdi olmaz" değil, "bu şekilde olmaz" der. Hızlıca şu yanıtı verin: 2xx ; işi sonrasında yapın. Teslim 10 saniyede zaman aşımına uğrar.

Kullanılabilir olaylar

OlayTetiklenme anı
session_identifiedBir oturum, tarayıcıdan veya API'den ilk kez müşteri kimliği aldığında — tetiklenir
session_endedOturum kapandığında bir kez
goal_reachedÖzel bir olay hedeflerinizden birini gerçekleştirdiğinde, oturum başına bir kez. Yalnızca “event” türündeki hedefler — URL, süre, sayfa görüntüleme ve huni hedefleri değerlendirilmez. Şu alanları taşır: goal_id, goal_name, goal_value ve currency.
high_value_sessionBir ziyaretçi belirli bir günde bu projenin değer eşiğini ilk kez aştığında. Eşik, kendi puan dağılımınızdan türetilir (son 90 günün 90. yüzdelik dilimi); sabit bir sayı değildir ve en az 20 ziyaretçi puanlanana kadar mevcut olmaz. Şu alanları taşır: visitor_id, value_score, threshold ve o günün izlemeye en değer oturumu.
funnel_dropoffHunilerinizden birine girip tamamlamayan bir oturumun sonunda. Durduğu adımı belirtir (dropped_at). Ayrılma, bir olayın yokluğudur; bu nedenle yalnızca oturum bittikten sonra bilinebilir. Huniye hiç girmeyen oturumlar ayrılma sayılmaz ve tetiklenmez.
high_friction_sessionSürtünme puanı eşiğe ilk ulaştığında, oturum başına bir kez (varsayılan 100 üzerinden 60). Şu alanı taşır: friction_score, arkasındaki sinyalleri (reasons) ve eşiği aşıran sinyali (trigger).
element_brokenTakip edilen bir öğe, birkaç gün boyunca kontrol edilen hiçbir sayfa görüntülemesinde bulunamadığında bir kez — genellikle yeniden yayımlama sonrasında. Yalnızca işaretleme tekrar eşleşip bir kez daha bozulduktan sonra yeniden tetiklenir. Bu olayın ait olduğu bir oturum yoktur: session_id ve session_url alanları null, link_url ise işaretlemeyi açar ve subject_id işaretlemeyi adlandırır — tüm sürümler için aynıdır; böylece yeniden bozulan yeni bir seçici açık olaya dahil olur. Şu alanları taşır: rule_id, rule_name, selector, page, checked_page_views, window_days ve last_matched. Ziyaretçi verisi yoktur.
element_recoveredŞu olay için sorun giderildi bildirimi: element_broken. İşaretleme gerçekten yeniden bir öğe bulduğunda gönderilir — çok az sayfa görüntülemesi yeterli değildir. Yalnızca şu olay webhook üzerinden gönderilmişse gönderilir: element_broken ; kendine ait bir anahtarı yoktur. Şu olaya abone olmak: element_broken , bunu da kapsar. Aynı subject_id kullanılır; böylece PagerDuty olayı çözer, Opsgenie uyarıyı kapatır. Ek olarak şu alanları taşır: matched_page_views ve checked_page_views .
anomaly_detectedDün, önceki 28 günden belirgin şekilde farklıysa günde bir kez: çok daha az veya çok daha fazla oturum, düşen hedef oranı, sürtünme veya JS hatası içeren daha fazla oturum. Aynı metrik ve yön bir hafta boyunca sessiz kalır (ayarlanabilir). Bu olayın ait olduğu bir oturum yoktur: session_id ve session_url alanları null, link_url proje genel bakışını açar ve subject_id metrik, yön ve günü adlandırır. Şu alanları taşı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 ve okunabilir bir summary ve hint. Ziyaretçi verisi yoktur. Web Vitals için measurements , şu alanın yerini alır: sessions; şu alan: page (tüm site için boş) ve device (desktop veya mobil) nerede olduğunu belirtir; link_url ise Web Vitals sekmesini açar.
rage_clickÖfke tıklaması algılandığında
error_detectedÖn yüz istisnasında
ceKendi özel olaylarınız için toplu abonelik. Yukarıdaki olayları içermez — onların ayrı anahtarları vardır.

7. Hatalar & Durum Kodları

DurumAnlamı
200Başarılı.
401Eksik, hatalı biçimli veya iptal edilmiş API anahtarı.
404İstenen proje veya oturum mevcut değil ya da çalışma alanınıza ait değil.
429İstek sınırı aşıldı — bu anahtarla dakikada 60'tan fazla istek gönderiyorsunuz.
403Çalışma alanı planı REST API'yi içermiyor. Mesaj hem gereken planı hem mevcut planı belirtir.

8. Güvenlik notları

  • Salt okunur anahtarlar (mp_ro_) hiçbir şeyi değiştiremez. Yazma anahtarları (mp_rw_) yalnızca müşteri kimliği ekleyebilir; hiçbir anahtar veri silemez veya ham yeniden oynatma verilerini dışa aktaramaz.
  • Her istek otomatik olarak anahtarın kendi çalışma alanıyla sınırlandırılır — farklı bir çalışma alanı kimliği gönderip başkasının verilerini görmenin yolu yoktur.
  • Anahtarı istediğiniz zaman şu bölümden iptal edin: /api-keys; iptal anında geçerli olur.
  • API anahtarınızı parola gibi koruyun. Yanlışlıkla herkese açık bir depoya eklerseniz hemen iptal edin ve yeni bir anahtar oluşturun.

Sınırlı olay sayfaları (API v1, 14 Ekim 2026)

GET /api/v1/sessions/{session_id}/events varsayılan olarak en fazla 100 olay döndürür. per_page değerini 1 ile 100 arasında bir tam sayıya ayarlayın. Sonraki istekte cursor değerini değiştirmeden göndererek pagination.next_cursor alanını izleyin; aynı oturum ve çalışma alanını kullanın. Olaylar created_at ve event_id sırasındadır. İmleçler imzalanır ve o oturum ile çalışma alanına bağlanır. Toplam sayı veya sayısal sayfa döndürülmez.

Mevcut data dizisi ve params eşlemesi kullanılabilir kalır. pagination.returned gerçekten döndürülen sayıdır; pagination.has_more başka bir sayfa olduğunu belirtir. Tamamlandığında next_cursor null olur. Yanıt 524288 baytla sınırlıdır; bu yüzden sayfa per_page değerinden daha az olay içerebilir. Olay başına en fazla 128 parametre satırı döndürülür; fazlası varsa params_truncated true olur. Tekil dize parametreleri veritabanının 255 karakter sınırını korur. Kısaltılmış parametreler bu uç nokta üzerinden alınamaz. per_page değerini azaltmak parametre üst sınırını artırmaz.

Geçersiz sayfa boyutları, değiştirilmiş imleçler ve başka oturum/çalışma alanına ait imleçler 400 döndürür. Boyutu aşırı büyük tekil olay verileri 413 döndürür. Mevcut erişim kontrolleri duruma göre hâlâ 401, 403, 404 veya 409 döndürür.

Sınır, API anahtarı başına dakikada 60 kimliği doğrulanmış istek olarak kalır. Sınırın tükenmesi Retry-After: 60 ile 429 döndürür. Redis veya sınırlayıcı kullanılamıyorsa istekler Retry-After: 5 ile 503 döndürür; hiçbir zaman sınırsız kabul edilmezler. Retry-After değerine uyun ve rastgele geri çekilme süresi ekleyin; sıkı bir döngüde yeniden denemeyin. Olay veritabanı hataları da 503 döndürür. İmleçler bir anlık görüntüyü dondurmaz: daha eski zaman damgalı eşzamanlı eklemeler yeni bir tarama gerektirebilir.

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, yerel SDK önizlemesi için yalnızca Dev ortamında kullanılan bir arka uç kontrol yoludur. Üretimde devre dışı kalır. Arka uç Bearer anahtarları list/replay için okuma, register/grant/delete/disable için yazma kapsamı gerektirir. Ek yerel önizleme kullanılabilirlik kontrolleri uygulanır. Kalıcı çalışma alanı API anahtarlarını bir mobil uygulamaya asla gömmeyin.