API pública & claves API
Acceso programático ao espazo de traballo — lea proxectos, sesións, eventos personalizados e segmentos e engada ID de clientes ás sesións — protexido por claves API limitadas ao espazo de traballo.
1. Resumo
A API MousePlayer permite extraer datos do espazo de traballo aos seus paneis, almacén de datos ou ferramentas internas. Salvo engadir ID de clientes ás sesións (identify, require clave con ámbito de escritura; vexa Ámbitos das claves), é só de lectura: non se poden modificar nin eliminar datos mediante a API.
- URL base:
https://www.mouseplayer.com/api/v1/ - Todas as respostas son JSON.
- Cada petición autentícase cunha clave API e limítase automaticamente ao espazo de traballo desa clave — a clave dun espazo nunca pode ver os datos doutro, nin por accidente.
- A gravación completa da reprodución (movementos do rato e capturas DOM) non está exposta na API. Obtén metadatos de sesión, vistas de páxina, eventos personalizados e segmentos — suficiente para crear informes e paneis sen mover os datos de reprodución en bruto.
2. Autenticación
Cree e xestione as claves API en Claves API no menú da conta (/api-keys). Só os propietarios e administradores do espazo de traballo poden crear ou revogar claves.
Manteña a clave en segredo. Dá acceso de lectura a todo o espazo de traballo. A clave completa móstrase exactamente unha vez, xusto despois de creala — gárdea nun xestor de contrasinais ou caixa forte de segredos. Se a perde, revóguea e cree outra.
Envíe a clave como token Bearer na cabeceira Authorization de cada petición:
As claves ausentes, mal formadas ou revogadas reciben unha resposta 401 co seguinte contido:
Requisito do plan
A API REST forma parte dos plans Business e Enterprise e o plan aplicable é o do propietario do espazo de traballo, polo que o herdan os membros invitados. A comprobación execútase en cada petición, non só ao crear a clave — se se reduce o nivel do espazo, as claves existentes deixan de funcionar e devolven 403.
Ámbitos das claves
Cada clave leva o ámbito no prefixo para saber que fai con só mirala — nun .env, nun tícket ou nun terminal.
| Prefixo | Significado |
|---|---|
mp_ro_ | Só lectura. Le proxectos, sesións, eventos e segmentos. Non pode cambiar nada. |
mp_rw_ | Lectura e escritura. Todo o anterior máis engadir ID de clientes mediante o endpoint identify. |
403 cunha mensaxe que indica que é a clave e que necesita o endpoint. O ámbito non se pode cambiar despois — cree outra clave e revogue a anterior.3. Límites de frecuencia
Cada clave API limítase a 60 peticións por minuto, medidas nunha xanela móbil. Se supera o límite, as peticións reciben unha resposta 429 ata que se libere a xanela:
Está a crear algo que necesita máis límite? Contacte coa Asistencia e explíquenos o caso de uso.
4. Endpoints
GET/api/v1/projects
Lista todos os proxectos (sitios seguidos) do espazo de traballo.
GET/api/v1/projects/{channelid}/sessions
Lista as sesións de visitantes gravadas nun proxecto, as máis recentes primeiro. Paxinado.
| Parámetro de consulta | Descrición |
|---|---|
page | Número de páxina, predeterminado 1. |
per_page | Resultados por páxina, predeterminado 25, máximo 100. |
since | Só sesións que comezan nesta data ou despois (YYYY-MM-DD). |
until | Só sesións que comezan nesta data ou antes. |
GET/api/v1/sessions/{session_id}
Metadatos dunha sesión e as súas vistas de páxina. Exclúe deliberadamente os datos completos da reprodución — use o reprodutor do panel para iso.
GET/api/v1/sessions/{session_id}/events
Eventos personalizados activados nunha sesión (os mesmos que envía con mp('event', ...)), cos seus parámetros.
GET/api/v1/projects/{channelid}/segments
Lista os segmentos de visitantes definidos para un proxecto, tanto os propios como os de todo o espazo de traballo.
5. Engadir un ID de cliente desde o backend
O navegador a miúdo non sabe quen está aí. Nun produto B2B a identidade determínase tras iniciar sesión — no backend. Nunha tenda determínase coa confirmación do pedido. Este endpoint é para ese momento.
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}}O ID aparece na lista de sesións, pódese buscar nela e actívase o webhook session_identified — así chega ao CRM.
"changed": false e non se envía ningún webhook. Un pedido repetido non crea un segundo contacto potencial.| Estado | Cando |
|---|---|
400 | Falta un campo, user_id ten máis de 128 caracteres ou contén caracteres de control. Rexeitamos en lugar de truncar — un ID acurtado en silencio non coincide con nada no CRM e segue parecendo un éxito. |
404 | A sesión non existe ou non pertence ao espazo de traballo. A mesma resposta para ambos deliberadamente. |
403 | O plan do espazo de traballo non inclúe a API. |
6. Webhook: verificar a sinatura
Os webhook configúranse por proxecto en Integracións, onde tamén está o segredo de sinatura. Cada entrega leva estas cabeceiras:
| Cabeceira | Significado |
|---|---|
X-MousePlayer-Event | Nome do evento, p. ex. session_identified |
X-MousePlayer-Timestamp | Segundos Unix — parte do texto asinado |
X-MousePlayer-Attempt | 1 no primeiro intento, maior nos novos intentos |
X-MousePlayer-Signature | sha256=<hex> |
A sinatura é un HMAC-SHA256 de timestamp + "." + raw body, usando como clave o segredo de sinatura do proxecto.
// 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');
Entrega e novos intentos
Unha entrega fallida reinténtase despois de 1 min, 5 min, 15 min, 1 h e 6 h e despois abandónase. As respostas 4xx distintas de 408 e 429 non se reintentan — significan "non así", non "non agora". Responda 2xx rapidamente e faga o traballo despois; a entrega esgota o tempo de espera tras 10 segundos.
Eventos dispoñibles
| Evento | Actívase |
|---|---|
session_identified | Cando unha sesión recibe por primeira vez un ID de cliente — desde o navegador ou a API |
session_ended | Unha vez, ao pechar a sesión |
goal_reached | Unha vez por sesión cando un evento personalizado cumpre un dos obxectivos. Só obxectivos de tipo "event" — non se avalían os obxectivos URL, duración, vistas de páxina nin funís. Leva goal_id, goal_name, goal_value e currency. |
high_value_session | Cando un visitante supera por primeira vez nun día o limiar de valor deste proxecto. O limiar derívase da súa propia distribución de puntuacións (percentil 90 dos últimos 90 días), non dun número fixo, e non existe ata puntuar polo menos 20 visitantes. Leva visitor_id, value_score, threshold e a sesión dese día que máis paga a pena ver. |
funnel_dropoff | Ao final dunha sesión que entrou nun dos seus funís pero non o rematou. Indica o paso no que se detivo (dropped_at). Un abandono é a ausencia dun evento, polo que só se coñece tras rematar a sesión. As sesións que nunca entraron non son abandonos e non o activan. |
high_friction_session | Unha vez por sesión cando a puntuación de fricción alcanza por primeira vez o limiar (predeterminado: 60 de 100). Leva friction_score, os sinais que a explican (reasons) e o sinal que cruzou a liña (trigger). |
element_broken | Unha vez cando un elemento seguido non atopou nada en ningunha vista de páxina comprobada durante varios días — normalmente tras un relanzamento. Só se activa de novo despois de que a marca coincida e volva fallar. Este evento non pertence a ningunha sesión: session_id e session_url son null, link_url abre a marca no seu lugar e subject_id identifica a marca — a mesma en cada versión, polo que un selector novo que volva fallar se une á incidencia aberta. Leva rule_id, rule_name, selector, page, checked_page_views, window_days e last_matched. Sen datos de visitantes. |
element_recovered | O aviso de recuperación de element_broken: cando a marca realmente volve atopar un elemento — poucas vistas de páxina non abondan. Só se envía se element_broken se enviou por webhook e non ten interruptor propio: subscribirse a element_broken inclúeo. Usa o mesmo subject_id para que PagerDuty resolva a incidencia e Opsgenie peche a alerta. Leva matched_page_views e checked_page_views ademais. |
anomaly_detected | Unha vez ao día cando onte foi claramente distinto dos 28 días anteriores: moitas menos ou máis sesións, caída da taxa de obxectivos, máis sesións con fricción ou erros de JS. A mesma métrica e dirección non se notifican durante unha semana (axustable). Este evento non pertence a ningunha sesión: session_id e session_url son null, link_url abre o resumo do proxecto e subject_id identifica a métrica, a dirección e o día. Leva metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score e un summary lexible e hint. Sen datos de visitantes. Para Web Vitals, measurements substitúe sessions, e page (baleiro para todo o sitio) e device (desktop ou mobil) indican onde ocorreu; link_url abre entón a lapela Web Vitals. |
rage_click | Ao detectar un clic de rabia |
error_detected | Nunha excepción do cliente |
ce | Subscrición conxunta para os eventos personalizados propios. Esta non inclúe os eventos anteriores — teñen os seus propios interruptores. |
7. Erros & códigos de estado
| Estado | Significado |
|---|---|
200 | Éxito. |
401 | Clave API ausente, mal formada ou revogada. |
404 | O proxecto ou sesión solicitado non existe ou non pertence ao espazo de traballo. |
429 | Límite de frecuencia superado — envía máis de 60 peticións/minuto con esta clave. |
403 | O plan do espazo de traballo non inclúe a API REST. A mensaxe indica tanto o plan necesario como o actual. |
8. Notas de seguridade
- As claves de só lectura (mp_ro_) non cambian nada. As de escritura (mp_rw_) só poden engadir ID de clientes; ningunha pode eliminar datos nin exportar reproducións en bruto.
- Cada petición limítase automaticamente ao espazo de traballo da clave — non hai maneira de pasar outro ID de espazo de traballo e ver datos alleos.
- Revogue unha clave en calquera momento desde /api-keys; a revogación aplícase inmediatamente.
- Trate a clave API como un contrasinal. Se a publica accidentalmente nun repositorio público, revóguea inmediatamente e cree outra.
Páxinas de eventos limitadas (API v1, 14 de outubro de 2026)
GET /api/v1/sessions/{session_id}/events devolve ata 100 eventos de xeito predeterminado. Estableza per_page nun enteiro de 1 a 100. Siga pagination.next_cursor enviando cursor sen cambios na seguinte petición; conserve a mesma sesión e espazo de traballo. Os eventos ordénanse por created_at e event_id. Os cursores están asinados e vinculados a esa sesión e espazo de traballo. Non se devolve ningún total nin número de páxina.
A matriz data e o mapa params existentes seguen dispoñibles. pagination.returned é o número realmente devolto; pagination.has_more indica outra páxina. next_cursor é null ao rematar. A resposta limítase a 524288 bytes, polo que unha páxina pode conter menos eventos que per_page. Por evento devólvense como máximo 128 filas de parámetros; params_truncated é true se hai máis. Os parámetros de texto individuais conservan o límite de 255 caracteres da base de datos. Os parámetros truncados non están dispoñibles neste endpoint. Reducir per_page non aumenta o límite de parámetros.
Os tamaños de páxina non válidos, cursores alterados e cursores doutra sesión ou espazo de traballo devolven 400. Os datos excesivos dun evento individual devolven 413. As comprobacións de acceso existentes seguen devolvendo 401, 403, 404 ou 409 segundo corresponda.
O límite segue en 60 peticións autenticadas por clave API e minuto. Esgotalo devolve 429 con Retry-After: 60. Se Redis ou o limitador non están dispoñibles, as peticións devolven 503 con Retry-After: 5; nunca se aceptan sen límite. Respecte Retry-After e engada unha espera aleatoria; non reintente nun bucle axustado. Os fallos da base de datos de eventos tamén devolven 503. Os cursores non conxelan unha captura: as insercións simultáneas con marcas de tempo anteriores poden requirir outra exploración.
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 é unha ruta de control do backend só para Dev da vista previa do SDK nativo. Segue desactivada en produción. As claves Bearer do backend necesitan ámbito de lectura para list/replay e de escritura para register/grant/delete/disable. Aplícanse comprobacións adicionais de dispoñibilidade da vista previa nativa. Nunca integre claves API permanentes do espazo de traballo nunha aplicación móbil.