Docs
Explorar la documentación

Analytics REST API

The Privatus Analytics REST API: add .json to any app URL and send a token. Conventions and a reference of every operation, generated from the code.

Ver como Markdown

Every page and action in Privatus Analytics is also an API endpoint (only form pages such as new and edit have no JSON form). There's no separate /api/v1: add .json to a URL and send an API token.

sh
curl https://privatusanalytics.com/sites/pa_7Q2K9XH3AB/stats/aggregate.json?period=7d \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
json
{
  "data": {
    "period": { "from": "2026-09-23T00:00:00Z", "to": "2026-09-30T00:00:00Z" },
    "metrics": {
      "visitors": 1840, "visits": 2310, "pageviews": 5122,
      "views_per_visit": 2.22, "bounce_rate": 41.3,
      "visit_duration": 48000, "revenue": 129900
    }
  }
}

The reference below lists every operation with its method, path, permission, input schema and response schema. It's generated from the running code, as is the OpenAPI 3.1 document, so neither can drift from what the server does. The same operations are MCP tools.

Conventions#

Base URL https://privatusanalytics.com
Format JSON. Add .json to the path (or send Accept: application/json)
Auth Authorization: Bearer pat_… (Authentication)
Ids Public ids with a prefix: ws_… workspaces, pa_… sites, goal_… goals, seg_… segments, wh_… webhooks
Reads GET with query parameters
Writes POST, PATCH, DELETE with a JSON body of flat fields
Success { "data": … }, plus "meta" for lists
Errors { "error": { "code", "message", "details" } } (Errors)
Lists page and per_page (max 100) (Pagination)
Times ISO 8601 in UTC. Date parameters (from, to) are days in the site's timezone
Money Minor units (cents) in the site currency, e.g. revenue: 129900 = 1,299.00
Durations Milliseconds

Common tasks#

Task Operation
List workspaces GET /workspaces.json
List sites GET /workspaces/{workspace_id}/sites.json
Headline metrics GET /sites/{site_id}/stats/aggregate.json
Chart data GET /sites/{site_id}/stats/timeseries.json
Top pages, sources, countries… GET /sites/{site_id}/breakdown/{dimension}.json
Everything on the Overview GET /sites/{site_id}/overview.json
Live visitors GET /sites/{site_id}/live.json
Add a note (e.g. a deploy) POST /sites/{site_id}/notes.json

See Stats endpoints and Examples.

In this section#

Authentication · Errors · Pagination · Rate limits · Filters · Stats endpoints · Examples · Webhooks · Changelog and deprecation

Todas las operaciones

Autenticación

Envía Authorization: Bearer pat_…. Crea tokens en Ajustes del espacio de trabajo, Tokens de API. Guía de autenticación.

JSON en todas partes

Añade .json a cualquier ruta. Las respuestas son { "data": … } y los errores son { "error": { "code", "message" } }. Errores.

MCP

Envía JSON-RPC por POST a https://privatusanalytics.com/mcp con el mismo token. Cada operación de abajo es una herramienta. Guía de MCP.

Descargar openapi.json · 527 operaciones

Ajustes de correo

POST /email/preferences/:token/unsubscribe.json Parar todos los correos a una dirección que se puedan desactivar, con el token de su enlace de ajustes de correo email_preferences_unsubscribe_all

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/email/preferences/:token/unsubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
POST /email/preferences/:token.json Activar o desactivar los correos a una dirección, con el token de su enlace de ajustes de correo email_preferences_update

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/email/preferences/:token.json \
  -H "Content-Type: application/json" -d '{…}'

Alertas

POST /alerts/:id/acknowledge.json Reconocer el último incidente alerts_acknowledge

Marca la última incidencia sin confirmar de una alerta como vista por el usuario que llama. No resuelve la incidencia ni silencia la alerta: la alerta se resuelve sola cuando la condición desaparece. Si la alerta no tiene ninguna incidencia sin confirmar, la llamada falla con un error de validación. Devuelve la alerta. Usa alerts_history para ver las incidencias con su acknowledged_at y acknowledged_by. Solo necesita acceso de lectura a analíticas, así que los lectores pueden confirmar.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/alerts/:id/acknowledge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/alerts.json Crear una alerta alerts_create

Crea una regla de alerta que vigila un sitio (o todo el espacio de trabajo para kind usage) y notifica a los canales elegidos cuando se activa. La ruta recibe workspace_id. name y kind son obligatorios. kind decide qué más hace falta. threshold necesita site_id, metric (visitors, visits, pageviews, bounce_rate o conversion), operator (gt, gte, lt o lte) y threshold, y conversion necesita además goal_id. anomaly necesita site_id y metric (visitors, visits o pageviews), compara la última ventana con la misma ventana de cada una de las 4 semanas anteriores y usa sensitivity (low, medium o high). operator lt solo avisa de caídas, gt solo de picos y vacío de ambos. goal necesita site_id, goal_id y threshold (conversiones en la ventana). no_data necesita site_id y threshold en horas sin eventos (por defecto 24). usage no necesita sitio y threshold es el porcentaje de la cuota mensual de eventos (por defecto 80). uptime necesita site_id y, opcionalmente, uptime_check_id (por defecto todas las comprobaciones del sitio). ssl necesita site_id y threshold en días antes de que caduque un certificado o dominio (por defecto 14). vitals necesita site_id, metric (lcp, inp, cls, fcp o ttfb) y threshold en milisegundos (una puntuación para cls). subscriptions necesita site_id, metric (mrr_drop: el MRR cayó más de threshold por ciento en los últimos 30 días, churn_rate o mrr_churn_rate: la cancelación de los últimos 30 días supera threshold por ciento) y threshold (por defecto 10), y se omite mientras el sitio no tenga un proveedor de pagos conectado o nada que medir. window_minutes (por defecto 60, de 5 a 10080) es hasta dónde mira atrás cada evaluación. channel_ids vienen de notification_channels_list y sensitivity es medium por defecto. Las alertas se evalúan automáticamente cada 5 minutos. Los umbrales de bounce_rate y conversion son porcentajes de 0 a 100. Devuelve la alerta creada con el estado ok.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/alerts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /alerts/:id.json Eliminar una alerta alerts_delete

Elimina de forma permanente una regla de alerta y todo su historial de incidencias. No se puede deshacer y las notificaciones se detienen al instante. Para pausar una alerta sin perder el historial usa alerts_update con enabled false o alerts_mute. El id (alr_...) viene de alerts_list. Devuelve la alerta eliminada tal como era. Requiere permiso de escritura de contenido.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/alerts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /alerts/:id/history.json Historial de incidentes de una alerta alerts_history

Lista las incidencias de una alerta, de la más reciente a la más antigua y paginadas. Cada incidencia tiene triggered_at, resolved_at (null mientras siga abierta), value (el número medido cuando se activó, en la misma unidad que el umbral de la alerta), message (una descripción legible), acknowledged_at y acknowledged_by (nombre visible del miembro, o null). Establece open en true para ver solo las incidencias sin resolver. Usa alerts_acknowledge para marcar la última como vista y alerts_get para el estado actual de la regla.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/alerts/:id/history.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/alerts.json Listar alertas alerts_list

Lista las reglas de alerta de un espacio de trabajo (la ruta recibe workspace_id), ordenadas por nombre y paginadas. Devuelve un array data de alertas con la paginación en meta. Cada alerta tiene id (alr_...), site_id (pa_..., null para las alertas usage, que vigilan todo el espacio de trabajo), name, kind, metric, operator, threshold, window_minutes, sensitivity, goal_id, channel_ids (ids nch_...), state (ok o triggered), enabled, muted_until, last_triggered_at, last_evaluated_at y created_at. Acótala con site_id, state (ok o triggered) o kind. Usa site_alerts_list para listar las alertas de un sitio desde la ruta del sitio, alerts_get para una sola alerta y alerts_history para sus incidencias. Quien tenga acceso limitado a algunos sitios nunca ve las alertas usage.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/alerts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /alerts/:id/mute.json Silenciar (o reactivar) las notificaciones de una alerta alerts_mute

Silencia las notificaciones de una alerta durante un número de minutos, mientras sigue evaluándose y registrando incidencias en su historial. minutes es 60 por defecto, el máximo es 43200 (30 días) y 0 la reactiva de inmediato. La respuesta es la alerta con muted_until establecido al final del silencio (null cuando no está silenciada). Usa alerts_update con enabled false para dejar de evaluar por completo y alerts_acknowledge para marcar una incidencia como vista sin silenciar.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/alerts/:id/mute.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /alerts/:id.json Obtener una alerta alerts_get

Devuelve una regla de alerta por id (alr_..., de alerts_list o site_alerts_list). La respuesta es el objeto de la alerta con id, site_id (null para las alertas usage), name, kind, metric, operator, threshold, window_minutes, sensitivity, goal_id, channel_ids, state (ok o triggered), enabled, muted_until, last_triggered_at, last_evaluated_at y created_at. No incluye las incidencias: usa alerts_history para eso. threshold es un número cuya unidad depende de kind (consulta alerts_create). Requiere acceso de lectura a analíticas.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/alerts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /alerts/:id.json Actualizar una alerta alerts_update

Modifica una regla de alerta existente (id de alerts_list). Solo cambian los datos que envías, todo lo demás conserva su valor. Al resultado se le aplican las mismas reglas por tipo que en alerts_create, así que cambiar kind o metric puede exigir el site_id, goal_id, operator o threshold correspondiente. Envía channel_ids para reemplazar toda la lista de canales de notificación, y enabled false para dejar de evaluar sin eliminar. Para silenciar las notificaciones durante un tiempo pero seguir registrando incidencias usa alerts_mute. Devuelve la alerta actualizada.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/alerts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/alerts.json Listar las alertas de un sitio site_alerts_list

Lista las reglas de alerta de un sitio (la ruta recibe site_id), ordenadas por nombre y paginadas. Devuelve los mismos objetos de alerta y acepta los mismos filtros state y kind que alerts_list, pero solo para este sitio, así que las alertas usage (que no tienen sitio) no se incluyen. Elige esta opción cuando ya tengas un id de sitio y alerts_list cuando quieras todas las alertas del espacio de trabajo. Cada alerta tiene id (alr_...), site_id, name, kind, metric, operator, threshold, window_minutes, sensitivity, goal_id, channel_ids, state (ok o triggered), enabled, muted_until, last_triggered_at, last_evaluated_at y created_at.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/alerts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Analítica

GET /sites/:site_id/clicks.json Mapa de clics: los elementos con más clics del sitio, o de una página con el porcentaje de sus visitas que hizo clic en cada uno clicks_list

Clics por elemento del módulo de clics del script de seguimiento. Un elemento es un selector CSS corto (etiqueta, id y hasta dos clases, como máximo cuatro niveles), o [data-privatus-click="name"] cuando el sitio le puso nombre. Pasa path (empieza con una barra, tal como está guardado) para una página: entonces los elementos son {selector, clicks, visits, visit_share} y page_visits es el número de visitas que vieron la página, y visit_share es el porcentaje de ellas (de 0 a 100) que hizo clic en el elemento. Sin path, los elementos son {path, selector, clicks, visits} de todo el sitio. visits cuenta las visitas que hicieron clic al menos una vez. Devuelve period, path, page_visits y elements, con los de más clics primero. Nunca se guarda el texto de un elemento, ni coordenadas, ni el movimiento del ratón. Usa pages_detail para el resto de una página.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/clicks.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/overview.json Resumen del sitio: métricas, series del gráfico, paneles principales, visitantes en vivo y notas stats_overview

Una sola llamada que devuelve todo lo que muestra la página de resumen del sitio: úsala para responder a una pregunta general, como cómo le va a un sitio, en lugar de llamar a varias herramientas. Devuelve period, metrics (visitors, visits, pageviews, views_per_visit, bounce_rate, visit_duration, revenue), interval, series (una entrada por intervalo de tiempo), panels, notes y live_visitors. Con compare añade comparison_period, comparison, change y comparison_series, como en stats_aggregate y stats_timeseries. Las unidades coinciden con las de esas herramientas: bounce_rate es un porcentaje de 0 a 100, visit_duration es la mediana de milisegundos de interacción, revenue es un entero en unidades menores (céntimos). panels es un objeto cuyas claves son nombres de dimensión, cada una con sus 10 filas principales y su proporción, con el mismo formato de fila que stats_breakdown para esa dimensión. Por defecto devuelve channel, referrer, page, entry_page, country, device, browser, os, utm_campaign, event y goal. Envía panels para elegir otras dimensiones (cualquier nombre de dimensión salvo las claves prop). notes lista las anotaciones del rango como {id, date, end_date, title, url, color}. live_visitors cuenta los visitantes de los últimos 5 minutos. Para más de 10 filas de una dimensión usa stats_breakdown, y para un solo número usa stats_aggregate. Acepta los parámetros compartidos period, compare, filters y segment.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/overview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/experiments/external.json Informe de experimento: tasa de conversión por variante, mejora frente al control y significancia (prueba z de dos proporciones) experiments_report

Informa de una prueba A/B usando datos de eventos. Las visitas se asignan a la variante que figura en una propiedad de evento (el primer valor visto en la visita, por ejemplo la propiedad variant con los valores control y b), y una conversión es una visita que completó un objetivo. Los parámetros obligatorios son property (clave en minúsculas, hasta 64 caracteres) y goal_id (un objetivo activo, de goals_list). Devuelve period, property, goal {id, name}, control, confidence (0.95) y variants. Cada variante tiene visits, conversions, conversion_rate (porcentaje, de 0 a 100), control (true para la línea base), uplift (variación porcentual de la tasa de conversión respecto al control, null para el control o cuando la tasa del control es 0), z, p_value y significant (true cuando p_value es inferior a 0.05, con una prueba z de dos proporciones). El control es la variante que pasas en control, si no una llamada control, si no la variante con más visitas. Máximo 20 variantes, las más activas primero. Asegúrate antes de que el sitio envíe la variante como propiedad de evento. Acepta los parámetros compartidos period y filters. Para la tasa de conversión simple de un objetivo usa goals_get. Requiere el plan Business o Enterprise (si no, 402 plan_limit).

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/experiments/external.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/insights.json Cambios notables frente al periodo anterior, en lenguaje natural (mayores variaciones, cambios en la conversión de objetivos) insights_get

Cambios notables de un sitio explicados en lenguaje sencillo, comparados con el periodo anterior de la misma duración. Devuelve period, comparison_period e insights. El periodo abarca días completos hasta ayer y se elige con period (7d, 14d, 28d o 30d, por defecto 7d). Cada insight tiene dimension (total, channel, page, country o goal), metric, value, previous, current, change y sentence. change es un porcentaje para los recuentos y puntos porcentuales para la tasa de conversión de un objetivo, y sentence es una frase en inglés lista para leer. Incluye el total de visitantes y de páginas vistas, los dos mayores cambios por dimensión (variaciones del 20 por ciento o más con al menos 10 visitas o vistas) y los objetivos cuya tasa de conversión se movió medio punto o más. Lo más importante primero, limitado por limit (por defecto 8, máximo 20). Los resultados se conservan durante el día. Para cifras exactas usa stats_aggregate y stats_breakdown, y usa esto para encontrar qué cambió.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/insights.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/journeys.json Recorridos: las 3 rutas de 3 pasos más frecuentes después de una página (o de cualquier entrada), o antes de una página u objetivo journeys_explore

Explora las rutas de páginas de tres pasos más habituales dentro de las visitas. En modo forward (por defecto) muestra las rutas posteriores a una página de inicio indicada en path, o posteriores a cualquier entrada cuando path está vacío. En modo reverse muestra las rutas que llevan a una página final (path) o a un objetivo (goal_id, que activa reverse automáticamente). reverse necesita path o goal_id. path debe empezar con una barra. Devuelve period, mode, path, goal, sampled, sample_rate (porcentaje), total_visits y el grafo de rutas con nodes y links por paso, limitado a limit páginas por paso (de 2 a 12, por defecto 6). Por encima de 100,000 visitas los datos se muestrean. Los filtros de página se ignoran porque cortarían las rutas. Las rutas se construyen por visita, ya que no se guarda ningún id de visitante. Acepta los parámetros compartidos period, filters y segment. Para las páginas vecinas de una página usa pages_detail, y para la conversión por paso usa funnels_get.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/journeys.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/pages/detail.json Detalle de página: métricas, páginas anterior y siguiente, fuentes, Web Vitals, eventos y mapa de clics de una ruta pages_detail

Una página en profundidad. Pasa path (debe empezar con una barra, por ejemplo /pricing), exactamente como está guardado (sin cadena de consulta ni host). Devuelve period, path, url, metrics, previous_pages, next_pages, sources, vitals, events, clicks, goals y notes. metrics tiene visitors, visits, pageviews, entrances, exits, entry_rate, exit_rate y bounce_rate (porcentajes, de 0 a 100), time_on_page (mediana en milisegundos) y scroll_depth (mediana en porcentaje), estos dos últimos null si no hay datos de interacción. previous_pages y next_pages son las páginas vistas antes y después en la misma visita, como {value, count, share}, con (entrance) y (exit) como valores especiales. sources tiene los principales canales y referentes de las visitas que entraron por esta página. vitals tiene los valores p75 de cada Web Vital con sus valoraciones. events son los eventos personalizados lanzados en la página, clicks son los selectores de elementos más pulsados, goals son los objetivos completados en ella y notes son las anotaciones que la mencionan. Usa stats_breakdown con dimension page para clasificar páginas y referrers_detail para un sitio de referencia.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/pages/detail.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/referrers.json Referentes: los sitios que enlazan a este sitio, con visitantes, interacción, tipo de tráfico y número de páginas de enlace referrers_list

Clasifica los sitios externos que enviaron visitantes, con lo que envió cada uno. Las visitas directas (sin referente) se excluyen. Devuelve period, summary, channels, page, limit, has_more y rows. summary tiene visitors, visits, pageviews, bounce_rate (porcentaje), visit_duration (mediana de milisegundos de interacción), revenue (unidades menores, céntimos), sites (número de sitios de referencia) y share (porcentaje de todas las visitas que llegaron desde referentes). channels muestra los tipos de tráfico como {value, visitors, visits}. Cada fila tiene value (el host del referente), visitors, visits, pageviews, bounce_rate, visit_duration, revenue, channel (su canal habitual), linking_pages (cuántas páginas distintas de ese sitio enlazan aquí) y share (porcentaje de los visitantes referidos). Ordena con sort (visitors, visits, pageviews o revenue, por defecto visitors), acota con search (texto contenido en el host) y recorre las páginas con page y limit (máx. 100) mientras has_more sea true. Usa referrers_detail para un solo sitio. Acepta los parámetros compartidos period, compare, filters y segment.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/referrers.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/referrers/detail.json Detalle del referente: métricas y tendencia de un sitio de referencia, sus páginas de enlace, páginas de entrada, países, dispositivos, campañas y conversiones referrers_detail

Un sitio de referencia en profundidad. Pasa referrer como el host sin www y sin ruta (por ejemplo news.ycombinator.com), el mismo valor que en referrers_list. Devuelve period, referrer, url, channel (su canal más habitual), metrics, share (porcentaje de todas las visitas), interval, series (el tráfico a lo largo del tiempo), linking_pages, landing_pages, channels, countries, devices, campaigns, goals y, con compare, comparison, change y comparison_series. metrics y series usan los mismos campos y unidades que stats_aggregate y stats_timeseries. linking_pages son las páginas del referente que enviaron visitantes, como filas con path, url, visitors y share (las cadenas de consulta nunca se guardan). landing_pages son los lugares donde entraron esos visitantes. channels, countries, devices y campaigns son los valores principales con sus métricas, y goals lista los objetivos que completaron con conversions y conversion_rate. Usa referrers_list para clasificar los sitios de referencia y stats_breakdown con dimension referrer para una lista simple.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/referrers/detail.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/stats/aggregate.json Métricas principales de un periodo (con comparación) stats_aggregate

Las cifras principales de un periodo, en un solo objeto. Devuelve period {from, to} y metrics {visitors, visits, pageviews, views_per_visit, bounce_rate, visit_duration, revenue}. Con compare devuelve además comparison_period, comparison (las mismas métricas del otro rango) y change (variación porcentual por métrica, null cuando el valor anterior era 0). Unidades: bounce_rate es un porcentaje de 0 a 100 (10.9 significa 10.9%). visit_duration es la mediana del tiempo de interacción de una visita en milisegundos. revenue es un entero en unidades menores (céntimos) de la moneda del sitio. views_per_visit es un decimal. Los visitantes se cuentan por día porque no se guarda ningún id de visitante persistente, así que quien vuelve otro día cuenta de nuevo. Úsalo para totales y para la variación entre periodos. Usa stats_timeseries para un gráfico a lo largo del tiempo, stats_breakdown para los valores principales de una dimensión y stats_overview para todo en una sola llamada. Acota cualquiera de ellas con filters (consulta filters para los nombres de dimensión y los operadores).

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/stats/aggregate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/breakdown/:dimension.json Valores principales de una dimensión (páginas, fuentes, países…) stats_breakdown

Los valores principales de una dimensión con sus métricas, los más importantes primero y paginados. La dimensión es la última parte de la ruta y debe ser un nombre exacto de su descripción (por ejemplo country, page, channel, utm_campaign, prop:plan). Devuelve period, dimension, label, page, limit, has_more y rows. Pide la página siguiente mientras has_more sea true. Cada fila tiene value y share (porcentaje del total del periodo). Los demás campos de una fila dependen de la dimensión. Las dimensiones de visita (channel, referrer, referrer_url, utm_*, ref, hostname, country, language, device, browser, browser_version, os, os_version, screen, entry_page, exit_page, interaction, bot_score) dan visitors, visits, pageviews, views_per_visit, bounce_rate, visit_duration y revenue. page da pageviews, visits, time_on_page (milisegundos) y scroll_depth (porcentaje), sin visitors. event y prop:<key> dan completions, visits, revenue y conversion_rate. goal da goal_id, completions, conversions, conversion_rate y revenue. Unidades: bounce_rate y conversion_rate son porcentajes (0 a 100), las duraciones son milisegundos, revenue está en unidades menores (céntimos). Una dimensión incorrecta devuelve un 422 que lista los nombres válidos. Usa search para buscar un valor en todas las filas y filters para acotar los datos antes (por ejemplo, las páginas visitadas desde un país). Para una página o un referente en profundidad usa pages_detail o referrers_detail. Las dimensiones interaction y bot_score requieren el plan Business o Enterprise: como desglose responden con 402 plan_limit en otros planes, y un filtro sobre una se omite.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/breakdown/:dimension.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/stats/timeseries.json Métricas por intervalo de tiempo para gráficos stats_timeseries

Métricas por intervalo de tiempo, para gráficos y tendencias. Devuelve period, interval (el intervalo realmente usado) y series, una lista de {date, visitors, visits, pageviews, views_per_visit, bounce_rate, visit_duration, revenue}, una entrada por intervalo con date como el inicio del intervalo en ISO 8601. Con compare devuelve además comparison_series para el otro rango, intervalo a intervalo. Las unidades son las mismas que en stats_aggregate: bounce_rate es un porcentaje (0 a 100), visit_duration es la mediana de milisegundos de interacción, revenue está en unidades menores (céntimos). interval es auto por defecto, que elige minuto, hora, día, semana o mes según el rango. Indícalo para forzar un tamaño de intervalo. Usa stats_aggregate para un total único y stats_breakdown para dividir por una dimensión como country o page.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/stats/timeseries.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Analítica de testimonios

GET /sites/:site_id/testimonials/analytics/breakdown.json Desglosa una métrica de testimonios por formulario, solicitud, widget, muro, testimonio, canal, página, país u origen testimonial_stats_breakdown

Devuelve filas, la mayor primero, cada una con key, label, value y share (un porcentaje del total), o numerator y denominator para una tasa. Una fila de un registro (formulario, solicitud, widget, muro, testimonio) incluye su id. Cada dimensión acepta solo algunas métricas: formulario y canal aceptan las métricas de formulario, solicitud las métricas de solicitud, widget y muro sus propias vistas, clics, tasa de clics y video_plays, testimonio acepta testimonial_views y video_plays, página y país aceptan las métricas de vistas y clics, y origen acepta new_testimonials. Un par que no encaja responde con 422 e indica las métricas que sí.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/analytics/breakdown.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/analytics/export.json Pone en cola un archivo de una sección de la analítica de testimonios testimonial_stats_export

Crea una exportación de tipo testimonial_stats para el periodo indicado y la devuelve en cola. Consulta exports_get hasta que status sea complete y luego exports_download. section elige las filas: days (una fila por día, semana o mes con cada métrica), forms, channels, requests, widgets, walls, pages, testimonials, sources o countries. El archivo se conserva 7 días. Responde con 422 in_progress cuando ya hay demasiadas exportaciones en cola.

Permiso: analytics.export

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/analytics/export.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/analytics.json Lee la analítica de testimonios de un sitio en una sola llamada testimonial_stats_overview

Devuelve todo lo que muestra la pestaña Analítica de Testimonios para un periodo: cards (form_views, submissions, completion_rate, answer_rate, widget_views, wall_views, cada una con previous y change cuando se indica compare), chart (una métrica a lo largo del tiempo), una fila por formulario, solicitud, widget y muro, channels (cómo se abrieron los formularios), pages (dónde se vieron los widgets y muros), top_testimonials, new_testimonials (por origen y por estado actual) y countries. Las tasas son porcentajes de 0 a 100 y son null cuando no hay nada por lo que dividir. blank es true mientras el sitio nunca ha contado nada, y recorded lista las métricas que ha contado alguna vez. Son totales diarios de la función de testimonios, no analítica web: usa stats_overview para visitantes y vistas de página.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/analytics.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/analytics/timeseries.json Lee una métrica de testimonios por día, semana o mes testimonial_stats_timeseries

Devuelve puntos con date, to, value y, cuando se indica compare, previous y previous_date, además de total, previous_total y change. Una tasa (completion_rate, answer_rate, widget_click_rate, wall_click_rate) se calcula a partir de los totales de cada intervalo y es null en un intervalo sin nada por lo que dividir. new_testimonials se cuenta a partir de los propios testimonios por el día en que se añadió cada uno.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/analytics/timeseries.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

App móvil

GET /workspaces/:workspace_id/app.json Obtener lo que la app móvil necesita para abrir un workspace mobile_bootstraps_get

Devuelve, para un workspace (la ruta toma workspace_id), el rol y los permisos de quien llama, features (qué informes restringidos incluye el plan: traffic_quality, bot_detection, external_experiments, campaign_costs, status_pages, traffic_rules, experiment_advanced (los ajustes avanzados de un experimento) y survey_ai_themes (temas para las respuestas escritas de una encuesta) como true o false, y retention_months como número de meses o null si no hay límite), sites_count (los sitios que puede abrir quien llama) y min_app_version (la versión más antigua de la app móvil que la API sigue atendiendo). La app móvil lo lee una vez al abrir un workspace, para poder mostrar un informe que el plan no incluye como no incluido en lugar de pedirlo. Requiere analytics.read.

Permiso: analytics.read · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/app.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /account/device.json Detener las notificaciones push a la app móvil mobile_devices_delete

Elimina el registro push del inicio de sesión de la app móvil que llama, de modo que el dispositivo no recibe más pushes. El inicio de sesión se mantiene y la app puede registrarse de nuevo. Cerrar sesión (POST /oauth/revoke con el refresh token) también lo elimina. Solo un token de la app móvil puede llamar a esta operación.

Permiso: member · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/account/device.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /account/device.json Obtener el registro push de la app móvil mobile_devices_get

Devuelve el dispositivo del inicio de sesión de la app móvil que llama: registered (false hasta que la app registró un token push), platform, locale, timezone, app_version, kinds (todos los tipos de push que existen), muted_kinds y muted_site_ids (lo que la persona desactivó). Solo un token de la app móvil puede llamar a esta operación.

Permiso: member · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/account/device.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /account/device.json Registrar la app móvil para notificaciones push mobile_devices_update

Registra el dispositivo del inicio de sesión de la app móvil que llama para recibir notificaciones push, o cambia lo que recibe. Solo cambian los datos que envías. La primera llamada necesita platform y push_token. Un dispositivo recibe un push de uptime (un chequeo cayó o se recuperó), alert (una alerta se activó o se resolvió), site_audit (terminó una auditoría del sitio), experiment (un experimento tiene resultado o terminó) y usage (el límite mensual está casi o totalmente usado), para cada sitio que su miembro puede abrir, en todos los planes. muted_kinds y muted_site_ids desactivan tipos y sitios, y cada uno reemplaza su lista completa. Si registras un token push que tiene otro inicio de sesión de la app, pasa a este. Solo un token de la app móvil puede llamar a esta operación. Es una de las dos escrituras que puede hacer un token así.

Permiso: member · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/account/device.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Archivos de testimonios

POST /sites/:site_id/testimonials/media/uploads.json Inicia una subida, o añade un archivo desde una dirección web testimonial_media_uploads_create

Dos formas. Para subir, envía filename, content_type y byte_size: la respuesta incluye upload, con la url a la que hacer PUT del archivo, las cabeceras que enviar con él y, para un archivo grande, partes que se pueden enviar una a una. Luego llama a testimonial_media_uploads_finish. O envía source_url y el archivo se descarga y se procesa por ti: consulta testimonial_media_get hasta que su estado sea ready. Límites: vídeo y audio hasta 500 MB y tan largos como admita el plan (2 minutos en Pro, 10 minutos en Business, ninguno en Free, donde el servidor responde con 402 plan_limit), imágenes hasta 10 MB, un logotipo hasta 2 MB.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/media/uploads.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/media/:id.json Elimina un archivo que ningún testimonio conserva testimonial_media_delete

Un archivo que pertenece a un testimonio se elimina con el testimonio, a través de la papelera. Los archivos guardados se eliminan y sus direcciones se borran de la caché.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/media/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/media/uploads/:id/finish.json Indica que una subida está completa, para que el archivo se compruebe y procese testimonial_media_uploads_finish

Llámalo una vez enviado el archivo. El archivo debe estar en el almacén de subidas y tener exactamente el tamaño prometido. Llamarlo dos veces es seguro.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/media/uploads/:id/finish.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/media/:id/retry.json Reintenta un archivo fallido testimonial_media_retry

Procesa el archivo de nuevo a partir de la subida que se conservó. La subida se conserva 24 horas después de un fallo. Después el servidor responde con not_retryable y el archivo hay que subirlo de nuevo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/media/:id/retry.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/media/:id.json Obtiene un archivo con su estado y dónde cargarlo testimonial_media_get

La url es la dirección duradera del archivo terminado en el host de medios, y es null hasta que el estado es ready. La dirección es la misma para todos y no está firmada, así que pasa solo la dirección de un archivo cuyo campo shareable sea true.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/media/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Asistente

POST /sites/:site_id/ask.json Hacer una pregunta en una conversación nueva (cuenta para el límite mensual de preguntas de IA) assistant_ask

Inicia una nueva conversación de Ask en un sitio y responde a su primera pregunta usando las analíticas de ese sitio. Úsalo para una pregunta en lenguaje sencillo sobre un sitio. Usa assistant_ask_followup para continuar una conversación existente y las herramientas de estadísticas cuando ya conozcas la consulta exacta. La respuesta la produce un modelo de IA que ejecuta por su cuenta consultas de analíticas de solo lectura, así que la llamada puede tardar varios segundos. Cuenta como una pregunta de IA de la cuota mensual del espacio de trabajo (5 en Free, 20 en Pro, 100 en Business) y falla con un error de límite cuando la cuota se agota. La pregunta puede tener como máximo 2,000 caracteres. Las conversaciones son privadas para el miembro que las inició y se eliminan 30 días después de su último mensaje. Devuelve la conversación (id, site_id, title tomado de la pregunta, created_at, updated_at, expires_at) con un array messages. Cada mensaje tiene role (user o assistant), content (el texto de la respuesta), queries (las consultas de analíticas exactas que ejecutó el asistente), chart (definición de gráfico, puede ser null), goal_draft (objetivo sugerido, puede ser null), recuentos de tokens y created_at. Si la respuesta falla, la conversación se elimina y no se cuenta ninguna pregunta. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/ask.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/ask/:id.json Eliminar una conversación de Preguntar y sus mensajes assistant_conversations_delete

Elimina de forma permanente una conversación de Ask y todos sus mensajes al instante. No se puede deshacer. Obtén el id de la conversación de assistant_conversations_list. Solo el miembro que inició una conversación puede verla y eliminarla. Requiere analytics.read y un site_id. Devuelve el resumen de la conversación eliminada (id, site_id, title, marcas de tiempo). No reembolsa las preguntas de IA ya contadas en el mes.

Permiso: analytics.read

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/ask/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/ask.json Listar tus conversaciones de Preguntar de un sitio assistant_conversations_list

Lista las conversaciones de Ask del miembro que ha iniciado sesión en un sitio, las actualizadas más recientemente primero. Las conversaciones de otros miembros nunca se muestran. Úsalo para encontrar un id de conversación para assistant_conversations_get, assistant_ask_followup o assistant_conversations_delete. Cada elemento tiene id, site_id, title (la primera pregunta, truncada a 80 caracteres), created_at, updated_at y expires_at, pero no messages. Paginado con page y per_page (máximo 100). Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/ask.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/ask/:id.json Una conversación de Preguntar: preguntas, respuestas, las consultas detrás de ellas y gráficos assistant_conversations_get

Devuelve una conversación de Ask con todo su historial de mensajes. Obtén el id de la conversación de assistant_conversations_list o del resultado de assistant_ask. Los campos son id, site_id, title, created_at, updated_at, expires_at (30 días después del último mensaje, y entonces la conversación se elimina) y messages. Cada mensaje tiene role (user o assistant), content, queries (las consultas de analíticas que ejecutó el asistente), chart (puede ser null), goal_draft (puede ser null) e input_tokens y output_tokens (enteros que pueden ser null). Solo el miembro que inició la conversación puede leerla. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/ask/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/ask/:ask_conversation_id/messages.json Hacer una pregunta de seguimiento en una conversación (cuenta para el límite mensual de preguntas de IA). Devuelve la respuesta. assistant_ask_followup

Hace una pregunta de seguimiento dentro de una conversación de Ask existente, de modo que el asistente conserva como contexto las preguntas y respuestas anteriores. Usa assistant_ask para iniciar una conversación nueva. Obtén conversation_id de assistant_conversations_list. La llamada puede tardar varios segundos porque el asistente ejecuta consultas de analíticas de solo lectura. Cada pregunta cuenta para la cuota mensual de preguntas de IA del espacio de trabajo (5 en Free, 20 en Pro, 100 en Business) y falla con un error de límite cuando se agota. La pregunta puede tener como máximo 2,000 caracteres. Devuelve solo el mensaje nuevo del asistente (no toda la conversación) con id, role, content (la respuesta), queries (las consultas exactas ejecutadas), chart (puede ser null), goal_draft (puede ser null), input_tokens, output_tokens y created_at. Requiere analytics.read y solo funciona con tus propias conversaciones.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/ask/:ask_conversation_id/messages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Auditoría del sitio

GET /sites/:site_id/audit/issues.json Lista los problemas de una auditoría del sitio, una fila por comprobación site_audit_issues_list

Lista los problemas de una auditoría, una fila por cada comprobación que marcó algo, los peores primero (errores, luego advertencias, luego avisos, cada grupo por URL afectadas). Cada fila tiene check_key (úsalo con site_audit_issues_get y las herramientas de silenciado), title, category, severity (error, warning o notice), affected (URL marcadas, sin contar las silenciadas), added y fixed (cambios desde la auditoría anterior) y pageviews (visitas a las páginas afectadas en los 30 días anteriores a la auditoría). Por defecto usa la última auditoría terminada, o pasa audit_id. Filtra con severity, category y new_only (solo comprobaciones con URL nuevas desde la auditoría anterior). Paginado con page y per_page (máx. 100, por defecto 50). Para ver qué URL marcó una comprobación usa site_audit_issues_get. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit/issues.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/audit/issues/:check_key.json Obtén una comprobación de la auditoría del sitio: por qué importa, cómo corregirla y las URL afectadas site_audit_issues_get

Detalle de una comprobación de una auditoría, por check_key de site_audit_issues_list (por ejemplo title_missing). Devuelve audit_id, issue (la misma fila que en la lista), why (qué significa el problema), fix (cómo corregirlo), muted (true si toda la comprobación está silenciada para el sitio) y urls, las URL marcadas con page_id (úsalo con site_audit_pages_get), url, pageviews, detail (datos adicionales sobre el hallazgo, puede estar vacío), is_new y muted. sort es pageviews (por defecto, las más visitadas primero) o url. Paginado con page y per_page (máx. 100, por defecto 25). Por defecto usa la última auditoría terminada, o pasa audit_id. Las URL silenciadas van al final. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit/issues/:check_key.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/audit/mutes/bulk.json Silencia una comprobación de la auditoría del sitio en varias URL, o varias comprobaciones completas, en una sola llamada site_audit_mutes_bulk

Silencia muchos hallazgos en una sola solicitud, todo o nada. Usa una de dos formas. O bien envía check_key más urls (hasta 100 URL) para silenciar una comprobación en varias páginas, o bien envía check_keys (hasta 100) para silenciar comprobaciones enteras para el sitio. No mezcles urls con check_keys. Una comprobación desconocida o una URL no válida hace fallar toda la solicitud y no silencia nada. Los elementos ya silenciados se devuelven tal como están. Los recuentos y la puntuación de la última auditoría se actualizan una sola vez al final. Devuelve la lista de silenciados. Deshaz cada uno con site_audit_mutes_delete. Necesita content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/audit/mutes/bulk.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/audit/mutes.json Silencia una comprobación de la auditoría del sitio, para todo el sitio o para una URL site_audit_mutes_create

Silencia una comprobación para el sitio, o solo para una URL. check_key viene de site_audit_issues_list. Omite url para silenciar la comprobación en todas partes, o pasa una URL completa (como https://example.com/old) para silenciarla solo en esa página, donde la URL se normaliza como lo hace el rastreador. Los recuentos y la puntuación de la última auditoría se actualizan al instante. Silenciar lo mismo dos veces devuelve el silenciado existente en lugar de un error. Para silenciar muchos a la vez usa site_audit_mutes_bulk, y para deshacerlo usa site_audit_mutes_delete. Necesita content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/audit/mutes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/audit/mutes/:id.json Deja de silenciar una comprobación de la auditoría del sitio site_audit_mutes_delete

Quita un silenciado, localizado por su id de site_audit_mutes_list, para que la comprobación o la URL vuelva a contar en la puntuación de la auditoría. La última auditoría se recuenta de inmediato. Solo quita el silenciado y no elimina datos de la auditoría. Devuelve el silenciado quitado. Necesita content.write.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/audit/mutes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/audit/mutes.json Lista las comprobaciones que un sitio ha silenciado site_audit_mutes_list

Lista las comprobaciones silenciadas para el sitio, las más recientes primero. Un silenciado oculta una comprobación en todo el sitio (url es null) o para una sola URL, de modo que esos hallazgos quedan fuera de los recuentos y de la puntuación aunque las auditorías sigan registrándolos. Cada fila tiene id (un id de silenciado, úsalo con site_audit_mutes_delete), site_id, check_key, title, url (null para un silenciado de todo el sitio), muted_by (el nombre del miembro, null si se desconoce) y created_at. Filtra con check_key. Paginado con page y per_page (máx. 100). Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit/mutes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/audit/notifications.json Activa o desactiva tu correo de resumen de auditoría para un sitio site_audit_notifications_update

Activa o desactiva el correo semanal de resumen de la auditoría para el miembro que llama en un sitio. Es una preferencia personal y no afecta a otros miembros. enabled true envía al miembro el resumen después de las auditorías de este sitio, false lo detiene. Devuelve site_id, enabled y all_sites_enabled (false cuando el miembro desactivó los correos de auditoría para todos los sitios en los ajustes de su cuenta, lo cual prevalece sobre esto). Cualquier miembro con analytics.read puede cambiar su propio ajuste.

Permiso: analytics.read

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/audit/notifications.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/audit/pages.json Lista y filtra las páginas de una auditoría del sitio site_audit_pages_list

El explorador de páginas, que lista las URL de una auditoría (la última terminada por defecto, o audit_id). kind es page (por defecto, documentos HTML), resource (imágenes, scripts, hojas de estilo) o external (enlaces a otros sitios). Filtra por state (queued, fetched, skipped, blocked, failed), status_class (2xx, 3xx, 4xx o 5xx), indexable, in_sitemap, has_issues (contando solo los problemas sin silenciar), depth (clics desde la página de inicio) y query (texto en la URL o el título). sort es pageviews (por defecto), inlinks, depth, response_ms (las más lentas primero) o word_count (las de menos palabras primero). Cada fila tiene id (un UUID para site_audit_pages_get), url, path, kind, state, status, depth, indexable, indexability_reason, title, word_count, response_ms, cache_status, inlinks, pageviews, in_sitemap e issues (recuento). Paginado con page y per_page (máx. 100). Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit/pages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/audit/pages/:id.json Obtén una página auditada: sus metadatos, problemas, enlaces entrantes y salientes site_audit_pages_get

Todo lo que la auditoría guardó sobre una URL, por id (un UUID de site_audit_pages_list o de las urls de site_audit_issues_get). Devuelve id, audit_id, page (url, status, redirect_to, content_type, bytes, response_ms, title, meta_description, h1, canonical, robots_meta, indexable e indexability_reason, word_count, lang, hreflang, schema_types, etiquetas sociales, images_count, images_missing_alt, recuentos de enlaces, link_score, in_sitemap, has_tracker, pageviews y search_clicks, fetched_at y más), redirect_target_id (la página a la que redirige dentro de la auditoría, o null), issues (check_key, title, category, severity, detail, is_new, muted), e inlinks y outlinks (hasta 100 cada uno con page_id, url, status, kind, anchor, nofollow, count). Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit/pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/audit/settings.json Obtén los ajustes de auditoría de un sitio site_audit_settings_get

Devuelve los ajustes de auditoría del sitio. Los campos son site_id, enabled (auditorías programadas activadas o desactivadas, activadas por defecto), include_subdomains, check_external_links, exclude_paths, ignored_params, extra_start_urls, next_run_at (cuándo toca la siguiente auditoría programada, null si no hay ninguna), page_limit (páginas por auditoría en el plan actual, null cuando es ilimitado) e interval_days (días entre auditorías programadas en el plan). Un sitio que nunca cambió sus ajustes devuelve los valores por defecto. Cámbialos con site_audit_settings_update. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit/settings.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/audit/settings.json Cambia los ajustes de auditoría de un sitio site_audit_settings_update

Cambia cómo se audita el sitio. Solo cambian los datos que envías. enabled activa o desactiva las auditorías programadas y manuales (activarlo programa la siguiente auditoría a un intervalo del plan de distancia). include_subdomains y check_external_links son booleanos. Las tres listas reemplazan la lista guardada, no se fusionan, así que envía la lista completa. exclude_paths son prefijos de ruta que el rastreador omite y cada uno debe empezar con una barra (hasta 50). ignored_params son nombres de parámetros de consulta que nunca generan una página distinta, como utm_source o sessionid (hasta 50, letras, dígitos, punto, guion y guion bajo). extra_start_urls son URL http o https completas que se rastrean además de la página de inicio (hasta 20). Una lista también se puede enviar como texto con una entrada por línea. Devuelve los ajustes actualizados. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/audit/settings.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /audit/unsubscribe/:token.json Cancela la suscripción a los correos de resumen de auditoría del sitio con el token de un correo site_audit_unsubscribes_create

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/audit/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/audit/cancel.json Cancela la auditoría del sitio que se está ejecutando site_audit_cancel

Detiene la auditoría que se está ejecutando o está en cola para el sitio. La auditoría se marca como canceled y no se informa de nada del rastreo sin terminar. Una auditoría cancelada no consume la cuota mensual del plan Free. Falla con un error de validación si no hay ninguna auditoría en curso. Devuelve la auditoría cancelada. Necesita content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/audit/cancel.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/audit/compare.json Compara dos auditorías del sitio: URL añadidas y corregidas por comprobación site_audit_compare

Compara dos auditorías del sitio, comprobación por comprobación. audit_id es la auditoría más reciente y base_id la más antigua. Ambos tienen valores por defecto razonables (la última auditoría terminada frente a la auditoría terminada anterior), y la herramienta los intercambia si los pasas en el orden incorrecto. Devuelve audit y base (cada uno un resumen de auditoría, base null si no hay nada anterior) y checks, un objeto por cada comprobación cuyas URL cambiaron, con check_key, title, category, severity, base_affected, affected, added y fixed (recuentos de URL), ordenadas con los errores primero. Las comprobaciones sin cambios se omiten. Para dos auditorías consecutivas, added y fixed son exactos, y para auditorías más separadas son el cambio neto. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit/compare.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/audit.json Inicia una auditoría del sitio ahora site_audit_run

Inicia ahora un nuevo rastreo y auditoría SEO del sitio. Rastrea las páginas públicas del sitio en segundo plano, así que responde de inmediato con la nueva auditoría en estado queued. Consulta site_audit_get (campo live) o site_audit_history hasta que el estado sea complete. Se rechaza con un error de validación cuando la auditoría está desactivada en site_audit_settings_update, cuando ya hay otra auditoría en cola o en ejecución, cuando se inició una auditoría manual en las últimas 24 horas y, en el plan Free, cuando se ejecutó cualquier auditoría en los últimos 30 días (las fallidas y canceladas no cuentan). Los sitios sin verificar y sin eventos también están limitados a una auditoría al día por dominio. Las páginas rastreadas están limitadas por el plan (Free 100, Pro 1,000, Business 10,000). Comprueba antes can_run en site_audit_get. Necesita content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/audit.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/audit/history.json Lista las auditorías de un sitio, las más recientes primero site_audit_history

Lista las auditorías del sitio, de la más reciente a la más antigua, cada una con id (aud_...), status (queued, running, analyzing, complete, partial, failed o canceled), trigger (first, scheduled o manual), score (0 a 100, null hasta que termina), score_band, page_limit, pages_crawled, urls_discovered, errors, warnings, notices, new_issues, fixed_issues, failure (motivo cuando falló, si no null) y las marcas de tiempo. Filtra con status. Paginado con page y per_page (máx. 100). Usa los ids con site_audit_get, site_audit_compare y las herramientas de problemas y páginas. Para el estado actual de una auditoría usa site_audit_get. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit/history.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/audit.json Obtén el resumen de la auditoría del sitio: puntuación, totales, principales problemas por tráfico y la auditoría en curso site_audit_get

El resumen de la auditoría SEO del sitio, la mejor primera llamada para preguntas sobre auditorías. Por defecto describe la última auditoría terminada, o pasa audit_id (aud_..., de site_audit_history) para una más antigua. El resultado tiene audit (la auditoría terminada con score de 0 a 100, score_band, score_delta, recuentos de errores, advertencias y avisos, pages_crawled, page_limit, capped, summary y detalles de robots, o null si no ha terminado ninguna), live (la auditoría que se está ejecutando ahora, o null), enabled y next_run_at (la programación), can_run con run_blocked (live, disabled o too_soon) y run_allowed_at (cuándo se permite de nuevo site_audit_run), changes (recuentos de URL añadidas y corregidas por gravedad), trend (hasta 30 puntuaciones recientes como id, finished_at, score), top_issues (hasta 10 comprobaciones ordenadas por gravedad y luego por páginas vistas de las páginas afectadas) y email_enabled (tu propia preferencia de correo de resumen). Continúa con site_audit_issues_list para todos los problemas y site_audit_pages_list para las URL. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/audit.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Ayuda y comentarios

POST /help.json Enviar una pregunta o comentario al equipo de Privatus Analytics support_message_send

El mensaje se envía por correo al equipo con los datos de tu cuenta, espacio de trabajo y plan adjuntos. La respuesta y un acuse de recibo llegan al correo de tu cuenta. Hasta 10 mensajes al día.

Permiso: member

Ejemplo
curl -X POST https://privatusanalytics.com/help.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Búsqueda

GET /sites/:site_id/search.json Informe de búsqueda: clics, impresiones, CTR, posición, principales consultas y páginas, páginas de destino y oportunidades search_report

Rendimiento de búsqueda de Google Search Console y Bing Webmaster, unido a las métricas de las páginas de destino del propio sitio. Elige provider: all (el valor por defecto) suma todos los buscadores conectados, con la posición ponderada por impresiones y los países y dispositivos solo de Google, o google o bing por separado, y el period habitual o from y to personalizados. limit (de 1 a 100, por defecto 25) limita las filas de cada tabla. El resultado tiene period, provider, connection (property, status, last_synced_at del buscador elegido, o null cuando no está conectado o provider es all), connections (cada buscador conectado con provider, property, status y last_synced_at), latest_date (el día más reciente con datos), delayed (true cuando el rango se extiende más allá de latest_date), totals y series (por día), cada uno con clicks, impressions, ctr (un porcentaje, no una fracción, 2 decimales) y position (posición media, 1 es la mejor, null si se desconoce), breakdowns de query, page, country y device (filas de value más las mismas cuatro métricas), landing_pages (páginas principales con visits, bounce_rate y conversion_rate como porcentajes, y conversions) y opportunities (low_ctr_queries con al menos 100 impresiones y un CTR por debajo del 2 por ciento, y páginas striking_distance con una posición media de 8 a 20). Los valores de country son los que informa el proveedor. Usa stats_breakdown para los datos de visitantes y esta herramienta para lo que ocurre antes del clic. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/search.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /sites/:site_id/search/connections/:provider.json Desconectar Search Console o Bing y eliminar sus datos search_disconnect

Desconecta un proveedor de búsqueda (google o bing) de un sitio y elimina de forma permanente sus datos de búsqueda importados de ese proveedor. No se puede deshacer. La autorización de Google también se elimina cuando ningún sitio la usa. Falla si ese proveedor no está conectado. Devuelve la conexión quitada. Necesita sites.manage.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/search/connections/:provider.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/search/sync.json Importar datos de búsqueda ahora search_sync

Pone en cola una importación inmediata de datos de búsqueda para un proveedor conectado (google, el valor por defecto, o bing) en lugar de esperar a la programación habitual. Responde de inmediato (HTTP 202) con la conexión y la importación se ejecuta en segundo plano. Consulta search_report y observa connection.last_synced_at. Los motores de búsqueda informan con un retraso de un par de días, así que los días más recientes quedan vacíos incluso después de una sincronización. Falla si el proveedor no está conectado. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/search/sync.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Campañas

POST /sites/:site_id/campaigns/costs.json Definir el gasto de una campaña en un mes campaign_costs_create

Registra el gasto publicitario de una campaña en un mes, para que campaigns_list pueda mostrar el coste por adquisición y el retorno de la inversión publicitaria. Si ya existe una entrada para la misma campaña y mes, se reemplaza y no se duplica, así que también es seguro llamarlo dos veces. campaign es el valor de utm_campaign tal como aparece en tus enlaces con seguimiento, month es YYYY-MM (se acepta una fecha completa como 2026-09-15 y se ajusta al primer día del mes) y amount está en unidades mayores como número (1250.50, no unidades menores). currency es un código ISO de 3 letras opcional y por defecto es la moneda del sitio. La respuesta devuelve la entrada guardada con amount_minor en unidades menores. Para muchas filas a la vez usa campaign_costs_import. Necesita content.write. Necesita el plan Business o Enterprise (si no, 402 plan_limit).

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/campaigns/costs.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/campaigns/costs/:id.json Eliminar una entrada de coste de campaña campaign_costs_delete

Elimina de forma permanente una entrada de gasto, localizada por su id de campaign_costs_list. No se puede deshacer, y el CPA y el ROAS de esa campaña y mes dejan de incluir el gasto de inmediato. Los demás meses y campañas no se tocan. Devuelve la entrada eliminada. Necesita content.write. Necesita el plan Business o Enterprise (si no, 402 plan_limit).

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/campaigns/costs/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/campaigns/costs/import.json Importar costes de campaña desde CSV (campaign,month,amount[,currency]) campaign_costs_import

Importa en bloque el gasto publicitario desde un CSV, la forma rápida de cargar muchas campañas y meses. Envía el texto del CSV en csv (lo mejor para herramientas y llamadas a la API) o sube un archivo en file (solo multipart). La primera fila debe ser una cabecera que contenga campaign, month y amount, con una columna opcional currency, por ejemplo campaign,month,amount,currency y luego spring_sale,2026-09,1250.50,USD. month es YYYY-MM, amount está en unidades mayores y currency es por defecto la moneda del sitio. Las filas se insertan o actualizan por campaña y mes, así que volver a importar el mismo archivo no duplica nada. Los límites son 1 MB y 5,000 filas. Una fila incorrecta no detiene la importación. La respuesta tiene imported (recuento de guardadas), failed (recuento de rechazadas) y errors (los primeros 50 mensajes, cada uno con su fila, donde la fila 2 es la primera fila de datos). Una columna de cabecera ausente, un archivo demasiado grande o un CSV mal formado hace fallar toda la solicitud. Necesita content.write. Necesita el plan Business o Enterprise (si no, 402 plan_limit).

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/campaigns/costs/import.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/campaigns/costs.json Listar entradas de coste de campaña campaign_costs_list

Lista las entradas de gasto publicitario registradas para un sitio, primero el mes más reciente y después por nombre de campaña. Cada fila es una campaña en un mes con amount_minor (un entero en unidades menores de la moneda, así que 125050 significa 1,250.50), currency (ISO 4217, en mayúsculas), month como YYYY-MM y el id de la entrada (un UUID, úsalo para campaign_costs_update y campaign_costs_delete). Pasa campaign para ver una sola campaña (coincidencia sin distinguir mayúsculas del valor de utm_campaign). Paginado con page y per_page (máx. 100). Los costes alimentan el CPA y el ROAS de campaigns_list, así que aquí se comprueba qué gasto tiene una campaña. Necesita analytics.read. Necesita el plan Business o Enterprise (si no, 402 plan_limit).

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/campaigns/costs.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/campaigns/costs/:id.json Cambiar una entrada de coste de campaña campaign_costs_update

Modifica una entrada de gasto existente, localizada por su id de campaign_costs_list. Solo cambian los datos que envías, así que envía solo amount para corregir una cifra. amount está en unidades mayores (1250.50) y se guarda en unidades menores, month es YYYY-MM y currency es un código ISO de 3 letras. Cambiar campaign o month a una combinación que ya tiene otra entrada falla con un error de validación en lugar de fusionarlas. Para corregir el gasto de una campaña y un mes sin conocer el id, llama a campaign_costs_create, que reemplaza la entrada existente. Necesita content.write. Necesita el plan Business o Enterprise (si no, 402 plan_limit).

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/campaigns/costs/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/campaigns/builder.json Crear y validar una URL con etiquetas UTM campaigns_builder

Construye una URL con etiquetas UTM para una página de destino y comprueba los valores. No se guarda nada ni se leen datos, así que es seguro llamarlo repetidamente. Pasa destination (una URL https:// completa) más utm_source, utm_medium, utm_campaign, utm_content y utm_term según haga falta, o elige un preset (newsletter, social, paid_search, etc.) para rellenar utm_source y utm_medium cuando los dejas en blanco. Devuelve url (null cuando hay un error), valid, destination, preset, los valores utm_* limpiados, issues (una lista de {field, level, message}, donde el nivel error bloquea la URL y warning solo sugiere una corrección, como pasar a minúsculas) y presets (los valores de preset disponibles). Los valores se limpian a minúsculas y sin espacios. Usa campaigns_hygiene para encontrar valores UTM desordenados que ya existen en tu tráfico y campaigns_list para informar de las campañas que se han ejecutado. Para conservar un enlace etiquetado con una URL corta y recuento de clics, usa links_create.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/campaigns/builder.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/campaigns/hygiene.json Higiene de UTM: valores casi duplicados, problemas de estilo y fuentes desconocidas campaigns_hygiene

Encuentra valores UTM desordenados en el tráfico de un periodo para que puedas corregir el etiquetado. Devuelve period, duplicates, style_issues y unknown_sources. duplicates agrupa valores de utm_source, utm_medium o utm_campaign que solo difieren en mayúsculas, espacios o puntuación (Facebook, facebook y face-book), cada uno como {field, suggestion, variants: [{value, visits}]}, con la grafía más visitada como sugerencia. style_issues lista los valores que rompen la convención de minúsculas y sin espacios como {field, value, visits, suggestion} (hasta 50). unknown_sources lista los valores de utm_source que no son un canal reconocido como {value, visits} (hasta 50). Solo se analizan los 500 valores principales por campo. Los recuentos son visitas. Las sugerencias son solo consejos y no se cambia nada. Para fusionar variantes en un solo canal usa channel_rules_create. Acepta los parámetros compartidos period y filters. Usa campaigns_list para el rendimiento y campaigns_builder para crear URL etiquetadas limpias.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/campaigns/hygiene.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/campaigns.json Resumen de campañas con conversiones, ingresos, coste, CPA y ROAS campaigns_list

Informe de rendimiento de campañas construido a partir de utm_campaign, con coste y retorno de la inversión publicitaria. Devuelve period, currency (la moneda del sitio), goal_id y goal_name (el objetivo cuyas conversiones se cuentan), campaigns, totals y unconverted_costs. Cada campaña tiene visitors, visits, conversions, conversion_rate (porcentaje de 0 a 100, conversiones divididas entre visitas), revenue y sources (filas por fuente y medio con las mismas métricas). Cuando existen costes (de campaign_costs_list), una campaña también tiene cost, cpa (coste por conversión, null cuando no hay conversiones) y roas (ingresos divididos entre el coste, una proporción como 2.5, null cuando no hay coste). El dinero (revenue, cost, cpa) es un entero en unidades menores (céntimos) de la moneda del sitio. Los costes se asocian a los nombres de campaña sin distinguir mayúsculas y se prorratean por los días de cada mes dentro del periodo. Una campaña con coste pero sin tráfico también aparece. Máximo 100 campañas, las más activas primero. Solo se incluyen las visitas con utm_campaign. goal_id es por defecto el primer objetivo activo, así que pásalo explícitamente para medir un objetivo concreto (los ids vienen de goals_list). Usa campaigns_hygiene para limpiar los nombres y stats_breakdown con dimension utm_campaign para un simple reparto del tráfico.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/campaigns.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Canales de notificación

DELETE /channels/:id.json Eliminar un canal de notificación notification_channels_delete

Elimina un canal de notificación y lo quita de todas las alertas que lo usaban, así que esas alertas dejan de notificar allí. No se puede deshacer y las propias alertas se conservan. El id (nch_...) viene de notification_channels_list. Devuelve el canal eliminado.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/channels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/channels.json Listar canales de notificación notification_channels_list

Lista los canales de notificación de un espacio de trabajo (la ruta recibe workspace_id), ordenados por nombre y paginados. Un canal es un lugar al que se entregan las alertas. Cada uno tiene id (nch_...), kind (email, slack, teams, discord, webhook, pagerduty, opsgenie o push), name, target (un resumen enmascarado, como las direcciones de correo o el final de una URL de webhook, los secretos nunca se devuelven), last_used_at y created_at. Filtra por kind. Usa los ids como channel_ids en alerts_create y alerts_update. Quien tenga acceso limitado a algunos sitios solo ve los canales usados por alertas de sus sitios.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/channels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /channels/:id/send_test.json Enviar un mensaje de prueba a través de un canal notification_channels_send_test

Envía un mensaje de prueba real a través del canal (un correo, una publicación en un chat, una llamada de webhook, etc.), así que úsalo solo cuando el usuario lo quiera. La llamada falla con un error que indica la causa si la entrega no funciona, y si no devuelve el canal. Los envíos de prueba tienen un límite de frecuencia por espacio de trabajo, y los canales de correo también por dirección externa. Úsalo después de notification_channels_create o notification_channels_update para confirmar que una URL o una clave son correctas.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/channels/:id/send_test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /channels/:id.json Obtener un canal de notificación notification_channels_get

Devuelve un canal de notificación por id (nch_..., de notification_channels_list). La respuesta tiene kind, name, target (un resumen enmascarado, los secretos como URL de webhook y claves nunca se devuelven), last_used_at y created_at. Usa notification_channels_send_test para comprobar que entrega.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/channels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /notifications/unsubscribe/:token.json Cancelar la suscripción de una dirección a un canal de alertas o a una comprobación de disponibilidad con el token de un correo notification_unsubscribes_create

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/notifications/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /push_subscription.json Registrar un navegador para notificaciones push push_subscriptions_create

Registra el navegador actual para las alertas push web, usando los tres valores de la PushSubscription del navegador (endpoint, p256dh y auth). Una suscripción recibe alertas de todos los espacios de trabajo a los que pertenece el miembro, de todos los sitios, por lo que un token de API solo puede usarla cuando puede leer todo su espacio de trabajo y el miembro no tiene otro espacio de trabajo. Volver a llamarla con el mismo endpoint actualiza las claves y mueve la suscripción a quien llama. El endpoint debe ser la URL https pública de un servicio push. Esto solo registra el navegador, así que las alertas siguen necesitando un canal de notificación de tipo push (notification_channels_create). Devuelve endpoint_host (el nombre de host del servicio push, no el endpoint completo) y created_at. Las sesiones abiertas mediante el proveedor de identidad de un espacio de trabajo no pueden usarla.

Permiso: member

Ejemplo
curl -X POST https://privatusanalytics.com/push_subscription.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /push_subscription.json Eliminar el registro push de un navegador push_subscriptions_delete

Quita uno de los registros push del navegador del miembro que ha iniciado sesión para que ese navegador deje de recibir notificaciones de alertas. Pasa el mismo endpoint que se usó con push_subscriptions_create. Falla con no encontrado cuando no existe esa suscripción para el miembro. Devuelve la suscripción quitada como endpoint_host y created_at. No elimina ningún canal de notificación. Está sujeto a las mismas restricciones de token que push_subscriptions_create.

Permiso: member

Ejemplo
curl -X DELETE https://privatusanalytics.com/push_subscription.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Colecciones de testimonios

POST /sites/:site_id/testimonials/collections/:id/items.json Añade testimonios a una colección manual testimonial_collections_add_items

Hasta 100 a la vez. Se unen al final, o al principio con position top, en el orden dado. La respuesta incluye meta.undo_id, que testimonials_bulk_undo acepta durante 7 días. Una colección inteligente no acepta nada a mano.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/collections/:id/items.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/collections.json Crea una colección, manual o inteligente testimonial_collections_create

kind manual se arma a mano, y testimonial_ids la inicia llena. kind smart se mantiene al día con condiciones: filas de campo, operador y valor unidas por match. La respuesta incluye el recuento y las reglas en lenguaje sencillo, así que una llamada convierte una frase en una colección viva. Prueba antes las reglas con testimonial_collections_preview. El tipo nunca cambia después.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/collections.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/collections/:id.json Envía una colección a la papelera durante 30 días testimonial_collections_destroy

Sus testimonios no se tocan. Un widget o muro que alimenta no muestra nada de ella hasta que se restaure. Restáurala con testimonial_trash_restore. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/collections/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/collections.json Lista las colecciones de un sitio testimonial_collections_list

Cada colección viene con cuántos testimonios contiene ahora mismo, cuántos de ellos están aprobados, sus reglas en lenguaje sencillo cuando es inteligente, y los widgets y muros que alimenta. Las colecciones en la papelera se omiten.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/collections.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/collections/preview.json Prueba un conjunto de reglas sin guardar nada testimonial_collections_preview

Responde con cuántos testimonios coinciden ahora mismo, las reglas en lenguaje sencillo y cinco ejemplos. Úsalo antes de testimonial_collections_create o testimonial_tags_update. Una fila no válida es un 422 que indica la fila.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/collections/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /sites/:site_id/testimonials/collections/:id/items.json Saca testimonios de una colección manual testimonial_collections_remove_items

Hasta 100 a la vez. Los testimonios en sí no cambian. La respuesta incluye meta.undo_id, y un deshacer devuelve cada uno a su lugar.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/collections/:id/items.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/collections/:id/reorder.json Mueve un testimonio a otro lugar de una colección manual testimonial_collections_reorder

Indica el lugar con exactamente uno de position (contado desde 1), before_id o after_id. El orden es el que se sirve a cada widget y muro que alimenta la colección.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/collections/:id/reorder.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/collections/:id.json Obtiene una colección con sus recuentos, sus reglas y lo que alimenta testimonial_collections_get

Sus testimonios son testimonials_list con collection_id.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/collections/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/collections/:id.json Cambia el nombre, la descripción, las reglas o el orden de entrega de una colección testimonial_collections_update

Solo cambia lo que se envía. Enviar conditions reemplaza todas las reglas de una colección inteligente. El tipo es fijo.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/collections/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Comentarios privados

GET /sites/:site_id/testimonials/forms/:form_id/feedback.json Lista los comentarios privados de un formulario, los más recientes primero testimonial_feedback_list

Un comentario privado es una respuesta con una valoración de 1 a 3 en un formulario con enrutamiento de valoraciones bajas activado (desde Business). Nunca es un testimonio, nunca es público y nunca se cuenta.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/forms/:form_id/feedback.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/forms/:form_id/feedback/:id/mark_read.json Marca una respuesta de comentario privado como leída, o como no leída de nuevo testimonial_feedback_mark_read

Establece read_at en una respuesta de comentario privado, o lo borra con read false. Marcar una respuesta que ya está leída conserva la hora en que se leyó por primera vez. No se envía nada a la persona que la escribió.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/forms/:form_id/feedback/:id/mark_read.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/forms/:form_id/feedback/:id.json Obtiene una respuesta de comentario privado testimonial_feedback_get

Devuelve la valoración, el texto, el nombre que dio la persona y cuándo se leyó. Un comentario privado es una respuesta con una valoración baja en un formulario con enrutamiento de valoraciones bajas activado. Nunca es un testimonio y nunca es público.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/forms/:form_id/feedback/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Compartir

GET /badge/:site_id.json Insignia contador de visitantes (SVG) para un sitio público badges_get

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/badge/:site_id.json
GET /share/:token/breakdown/:dimension.json Valores principales de una dimensión compartida shares_breakdown

Los valores principales de una dimensión detrás de un enlace compartido, el equivalente compartido de stats_breakdown. La ruta recibe token (la última parte de la URL compartida) y dimension, que debe pertenecer a una sección que el enlace comparte, por ejemplo sources comparte channel, referrer y referrer_url, pages comparte page, entry_page, exit_page y hostname, campaigns comparte las dimensiones utm_, locations comparte country y language, technology comparte device, browser, os y screen, conversions comparte goal y events comparte event. Una dimensión fuera de las secciones del enlace se rechaza con un error de validación. limit es de 1 a 100 filas (por defecto 10). Las filas tienen los mismos campos y unidades que stats_breakdown para esa dimensión. El periodo bloqueado y los filtros del enlace prevalecen sobre period, from, to y filters, y los filtros de quien llama se ignoran cuando el enlace no los permite. Un enlace con contraseña necesita la cabecera X-Share-Password.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/share/:token/breakdown/:dimension.json
GET /share/:token.json Resumen del panel compartido para un token de enlace compartido shares_overview

Lee el dashboard detrás de un enlace compartido para personas que no tienen cuenta. El token de la ruta es la última parte de una URL compartida (/share/<token>) y es la única credencial, un enlace con contraseña necesita además la cabecera X-Share-Password, y un enlace sso necesita un miembro con sesión iniciada. También acepta un id de sitio (pa_...) cuando el sitio tiene activado su dashboard público. Devuelve los mismos datos que stats_overview, limitados a lo que comparte el enlace. Es decir, period, metrics (visitors, visits, pageviews, views_per_visit, bounce_rate como porcentaje, visit_duration en milisegundos, revenue en unidades menores), la serie del gráfico para interval, los datos de comparación cuando se define compare y panels con los valores principales solo de las secciones compartidas. Añade site (id, name, domain, timezone), sections y locked_period. live_visitors aparece solo cuando el enlace comparte live. Un periodo bloqueado y filtros bloqueados en el enlace prevalecen sobre period, from, to y filters. Usa shares_breakdown para más filas de una dimensión. Para tus propios sitios usa stats_overview.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/share/:token.json

Conexiones de compra de testimonios

DELETE /sites/:site_id/testimonials/settings/purchase_connections/:id.json Desconecta una cuenta de pagos testimonial_purchase_connections_delete

Elimina la conexión y su clave. A los compradores que aún esperan su primer correo no se les pregunta. La solicitud permanente se conserva como registro de lo que se envió.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/settings/purchase_connections/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/settings/purchase_connections.json Lista las conexiones de compra de un sitio testimonial_purchase_connections_list

Cada una con su regla, su estado y su solicitud permanente. La clave nunca se devuelve. paused es true en un plan sin solicitudes después de una compra: la conexión se conserva, no lee pagos y no pregunta a nadie.

Permiso: sites.manage

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/purchase_connections.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Creatividades de anuncios

POST /sites/:site_id/experiments/ads/:ad_placement_id/creatives.json Añade una creatividad a un espacio publicitario ad_creatives_create

Añade una imagen con la proporción del espacio (al menos de su tamaño, el doble se ve más nítido) y la dirección a la que lleva un clic. Envía la imagen como archivo multipart, o image_url para que se descargue. Se procesa en segundo plano, así que consulta ad_creatives_get hasta que state sea ready. La programación, los dispositivos y las rutas son de Pro y superiores. Requiere content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/experiments/ads/:ad_placement_id/creatives.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/experiments/ads/:ad_placement_id/creatives/:id.json Elimina una creatividad y su imagen ad_creatives_delete

Elimina de forma permanente una creatividad y su imagen. Una que compara un experimento no se puede eliminar: desactívala en su lugar. La herramienta MCP no lo ejecuta y responde con human_only y la página donde una persona lo elimina. Requiere content.write.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/experiments/ads/:ad_placement_id/creatives/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/experiments/ads/:ad_placement_id/creatives/:id.json Obtiene una creatividad con su estado ad_creatives_get

Una creatividad está en processing hasta que se genera su imagen y después en ready (o failed, con el motivo en error). Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/experiments/ads/:ad_placement_id/creatives/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/experiments/ads/:ad_placement_id/creatives/:id.json Cambia una creatividad ad_creatives_update

Cambia el enlace, el peso, la programación o la segmentación, la desactiva (active false) o sustituye la imagen. Solo cambian las entradas enviadas. Una imagen nueva sustituye a la anterior cuando está lista. Requiere content.write.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/experiments/ads/:ad_placement_id/creatives/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Cuenta

GET /account.json Obtener tu perfil y preferencias account_get

Devuelve el perfil y las preferencias del miembro que ha iniciado sesión. Úsalo para leer los ajustes antes de cambiarlos con account_update. Trata de la persona, no de un espacio de trabajo. El plan y las facturas del espacio de trabajo están en billing_get. Los campos son email, unconfirmed_email (se rellena mientras un cambio de correo espera confirmación, si no null), name (puede ser null), theme (system, light o dark), default_landing (sites o last_site), locale (código de idioma de la aplicación con sesión iniciada), timezone (nombre IANA, puede ser null), shortcuts_enabled, reduce_motion, product_emails, site_audit_emails, marketing_emails, newsletter (todos booleanos, donde true significa suscrito), two_factor (booleano), passkeys (número de passkeys registradas) y created_at (ISO 8601). Una sesión abierta solo mediante el proveedor de identidad de un espacio de trabajo ve únicamente email y los ajustes de visualización.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/account.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /account.json Actualizar tu perfil y preferencias account_update

Actualiza el perfil, las preferencias de visualización y las suscripciones de correo del miembro que ha iniciado sesión. Solo cambian los datos que envías, todo lo demás se queda como está. Cambiar email no surte efecto de inmediato. Se envía un correo de confirmación a la nueva dirección (con límite de frecuencia) y unconfirmed_email muestra la dirección pendiente hasta que se confirme. Los tokens de API no pueden cambiar la dirección de correo ni volver a activar marketing_emails después de una baja, ambas cosas requieren un navegador con sesión iniciada. Desactivar marketing_emails sí está permitido. Las sesiones abiertas por un proveedor de identidad del espacio de trabajo solo pueden cambiar los ajustes de visualización (theme, default_landing, locale, timezone, shortcuts_enabled, reduce_motion). Devuelve la cuenta actualizada con el mismo formato que account_get. No elimina la cuenta ni puede cambiar los ajustes del espacio de trabajo.

Permiso: member

Ejemplo
curl -X PATCH https://privatusanalytics.com/account.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Destinatarios de solicitudes de testimonios

POST /sites/:site_id/testimonials/requests/:request_id/recipients.json Añade personas a una solicitud testimonial_request_recipients_create

Hasta 500 en una llamada. Añadidas a un borrador, esperan a testimonial_requests_send. Añadidas a una solicitud en curso, reciben su primer correo de inmediato. La respuesta indica cuántas se pusieron en cola y cuántas se omitieron, por motivo. Añadir a una solicitud en curso envía correos a personas fuera del espacio de trabajo, así que se avisa al miembro por correo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:request_id/recipients.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/requests/:request_id/recipients.json Quita a personas elegidas de una solicitud testimonial_request_recipients_delete

Solo personas a las que no se envió nada (queued o skipped). Acepta hasta 100 direcciones en el cuerpo. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/requests/:request_id/recipients.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/requests/:request_id/recipients/import.json Añade personas a una solicitud desde un archivo CSV testimonial_request_recipients_import

Dos llamadas. Envía el archivo (o su texto como csv) para obtener las columnas, sus primeras filas y un upload_token. Luego envía la asociación de número de columna a campo. Hasta 5 MB y 10.000 filas. Añadir a una solicitud en curso envía correos a personas fuera del espacio de trabajo, así que se avisa al miembro por correo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:request_id/recipients/import.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/requests/:request_id/recipients.json Lista las personas de una solicitud testimonial_request_recipients_list

Filtra por la situación actual de una persona: el estado opened es "abrió y no hizo clic ni respondió". La dirección de correo es null salvo que quien llama pueda editar contenido.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/requests/:request_id/recipients.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/requests/:request_id/recipients/resume.json Reanuda a personas elegidas de una solicitud testimonial_request_recipients_resume

Continúan donde se detuvieron. Acepta hasta 100 direcciones en el cuerpo. Esto envía correos a personas fuera del espacio de trabajo, así que se avisa al miembro por correo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:request_id/recipients/resume.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/requests/:request_id/recipients/stop.json Detiene a personas elegidas de una solicitud testimonial_request_recipients_stop

No reciben más correos. Cada una conserva su estado y gana "stopped". Acepta hasta 100 direcciones en el cuerpo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:request_id/recipients/stop.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Detección de bots

GET /sites/:site_id/bot-detection.json Informe de detección avanzada de bots: visitas a las páginas trampa (honeypot) del sitio, por página y por lo que delató al bot bot_detection_report

Informa de las visitas a las páginas trampa (honeypot) del sitio. Una página trampa es una página a la que solo se llega por un enlace oculto y que se configura como la página de detección avanzada de bots, como muestra la aplicación. Estas visitas son bots, así que nunca son páginas vistas ni visitas y no aparecen en stats_overview ni en stats_breakdown. Elige el rango con period (7d, 30d (por defecto), 90d o 12mo). Las visitas se conservan durante 12 meses. El resultado tiene period, from (el inicio del rango), has_data (false hasta la primera visita), totals (hits, páginas distintas, automated (visitas en las que el tracker detectó un navegador automatizado) y no_interaction (visitas sin entrada de puntero, teclado o táctil)), pages (hasta 50 filas con path, hits y last_hit_at), reasons (visitas por resultado del filtro estándar de bots: known_bot, automation, datacenter, empty_user_agent, referrer_spam, o undetected para una visita que el filtro habría contado como una persona) y recent (las últimas 50 visitas con occurred_at, path, country, browser, device, bot_reason, automation e interacted). Con cada visita no se conserva ninguna dirección IP ni User-Agent, solo hashes con clave de ellos que no pueden identificar a nadie, y esos nunca se devuelven. Necesita analytics.read y el plan Business o Enterprise (si no, 402 plan_limit).

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/bot-detection.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Disponibilidad

POST /sites/:site_id/uptime.json Añadir una comprobación de disponibilidad a un sitio uptime_checks_create

Añade una comprobación de disponibilidad vinculada a un sitio. Usa workspace_uptime_checks_create para una comprobación que no pertenece a ningún sitio. kind decide el destino. http comprueba el código de estado de url, keyword comprueba que el cuerpo de la respuesta de url contiene keyword, tcp se conecta a host y port, y dns comprueba que host se resuelve. Los campos de otros tipos se ignoran. url es por defecto la página de inicio del sitio en las comprobaciones http. expected_status (100 a 599, por defecto 200), http_method (GET o HEAD) y timeout_seconds (1 a 30, por defecto 20) se aplican a las comprobaciones http y keyword. interval_seconds es el tiempo entre sondeos, debe ser al menos el mínimo del plan (Free 300, Pro 60, Business 30) y por defecto es 300 o el mínimo si es mayor. public true permite que la comprobación aparezca en una página de estado. Se rechazan las direcciones privadas e internas, y el plan limita el número de comprobaciones por espacio de trabajo (Free 3, Pro 20, Business 100). El primer sondeo se ejecuta en cuestión de instantes, y status empieza como pending. Necesita el permiso uptime.manage. Devuelve la comprobación con id (upc_...).

Permiso: uptime.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /uptime/checks/:id.json Eliminar una comprobación de disponibilidad y su historial uptime_checks_delete

Elimina de forma permanente una comprobación de disponibilidad con sus resultados y su historial de incidencias, y la quita de cualquier página de estado que la muestre. No se puede deshacer. Usa uptime_checks_pause para dejar de sondear pero conservar el historial. El id viene de uptime_checks_list. Necesita el permiso uptime.manage. Devuelve la comprobación eliminada.

Permiso: uptime.manage

Ejemplo
curl -X DELETE https://privatusanalytics.com/uptime/checks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/uptime.json Listar las comprobaciones de disponibilidad de un sitio uptime_checks_list

Lista las comprobaciones de disponibilidad de un sitio, incluidas las comprobaciones de todo el espacio de trabajo que sondean el dominio del sitio o un subdominio suyo. Ordenadas por nombre. Usa workspace_uptime_checks_list para todas las comprobaciones del espacio de trabajo. Filtra con status (up, down, pending o paused) o query (parte del nombre, la URL o el host). Paginado con page y per_page (hasta 100). Cada comprobación tiene id (upc_...), workspace_id, site_id (null para las comprobaciones de todo el espacio de trabajo), name, kind, url, host, port, keyword, expected_status, http_method, interval_seconds, timeout_seconds, status (up, down, pending o paused), enabled, public, last_checked_at, next_check_at, last_response_ms (milisegundos), ssl_expires_at, ssl_issuer, domain_expires_at y created_at. Usa uptime_checks_get para los porcentajes de disponibilidad y las incidencias.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /uptime/checks/:id/pause.json Pausar una comprobación de disponibilidad uptime_checks_pause

Pausa una comprobación de disponibilidad para que deje de sondearse. Cualquier incidencia abierta se cierra al instante y no se envían alertas de caída ni de recuperación mientras está en pausa. El historial se conserva y su estado se muestra como paused. Reanúdala con uptime_checks_resume. El id viene de uptime_checks_list. Necesita el permiso uptime.manage. Devuelve la comprobación.

Permiso: uptime.manage

Ejemplo
curl -X POST https://privatusanalytics.com/uptime/checks/:id/pause.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /uptime/checks/:id/resume.json Reanudar una comprobación de disponibilidad pausada uptime_checks_resume

Reanuda una comprobación de disponibilidad en pausa. Se sondea en el siguiente ciclo del planificador y su estado es pending hasta que llega el primer resultado. El id viene de uptime_checks_list. Necesita el permiso uptime.manage. Devuelve la comprobación.

Permiso: uptime.manage

Ejemplo
curl -X POST https://privatusanalytics.com/uptime/checks/:id/resume.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /uptime/checks/:id.json Obtener una comprobación de disponibilidad: disponibilidad de 24 h/7 d/30 d, tiempos de respuesta e incidentes uptime_checks_get

Devuelve una comprobación de disponibilidad con su historial, no solo sus ajustes. Elige range (24h por defecto, 7d o 30d) para el gráfico de tiempos de respuesta. La respuesta tiene check (ajustes y estado en vivo, consulta uptime_checks_list), uptime (porcentaje para 24h, 7d y 30d, null hasta que se ha ejecutado el primer sondeo), range, response_times (unit hour o day, labels como horas ISO 8601 y series de tiempo medio de respuesta en milisegundos por ubicación, con null para los huecos) e incidents (las 50 más recientes con started_at, resolved_at null mientras sigue abierta, duration_seconds, cause y failed_locations). Solo los sondeos correctos cuentan para los tiempos de respuesta. El id viene de uptime_checks_list.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/uptime/checks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /uptime/checks/:id.json Cambiar una comprobación de disponibilidad uptime_checks_update

Modifica una comprobación de disponibilidad. Solo cambian los datos que envías. Las reglas y los límites son los mismos que en uptime_checks_create (el intervalo debe ser al menos el mínimo del plan, se rechazan las direcciones privadas). Cambiar kind borra los campos de destino que ya no se aplican. Cambiar interval_seconds programa el siguiente sondeo de inmediato. El id viene de uptime_checks_list. Necesita el permiso uptime.manage. Devuelve la comprobación actualizada.

Permiso: uptime.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/uptime/checks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /uptime/probes.json Centro de datos de las sondas, User-Agent y rangos de IP de salida (para permitir nuestras sondas de disponibilidad) uptime_probes_list

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/uptime/probes.json
POST /uptime/probes/results.json Enviar resultados de un agente de sonda externo (token Bearer de sonda de disponibilidad) uptime_probes_results

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/uptime/probes/results.json \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/uptime.json Añadir una comprobación de disponibilidad del espacio de trabajo (no vinculada a un sitio) workspace_uptime_checks_create

Añade una comprobación de disponibilidad que pertenece a todo el espacio de trabajo en lugar de a un sitio. Usa uptime_checks_create para vincular una comprobación a un sitio. Los parámetros, los límites del plan y las reglas son los mismos, consulta uptime_checks_create. kind es http, keyword, tcp o dns y decide cuáles de url, keyword, host y port se aplican. Como no hay sitio, una comprobación http necesita una url explícita. Quien tenga acceso limitado a algunos sitios no puede crear comprobaciones de todo el espacio de trabajo. Necesita el workspace_id de workspaces_list y el permiso uptime.manage. Devuelve la comprobación con id (upc_...) y site_id null.

Permiso: uptime.manage

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/uptime.json Listar todas las comprobaciones de disponibilidad de un espacio de trabajo workspace_uptime_checks_list

Lista todas las comprobaciones de disponibilidad de un espacio de trabajo, incluidas las que no están vinculadas a ningún sitio, ordenadas por nombre. Quien tenga acceso limitado a algunos sitios solo ve las comprobaciones de esos sitios. Usa uptime_checks_list para las comprobaciones de un solo sitio. Filtra con status (up, down, pending o paused) o query (parte del nombre, la URL o el host). Paginado con page y per_page (hasta 100). Cada elemento tiene los campos descritos en uptime_checks_list. Necesita el workspace_id de workspaces_list.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Documentación

GET /docs/api.json Listar todas las operaciones de la API y herramientas MCP docs_api

Devuelve el catálogo completo de todas las operaciones de la API, que también son todas las herramientas de MCP. Úsalo para descubrir qué herramienta o endpoint existe y qué necesita exactamente. Cada elemento tiene tool_name, summary, description (puede ser null), group, verb (método HTTP), path (plantilla con marcadores), permission (el permiso que necesita un miembro o token, null para las herramientas públicas), input_schema (JSON Schema de los parámetros) y response_schema (JSON Schema de la respuesta). La respuesta es grande. Para una herramienta que ya conoces, es preferible usar las páginas de documentación (docs_search). docs_openapi devuelve la misma información como documento OpenAPI. Público, sin necesidad de autenticación.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/docs/api.json
GET /docs.json Listar páginas de documentación docs_list

Lista todas las páginas de documentación con title, description, path (como /docs/api/authentication), section y sin cuerpo. Úsalo para explorar lo que existe. Para encontrar una página por tema usa docs_search, y para leer una usa docs_get con su section y page. Paginado con page y per_page (máximo 100). Público, sin necesidad de autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/docs.json
GET /openapi.json Documento OpenAPI 3.1 de toda la API docs_openapi

Devuelve el documento OpenAPI 3 que describe toda la API pública como JSON sin procesar (sin envolver en un campo data). Úsalo cuando necesites una especificación legible por máquinas para generar código. Para una lista navegable de operaciones con sus esquemas de entrada y de respuesta, docs_api es más fácil de leer. Describe las mismas operaciones que se exponen como herramientas de MCP. Público, sin necesidad de autenticación.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/openapi.json
GET /docs/:section/:page.json Leer una página de documentación (Markdown y HTML) docs_get

section y page provienen de la ruta de la página /docs/<section>/<page>. Usa la página "index" para ver el resumen de una sección.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/docs/:section/:page.json

Domain Rating

GET /sites/:site_id/domain-rating.json Informe de Domain Rating: la puntuación más reciente, los enlaces entrantes y salientes, el cambio desde la publicación anterior y el historial por mes domain_rating_report

Devuelve el Domain Rating del sitio, una estimación de 0 a 100 de la fuerza de los enlaces que apuntan a su dominio, además del número de enlaces entrantes y salientes y su historial. Es la puntuación propia de Privatus Analytics, no una métrica de Google. Las valoraciones se actualizan una vez al mes con cada versión, así que los cambios se ven cada mes. months (de 1 a 120, por defecto 12) define cuántos puntos mensuales de historial se incluyen. El resultado tiene domain, checked_at (cuándo se comprobó el sitio por última vez, null si nunca), release (el mes de los datos más recientes como YYYY-MM), rating, inbound_links, outbound_links (cada uno null si aún no se conoce), changes (las mismas tres métricas como diferencia respecto a la versión anterior, null cuando alguna se desconoce) e history (una fila por mes con month, rating, inbound_links, outbound_links, la más antigua primero). Un sitio nuevo puede quedar sin valoración durante unos minutos. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/domain-rating.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Duplicados de testimonios

POST /sites/:site_id/testimonials/duplicates/dismiss.json Indica que un grupo no son duplicados. Nunca vuelve a la cola testimonial_duplicates_dismiss

testimonial_ids debe ser todas las copias de un grupo abierto de la cola de duplicados que esté fuera de la papelera, tal como las devuelve testimonial_duplicates_list. No se fusiona ni cambia nada en los testimonios, y nunca se vuelven a agrupar. Para dividir un grupo de tres, fusiona primero los dos que son iguales. El servidor responde con 422 cuando los ids no son exactamente un grupo abierto.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/duplicates/dismiss.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/duplicates.json Lista los grupos de testimonios que probablemente son el mismo dos veces testimonial_duplicates_list

Las coincidencias exactas van primero. Cada grupo incluye sus copias completas y keeper_id, la copia que se conservaría. meta.exact_groups es cuántos grupos fusionaría testimonial_duplicates_merge_exact.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/duplicates.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/:id/merge.json Fusiona copias de un testimonio en el de la ruta testimonials_merge

El que se conserva mantiene su estado y su verificación, y sus palabras salvo que body_from indique otra copia. Gana las etiquetas, colecciones manuales, ubicaciones y propiedades personalizadas que le faltan. Las copias van a la papelera marcadas como fusionadas, y restaurar una deshace la fusión para esa copia. Una copia que llegó este mes deja de contar como testimonio nuevo. La respuesta incluye meta.undo_id.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/:id/merge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/duplicates/merge_exact.json Fusiona todas las coincidencias exactas de la cola a la vez testimonial_duplicates_merge_exact

Envía primero dry_run para los recuentos, luego confirm_count con el total que dio. Se fusionan hasta 100 grupos por llamada. La respuesta incluye meta.undo_id, y un solo deshacer revierte toda la ejecución.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/duplicates/merge_exact.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Ejecuciones de importación de testimonios

GET /sites/:site_id/testimonials/imports/sources/:import_source_id/runs.json Lista las ejecuciones de una fuente, la más reciente primero testimonial_import_runs_list

Cada ejecución tiene su número, qué la inició, su estado, las páginas leídas y cuántos testimonios encontró, cuántos eran nuevos, duplicados, fallidos y conservados, con las horas de inicio y fin.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources/:import_source_id/runs.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Embudos

POST /sites/:site_id/funnels.json Crear un embudo funnels_create

Crea un embudo, una secuencia de pasos por los que avanzan las visitas, medido por visita. Pasa name y steps, una lista ordenada de {type, value, match, name}. type es page, event o goal. value es una ruta para los pasos page (por ejemplo /pricing), un nombre de evento personalizado para los pasos event o un id de objetivo (goal_..., de goals_list) para los pasos goal. match solo es para los pasos page y es exact, prefix, glob (comodín *) o regex, y por defecto es glob cuando el valor tiene un * y exact en caso contrario. name es una etiqueta opcional. Los pasos con un valor vacío se descartan. order_mode es strict (cada paso debe venir después del anterior, el valor por defecto) o any (pasos en cualquier orden). window es visit (el valor por defecto) o day, y ambos miden dentro de una sola visita porque no se guarda ningún id de visitante. Se aplican límites del plan. Free permite 3 embudos por sitio y 5 pasos, Pro permite 10 pasos y Business 20, y un embudo necesita al menos 2 pasos. Devuelve el embudo con id (fun_...). Lee los resultados con funnels_get. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/funnels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/funnels/:id.json Eliminar un embudo funnels_delete

Elimina de forma permanente la definición de un embudo. No se toca ningún dato de analíticas, pero el embudo y sus ajustes no se pueden recuperar y no hay forma de deshacerlo. Devuelve el embudo eliminado. Los ids (fun_...) vienen de funnels_list. Usa funnels_update para modificar un embudo en su lugar. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/funnels.json Listar embudos con entradas, finalizaciones y tasa funnels_list

Lista los embudos de un sitio con sus resultados principales del periodo, ordenados por nombre. Cada embudo tiene id (fun_...), name, steps, order_mode, window y stats {entered, completed, conversion_rate}, donde entered son las visitas que llegaron al paso 1, completed son las visitas que llegaron al último paso y conversion_rate es un porcentaje (0 a 100). Paginado con page y per_page (máx. 100, por defecto 25). Acepta los parámetros compartidos period y filters. Para el detalle paso a paso usa funnels_get, y usa funnels_create para añadir uno.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/funnels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/funnels/:id.json Informe de embudo: recuento por paso, conversión, abandono, tiempo entre pasos y adónde fueron las visitas en su lugar funnels_get

El informe de conversión de un embudo en un periodo. Devuelve period, funnel_id, name, order_mode, window, steps, overall_conversion_rate, breakdown y, con compare, comparison. Cada paso tiene index (desde 1), name, type, value, match, count (visitas que lo alcanzaron), step_conversion_rate (porcentaje del paso anterior), overall_conversion_rate (porcentaje del paso 1), dropoff y dropoff_rate (visitas que se fueron tras este paso), median_seconds_from_previous (null para el paso 1) y next_pages (las 5 páginas principales visitadas después por las visitas perdidas, con (exit) para quienes se fueron). Las tasas son porcentajes de 0 a 100. Establece breakdown en channel, device, country, utm_campaign, utm_source, browser u os para obtener la conversión global por valor (los 20 principales). comparison tiene los recuentos del otro periodo, overall_conversion_rate y change (porcentaje, null cuando la tasa anterior era 0). Aquí se ignoran los filtros de página porque recortarían las visitas, usa en su lugar un paso de página. Acepta los parámetros compartidos period, compare, filters y segment. Los ids vienen de funnels_list.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/funnels/:id.json Actualizar un embudo funnels_update

Modifica un embudo. Solo cambian los datos que envías. Enviar steps reemplaza toda la lista de pasos, así que envía todos los pasos en orden (el formato y los límites de pasos son los mismos que en funnels_create, Free permite 5 pasos, Pro 10 y Business 20, y los pasos goal deben nombrar objetivos de este sitio). También puedes cambiar name, order_mode (strict o any) y window (visit o day). Los resultados se calculan a partir de la definición al leerse, así que modificar un embudo se aplica de inmediato a todo el historial y las cifras pasadas mostradas antes serán distintas. Devuelve el embudo. Los ids vienen de funnels_list. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Empresas de testimonios

GET /sites/:site_id/testimonials/companies.json Lista las empresas de un sitio con sus personas, testimonios y valoración media testimonial_companies_list

Una fila por empresa, agrupada a partir del nombre de empresa y el sitio web de las personas del sitio. Una persona sin empresa no está en ninguna. query coincide con parte del nombre de una empresa o del host de su sitio web. sort es name (el valor predeterminado), people_desc, testimonials_desc o received_desc.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/companies.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/companies/:id/merge.json Fusiona una empresa con otra, para dos grafías de una misma empresa testimonial_companies_merge

Cada persona de la empresa de la ruta toma el nombre y la URL de la empresa indicada por into.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/companies/:id/merge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/companies/:id.json Obtiene una empresa con sus personas testimonial_companies_get

El id es la clave de la empresa, un host de sitio web o un nombre normalizado, tal como lo devuelve testimonial_companies_list. Sus testimonios son testimonials_list con company.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/companies/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/companies/:id.json Corrige el nombre y la URL de una empresa para todas sus personas a la vez testimonial_companies_update

El id de una empresa procede de su URL o nombre, así que la respuesta puede traer un id nuevo.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/companies/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

En vivo

GET /sites/:site_id/live.json Visitantes en vivo, flujo de actividad y lo que es popular ahora mismo (últimos 30 minutos) live_get

Lo que ocurre en el sitio ahora mismo. Devuelve live_visitors (visitantes de los últimos 5 minutos), window_minutes (30), sparkline (visitas por minuto de los últimos 30 minutos, de la más antigua a la más reciente, cada una {minute, visits}), feed (la actividad más reciente), top_pages, top_referrers, top_countries (cada una con hasta 8 filas de {value, visits}) y top_events (hasta 8 de {value, completions}) de los últimos 30 minutos. Las entradas de feed tienen occurred_at, kind, name, path, channel, referrer_host, country, device y browser. Son anónimas, sin IP, ciudad ni rastro del visitante. feed muestra todas las visitas por defecto, o solo páginas vistas o eventos, con limit entradas (por defecto 50, hasta el tamaño del búfer de 100). Las cifras no se guardan en caché y no aceptan periodo. Pasa filters (mismo formato que stats_aggregate) para limitar todas las cifras y el feed a las visitas que coincidan. Usa live_wallboard para una vista compacta de varios sitios y stats_overview para un periodo completo.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/live.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/live/wallboard.json Tarjetas del panel de pared (en vivo y hoy) de uno o más sitios live_wallboard

Tarjetas compactas con cifras grandes para uno o más sitios, pensadas para una pantalla de oficina. Devuelve rotate_seconds, generated_at y sites. Cada tarjeta de sitio tiene id (pa_...), name, domain, live_visitors (últimos 5 minutos), sparkline (por minuto, últimos 30 minutos), visitors_today, pageviews_today, bounce_rate_today (porcentaje, de 0 a 100), top_pages, top_countries y top_referrers (5 filas cada una). Hoy significa en la zona horaria del propio sitio y las cifras se leen de datos en vivo. site_ids lista los sitios que se incluyen (hasta 12, solo sitios que tu token puede abrir), y si no se usa el sitio de la ruta. rotate_seconds se limita entre 5 y 300 y solo indica a una pantalla cuánto tiempo mostrar cada tarjeta. Para una pantalla pública que se pueda compartir usa wallboard_links_create. Usa live_get para la vista en vivo completa de un sitio.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/live/wallboard.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /wallboard/:token.json Panel de pared para un token de panel de pared (sin necesidad de iniciar sesión) live_public_wallboard

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/wallboard/:token.json

Encuestas

POST /sites/:site_id/surveys.json Crea una encuesta surveys_create

Crea una encuesta en el sitio sin cookies para un sitio. No recopila nada hasta que su estado es active, así que créala primero como draft o pasa status active para empezar de inmediato. Son obligatorios name (interno, los visitantes nunca lo ven, máx. 120 caracteres) y questions (de 1 a 5 filas en orden). Cada pregunta es un objeto con key (opcional, un id estable de letras minúsculas, dígitos y guiones bajos, que se genera cuando se omite), kind (text, choice, multi, rating, nps o yes_no), prompt (obligatorio, máx. 200 caracteres), required (booleano), choices (una lista de hasta 10 opciones, solo para choice y multi) y scale (3, 5, 7 o 10, solo para rating, por defecto 5). NPS siempre usa de 0 a 10. La segmentación es trigger_kind (immediate, delay, scroll, exit o manual) con delay_seconds (0 a 600, por defecto 10, solo para delay) y scroll_percent (1 a 100, por defecto 50, solo para scroll), paths (filas de match_type exact, prefix o glob y pattern, vacío significa todas las páginas), devices (desktop, mobile, tablet, vacío significa todos), position (bottom_right, bottom_left o center), sample_rate (1 a 100 por ciento de los visitantes), thank_you (máx. 200 caracteres), starts_on y ends_on (YYYY-MM-DD). Las encuestas no pueden pedir una dirección de correo y las respuestas escritas se depuran de datos personales. El plan Free permite 1 encuesta por espacio de trabajo y un número limitado de respuestas al mes, los planes de pago son ilimitados. Necesita el permiso content.write. Devuelve la encuesta con id (svy_...). Lee las respuestas con surveys_get.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/surveys.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/surveys/:id.json Elimina una encuesta con sus respuestas surveys_delete

Elimina de forma permanente una encuesta junto con todas sus respuestas. No se puede deshacer y los resultados se pierden. Usa surveys_pause en su lugar si solo quieres dejar de recopilar. El id viene de surveys_list y el site_id es obligatorio. Necesita el permiso content.write. Devuelve la encuesta eliminada.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/surveys/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/surveys.json Lista las encuestas de un sitio con su número de respuestas surveys_list

Lista las encuestas de un sitio, de la más reciente a la más antigua, con sus ajustes y recuentos de respuestas. Filtra con status (draft, active, paused o all, por defecto all). Paginado con page y per_page (por defecto 25, hasta 100). Cada encuesta tiene id (svy_...), name, status, questions, ajustes de segmentación, starts_on, ends_on, created_at, updated_at y stats (recuentos de responses, completed y this_month). Usa surveys_get para las respuestas y los resultados de una encuesta.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/surveys.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/surveys/:id/pause.json Deja de recoger respuestas y conserva las ya recibidas surveys_pause

Pausa una encuesta para que deje de ofrecerse a los visitantes al instante. Las respuestas ya recopiladas se conservan y se muestran en surveys_get, y surveys_start la reanuda. Úsalo en lugar de surveys_delete cuando solo quieras dejar de recopilar. El id viene de surveys_list y el site_id es obligatorio. Necesita el permiso content.write. Devuelve la encuesta con status paused.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/surveys/:id/pause.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/surveys/:id.json Resultados de una encuesta para un periodo, desglosados por pregunta surveys_get

Devuelve el informe de resultados de una encuesta en un periodo, no solo sus ajustes (usa surveys_list para los ajustes y los recuentos). Elige el preajuste de period (por defecto 30d) o period custom con from y to. La respuesta tiene survey (sus ajustes), period (from y to como horas ISO 8601), responses (personas que respondieron al menos una pregunta), completed (personas que respondieron la última pregunta), questions (una entrada por pregunta con key, kind, prompt y recuento de answers, más el detalle según el tipo) y pages, devices y countries (hasta 10 filas cada uno de value y count). El detalle según el tipo es texts (hasta 100 respuestas escritas más recientes con text y at) para text, choices (value, count, share como porcentaje con un decimal, offered) para choice, multi y yes_no, average (null sin respuestas), scale y distribution para rating, y score (NPS de -100 a 100, null sin respuestas), promoters (9 y 10), passives (7 y 8), detractors (0 a 6) y distribution para nps. Usa surveys_themes para resumir las respuestas escritas.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/surveys/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/surveys/:id/start.json Empieza a recoger respuestas surveys_start

Pone una encuesta en estado active para que se pueda ofrecer a los visitantes. Solo aparece cuando la fecha actual está entre starts_on y ends_on (cuando se definen), la página coincide con sus paths y devices, y la cuota mensual de respuestas del plan no se ha agotado. Úsalo para una encuesta en borrador o en pausa. El id viene de surveys_list y el site_id es obligatorio. Necesita el permiso content.write. Devuelve la encuesta con status active. Detenla de nuevo con surveys_pause.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/surveys/:id/start.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/surveys/:id/themes.json Agrupa en temas las respuestas de texto libre a una pregunta (plan Business) surveys_themes

Usa IA para agrupar en temas las respuestas escritas a una pregunta de texto libre. Solo plan Business. Elígelo después de que surveys_get muestre una pregunta de texto con suficientes respuestas, y pasa question_key (la clave de una pregunta de tipo text de surveys_get). Necesita al menos 5 respuestas escritas y usa las 300 más recientes. El resultado lista hasta 12 temas, cada uno con label, count, sentiment (positive, neutral o negative) y example (una respuesta representativa, puede ser null), más answers (cuántas respuestas se resumieron) y generated_at. Cada nueva generación consume una pregunta de la cuota mensual de IA del espacio de trabajo, que se devuelve si falla. El resultado se guarda en caché según las respuestas, así que volver a llamar sin respuestas nuevas no cuesta nada. Falla con un error de validación cuando el plan no lo incluye, la cuota se ha agotado, la IA no está configurada o hay muy pocas respuestas.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/surveys/:id/themes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /sites/:site_id/surveys/:id.json Actualiza una encuesta surveys_update

Modifica una encuesta. Solo cambian los datos que envías. Los parámetros y los límites son los mismos que en surveys_create, con status draft, active o paused. Cuando envías questions se reemplaza toda la lista, así que incluye todas las preguntas que quieras conservar y mantén cada key existente para conservar sus respuestas recopiladas (reformular un prompt con la misma key no divide los resultados). Las preguntas que dejes fuera dejan de aparecer en los resultados. Los cambios en la segmentación surten efecto para los visitantes de inmediato. El id viene de surveys_list y el site_id es obligatorio. Necesita el permiso content.write. Devuelve la encuesta actualizada.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/surveys/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Espacios de trabajo

GET /workspaces/:workspace_id/white_label.json Obtener la marca blanca white_label_get

Devuelve la marca blanca del espacio de trabajo. Los campos son workspace_id (ws_...), brand_name, brand_logo_url y brand_color (un color hexadecimal como #06755b), cada uno null cuando no está definido, hide_branding, available (true cuando el plan incluye marca blanca, que es Business y superiores) y active (true cuando la marca está definida y en vigor). La marca sustituye a Privatus Analytics en los paneles compartidos, las incrustaciones, las páginas de estado y los informes por correo. Requiere workspace.manage.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/white_label.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/white_label.json Definir la marca blanca de los paneles compartidos y los informes por correo (Business) white_label_update

Define la marca blanca del espacio de trabajo. Solo plan Business, si no falla con un error de plan. Solo cambian los datos que envías, y una cadena vacía borra brand_name, brand_logo_url o brand_color. brand_logo_url debe ser una URL https a una imagen y brand_color un color hexadecimal como #06755b. hide_branding true quita el enlace de Privatus Analytics de los paneles compartidos, las incrustaciones y las páginas de estado, y el logotipo de los informes por correo. El cambio se aplica de inmediato a los enlaces compartidos existentes. Requiere workspace.manage. Devuelve la marca (consulta white_label_get).

Permiso: workspace.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/white_label.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/security.json Obtener los ajustes de seguridad del espacio de trabajo workspace_security_get

Devuelve la política de seguridad del espacio de trabajo. Los campos son workspace_id (ws_...), enforce_2fa (los miembros deben usar autenticación en dos pasos), login_methods (los permitidos entre password, magic_link, passkey, google, github y sso), session_ttl_hours (cierre de sesión pasadas estas horas, null para sin límite), app_ip_allowlist (IP o rangos CIDR con permiso para usar la aplicación y la API, vacío significa desde cualquier lugar) y support_access_until (hora ISO 8601 hasta la que el soporte de Privatus Analytics puede ver el espacio de trabajo, null cuando no se ha concedido acceso). Requiere workspace.manage.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/security.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/security.json Actualizar los ajustes de seguridad del espacio de trabajo (2FA, métodos de inicio de sesión, duración de la sesión, lista de IP permitidas, acceso de soporte) workspace_security_update

Cambia la política de seguridad del espacio de trabajo, solo los datos que envías. enforce_2fa true exige a todos los miembros usar autenticación en dos pasos y necesita el plan Business. login_methods reemplaza la lista permitida con valores de password, magic_link, passkey, google, github y sso, y quitar un método cierra los inicios de sesión recordados de los miembros, que deberán iniciar sesión de nuevo. session_ttl_hours cierra la sesión de los miembros pasadas esas horas (0 quita el límite). app_ip_allowlist reemplaza la lista de IP o rangos CIDR con permiso para acceder a la aplicación y a la API (plan Business, una lista vacía significa desde cualquier lugar) y se rechaza si excluyera la IP de quien llama, así que no puedes bloquearte a ti mismo. support_access true permite que el soporte de Privatus Analytics vea el espacio de trabajo durante 7 días y false retira ese acceso. Requiere workspace.manage. Devuelve la política (consulta workspace_security_get).

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/security.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces.json Crear un espacio de trabajo (te conviertes en el propietario) workspaces_create

Permiso: member · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /workspaces/:id.json Eliminar un espacio de trabajo y todos sus sitios (solo el propietario, cancela cualquier suscripción) workspaces_delete

Elimina un espacio de trabajo junto con todos sus sitios. Es una eliminación suave: todo desaparece al instante y se purga de forma permanente después de 7 días, así que trátalo como irreversible. Solo puede hacerlo el propietario, y confirm debe ser el nombre exacto del espacio de trabajo (distingue mayúsculas). Una suscripción de pago activa se cancela primero de inmediato, y si esa cancelación falla no se elimina nada. Las transferencias de sitios pendientes del espacio de trabajo se cancelan. Los miembros pierden el acceso. Usa workspaces_get para leer el nombre. Requiere workspace.manage y el rol owner. Devuelve el espacio de trabajo.

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/workspaces/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces.json Listar tus espacios de trabajo workspaces_list

Lista los espacios de trabajo a los que pertenece quien llama, ordenados por nombre. Un token de API o una conexión MCP solo ve el único espacio de trabajo para el que se emitió. Cada elemento tiene id (ws_..., usado como workspace_id por la mayoría de las herramientas), name, timezone, currency, plan, plan_events, subscription_status y role (el rol de quien llama). Llama a sites_list con un id de espacio de trabajo a continuación para encontrar los ids de sitio. Crear un espacio de trabajo solo es posible en la aplicación.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/workspaces.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:id.json Obtener un espacio de trabajo workspaces_get

Devuelve un espacio de trabajo por su id público (ws_..., de workspaces_list). Los campos son id, name, timezone (nombre IANA), currency (ISO 4217), plan (free, pro, business o enterprise), plan_events (la cuota mensual de eventos del plan), subscription_status (none, trialing, active, past_due, paused o canceled), role (el rol de quien llama en él) y created_at. Usa billing_get para los detalles completos de facturación y billing_usage para el uso de este mes. Cualquier miembro puede leerlo.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/workspaces/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:id.json Actualizar los ajustes del espacio de trabajo workspaces_update

Cambia el nombre, la zona horaria por defecto o la moneda por defecto de un espacio de trabajo, solo los datos que envías. timezone es un nombre IANA como Europe/Berlin y currency es un código ISO 4217 de 3 letras. Son valores por defecto para los sitios nuevos, no cambian los sitios existentes (usa sites_update para esos). Requiere workspace.manage. Devuelve el espacio de trabajo (consulta workspaces_get).

Permiso: workspace.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Espacios publicitarios

POST /sites/:site_id/experiments/ads.json Crea un espacio publicitario ad_placements_create

Crea un espacio de un tamaño en el sitio. Envía size (un tamaño común como medium_rectangle o leaderboard) o width y height en píxeles. key es el nombre con el que lo identifica la etiqueta del sitio y se genera a partir del nombre si se omite. Después añade creatividades con ad_creatives_create y coloca en el sitio la etiqueta de ad_placements_embed. Requiere content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/experiments/ads.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/experiments/ads/:id.json Elimina un espacio publicitario con sus creatividades ad_placements_delete

Elimina de forma permanente un espacio con sus creatividades y sus imágenes, sus experimentos de anuncios y sus resultados, y sus enlaces de patrocinador. La etiqueta del sitio dejará de mostrar nada. La herramienta MCP no lo ejecuta y responde con human_only y la página donde una persona lo elimina. Requiere content.write.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/experiments/ads/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/experiments/ads/:id/embed.json Obtiene la etiqueta que muestra un espacio en el sitio ad_placements_embed

El script cargador (una vez por página) y el hueco de este espacio, como html para pegar. El hueco conserva su tamaño antes de que se ejecute el cargador. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/experiments/ads/:id/embed.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/experiments/ads.json Lista los espacios publicitarios de un sitio con sus últimos 30 días ad_placements_list

Cada espacio con su clave, tamaño, número de creatividades y estadísticas (impressions, viewable impressions, clicks y ctr, la tasa de clics por impresión visible) de los últimos 30 días. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/experiments/ads.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/experiments/ads/:id.json Obtiene un espacio con las cifras de cada creatividad ad_placements_get

El espacio, sus creatividades con sus estadísticas del periodo (7d, 30d o 90d) y las cifras del espacio día a día. humans_only conserva lo que la puntuación de bots considera probablemente humano (Pro y superiores). Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/experiments/ads/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/experiments/ads/:id.json Cambia un espacio publicitario ad_placements_update

Cambia el nombre, la clave, el tamaño o la etiqueta. Solo cambian las entradas enviadas. Una clave nueva necesita la nueva etiqueta en el sitio. Requiere content.write.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/experiments/ads/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Etiquetas de testimonios

POST /sites/:site_id/testimonials/tags/:id/apply_rules.json Ejecuta las reglas de una etiqueta sobre los testimonios ya guardados testimonial_tags_apply_rules

dry_run true (el valor predeterminado) no cambia nada y responde con los recuentos: cuántos se etiquetarían, de cuántos, y cuántos ya tienen la etiqueta. dry_run false los etiqueta como una acción masiva y responde con undo_id, que testimonials_bulk_undo acepta durante 7 días. Más de 100 se ejecutan en segundo plano y la respuesta tiene state running.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/tags/:id/apply_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/tags.json Crea una etiqueta, con reglas de etiquetado automático si las envías testimonial_tags_create

Una regla es { match, conditions }. Un testimonio que cumple cualquiera de las reglas recibe la etiqueta en el momento en que llega. Las reglas solo añaden etiquetas. Para etiquetar lo que ya está guardado, llama después a testimonial_tags_apply_rules.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/tags.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/tags/:id.json Envía una etiqueta a la papelera durante 30 días testimonial_tags_destroy

Sale de todos los testimonios, filtros y selectores. Restaurarla con testimonial_trash_restore la devuelve a cada testimonio que la tenía. Una colección inteligente cuyas reglas la nombran no coincide con nada hasta entonces. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/tags/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/tags.json Lista las etiquetas de un sitio con sus reglas testimonial_tags_list

Cada etiqueta viene con cuántos testimonios la tienen, sus reglas de etiquetado automático como condiciones estructuradas y en lenguaje sencillo, y cuándo la aplicó por última vez una regla. Las etiquetas en la papelera se omiten.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/tags.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/tags/:id/merge.json Fusiona una etiqueta con otra testimonial_tags_merge

Cada testimonio que tenía esta etiqueta recibe la otra, cada regla pasa a la otra, cada colección inteligente, vista guardada, widget y muro que nombraba esta etiqueta nombra la otra, y esta etiqueta va a la papelera, vacía. Responde con la etiqueta que se conserva.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/tags/:id/merge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /sites/:site_id/testimonials/tags/:id.json Cambia el nombre, el color o las reglas de una etiqueta testimonial_tags_update

Solo cambia lo que se envía. Enviar rules reemplaza todas las reglas de la etiqueta, y una lista vacía las quita todas.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/tags/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Eventos

GET /sites/:site_id/events/properties.json Listar las claves de propiedades de eventos vistas en los últimos 30 días event_properties_list

Lista las claves de propiedad que llevaron los eventos personalizados en los últimos 30 días, con sus ajustes de visualización. Devuelve una lista de {key, events, display_name, hidden, export_safe}. events es cuántos eventos personalizados llevaron la clave (0 para una clave que tiene ajustes pero no se ha visto recientemente), display_name es el nuevo nombre (null cuando no hay), hidden indica que la clave está oculta en los informes y export_safe indica que está marcada como sin datos personales. Se devuelven como máximo 200 claves, las más usadas primero. Pasa event para ver solo las claves vistas en un nombre de evento sin procesar. Los valores de las propiedades nunca se devuelven aquí: usa stats_breakdown con dimension prop:<key> o events_get para los valores. Cambia los ajustes con event_properties_update.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/events/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/events/properties.json Renombrar u ocultar una clave de propiedad de evento event_properties_update

Cambia el nombre, oculta o marca como seguras para exportar una clave de propiedad de evento, en todo el sitio. Solo cambian los datos que envías. key debe ser la clave tal como está guardada (letras minúsculas, dígitos y guiones bajos, hasta 64 caracteres, por ejemplo plan). display_name es una etiqueta de hasta 64 caracteres (envíala vacía para quitar el nuevo nombre). hidden quita la clave de los informes y de la tabla dinámica del detalle del evento, mientras los datos se conservan. export_safe declara que la clave nunca contiene datos personales, lo que incluye sus valores en las exportaciones sin procesar y en las sincronizaciones con almacenes de datos, así que actívalo solo cuando sea cierto. Los cambios de nombre y el ocultado se aplican al leer los informes y no reescriben ningún dato guardado. Devuelve {key, display_name, hidden, export_safe}. Necesita el permiso sites.manage. Lista las claves con event_properties_list.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/events/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/events.json Eliminar un evento y su historial (se ejecuta en segundo plano, confirma escribiendo el nombre) events_delete

Elimina de forma permanente un evento personalizado y todo su historial. No se puede deshacer. El nombre del evento sin procesar debe enviarse dos veces, en name y de nuevo en confirm, como comprobación de seguridad. Devuelve {name, status: queued} con HTTP 202 porque las filas se eliminan en segundo plano por lotes, así que las cifras siguen cambiando hasta que termina. El evento también se oculta de inmediato, y la eliminación queda registrada en el registro de auditoría. Las páginas vistas no se ven afectadas. Si solo quieres dejar de mostrar un evento, usa events_update con hidden true, que conserva los datos. Necesita el permiso sites.manage. Los nombres vienen de events_list (usa el campo raw_names si el evento se renombró o se fusionó).

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/events.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/events.json Listar eventos con finalizaciones, visitas, tasa de conversión y primera/última vez visto events_list

El explorador de eventos: todos los eventos personalizados del periodo. Devuelve period, events y hidden. Cada evento tiene name (el nombre visible tras los cambios de nombre y las fusiones), raw_names (los nombres que envió el tracker), completions, visits, conversion_rate (porcentaje de visitas, de 0 a 100), revenue (unidades menores, céntimos), first_seen y last_seen (marcas de tiempo ISO 8601 dentro del periodo) y currency (la moneda de los ingresos, null cuando no está definida). hidden lista los eventos que ocultaste como {name, display_name}. Usa search para conservar los eventos cuyo nombre contiene cierto texto. Aquí las páginas vistas no son eventos. Usa events_get para un evento en profundidad y stats_breakdown con dimension event para una lista ordenada y paginada. Acepta los parámetros compartidos period, compare, filters y segment.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/events.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/events/merge.json Combinar varios eventos en un solo nombre visible events_merge

Fusiona varios nombres de evento sin procesar en un solo nombre visible, por ejemplo signup_click y signup_button en Signup. Los informes muestran entonces un único evento con los recuentos combinados. Funciona al leer los informes y los eventos guardados no se cambian ni se eliminan. Pasa names (los nombres sin procesar, al menos uno) e into (el nombre visible). Devuelve un objeto de ajustes por cada nombre fusionado, cada uno {name, display_name, hidden, currency, updated_at}. Para deshacerlo, llama a events_update para un nombre con un display_name vacío. Necesita el permiso sites.manage. Los nombres vienen de events_list (raw_names).

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/events/merge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/events/detail.json Un evento: gráfico, tabla dinámica de propiedades, agregados de propiedades numéricas, páginas y fuentes events_get

Detalle de un evento personalizado. Pasa name exactamente como aparece en events_list (el nombre visible tras los cambios de nombre y las fusiones). Devuelve period, name, raw_names (los nombres guardados que hay detrás), interval, totals, setting, series, property_keys, pivot, numeric, pages, channels y referrers. totals tiene completions, visits (visitas que lo lanzaron), revenue (unidades menores, céntimos) y conversion_rate (porcentaje de todas las visitas del periodo). series son las ejecuciones por intervalo de tiempo. setting tiene display_name, hidden y currency. property_keys lista las claves de propiedad vistas. Envía properties (hasta 3 claves) para obtener pivot, filas de {values, completions, visits} para cada combinación de valores, las 100 principales. numeric da la suma, el promedio y otras cifras de las propiedades que contienen números. pages, channels y referrers son los 10 lugares principales donde se lanzó el evento, como {value, completions, visits}. Usa events_list para todos los eventos, stats_breakdown con dimension prop:<key> para una propiedad en todo el sitio y events_update para cambiarle el nombre.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/events/detail.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/events/settings.json Renombrar, ocultar o mostrar un evento, o definir su moneda events_update

Cambia cómo se muestra un evento personalizado: cámbiale el nombre con display_name, ocúltalo o vuelve a mostrarlo con hidden, o define la moneda de los ingresos. name es el nombre del evento sin procesar tal como lo envió el tracker (consulta raw_names en events_list). Solo cambian los datos que envías. Un display_name vacío quita el cambio de nombre. hidden quita el evento de las listas y los informes, mientras sus datos se conservan. currency es un código ISO 4217 de tres letras como USD, guardado en mayúsculas. Funciona al leer los informes y no se reescribe ningún evento guardado. Devuelve {name, display_name, hidden, currency, updated_at}. Para combinar varios eventos usa events_merge, y para borrar datos usa events_delete. Necesita el permiso sites.manage.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/events/settings.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Experimentos

POST /sites/:site_id/experiments.json Crea un experimento como borrador experiments_create

Crea una prueba A/B o de URL dividida para un sitio. Se guarda como borrador y no envía a ningún visitante a ninguna parte hasta que una persona lo inicie en la aplicación. Son obligatorios name, path (la página original, como /pricing), goal_id (de goals_list) y variants: una lista de { name, path, weight } donde la primera fila es la página original (su path se ignora) y cada otra fila es una página del mismo sitio. Omite todos los weight para un reparto equitativo, o envía pesos que sumen 100. El plan Free permite un experimento a la vez con el original y una variante. Pro y superiores añaden más variantes, asignación automática, segmentación, un * en la ruta, objetivos secundarios, inicio programado y grupos exclusivos. Requiere content.write. Devuelve el experimento.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/experiments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/experiments/:id.json Elimina un experimento con sus resultados experiments_delete

Elimina de forma permanente un experimento con sus variantes y resultados. No se puede deshacer. Usa experiments_pause para detenerlo y conservar los resultados. La herramienta MCP no lo ejecuta y responde con human_only y la página donde una persona lo elimina. Requiere content.write.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/experiments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/experiments/:id/duplicate.json Copia un experimento como un nuevo borrador experiments_duplicate

Crea un borrador con las mismas páginas, porcentajes, objetivo y reglas que un experimento existente y ninguno de sus resultados. Úsalo para cambiar una prueba que ya empezó. Cuenta para el límite del plan igual que un experimento nuevo. Requiere content.write. Devuelve el nuevo experimento.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/experiments/:id/duplicate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/experiments/:id/end.json Termina un experimento definitivamente experiments_end

Termina un experimento en curso o en pausa. No se puede volver a iniciar, sus resultados se conservan y deja de contar para el límite del plan. La herramienta MCP no lo ejecuta y responde con human_only y la página donde una persona lo termina. La API sí lo ejecuta. Requiere content.write.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/experiments/:id/end.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/experiments.json Lista los experimentos de un sitio experiments_list

Lista las pruebas A/B y de URL dividida de un sitio, las más recientes primero. Filtra con status (draft, scheduled, running, paused, ended o all, por defecto all). Paginado con page y per_page (por defecto 25, hasta 100). Cada experimento tiene id (exp_...), name, status, path (la página original), goal_id, variants (id, name, path, weight, control), las reglas para terminarlo y locked (true cuando el plan ya no lo cubre). Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/experiments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/experiments/:id/pause.json Pausa un experimento y conserva sus resultados experiments_pause

Pausa un experimento en curso o programado. Todos los visitantes vuelven a ver la página original de inmediato y se conservan los resultados hasta ese momento. experiments_start lo reanuda. Requiere content.write. Devuelve el experimento.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/experiments/:id/pause.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/experiments/:id.json Obtiene un experimento con sus resultados experiments_get

Devuelve un experimento por id (exp_..., de experiments_list) con sus resultados: por variante las visitas, las conversiones y la tasa de conversión del objetivo, y frente al original el incremento, el rango probable de la diferencia, el valor p, si es significativa con la confianza elegida y la probabilidad de superar al original. results.progress indica cuánto falta para poder declarar un ganador, y results.mismatch.found en true significa que las visitas no se reparten como indican los pesos, así que no conviene fiarse del resultado. split desglosa los resultados por dispositivo, canal o país (Pro y superiores) y humans_only conserva las visitas que la puntuación de bot considera probablemente humanas (Business). Una visita se cuenta para una variante cuando vio esa variante, y una conversión solo cuenta después. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/experiments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/experiments/:id/start.json Inicia un experimento experiments_start

Inicia un experimento en borrador o en pausa, de modo que los visitantes de la página original empiezan a ser enviados a las variantes. Con un starts_at futuro espera a ese momento. Como redirige a visitantes reales, la herramienta MCP no lo ejecuta y responde con human_only y la página donde una persona lo inicia. La API sí lo ejecuta. Requiere content.write.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/experiments/:id/start.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /sites/:site_id/experiments/:id.json Actualiza un experimento experiments_update

Cambia un experimento. Solo cambian las entradas que envías, y variants reemplaza la lista completa. Una vez iniciado un experimento solo pueden cambiar name y send_to_winner, porque páginas, porcentajes u objetivos nuevos a mitad de camino estropearían el resultado: usa experiments_duplicate y edita la copia. Requiere content.write. Devuelve el experimento.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/experiments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Exportaciones

POST /workspaces/:workspace_id/exports.json Poner en cola una exportación (se genera en segundo plano) exports_create

Pone en cola una exportación de datos que se genera en segundo plano y la devuelve de inmediato con status queued. Elígela cuando necesites un archivo (CSV, JSON, XLSX, NDJSON o un ZIP de paneles del dashboard) y usa exports_preview antes para comprobar las columnas y el tamaño sin crear nada. Para cifras ligeras usa las herramientas de estadísticas. Los parámetros obligatorios son workspace_id (ruta), site_id, from y to (YYYY-MM-DD, ambos inclusive, en la zona horaria de la exportación). kind decide qué se exporta y qué opciones se aplican. aggregated (por defecto) da métricas de visitas por intervalo de tiempo y usa grouping, dimensions (hasta 6), metrics, filters y segment_id. pageviews, events y raw dan una fila por visita y usan fields, filters y segment_id, requieren el plan Pro o superior y están limitados a 400 días (raw a 93 días). imported da estadísticas diarias importadas y usa solo dimensions. dashboard da un ZIP de los paneles de resumen (solo formato zip). Los file_format permitidos por kind son csv, json o xlsx para aggregated, pageviews, events e imported, csv o ndjson para raw, y zip para dashboard. Las opciones que no se aplican al kind elegido se ignoran. Un espacio de trabajo puede tener como máximo 5 exportaciones en cola o en ejecución a la vez. La respuesta es la exportación con id (exp_...), status, row_count y expires_at (null hasta que se genera). Consulta exports_get hasta que status sea complete y luego llama a exports_download. El usuario que la solicitó recibe un correo cuando está lista, se envía un webhook export.ready y la acción se escribe en el registro de auditoría. Las propiedades de evento de la columna props solo incluyen las propiedades marcadas como seguras para exportar (consulta event_properties_list).

Permiso: analytics.export

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/exports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /exports/:id.json Eliminar una exportación y su archivo exports_delete

Elimina de forma permanente una exportación y su archivo generado. El enlace de descarga deja de funcionar al instante y no se puede deshacer, pero puedes volver a crear la exportación. Úsalo para quitar una exportación terminada o fallida que ya no necesitas, ya que los archivos también se eliminan automáticamente 7 días después de generarse. El id viene de exports_list. Devuelve el objeto de la exportación eliminada tal como era antes de eliminarla.

Permiso: analytics.export · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/exports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /exports/:id/download.json Obtener un enlace firmado al archivo (válido 10 minutos) exports_download

Devuelve un enlace de descarga de corta duración para una exportación terminada. Elígelo cuando exports_get muestre status complete. La respuesta tiene url (un enlace firmado válido durante 10 minutos, úsalo de inmediato), expires_at (cuándo deja de funcionar el enlace, ISO 8601), filename y byte_size (bytes). Falla con un código de error de no encontrado expired cuando la exportación tiene más de 7 días, y con un error de validación cuando la exportación sigue en cola o en ejecución o cuando falló (el mensaje de error explica el motivo). Vuelve a llamarlo para obtener un enlace nuevo mientras la propia exportación no haya caducado. El id viene de exports_list.

Permiso: analytics.export

Ejemplo
curl https://privatusanalytics.com/exports/:id/download.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/exports.json Listar exportaciones (la cola de trabajos) exports_list

Lista las exportaciones de un espacio de trabajo para los sitios a los que tienes acceso, de la más reciente a la más antigua. Úsalo para encontrar un id de exportación, comprobar qué exportaciones siguen en ejecución o ver cuáles han caducado. Filtra con site_id, status (queued, running, complete, failed o expired) y kind (aggregated, pageviews, events, imported, raw o dashboard). Paginado con page y per_page (hasta 100), y devuelve data (una lista de exportaciones, consulta exports_get para los campos) más la paginación en meta. Necesita el workspace_id de workspaces_list.

Permiso: analytics.export

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/exports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/exports/preview.json Previsualizar una exportación: las primeras 20 filas y el número estimado de filas exports_preview

Simulación de una exportación que no crea nada. Acepta los mismos parámetros que exports_create y devuelve kind, file_format, columns (los nombres de las columnas en orden), rows (hasta 20 filas de muestra como objetos con las columnas como claves) y estimated_rows (un recuento aproximado de filas del archivo completo). Para el kind dashboard, las filas de muestra listan cada nombre de archivo con su número de filas. Úsalo para validar dimensiones, campos, filtros y el intervalo de fechas, y para ver el tamaño que tendría la exportación antes de llamar a exports_create. Se ejecuta de forma síncrona, así que mantén un intervalo de fechas razonable. Los errores de validación son los mismos que en exports_create, incluido el requisito del plan Pro para los kind a nivel de fila. No se guarda nada y no se envía ningún correo.

Permiso: analytics.export

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/exports/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /exports/:id.json Obtener una exportación y su estado exports_get

Devuelve una exportación, incluido su progreso. Úsalo para consultar una exportación iniciada con exports_create hasta que status sea complete o failed. Los estados son queued, running, complete, failed y expired. Los campos incluyen id (exp_...), site_id (pa_...), kind, format, status, params (la definición guardada de la exportación), row_count (null hasta que se completa), error (se rellena cuando falla), completed_at, expires_at (los archivos se conservan 7 días tras completarse), download_url (se rellena solo mientras el archivo se puede descargar, usa exports_download para obtener un enlace firmado) y created_at. El id viene de exports_create o exports_list.

Permiso: analytics.export

Ejemplo
curl https://privatusanalytics.com/exports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Facturación

POST /workspaces/:workspace_id/billing/badge.json Activar o desactivar el bonus de la insignia (plan gratuito) billing_badge

Activa o desactiva en un espacio de trabajo Free la bonificación por la insignia de Privatus Analytics, que aumenta la cuota mensual de eventos. Establece enabled en true para activarla. Una comprobación en segundo plano busca entonces la insignia en los sitios del espacio de trabajo y la verifica, lo que puede tardar un momento, así que lee billing_get después y mira badge.verified_at. Establece enabled en false para desactivarla, lo que borra las fechas de comprobación y verificación y elimina la bonificación. Activarla en un espacio de trabajo Pro o Business se rechaza porque los planes de pago no tienen bonificación. Devuelve el objeto de facturación del espacio de trabajo como billing_get. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/badge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/billing/cancel.json Cancelar al final del periodo de facturación billing_cancel

Cancela la suscripción de pago al final del periodo de pago actual. No se reembolsa nada y el plan sigue activo hasta current_period_ends_at, tras lo cual el espacio de trabajo pasa al plan Free. Usa billing_resume para deshacerlo antes de esa fecha. Falla cuando el espacio de trabajo no tiene suscripción o ya hay una cancelación programada. El reason opcional (uno de los valores del enum) y comment son una encuesta de salida. Un comment, si se indica, se envía por correo al equipo de Privatus Analytics como un mensaje de opinión del miembro y no se guarda. Devuelve el objeto de facturación con cancel_at_period_end en true. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/cancel.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/billing/change_plan.json Cambiar de plan, nivel o intervalo (prorrateado) billing_change_plan

Cambia la suscripción existente a otro plan, nivel de eventos o intervalo de facturación. Esto genera un cobro. El cambio surte efecto de inmediato y Paddle lo prorratea, así que se aplica de inmediato un cargo o un crédito al método de pago registrado. Ejecuta billing_preview primero con los mismos parámetros para ver los importes exactos. Falla si el espacio de trabajo no tiene suscripción (usa billing_checkout para eso), si el destino es el plan, nivel e intervalo actuales, o si no existe un precio para la combinación de plan y eventos. El valor de events debe ser uno de los niveles de plans_list. Devuelve el objeto de facturación actualizado. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/change_plan.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/billing/checkout.json Iniciar un pago de Paddle para un plan de pago billing_checkout

Inicia un pago de Paddle para un espacio de trabajo que aún no tiene suscripción y devuelve una URL de pago alojada. No se cobra nada hasta que una persona completa el pago en un navegador, así que entrega la url a la persona. Usa billing_change_plan en su lugar cuando el espacio de trabajo ya tenga una suscripción. Los parámetros son plan (pro o business), events (un nivel de eventos al mes de plans_list) e interval (month o year, por defecto month). Los precios incluyen el IVA o el impuesto sobre las ventas. Un programa de descuento aprobado se aplica automáticamente y se indica en discount_id. Devuelve transaction_id, url (puede ser null), price_id, plan, events, interval, amount (dólares enteros del intervalo), client_token y environment (sandbox o production, usado por la superposición de Paddle), custom_data y discount_id (puede ser null). Falla si el espacio de trabajo ya tiene una suscripción. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/checkout.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/billing/discount.json Solicitar un descuento para organizaciones sin ánimo de lucro, educación o código abierto billing_discount

Solicita un programa de descuento para el espacio de trabajo. Esto envía una solicitud para revisión del personal y avisa por correo al equipo de Privatus Analytics, pero no concede ningún descuento por sí mismo. Los programas son nonprofit, education, open_source (50 por ciento de descuento), open_source_free (Pro gratis hasta 1M de eventos al mes) y agency (20 por ciento de descuento en cada espacio de trabajo que poseas). Solo se permite una solicitud abierta (pending, approved o active) por espacio de trabajo, y puedes volver a solicitar tras un rechazo o una revocación. license solo se conserva para los dos programas de código abierto. Devuelve la solicitud con program, status, percent, comp_events (puede ser null), organization_name, website, proof_url, license, note, rejection_reason, created_at, reviewed_at, applied_at y revoked_at (marcas de tiempo que pueden ser null). Consulta el avance más tarde en el campo discount de billing_get. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/discount.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/billing/payment_method.json Obtener un enlace para actualizar el método de pago billing_payment_method

Devuelve un enlace de Paddle donde una persona puede actualizar el método de pago de la suscripción. La llamada en sí no cambia nada. Entrega la url a la persona para que la abra en un navegador. El resultado tiene kind (payment_method) y url. Falla cuando el espacio de trabajo no tiene una suscripción activa. Para facturas, direcciones y cualquier otro dato de facturación usa billing_portal. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/payment_method.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/billing/portal.json Obtener un enlace al portal de clientes de Paddle billing_portal

Devuelve un enlace al portal de clientes de Paddle, donde una persona puede ver facturas, métodos de pago y direcciones. La llamada en sí no cambia nada. Entrega la url a la persona para que la abra en un navegador. El resultado tiene kind (portal) y url. Falla si el espacio de trabajo aún no tiene un cliente en Paddle (nunca completó un pago) o cuando el cliente se comparte con otros espacios de trabajo a los que quien llama no tiene acceso, porque el portal expone todos los datos del cliente. Usa billing_payment_method solo para la tarjeta. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/portal.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/billing/preview.json Previsualizar un cambio de plan con prorrateo billing_preview

Muestra cuánto costaría ahora mismo pasar la suscripción a otro plan, nivel o intervalo, sin cambiar nada. Ejecútalo siempre antes de billing_change_plan con los mismos parámetros plan, events e interval. Falla si el espacio de trabajo no tiene suscripción o si el destino coincide con el precio actual. Devuelve plan, events, interval, price_id, amount (precio de lista en dólares enteros del intervalo), currency, charge_minor (lo que se cobraría ahora), credit_minor (crédito por el tiempo no usado) y result_minor (importe neto), todos en unidades menores de la moneda, result_action (charge o credit, puede ser null), next_billed_at (puede ser null) y warnings (cadenas, por ejemplo si el uso del mes pasado supera el nuevo nivel o límites del plan, como sitios o miembros, que el nuevo plan incumpliría). Requiere billing.manage.

Permiso: billing.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/billing/resume.json Deshacer una cancelación programada o reanudar una pausa billing_resume

Deshace una cancelación programada, o reanuda una suscripción en pausa, para que el plan siga renovándose. Úsalo después de billing_cancel y antes de current_period_ends_at. Una suscripción en pausa se reanuda de inmediato. Falla cuando no hay ninguna cancelación programada y la suscripción no está en pausa. Devuelve el objeto de facturación actualizado. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/resume.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/billing.json Obtener el plan, la suscripción y el uso billing_get

Devuelve el plan y el estado de facturación del espacio de trabajo. Úsalo antes de cambiar algo en la facturación, y para saber si la suscripción está activa o en proceso de cancelación. Los campos incluyen workspace_id, plan (free, pro, business o enterprise), plan_events (el nivel de eventos al mes contratado), allowance (los eventos al mes realmente permitidos, incluida cualquier bonificación de insignia), billing_interval (month o year, puede ser null), price (dólares enteros del intervalo, puede ser null), subscription_status, current_period_ends_at, cancel_at_period_end (true cuando hay una cancelación programada), canceled_at, auto_upgrade, discount (la última solicitud de descuento, puede ser null), discount_percent, billing_emails (array), tax_id, badge (opted_in, verified_at, checked_at y el tamaño de la bonificación) y usage (el mismo objeto que devuelve billing_usage). Requiere billing.manage. Las facturas están en billing_invoices_list y una vista del uso mes a mes es billing_usage.

Permiso: billing.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/billing.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/billing.json Actualizar los correos de facturación, el identificador fiscal y la mejora automática billing_update

Actualiza los ajustes de facturación del espacio de trabajo. Solo cambian los datos que envías. billing_emails es un array de hasta 5 direcciones adicionales para facturas y avisos de facturación y reemplaza toda la lista. tax_id se guarda en el espacio de trabajo y no se añade a las facturas, así que también debe introducirse en el pago. auto_upgrade es false por defecto. Cuando es true, al alcanzar el límite mensual de eventos el espacio de trabajo pasa al siguiente nivel y se cobra la diferencia en lugar de pausar la recopilación. Activarlo mientras la recopilación ya está en pausa por el límite mejora el plan y cobra de inmediato, y envía un correo de confirmación. Si Paddle rechaza la mejora, no se guarda nada. Devuelve el objeto de facturación como billing_get. Requiere billing.manage.

Permiso: billing.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/billing.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/billing/usage.json Obtener el uso de este mes, la previsión y el reparto por sitio billing_usage

Devuelve el uso de eventos del espacio de trabajo en un mes. Úsalo para comprobar cuánto falta para el límite mensual estricto. Los parámetros son month (cualquier día del mes, por defecto el mes actual). Solo cuentan las páginas vistas y los eventos personalizados. Los campos son month, events, bots (recuento agregado de bots, no se factura), allowance, percent (de 0 a 100 o más, un decimal), forecast y forecast_percent (proyección lineal hasta fin de mes, null en meses pasados), days_left, status (ok, warning al 80 por ciento, over al 100 por ciento, paused o locked), sites (por sitio: site_id, domain, name, events y share en porcentaje, el mayor primero), history (meses anteriores como month y events), access_locked_at, collection_paused (true cuando se están descartando los eventos nuevos), pause_reason (limit o staff, puede ser null), collection_paused_at y resumes_at (el día 1 del mes siguiente cuando la pausa es por el límite). Requiere billing.manage.

Permiso: billing.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/usage.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/billing/invoices.json Listar facturas billing_invoices_list

Lista las transacciones de facturación del espacio de trabajo, de la más reciente a la más antigua. Cada elemento tiene id (úsalo con billing_invoices_get), invoice_number (puede ser null), status, amount_minor (entero en unidades menores de la moneda, así que 900 significa 9.00), currency (código ISO como USD) y billed_at (ISO 8601, puede ser null). Paginado con page y per_page (máximo 100). Solo lista transacciones. Para obtener el PDF llama a billing_invoices_get y para actualizar la tarjeta usa billing_payment_method. Requiere billing.manage.

Permiso: billing.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/invoices.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/billing/invoices/:id.json Obtener el enlace al PDF de una factura billing_invoices_get

Devuelve un enlace al PDF de la factura de una transacción facturada. Obtén el id de la factura de billing_invoices_list (el campo id, un id de transacción de Paddle). El resultado tiene kind (invoice) y url, que es un enlace al PDF de Paddle, así que descárgalo o compártelo poco después de la llamada. Falla si el id no pertenece a este espacio de trabajo o si Paddle no tiene factura para él. Requiere billing.manage.

Permiso: billing.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/invoices/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Formularios

POST /sites/:site_id/testimonials/forms.json Crea un formulario testimonial_forms_create

Una llamada incluye el formulario completo: pasos, preguntas, lógica de salto, texto de consentimiento e idioma. Lo que se omite parte de un valor predeterminado razonable en el idioma del formulario, y el slug sale del nombre. El enlace es https://privatus.page/f/<slug>. El enrutamiento de valoraciones bajas y el CSS personalizado necesitan el plan Business (402 plan_limit sin él). Las respuestas en vídeo y audio se ofrecen a quien da el testimonio desde Pro.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/forms.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/forms/:id/permanent.json Elimina un formulario definitivamente testimonial_forms_delete

Elimina el formulario, sus registros de envíos, su recompensa y sus comentarios privados. Los testimonios que recogió se conservan. No se puede deshacer, así que lo hace una persona en la página. La API acepta confirm (el nombre o id del formulario).

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id/permanent.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/forms/:id.json Envía un formulario a la papelera testimonial_forms_trash

Su enlace responde que el formulario está cerrado hasta que se restaure. La papelera se vacía a los 30 días. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/forms/:id/duplicate.json Copia un formulario, opcionalmente a otro idioma testimonial_forms_duplicate

Copia todos los ajustes excepto el slug, las estadísticas y la recompensa.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id/duplicate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/forms.json Lista los formularios de un sitio testimonial_forms_list

Los formularios de la papelera se listan con trashed true, y se omiten en caso contrario. Cada formulario incluye sus ajustes, su recompensa y cuántos envíos ha tenido.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/forms.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/forms/:id/qr.json Obtiene el código QR de un formulario como SVG o PNG testimonial_forms_qr

El código contiene el enlace del formulario con ?src=qr, de modo que los escaneos se cuentan como un canal propio. Un slug cambiado mantiene funcionando un código impreso.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id/qr.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/forms/:id/restore.json Restaura un formulario de la papelera. Su enlace vuelve a funcionar testimonial_forms_restore

Saca un formulario de la papelera tal como estaba, con sus preguntas, envíos y comentarios privados. Su enlace (/f/<slug>) y sus incrustaciones vuelven a aceptar respuestas. El servidor responde con 422 y el código not_in_trash para un formulario que no está en la papelera.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id/restore.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/forms/:id/share.json Obtiene el enlace de un formulario, los enlaces del código QR y los fragmentos de incrustación testimonial_forms_share

Devuelve el enlace, el fragmento de incrustación en línea y el fragmento de incrustación emergente. Las entradas de la ventana emergente (trigger, label, position, accent) cambian el fragmento emergente.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id/share.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/forms/:id.json Obtiene un formulario con cada paso, pregunta, regla y ajuste testimonial_forms_get

Devuelve el formulario completo tal como lo aceptan testimonial_forms_create y testimonial_forms_update, con su slug, su enlace, su recompensa y cuántos envíos tiene. Un formulario de la papelera no se encuentra aquí: restáuralo primero.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/forms/:id.json Cambia un formulario. Solo cambian las entradas enviadas testimonial_forms_update

Un cambio en un paso, una pregunta o el texto de consentimiento sube la versión del formulario, que cada registro de consentimiento guarda. Un slug cambiado deja el enlace antiguo redirigiendo. Envía las preguntas como la lista completa.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Fuentes de importación de testimonios

POST /sites/:site_id/testimonials/imports/sources.json Añade una fuente de importación desde un enlace e inicia su primera ejecución testimonial_import_sources_create

La plataforma se detecta a partir del enlace. Lo que encuentra la ejecución espera en el paso de revisión (testimonial_import_sources_review) y no se guarda nada hasta testimonial_import_sources_keep. Nada de lo importado cuenta para los testimonios mensuales. El plan Free obtiene 1 importación al mes desde un sitio de reseñas o una página. Pasado ese límite la respuesta es 402 plan_limit.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/imports/sources/:id.json Elimina una fuente. Los testimonios que trajo permanecen testimonial_import_sources_delete

Elimina la fuente con su historial de ejecuciones, lo que espera en su paso de revisión y su archivo subido. Los testimonios ya conservados de ella permanecen en el sitio. Una persona lo hace en la página de la fuente, así que la herramienta no ejecuta nada y devuelve esa página.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/imports/sources/:id/discard.json Descarta los elementos encontrados testimonial_import_sources_discard

Indica item_ids (ids de testimonial_import_sources_review) o all true para todo lo que sigue esperando, nunca ambos. Un elemento descartado sale del paso de revisión y se borra lo que se leyó sobre la persona. No se elimina ningún testimonio. En caso contrario el servidor responde con 422 y el código selection o unknown_ids.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources/:id/discard.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/imports/find.json Encuentra testimonios en el propio sitio web testimonial_import_sources_find

Lee el dominio del sitio y las páginas a las que enlaza que parecen contener testimonios, una vez por sitio. Es gratis: no cuenta como una de las importaciones obtenidas del plan Free. Lo que encuentra espera en el paso de revisión de la fuente que devuelve.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/find.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/imports.json Lista las fuentes de importación de un sitio testimonial_import_sources_list

meta incluye fetched_imports (used, limit y resets_on del mes, limit null es ilimitado) y sync (el ritmo que permite el plan).

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/imports/sources/:id/keep.json Conserva los elementos encontrados como testimonios testimonial_import_sources_keep

Indica item_ids (hasta 100) o all. Cada elemento conservado se guarda por la misma vía que cualquier otro testimonio, así que los duplicados nunca se guardan dos veces. Nada de lo conservado cuenta para los testimonios mensuales. meta indica cuántos se conservaron.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources/:id/keep.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/imports/platforms.json Lista las plataformas que una importación puede leer testimonial_import_platforms_list

El registro de fuentes probadas. Una plataforma se lista solo cuando su importación está probada con una página real. Cada entrada indica qué enlace pegar.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports/platforms.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/imports/sources/:id/review.json Lista lo que encontró una fuente y aún no se ha decidido testimonial_import_sources_review

meta incluye los recuentos por distintivo (new, already_here, likely_duplicate).

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources/:id/review.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/imports/sources/:id/run.json Vuelve a leer una fuente ahora testimonial_import_sources_run

Una ejecución manual es una importación obtenida y cuenta como una de las del mes en el plan Free (402 plan_limit pasado el límite). Se rechaza mientras hay una ejecución activa (422 in_progress) y tras 3 ejecuciones de la fuente en 24 horas en cualquier plan (422 too_many_runs). En una fuente con error borra el recuento de fallos.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources/:id/run.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/imports/sources/:id.json Obtiene una fuente de importación con su estado y recuentos testimonial_import_sources_get

Devuelve la plataforma, el nombre, la dirección leída, cada cuánto se vuelve a leer, el estado, cuántos elementos esperan en el paso de revisión, cuántos se conservaron, los fallos seguidos y cuándo se ejecutó por última vez y cuándo se ejecutará de nuevo.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/imports/sources/:id.json Cambia el enlace, el nombre, la sincronización o la aprobación automática de una fuente, o ponla en pausa testimonial_import_sources_update

Una sincronización por encima del plan (cualquiera en Free, semanal en Pro) se rechaza con 402 plan_limit.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/imports/sources/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Idiomas de testimonios

GET /sites/:site_id/testimonials/settings/languages.json Obtiene los ajustes de idioma de los testimonios de un sitio testimonial_languages_get

El idioma predeterminado, los idiomas ofrecidos, si los testimonios recién aprobados se traducen automáticamente, si el plan incluye traducción, si la traducción está configurada, y los caracteres usados y restantes del mes.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/languages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/settings/languages.json Define el idioma predeterminado, los idiomas ofrecidos y la traducción automática testimonial_languages_update

Envía solo lo que cambia. El predeterminado siempre está entre los idiomas ofrecidos, y un idioma en el que está escrito un formulario no se puede quitar (in_use). Activar auto_translate necesita Business o superior (402 plan_limit en otros): desde entonces las palabras de cada testimonio recién aprobado se envían a Google Cloud Translation, y se avisa al miembro por correo de que un asistente cambió esto.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/settings/languages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Importaciones

DELETE /sites/:site_id/imports/google/connection.json Desconecta tu cuenta de Google Analytics y elimina sus tokens de acceso almacenados imports_google_disconnect

Elimina la conexión de Google Analytics guardada del miembro que llama para el espacio de trabajo de este sitio, de modo que las importaciones de GA4 ya no pueden leer de Google hasta que se vuelva a conectar en la aplicación. Los datos que ya se importaron se conservan y solo se eliminan borrando su importación con imports_delete. El permiso no se revoca en el lado de Google. Falla con un error de validación cuando no hay conexión, o mientras una de las importaciones de GA4 del miembro está en cola o en ejecución. Devuelve un objeto con disconnected true. La conexión se hace en la aplicación (la pantalla de inicio de sesión de Google), no hay herramienta para ello.

Permiso: sites.manage

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/imports/google/connection.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/imports/google/properties.json Listar propiedades de Google Analytics 4 para importar imports_google_properties

Lista las propiedades de Google Analytics 4 que puede leer la cuenta de Google conectada del miembro que llama. Llámalo antes de imports_create con source ga4 para obtener el property_id que debes usar. Devuelve una lista de objetos con id (como properties/123456789, pásalo como property_id), name y account. Falla con un error de validación cuando el miembro no ha conectado Google para este espacio de trabajo (se hace en la aplicación, no hay herramienta para ello) o cuando Google rechaza la solicitud. Hace una llamada en vivo a Google y no cambia nada.

Permiso: sites.manage

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/imports/google/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/imports.json Iniciar una importación (propiedad de GA4 o subida de CSV) imports_create

Inicia la importación de datos históricos de otra herramienta de analíticas a un sitio, procesada en segundo plano, y devuelve la importación con status queued. Elige source ga4 para obtener los datos de la API de Google Analytics 4, que necesita una conexión de Google hecha en la aplicación, property_id (de imports_google_properties) y date_from. date_to es por defecto el día anterior al primer evento rastreado del sitio, o ayer. Las demás fuentes (universal_analytics, fathom, simple_analytics, plausible, matomo, umami, clicky) toman una exportación CSV subida como el parámetro file (carga de formulario multipart, hasta 50 MB), lo que hace poco práctico iniciarlas por MCP y es mejor hacerlo en la aplicación. dimension solo hace falta para anular la detección de lo que desglosan las filas del CSV, por ejemplo las exportaciones Label de Matomo. Las filas importadas nunca cuentan para la cuota de eventos y solo aparecen en las estadísticas cuando pasas include_imported true. Un espacio de trabajo puede tener como máximo 5 importaciones en cola o en ejecución a la vez. Consulta imports_get hasta que status sea complete o failed. Necesita el permiso sites.manage.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/imports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/imports/:id.json Eliminar una importación y todos sus datos importados imports_delete

Elimina de forma permanente una importación junto con todas las filas que aportó y su archivo subido. Las estadísticas que incluían los datos importados cambian de inmediato cuando include_imported está activado, y no se puede deshacer, aunque puedes volver a importar. El id viene de imports_list y necesita el site_id. Devuelve la importación eliminada. Necesita el permiso sites.manage. Los datos recopilados por el tracker no se tocan.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/imports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/imports.json Listar las importaciones de un sitio imports_list

Lista las importaciones de un sitio, de la más reciente a la más antigua. Úsalo para encontrar un id de importación o comprobar si una sigue en ejecución. Filtra opcionalmente por status (queued, running, complete o failed). Paginado con page y per_page (hasta 100). Cada elemento tiene id, site_id, source, status, date_from, date_to, rows_imported, error, completed_at y created_at. Consulta imports_get para los detalles e imports_create para iniciar una.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/imports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/imports/:id.json Obtener una importación y su estado imports_get

Devuelve una importación de un sitio, usada para consultar el estado de una importación iniciada con imports_create. Los campos son id (imp_...), site_id, source, status (queued, running, complete o failed), date_from y date_to (YYYY-MM-DD, null cuando se desconoce), rows_imported (recuento de filas diarias importadas), error (se rellena cuando falla), completed_at y created_at. El id viene de imports_create o imports_list. Las filas importadas solo aparecen en las estadísticas cuando la llamada de estadísticas establece include_imported true.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/imports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Importaciones de testimonios desde hoja de cálculo

POST /sites/:site_id/testimonials/imports/spreadsheet.json Sube una hoja de cálculo (o envía texto CSV) y lee sus columnas testimonial_spreadsheet_imports_create

Paso 1 de una importación desde hoja de cálculo. Envía file (CSV, TSV o XLSX, 10 MB y 5.000 filas como máximo, con encabezados en la primera fila) o content (texto CSV de hasta 1 MB). La respuesta incluye las columnas, tres valores de muestra de cada una y una primera suposición de adónde va cada columna. Todavía no se importa nada: continúa con testimonial_spreadsheet_imports_update y testimonial_spreadsheet_imports_run. Una hoja de cálculo nunca cuenta para los testimonios mensuales ni para las importaciones obtenidas.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/spreadsheet.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/imports/spreadsheet/:id/run.json Lee el archivo asociado hacia el paso de revisión testimonial_spreadsheet_imports_run

Las filas que se pueden usar esperan con una casilla. Las filas que no se pueden usar se listan con su número de fila y el motivo. Consérvalas con testimonial_import_sources_keep, usando el id de la hoja de cálculo como id de la fuente.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/spreadsheet/:id/run.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/imports/spreadsheet/:id.json Obtiene las columnas, muestras, asociación, opciones y recuentos de una hoja de cálculo testimonial_spreadsheet_imports_get

Devuelve las columnas del archivo con valores de muestra, a qué campo va cada columna, las opciones (estado predeterminado, etiquetas, colección, formato de fecha, qué pasa con los duplicados) y, una vez ejecutada, cuántas filas esperan en el paso de revisión y cuántas se conservaron.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports/spreadsheet/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/imports/spreadsheet/:id.json Guarda qué columna va adónde y las opciones del archivo testimonial_spreadsheet_imports_update

Pasos 2 y 3 de una importación desde hoja de cálculo. mapping es un objeto de nombre de columna a campo, con un valor vacío para una columna que se omite, y dos columnas no pueden ir al mismo campo. Las opciones son default_status (pending o approved), tags, collection_id (una colección manual), default_source_name, date_format (auto, ymd, dmy o mdy) y duplicates (skip o queue). Solo cambia lo que se envía y no se importa nada hasta testimonial_spreadsheet_imports_run.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/imports/spreadsheet/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Imágenes de testimonios

POST /sites/:site_id/testimonials/images/bulk.json Crea imágenes de cada testimonio aprobado de una colección testimonial_images_bulk_create

Hasta 200 testimonios por ejecución, una imagen por tamaño cada uno. Un texto demasiado largo para la imagen se dibuja a partir de su destacado, o si no de sus primeras frases (excerpted indica cuántos). La respuesta lista las imágenes iniciadas, los testimonios omitidos con el motivo y export_id: un zip de los PNG aparece en la página de Exportaciones cuando se dibujan.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/images/bulk.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/images.json Crea imágenes de un testimonio aprobado, una por tamaño testimonial_images_create

Solo se puede dibujar un testimonio aprobado, porque el PNG recibe una dirección pública: cualquier otro se rechaza con not_approved. Cada imagen empieza como rendering y se dibuja en segundo plano. La respuesta es la lista de imágenes iniciadas. Consulta testimonial_images_get para file_url. Un 422 con text_too_long significa que las palabras no caben: usa text_mode highlight o excerpt, o un tamaño más alto.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/images.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/images/:id.json Elimina una imagen y su archivo testimonial_images_delete

El PNG se elimina del host de medios y su dirección deja de funcionar. Una imagen no tiene papelera. Se puede volver a crear a partir de su testimonio con testimonial_images_create. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/images/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/images.json Lista las imágenes de un sitio testimonial_images_list

Imágenes hechas a partir de testimonios aprobados, las más recientes primero, 25 por página. Filtra por estado, plantilla, tamaño o testimonial_id. Cada una incluye file_url cuando está lista.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/images.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/images/:id.json Obtiene una imagen, con su estado y la dirección de su PNG testimonial_images_get

status es rendering, ready o failed. file_url se establece cuando está lista. Consulta esto después de testimonial_images_create hasta que status ya no sea rendering.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/images/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/images/:id.json Cambia cómo se dibuja una imagen y vuelve a renderizarla testimonial_images_update

Envía solo lo que cambia. Sin nada enviado la renderiza de nuevo a partir del testimonio tal como está ahora, que es también la forma de reintentar una que falló. Un nuevo renderizado tiene un file_url nuevo, y el archivo antiguo se elimina.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/images/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Informe de patrocinador

GET /sponsor/:token.json Un informe de patrocinador, mediante el token de su enlace ad_reports_get

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/sponsor/:token.json

Informes de patrocinadores

Informes por correo

DELETE /recipients/:id.json Quitar un destinatario de un informe por correo email_report_recipients_delete

Quita una dirección de un informe por correo (id del destinatario, de email_report_recipients_list). La dirección deja de recibir informes y su fila se elimina. Si la dirección se había dado de baja por su cuenta, la baja se mantiene registrada, así que quitarla no permite que nadie vuelva a invitarla. Para cambiar muchas direcciones a la vez envía la lista completa mediante email_reports_update. Devuelve el destinatario quitado.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/recipients/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /reports/:report_id/recipients.json Listar los destinatarios de un informe por correo con su estado email_report_recipients_list

Estados: active (recibe informes), pending (invitado, aún sin aceptar), declined o unsubscribed. Añade o quita direcciones mediante la lista de destinatarios del informe.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/reports/:report_id/recipients.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /recipients/:id/resend.json Reenviar una invitación de informe pendiente email_report_recipients_resend

Envía de nuevo la invitación con enlaces nuevos. Se permite una vez cada 7 días por dirección y por informe.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/recipients/:id/resend.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/reports.json Crear un informe por correo email_reports_create

Crea un informe de analíticas programado por correo que cubre uno o más sitios (la ruta recibe workspace_id). Son obligatorios name y site_ids (ids pa_...). frequency es daily, weekly (por defecto, se envía el día de la semana indicado) o monthly (el día 1 del mes), hour es la hora del día de 0 a 23 en la zona horaria del espacio de trabajo (por defecto 8) y weekday es 0 para domingo hasta 6 para sábado (por defecto 1, solo se usa en los informes semanales). blocks elige el contenido entre kpis, chart, pages, sources, goals, campaigns, vitals, uptime, testimonials y subscriptions (por defecto kpis, chart, pages, sources, goals, testimonials, subscriptions). subscriptions muestra el MRR y lo que lo movió en el periodo, para un sitio con un proveedor de pagos conectado. recipients es una lista de direcciones de correo (hasta 50). Los miembros del espacio de trabajo quedan activos de inmediato, cualquier otra dirección queda pendiente y recibe un correo de invitación, y recibe informes solo después de aceptarla. Se rechazan las direcciones que se han dado de baja. Si se omite recipients, se añade al usuario que llama. Un informe activado necesita al menos un destinatario. El plan Free permite 3 informes, los planes de pago son ilimitados. Devuelve el informe con next_run_at. Usa email_reports_send_test para previsualizarlo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/reports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /reports/:id/deliveries.json Registro de envíos de un informe por correo email_reports_deliveries

Lista el registro de envíos de un informe por correo, del más reciente al más antiguo y paginado. Cada entrada tiene status (sent para un envío programado, test, failed o skipped), recipients_count, error (el motivo de un fallo, si no null) y sent_at. Filtra con status. Úsalo para confirmar que un informe programado salió o para ver por qué falló. Usa email_reports_send_test para lanzar un correo de prueba.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/reports/:id/deliveries.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /reports/:id.json Eliminar un informe por correo email_reports_delete

Elimina de forma permanente un informe por correo junto con sus destinatarios y su registro de envíos. No se puede deshacer y no se envía ningún correo más. Para dejar de enviar pero conservar el informe usa email_reports_update con enabled false. El id (rep_...) viene de email_reports_list. Devuelve el informe eliminado.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/reports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/reports.json Listar informes por correo email_reports_list

Lista los informes por correo programados de un espacio de trabajo (la ruta recibe workspace_id), ordenados por nombre y paginados. Cada informe tiene id (rep_...), name, site_ids, frequency, hour, weekday, recipients (todas las direcciones del informe), recipient_details (id, email, status, invited_at, expires_at y confirmed_at de cada una), blocks, attach_pdf, intro, enabled, last_sent_at, next_run_at y created_at. Filtra por frequency (daily, weekly o monthly). Quien tenga acceso limitado a algunos sitios solo ve los informes cuyos sitios son todos suyos. Solo los destinatarios con status active reciben realmente los informes. Usa email_reports_deliveries para el registro de envíos.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/reports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /reports/:id/send_test.json Enviar ahora un informe por correo como prueba email_reports_send_test

Envía el informe ahora mismo a una dirección como prueba, sin cambiar su programación ni last_sent_at. Envía un correo real, así que úsalo solo cuando el usuario lo quiera. recipient es por defecto el usuario que llama y solo puede ser quien llama, otro miembro del espacio de trabajo o un destinatario activo del informe. Para cualquier otra dirección, la prueba se envía a quien llama. Los envíos de prueba tienen un límite de frecuencia por espacio de trabajo y por dirección externa, y un envío rechazado devuelve un error de límite de frecuencia. Devuelve el envío con status (test, o failed con el motivo en error), recipients_count y sent_at. Usa email_reports_deliveries para el registro completo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/reports/:id/send_test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /reports/:id.json Obtener un informe por correo email_reports_get

Devuelve un informe por correo por id (rep_..., de email_reports_list). La respuesta tiene name, site_ids, frequency, hour, weekday, recipients, recipient_details con cada dirección y su estado de aceptación, blocks, attach_pdf, intro, enabled, last_sent_at y next_run_at (marcas de tiempo UTC). recipients lista todas las direcciones, incluidas las pendientes, y solo las direcciones con status active en recipient_details reciben informes. Usa email_reports_deliveries para ver qué se envió.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/reports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /reports/:id.json Actualizar un informe por correo email_reports_update

Modifica un informe por correo (id de email_reports_list). Solo cambian los datos que envías. Enviar recipients reemplaza toda la lista. Las direcciones que quitas se eliminan, las nuevas siguen las mismas reglas de aceptación que en email_reports_create (los miembros quedan activos de inmediato, el resto recibe un correo de invitación) y las direcciones que ya estaban en el informe conservan su estado. Cambiar frequency, hour, weekday o enabled recalcula next_run_at. Establece enabled en false para pausar. Usa email_report_recipients_list para ver el estado de aceptación y email_report_recipients_resend o email_report_recipients_delete para gestionar direcciones concretas.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/reports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/invites/:token/accept.json Aceptar una invitación a un informe report_invites_accept

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/reports/invites/:token/accept.json \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/invites/:token/decline.json Rechazar una invitación a un informe report_invites_decline

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/reports/invites/:token/decline.json \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/resubscribe/:token.json Volver a recibir informes después de darse de baja report_resubscribes_confirm

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/reports/resubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/unsubscribe/:token/resubscribe.json Enviar a una dirección un enlace para volver a recibir informes report_resubscribes_create

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/reports/unsubscribe/:token/resubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/unsubscribe/:token.json Dar de baja una dirección de un informe por correo report_unsubscribes_create

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/reports/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'

Kit de marca de testimonios

DELETE /sites/:site_id/testimonials/settings/brand_kit.json Devuelve el kit de marca de los testimonios de un sitio a los valores predeterminados de Privatus Analytics testimonial_brand_kit_reset

Borra de una vez cada color, fuente, el radio, el estilo de valoración, los logotipos y el CSS personalizado, y cada formulario, widget y muro cambia con ello. No se puede deshacer, así que a un asistente se le envía a la página del Kit de marca en lugar de ejecutarlo.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/settings/brand_kit.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/settings/brand_kit.json Obtiene el kit de marca de los testimonios de un sitio, con cada color resuelto para claro y oscuro testimonial_brand_kit_get

Devuelve los colores, fuentes, radio de las esquinas, estilo de valoración, logotipos, interruptor de la insignia y CSS personalizado con los que se dibuja cada formulario, widget y muro del sitio. Un ajuste que nunca se cambió vuelve con el valor predeterminado de Privatus Analytics.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/brand_kit.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/settings/brand_kit.json Cambia el kit de marca de los testimonios de un sitio testimonial_brand_kit_update

Solo cambian las entradas que envías. Envía una cadena vacía para devolver un ajuste al valor predeterminado de Privatus Analytics. El CSS personalizado se comprueba al guardarlo, y lo que no está permitido se rechaza indicando la línea. El CSS personalizado necesita el plan Business y ocultar la insignia necesita el plan Business. Sin él el servidor responde con 402 plan_limit.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/settings/brand_kit.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Lista de deshacer de testimonios

GET /sites/:site_id/testimonials/settings/undo.json Lista lo que se cambió en los últimos 7 días y se puede deshacer testimonial_undo_records_list

La más reciente primero. Cada registro indica qué se ejecutó, quién lo ejecutó, cuántos cambió y omitió y por qué, y hasta cuándo se puede deshacer.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/undo.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/settings/undo/:id.json Lee un registro de deshacer testimonial_undo_records_get

Para una ejecución en segundo plano, state es running y processed indica cuánto lleva.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/undo/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/settings/undo/:id/undo.json Deshace una acción masiva o un cambio individual en un plazo de 7 días testimonial_undo_records_undo

Repone el valor anterior en todo lo que cambió la ejecución. Lo que cambió de nuevo desde entonces se deja como está y se cuenta en left. Una fusión de personas o de duplicados se deshace de la misma manera. Por MCP no se ejecuta un deshacer que eliminaría o enviaría a la papelera (el deshacer de una restauración, de una ejecución de traducción y de una ejecución de creación de imágenes): la herramienta responde con human_only y la página de la app donde lo hace una persona.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/settings/undo/:id/undo.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Menciones de testimonios

GET /sites/:site_id/testimonials/mentions.json Lista las palabras y frases que se repiten en los testimonios de un sitio testimonial_mentions_list

Cada término viene con cuántos testimonios lo contienen, su proporción, la valoración media de esos y los últimos 90 días frente a los 90 anteriores. Ordena por rating_asc para leer de qué se quejan las personas, o por rising para lo que es nuevo. meta.refreshed_at indica cuándo se reconstruyeron los términos por última vez. Pasa un término a testimonials_list como mention para leer los testimonios.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/mentions.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/mentions/tag.json Etiqueta cada testimonio que menciona una palabra o frase testimonial_mentions_tag

Una acción masiva sobre todo el resultado, con deshacer. El término es cualquier palabra o frase de dos palabras, comparada con lematización como se cuentan las Menciones. Una etiqueta nombrada por primera vez se crea. Responde con un id de deshacer que testimonials_bulk_undo acepta durante 7 días. Más de 100 se ejecutan en segundo plano.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/mentions/tag.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /sites/:site_id/testimonials/mentions.json Oculta un término que es solo ruido, o vuelve a mostrarlo testimonial_mentions_update

Un término oculto sale de la lista de Menciones y de la faceta Menciones de la bandeja, y sigue oculto cuando se reconstruyen los términos.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/mentions.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Miembros

POST /workspaces/:workspace_id/invitations.json Invitar a personas por correo invitations_create

Invita a una o más personas a un espacio de trabajo por correo y envía a cada una un correo de invitación con un enlace válido durante 14 días. emails es una lista de hasta 50 direcciones (en el formulario de la aplicación también funciona una cadena separada por comas, espacios o punto y coma) y las direcciones que ya son miembros se omiten, pero es un error cuando todas son miembros. Invitar a una dirección que ya tiene una invitación pendiente reemplaza esa invitación y envía un correo nuevo. role es uno de los roles de members_list (por defecto viewer, no se puede invitar como owner). Usa el rol custom junto con custom_role_id (el id de roles_list, plan Business). Por defecto el acceso abarca todos los sitios, incluidos los futuros. Para limitar el acceso establece all_sites en false y lista site_ids como ids públicos de sitio (pa_...). Las invitaciones pendientes cuentan para el límite de miembros del plan (Free permite 3 miembros) y la llamada falla cuando se superaría el límite. Los correos de invitación tienen un límite de frecuencia. No puedes conceder un rol con más permisos o sitios que los tuyos. Requiere members.manage. Devuelve las invitaciones creadas (consulta invitations_list para los campos).

Permiso: members.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/invitations.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /workspaces/:workspace_id/invitations/:id.json Revocar una invitación pendiente invitations_delete

Revoca una invitación pendiente para que su enlace deje de funcionar, y libera el puesto que ocupaba. La eliminación no se puede deshacer, vuelve a invitar a la persona con invitations_create. Toma el id (un uuid) de invitations_list. Quien tenga acceso limitado a algunos sitios solo puede revocar invitaciones que no concedan más sitios que los suyos. Requiere members.manage. Devuelve la invitación revocada.

Permiso: members.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/invitations/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/invitations.json Listar invitaciones pendientes invitations_list

Lista las invitaciones de equipo pendientes de un espacio de trabajo, de la más reciente a la más antigua y paginadas. Las invitaciones aceptadas y revocadas no se listan (usa members_list para quienes se unieron), y las caducadas permanecen hasta que se reemplazan o se revocan. Requiere members.manage. Quien tenga acceso limitado a algunos sitios solo ve las invitaciones dentro de su alcance. Cada elemento tiene id (uuid, usado por invitations_delete), email, role, custom_role (el nombre del rol personalizado cuando role es custom, si no null), all_sites, site_ids (ids públicos de sitio pa_..., vacío cuando all_sites es true), invited_by (el correo de quien invitó), expires_at y created_at.

Permiso: members.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/invitations.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /workspaces/:workspace_id/members/:id.json Eliminar a un miembro (o abandonar el espacio de trabajo) members_delete

Quita a un miembro de un espacio de trabajo, o permite que quien llama lo abandone cuando el id es su propia membresía. Es inmediato y no se puede deshacer: la persona pierde el acceso, sus tokens de API de este espacio de trabajo se revocan y se elimina cualquier vínculo SCIM. Sus notas y las entradas de auditoría pasadas se conservan. El propietario no se puede quitar ni puede abandonar el espacio de trabajo, transfiere antes la propiedad con ownership_transfers_create. Quitar a otra persona necesita members.manage, y no puedes quitar a alguien con más permisos o sitios de los que tienes. Abandonar no necesita permiso, pero no se puede usar para ello un token limitado en permisos o sitios. La persona puede ser invitada de nuevo más adelante con invitations_create. Toma el id (el uuid de la membresía) de members_list. Devuelve el miembro quitado.

Permiso: member · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/members/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/members.json Listar los miembros del espacio de trabajo members_list

Lista los miembros de un espacio de trabajo en el orden en que se unieron, paginados. Usa query para buscar por nombre o correo (coincidencia parcial, sin distinguir mayúsculas) y role para filtrar por rol. Las invitaciones pendientes no se incluyen (usa invitations_list). Cada miembro tiene id (el uuid de la membresía, usado por members_update, members_delete y ownership_transfers_create), email, name (puede ser null), role, custom_role (nombre, null salvo que role sea custom), custom_role_id, all_sites, include_future_sites, site_ids (ids públicos de sitio pa_..., vacío cuando all_sites es true), two_factor (si el miembro tiene una aplicación de autenticación o una passkey), last_active_at (puede ser null) y created_at. Quien tenga acceso limitado a algunos sitios solo ve a los miembros dentro de su alcance.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/members.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/members/:id.json Cambiar el rol o el acceso a sitios de un miembro members_update

Cambia el rol y/o el acceso a sitios de un miembro en un espacio de trabajo. Solo cambian los datos que envías. Para cambiar el rol envía role (admin, editor, analyst, viewer o billing, y custom con custom_role_id de roles_list en el plan Business). El rol del propietario no se puede cambiar aquí, usa en su lugar ownership_transfers_create, y no puedes editar tu propia membresía ni la de alguien de rango superior. Para limitar los sitios envía all_sites false junto con site_ids (ids públicos de sitio pa_...), y añade include_future_sites true para conceder también los sitios creados más adelante. Envía all_sites true para dar acceso a todos los sitios. Una lista site_ids enviada sin all_sites false es un error para un miembro que ahora mismo tiene todos los sitios. No puedes conceder más permisos o sitios de los que tienes. Requiere members.manage. Toma el id de members_list. Devuelve el miembro actualizado.

Permiso: members.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/members/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/ownership_transfer.json Transferir la propiedad del espacio de trabajo a otro miembro (solo el propietario, tú pasas a ser administrador) ownership_transfers_create

Transfiere la propiedad de un espacio de trabajo a otro miembro y degrada a quien llama a admin, algo difícil de deshacer porque solo el nuevo propietario puede devolverla. Solo el propietario actual puede llamarlo, y un token no debe estar limitado a ciertos sitios o permisos. membership_id es el uuid de la membresía del nuevo propietario de members_list (no un id de usuario ni un correo) y la persona debe ser ya miembro, invítala primero si no lo es. El nuevo propietario recibe el rol owner con acceso a todos los sitios, y el rol owner no se puede conceder mediante members_update. Un espacio de trabajo Free no se puede dar a alguien que ya posea otro espacio de trabajo Free. La facturación se queda con el espacio de trabajo. Un token que llama a esto necesita members.manage. Devuelve el registro de miembro del nuevo propietario.

Permiso: member · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/ownership_transfer.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Migraciones de testimonios

POST /sites/:site_id/testimonials/imports/migrations/:id/discard.json Descarta lo que leyó una migración testimonial_migrations_discard

Indica item_ids (ids de testimonial_migrations_review) o all true para todo lo que sigue esperando, nunca ambos. Un elemento descartado sale del paso de revisión y se borra lo que se leyó sobre la persona. No se elimina ningún testimonio. En caso contrario el servidor responde con 422 y el código selection o unknown_ids.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/migrations/:id/discard.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/imports/migrations.json Lista las migraciones de un sitio testimonial_migrations_list

La más reciente primero. Una migración es un archivo de exportación de otra herramienta de testimonios. Cada una tiene la herramienta de origen, su estado y cuántos testimonios se encontraron, conservaron, eran duplicados y fallaron.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports/migrations.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/imports/migrations/:id/keep.json Conserva lo que leyó una migración como testimonios testimonial_migrations_keep

Indica item_ids (hasta 100 por llamada, de testimonial_migrations_review) o all true, nunca ambos. Cada elemento conservado se convierte en un testimonio con estado pending o approved, y keep_approval true mantiene la aprobación que tenía en la otra herramienta. Con all, los probables duplicados se dejan fuera salvo que include_likely_duplicates sea true. Nada de lo conservado cuenta para los testimonios mensuales. Lo que no se conserva permanece en el paso de revisión 30 días.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/imports/migrations/:id/keep.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/imports/migrations/:id/review.json Lista lo que leyó una migración y aún no se ha decidido testimonial_migrations_review

Lista los elementos que siguen esperando una decisión, la ejecución más reciente primero. show es new, duplicates o all (el valor predeterminado), y rating conserva solo las valoraciones en estrellas indicadas. Pasa los ids de los elementos a testimonial_migrations_keep o testimonial_migrations_discard.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports/migrations/:id/review.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/imports/migrations/:id.json Obtiene el progreso y los recuentos de una migración testimonial_migrations_get

Devuelve la herramienta de la que vino el archivo, el estado, cuántos testimonios se encontraron, conservaron, eran duplicados y fallaron, cuántos archivos de medios trae y cuándo empezó y terminó. Consúltala repetidamente mientras el estado indique que el archivo aún se está leyendo.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/imports/migrations/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Muros de amor

POST /sites/:site_id/testimonials/walls.json Crea un Muro de amor testimonial_walls_create

Una página alojada en https://privatus.page/w/<slug>. Lo que se omite parte de un valor predeterminado: el título Wall of Love, el diseño de mampostería, el slug a partir del nombre.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/walls.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/walls/:id.json Envía un muro a la papelera testimonial_walls_trash

Su página responde que se ha retirado hasta que se restaure, y una copia incrustada no muestra nada. Restaurarlo lo devuelve en la misma dirección. Se elimina definitivamente a los 30 días. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/walls/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/walls/:id/duplicate.json Copia un muro con un nuevo nombre y dirección testimonial_walls_duplicate

Hace una copia con un id nuevo, el nombre terminado en "copy" y un slug propio, de modo que tiene su propia dirección. El original y su dirección no cambian.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/walls/:id/duplicate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/walls/:id/embed.json Obtiene el enlace a un muro y el código para colocarlo dentro de otra página testimonial_walls_embed

La dirección pública del muro, y los fragmentos de script, marco y enlace simple que lo colocan dentro de otra página. Los fragmentos nunca cambian cuando se edita el muro.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/walls/:id/embed.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/walls.json Lista los Muros de amor de un sitio testimonial_walls_list

Cada Muro de amor del sitio que no está en la papelera, con su dirección, lo que lo alimenta y cuántos testimonios muestra. Usa q para buscar por nombre o slug y sort para ordenar por nombre o por más reciente.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/walls.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/walls/:id/restore.json Restaura un muro de la papelera testimonial_walls_restore

Saca un muro de la papelera. Su página vuelve a responder en la misma dirección, y cada copia incrustada lo muestra de nuevo sin cambiar el código que se pegó.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/walls/:id/restore.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/walls/:id.json Obtiene un muro con cada ajuste testimonial_walls_get

Todo lo que guarda el constructor: la dirección (/w/<slug>), el encabezado y el botón, el diseño, lo que alimenta el muro, qué muestra cada tarjeta, el estilo y los ajustes de buscadores. Un muro de la papelera responde con 404.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/walls/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/walls/:id.json Cambia un muro testimonial_walls_update

Solo cambian las entradas enviadas. Un slug cambiado deja la dirección antigua redirigiendo.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/walls/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Notas

POST /sites/:site_id/notes.json Añadir una nota a un sitio (usa la fuente "deploy" para webhooks de lanzamientos) notes_create

Añade una anotación a los gráficos de un sitio, por ejemplo un lanzamiento, una campaña o una versión. Usa workspace_notes_create en su lugar para una nota que se muestre en todos los sitios. date es por defecto hoy en la zona horaria del sitio, y end_date marca un rango (YYYY-MM-DD). title se muestra en el gráfico, body es texto sin formato y url puede apuntar a un PR o a un registro de cambios. color es uno de neutral, brand, blue, amber, red o violet, por defecto neutral. source es manual por defecto. Las integraciones de despliegue envían source deploy, y entonces title es por defecto un texto construido a partir de version (una versión de lanzamiento o un commit) y color es por defecto blue. Requiere content.write. Devuelve la nota creada (consulta notes_list para los campos).

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/notes/:id.json Eliminar una nota notes_delete

Elimina de forma permanente una nota de sitio, que desaparece de los gráficos y no se puede restaurar. La nota debe pertenecer a este sitio, las notas de todo el espacio de trabajo se eliminan con workspace_notes_delete. Toma el id (note_...) de notes_list. Requiere content.write. Devuelve la nota eliminada.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/notes.json Listar las notas de un sitio (incluidas las notas de todo el espacio de trabajo) notes_list

Lista las anotaciones (notas) que se muestran en los gráficos de un sitio, la fecha más reciente primero y paginadas. Devuelve las notas propias del sitio más las notas de todo el espacio de trabajo que se aplican a todos los sitios. Filtra con from y to (YYYY-MM-DD, una nota coincide cuando su fecha cae en el rango), source (manual, deploy, system, import o incident) y query (una búsqueda sin distinguir mayúsculas en title, body y url). Usa workspace_notes_list para la vista del espacio de trabajo en todos los sitios. Cada nota tiene id (note_...), site_id (el id público del sitio pa_..., null para una nota de todo el espacio de trabajo), date, end_date (null para un solo día), title, body (texto sin formato, puede ser null), url (puede ser null), color (neutral, brand, blue, amber, red o violet), source y created_at. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/notes/:id.json Obtener una nota notes_get

Devuelve una nota por su id (note_..., de notes_list) para un sitio, incluidas las notas de todo el espacio de trabajo que se aplican al sitio. Una nota es una anotación con fecha que se muestra en los gráficos, por ejemplo un lanzamiento, una campaña o un despliegue. Los campos son id, site_id (null cuando es de todo el espacio de trabajo), date y end_date (YYYY-MM-DD, end_date null para un solo día), title, body (puede ser null), url (puede ser null), color (neutral, brand, blue, amber, red o violet), source (manual, deploy, system, import o incident) y created_at. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/notes/:id.json Editar una nota notes_update

Edita una nota de sitio, cambiando solo los campos que envías (date, end_date, title, body, url, color). source no se puede cambiar. Enviar una url vacía quita el enlace, y una date null se ignora. La nota debe pertenecer a este sitio, las notas de todo el espacio de trabajo se editan con workspace_notes_update. Toma el id (note_...) de notes_list. Requiere content.write. Devuelve la nota actualizada.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/notes.json Añadir una nota de todo el espacio de trabajo (se muestra en todos los sitios) workspace_notes_create

Añade una anotación de todo el espacio de trabajo que aparece en los gráficos de todos los sitios del espacio de trabajo, por ejemplo un lanzamiento de toda la empresa o una caída del servicio. Se crea sin sitio (site_id es null). Usa notes_create para una nota en un solo sitio. date es por defecto hoy en la zona horaria del espacio de trabajo, end_date marca un rango (YYYY-MM-DD), color es uno de neutral, brand, blue, amber, red o violet. Requiere content.write, y quien tenga acceso limitado a algunos sitios no puede crear notas de todo el espacio de trabajo. Devuelve la nota creada.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /workspaces/:workspace_id/notes/:id.json Eliminar una nota del espacio de trabajo workspace_notes_delete

Elimina de forma permanente una nota de todo el espacio de trabajo para que desaparezca de los gráficos de todos los sitios, y no se puede restaurar. Aquí solo se pueden eliminar las notas sin sitio, usa notes_delete para una nota de sitio. Toma el id (note_...) de workspace_notes_list. Requiere content.write, y quien tenga acceso limitado a algunos sitios no puede eliminar notas de todo el espacio de trabajo. Devuelve la nota eliminada.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/notes.json Listar las notas de un espacio de trabajo workspace_notes_list

Lista las anotaciones de un espacio de trabajo, la fecha más reciente primero y paginadas. Devuelve las notas de todo el espacio de trabajo (que se muestran en todos los sitios) más las notas de cada sitio al que quien llama tiene acceso, así que comprueba site_id en cada elemento (null significa de todo el espacio de trabajo). Usa notes_list para un solo sitio. Filtra con from y to (YYYY-MM-DD), source (manual, deploy, system, import o incident) y query (busca en title, body y url). Los campos son id (note_...), site_id, date, end_date, title, body, url, color (neutral, brand, blue, amber, red o violet), source y created_at. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/notes/:id.json Editar una nota del espacio de trabajo workspace_notes_update

Edita una nota de todo el espacio de trabajo, cambiando solo los campos que envías (date, end_date, title, body, url, color). Aquí solo se pueden editar las notas sin sitio, usa notes_update para una nota de sitio. Toma el id (note_...) de workspace_notes_list. Requiere content.write, y quien tenga acceso limitado a algunos sitios no puede editar notas de todo el espacio de trabajo. Devuelve la nota actualizada.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Objetivos

POST /sites/:site_id/goals/:id/archive.json Archivar un objetivo (se oculta de los informes) goals_archive

Archiva un objetivo. Un objetivo archivado se oculta de los informes, no cuenta para el límite de objetivos del plan y conserva su definición, así que se puede restaurar más tarde con goals_unarchive. No se elimina ningún dato. Devuelve el objetivo con archived true y archived_at definido. Archivar un objetivo ya archivado no hace nada. Usa goals_delete para eliminarlo definitivamente. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/archive.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/goals.json Crear un objetivo goals_create

Crea un objetivo de conversión. Los objetivos son definiciones que se aplican al leer los informes, así que un objetivo nuevo cuenta de inmediato los eventos coincidentes en todo el historial existente. Son obligatorios name y kind. kind decide qué otros parámetros se aplican. page necesita pattern (una ruta, por ejemplo /thank-you, con match_type exact, prefix, glob o regex) y puede usar hostname. event necesita event_name y puede usar conditions (pruebas de propiedades como {key: plan, operator: is, value: pro}, todas deben cumplirse, operadores is, is_not, contains, gt, lt). engagement necesita pattern más scroll_threshold (porcentaje de 1 a 100) y/o time_threshold_seconds (se alcanza cuando se cumple cualquiera de los dos). outbound compara el dominio del enlace con pattern (por ejemplo stripe.com) y download compara el archivo con pattern (por ejemplo *.pdf). value_mode es none (por defecto), fixed (usa fixed_value, un importe decimal en la moneda del sitio como 49.5, guardado como fixed_value_minor en céntimos) o revenue (los ingresos propios del evento). count_mode es once_per_visit (por defecto) o every. Los espacios de trabajo Free permiten 10 objetivos activos por sitio, los planes de pago son ilimitados. Devuelve el objetivo con id (goal_...). Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/goals.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/goals/:id.json Eliminar un objetivo (los datos se conservan) goals_delete

Elimina de forma permanente la definición de un objetivo. No se elimina ningún dato de eventos, pero el objetivo desaparece de los informes, y los pasos de embudo, los recorridos y los experimentos que apuntan a él dejan de funcionar. No hay forma de deshacerlo. Para ocultar un objetivo y conservarlo, usa goals_archive. Devuelve el objetivo eliminado. Los ids (goal_...) vienen de goals_list. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/goals/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/goals/:id/duplicate.json Copiar un objetivo goals_duplicate

Copia la definición de un objetivo en un nuevo objetivo activo. La copia se llama name si lo envías, y si no, el nombre original seguido de (copy). Cuenta para el límite de objetivos del plan (10 objetivos activos por sitio en Free). Devuelve el objetivo nuevo con un id nuevo. Úsalo para empezar una variación de un objetivo y luego modifícalo con goals_update. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/duplicate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/goals.json Listar objetivos con finalizaciones, conversiones, tasa y valor de un periodo goals_list

Lista los objetivos de un sitio con sus resultados del periodo. Cada objetivo es la definición (id goal_..., name, kind, match_type, pattern, hostname, event_name, conditions, scroll_threshold, time_threshold_seconds, value_mode, fixed_value_minor en céntimos, count_mode, archived, archived_at) más stats {completions, conversions, conversion_rate, value, change}. conversion_rate es un porcentaje (0 a 100), value está en unidades menores (céntimos) y change es la variación porcentual de las conversiones respecto al periodo anterior (null cuando el recuento anterior era 0). status filtra por active (por defecto), archived o all. Paginado con page y per_page (máx. 100, por defecto 25). Usa goals_get para el informe completo de un objetivo. Acepta los parámetros compartidos period, compare y filters.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/goals.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/goals/:id.json Informe de objetivo: métricas, gráfico, desgloses y el recorrido hasta convertir goals_get

Un objetivo en profundidad para un periodo. Devuelve period, goal_id, goal (la definición), metrics, interval, series, breakdowns, journey y, con compare, comparison_period, comparison y change. metrics tiene completions (cada evento coincidente), conversions (visitas con al menos una finalización), conversion_rate (porcentaje de 0 a 100) y value (unidades menores, céntimos). conversion_rate divide entre las visitas, o entre los visitantes cuando el sitio está configurado así. series es una lista de {date, completions, conversions, conversion_rate} por intervalo de tiempo (establece interval para cambiarlo). breakdowns contiene los 10 principales por conversiones de channel, utm_campaign, entry_page, country y device, cada uno como {value, completions, conversions, conversion_rate}. journey muestra converting_visits, median_seconds_to_convert, median_pages_before y pages_before (las 10 páginas principales vistas antes de convertir, con visits y share). Usa goals_list para todos los objetivos a la vez y funnels_get para los flujos de varios pasos. Acepta los parámetros compartidos period, compare, filters y segment.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/goals/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/goals/:id/unarchive.json Restaurar un objetivo archivado goals_unarchive

Restaura un objetivo archivado para que vuelva a mostrarse en los informes. Vuelve a contar para el límite de objetivos del plan (10 objetivos activos por sitio en Free), así que la llamada falla con un error de límite del plan cuando el sitio ya está lleno. Restaurar un objetivo que no está archivado no hace nada. Devuelve el objetivo con archived false. Los ids vienen de goals_list con status archived. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/unarchive.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /sites/:site_id/goals/:id.json Actualizar un objetivo goals_update

Modifica la definición de un objetivo. Solo cambian los datos que envías. La nueva definición se aplica de inmediato a todo el historial, así que las cifras de conversión pasadas cambiarán. Los parámetros son los mismos que en goals_create, y se aplican las mismas combinaciones, por ejemplo event_name y conditions solo importan para los objetivos event, y scroll_threshold y time_threshold_seconds solo para los objetivos engagement. fixed_value es un importe decimal en la moneda del sitio (guardado en céntimos). Enviar conditions reemplaza todas las condiciones existentes. Devuelve el objetivo. Los ids vienen de goals_list. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/goals/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Paneles

GET /workspaces/:workspace_id/dashboards/:id/cards/:index.json Datos de una tarjeta de un panel personalizado dashboards_card

Devuelve los datos en vivo de una tarjeta de un panel personalizado. Los paneles son listas de tarjetas (consulta dashboards_get para la lista de tarjetas) y cada tarjeta se carga por separado, así que llama a esto una vez por tarjeta con su posición en index, contada desde 0. Devuelve index, type, title, site_id, site_name, params, status y data. status es ok, not_available (la tarjeta no tiene nada que mostrar, por ejemplo una tarjeta de embudo en un sitio sin embudos o una tarjeta de uptime sin comprobaciones) o no_access (la tarjeta pertenece a un sitio que tu token o rol no pueden abrir, y entonces title, params y data están vacíos). La forma de data depende de type. metric da {metric, value, previous, change, period} comparado con el periodo anterior. chart da {metric, interval, period, series: [{date, value}]}. breakdown da {dimension, label, rows}. goal da {rows} de conversiones de objetivos. live da {visitors}. funnel da {funnel_id, name, overall_conversion_rate, steps}. uptime da {checks: [{name, status, uptime}]}. vitals da {scorecard}. subscriptions da {currency, mrr_minor, previous_mrr_minor (hace 30 días), change (porcentaje, null si no había MRR hace 30 días), active_subscriptions, subscription_churn_rate (últimos 30 días)} y es not_available mientras el sitio no tenga un proveedor de pagos conectado. Los params de la tarjeta son por defecto period 30d, metric visitors, dimension page y 5 filas (limit tiene un tope de 10). Un index fuera de la lista devuelve 404. Usa dashboards_get primero para ver cuántas tarjetas hay.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id/cards/:index.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/dashboards.json Crear un panel personalizado dashboards_create

Crea un panel personalizado en un espacio de trabajo. Un panel personalizado es una lista ordenada y con nombre de hasta 40 tarjetas, y las tarjetas pueden venir de distintos sitios del espacio de trabajo. Pasa name (hasta 100 caracteres) y cards, una lista de objetos con type (metric, chart, breakdown, goal, live, funnel, uptime, vitals o subscriptions), site_id (pa_..., de sites_list) y, opcionalmente, title (hasta 80 caracteres) y params. Los params usados por tipo son metric (period, metric), chart (period, metric, interval), breakdown (period, dimension, limit), goal (period, limit), funnel (period, funnel_id), uptime (limit) y vitals (period). live y subscriptions no usan ninguno. Los demás params se descartan. El periodo debe ser un valor predefinido como 30d (no custom) y metric uno de visitors, visits, pageviews, views_per_visit, bounce_rate o visit_duration. Cada tarjeta debe apuntar a un sitio al que tu token tenga acceso, y un token limitado a algunos sitios debe incluir al menos una tarjeta. Devuelve el panel con id (dash_...), name, cards y marcas de tiempo. Léelo con dashboards_get y carga las cifras de cada tarjeta con dashboards_card. Necesita el permiso content.write. El plan define cuántos paneles tiene un espacio de trabajo: 1 en Free, 3 en Pro, ilimitados en Business. Pasarse en uno se rechaza con un error de validación.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/dashboards.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /workspaces/:workspace_id/dashboards/:id.json Eliminar un panel personalizado dashboards_delete

Elimina de forma permanente un panel personalizado. Solo se elimina el diseño del panel, no se toca ningún dato de analíticas, y no hay forma de deshacerlo. Necesitas acceso a todos los sitios que tienen una tarjeta en el panel, y el panel necesita al menos una tarjeta de un sitio al que tengas acceso. Devuelve el panel eliminado. Usa dashboards_update para modificar un panel en su lugar. Los ids (dash_...) vienen de dashboards_list. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/dashboards.json Listar paneles personalizados dashboards_list

Lista los paneles personalizados de un espacio de trabajo, ordenados por nombre. Cada elemento tiene id (dash_...), name, cards y marcas de tiempo, con la misma forma que dashboards_get. Un token limitado a algunos sitios solo ve los paneles que incluyen una tarjeta de alguno de sus sitios, y las tarjetas de otros sitios se reducen a {type, status: no_access}. Paginado con page y per_page (máx. 100). Usa dashboards_card para cargar los datos de una tarjeta y dashboards_create para añadir un panel. Para un solo sitio, stats_overview da el mismo tipo de cifras sin un panel.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/dashboards/:id.json Obtener un panel personalizado y sus tarjetas dashboards_get

Devuelve un panel personalizado: id (dash_...), name, cards, created_at y updated_at. Cada tarjeta es {type, site_id, title, params} (type es metric, chart, breakdown, goal, live, funnel, uptime, vitals o subscriptions). Una tarjeta de un sitio al que no tienes acceso se devuelve como {type, status: no_access} sin ningún otro campo. Esto devuelve solo el diseño, no las cifras. Carga las cifras de una tarjeta con dashboards_card, usando la posición de la tarjeta contada desde 0. Los ids vienen de dashboards_list. Un panel que supera el número que permite el plan (1 en Free, 3 en Pro) se conserva y se bloquea: responde 402 plan_limit hasta que el espacio de trabajo mejore de plan o elimine otro.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/dashboards/:id.json Renombrar un panel personalizado o reemplazar sus tarjetas dashboards_update

Cambia el nombre de un panel personalizado y/o reemplaza toda su lista de tarjetas. Solo cambian los campos que envías, y name se deja como está cuando está vacío. Enviar cards reemplaza todas las tarjetas, así que envía la lista completa en el orden que quieras, tomada de dashboards_get y editada. El formato de las tarjetas y los params por tipo son los mismos que en dashboards_create (máx. 40 tarjetas). Una tarjeta mostrada como {type, status: no_access} pertenece a un sitio que no puedes abrir. Envíala sin cambios para conservarla, no se puede editar y no se puede quitar la última tarjeta de un sitio así. Un token limitado a algunos sitios no puede dejar el panel vacío. Devuelve el panel actualizado. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Papelera de testimonios

DELETE /sites/:site_id/testimonials/trash/permanent.json Elimina definitivamente hasta 100 elementos de la papelera testimonial_trash_delete_permanently

Esto no se puede deshacer. confirm es el nombre del elemento (el nombre de la persona en un testimonio) o su id para un elemento, y el nombre del sitio para varios. Solo se aceptan elementos que están en la papelera.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/trash/permanent.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/trash/empty.json Elimina definitivamente todo lo que hay en la papelera testimonial_trash_empty

Esto no se puede deshacer. confirm es el nombre del sitio. Se eliminan hasta 100 elementos a la vez. Una papelera más grande se vacía en segundo plano y la respuesta tiene state running.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/trash/empty.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/trash.json Lista lo que hay en la papelera, un tipo a la vez testimonial_trash_list

Responde con los elementos de un tipo (testimonial por defecto) y, en meta.counts, cuántos de cada tipo hay en la papelera. Cada elemento indica adónde vuelve, qué lo mostraba, quién lo envió a la papelera y cuándo sale.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/trash.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/trash/restore.json Restaura hasta 100 elementos de la papelera, exactamente como estaban testimonial_trash_restore

Los ids deben ser de un solo tipo. Restaurar testimonios responde con un id de deshacer (data.id y meta.undo_id) que testimonial_undo_records_undo acepta durante 7 días. Una restauración nunca cuenta como un testimonio nuevo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/trash/restore.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Personas de testimonios

POST /sites/:site_id/testimonials/people/:id/ask_again.json Inicia una solicitud con esta persona como único destinatario testimonial_people_ask_again

Usa el formulario que usó por última vez, o el formulario inicial. No se envía nada hasta que se envía la solicitud. El servidor responde con 422 y el código no_email, bounced o unsubscribed cuando no se puede preguntar a la persona, y requests_unavailable mientras las solicitudes no están disponibles.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/people/:id/ask_again.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/people.json Añade una persona a un sitio testimonial_people_create

name es obligatorio (hasta 120 caracteres). email nunca se muestra públicamente: agrupa los testimonios posteriores bajo esta persona y permite al sitio volver a preguntarle, y se rechaza una dirección que otra persona del sitio ya tiene. avatar_media_id es el id (med_...) de una imagen ya subida al sitio. Añadir una persona no añade ningún testimonio.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/people.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/people/:id/permanent.json Elimina una persona definitivamente, con todo lo que dijo, los archivos y el historial de solicitudes testimonial_people_delete_permanently

Para una solicitud de supresión. Esto no se puede deshacer. Necesita confirm, el nombre o el id de la persona, y deja una entrada de auditoría que no contiene ni el nombre ni las palabras.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/people/:id/permanent.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/people.json Lista las personas de un sitio, filtradas y ordenadas testimonial_people_list

Cada persona viene con su recuento de testimonios, cuántos están aprobados, su valoración media y la última solicitud con su resultado. El correo es null salvo que quien llama tenga content.write, y has_email sigue indicando si hay uno registrado.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/people.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/people/:id/merge.json Fusiona otros registros de la misma persona en este testimonial_people_merge

La persona de la ruta permanece. Todo lo que dijeron las demás y cada solicitud enviada a ellas pasa a esta, y las demás se eliminan. Un campo que esta persona tiene en blanco se rellena con los de las demás, la más antigua primero, y use indica cuáles valores ganan en un campo. La respuesta incluye meta.undo_id, que testimonial_undo_records_undo acepta durante 7 días.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/people/:id/merge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/people/:id.json Obtiene una persona con lo que se le pidió y las personas que parecen la misma testimonial_people_get

Sus testimonios son testimonials_list con person_id. can_ask y cannot_ask_reason indican si testimonial_people_ask_again prosperaría.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/people/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/people/:id.json Edita una persona. Solo cambian los campos enviados testimonial_people_update

Un valor vacío borra un campo, excepto el nombre. Se rechaza un correo que otra persona del sitio ya tiene. La página de empresa en la que figura una persona sigue el nombre y el sitio web de la empresa.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/people/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Planes

GET /plans.json Listar planes, precios y límites plans_list

Lista los planes públicos (free, pro, business y enterprise) con sus límites y niveles de precio, para que puedas elegir valores válidos para billing_checkout, billing_preview y billing_change_plan. Cada plan tiene name, events (eventos al mes incluidos, null para los planes por niveles o personalizados), badge_bonus (eventos mensuales adicionales por la insignia, solo Free, si no null), limits (un objeto con los límites del plan, como sitios, puestos de miembros, retención del historial en meses, objetivos por sitio, preguntas de IA y solicitudes de API por hora), tiers (cada uno con los eventos al mes y el precio mensual y anual en dólares enteros, con IVA o impuesto sobre las ventas incluido) y contact_sales (true para los planes personalizados). El objeto meta añade currency, una nota sobre el precio anual, counted (qué cuenta como evento facturable) y not_counted. Para el plan propio de un espacio de trabajo usa billing_get. Público, sin necesidad de autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/plans.json

Programa de afiliados

GET /account/affiliate/commissions.json Listar tus comisiones de afiliado affiliate_commissions_list

Comisiones, recuperaciones por reembolso o contracargo y reversiones, de la más reciente a la más antigua. Los importes están en céntimos.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/account/affiliate/commissions.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /account/affiliate/signup-box.json Obtener el código de tu formulario de registro de afiliado y sus resultados affiliate_signup_box_get

El código para insertar tu formulario de registro (un script y un iframe simple) para el tema elegido, los atributos que rellenan el formulario, los eventos que el script dispara en tu página y las cifras del formulario: registros pendientes de confirmar, registros confirmados y clientes de pago. available es false hasta que se apruebe tu solicitud de afiliado.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/account/affiliate/signup-box.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /account/affiliate.json Obtener tu estado de afiliado, enlace de recomendación y estadísticas affiliate_get

El estado de tu solicitud de afiliado, el enlace de recomendación, los registros y clientes de pago que recomendaste y los saldos por moneda (retenido, pagadero, pagado). status es none cuando no has enviado una solicitud.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/account/affiliate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Propiedades personalizadas de testimonios

POST /sites/:site_id/testimonials/settings/properties.json Añade una propiedad personalizada a un sitio testimonial_properties_create

Un sitio tiene hasta 20 propiedades activas. La clave queda fija una vez creada, porque la usan los enlaces de formularios, las reglas y la API. Si la omites, se sugiere a partir de la etiqueta.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/settings/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/settings/properties/:id.json Elimina una propiedad personalizada y sus valores definitivamente testimonial_properties_destroy

Esto no se puede deshacer. Quita la propiedad y su valor de cada testimonio. confirm es la clave. Una propiedad usada por una colección inteligente o una regla de etiquetado automático no se puede eliminar mientras la usen. Archivar es la forma habitual de retirar una.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/settings/properties/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/settings/properties.json Lista las propiedades personalizadas de un sitio, en orden de visualización testimonial_properties_list

Cada una indica su clave, tipo y opciones, cuántos testimonios tienen un valor (filled), si su tipo todavía puede cambiar, y qué colecciones inteligentes y reglas de etiquetado automático la usan.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/settings/properties/:id.json Cambia, reordena, archiva o recupera una propiedad personalizada testimonial_properties_update

Solo las entradas que envías cambian algo. Renombrar una opción la renombra en cada testimonio que la tiene. Una propiedad usada por una colección inteligente o una regla de etiquetado automático no se puede archivar mientras la usen.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/settings/properties/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Páginas de estado

GET /status/:slug/confirm/:token.json Confirmar una suscripción desde el enlace enviado por correo public_status_pages_confirm

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/status/:slug/confirm/:token.json
GET /status/:slug.json Página de estado pública: estado actual, barras de disponibilidad de 90 días, incidentes y publicaciones public_status_pages_get

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/status/:slug.json
POST /status/:slug/subscribers.json Suscribir una dirección de correo (doble confirmación) public_status_pages_subscribe

Los clientes de navegador envían un token de Cloudflare Turnstile como `cf-turnstile-response`. Las solicitudes con un token de API no necesitan ninguno.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/status/:slug/subscribers.json \
  -H "Content-Type: application/json" -d '{…}'
POST /status/:slug/unsubscribe/:token.json Darse de baja con el token enviado por correo public_status_pages_unsubscribe

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/status/:slug/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /status_pages/:status_page_id/posts.json Publicar una actualización de incidente (envía un correo a los suscriptores) status_page_posts_create

Publica una actualización de incidencia en una página de estado y, por defecto, envía un correo a sus suscriptores confirmados. Elígelo para anunciar o actualizar una incidencia, y usa status_page_posts_update para hacer avanzar una incidencia existente (por ejemplo a resolved) en lugar de crear una publicación nueva. title es obligatorio (máx. 200 caracteres). status es uno de investigating (por defecto), identified, monitoring o resolved. body es texto sin formato (máx. 10,000 caracteres), posted_at es una hora ISO 8601 que por defecto es ahora, y notify (por defecto true) controla el correo. Los correos solo se envían para una página publicada y tienen un límite de frecuencia por página, y superado el límite la publicación se publica igualmente pero no se envía correo a nadie. El status_page_id viene de status_pages_list. Necesita el permiso uptime.manage. Devuelve la publicación con id (spp_...), title, body, status, posted_at y updated_at.

Permiso: uptime.manage

Ejemplo
curl -X POST https://privatusanalytics.com/status_pages/:status_page_id/posts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /status_pages/:status_page_id/posts/:id.json Eliminar una publicación de una página de estado status_page_posts_delete

Elimina de forma permanente una publicación de incidencia de una página de estado. Desaparece de la página pública al instante y no se puede deshacer. No se envía ningún correo. El id viene de status_page_posts_list. Necesita el permiso uptime.manage. Devuelve la publicación eliminada.

Permiso: uptime.manage

Ejemplo
curl -X DELETE https://privatusanalytics.com/status_pages/:status_page_id/posts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /status_pages/:status_page_id/posts.json Listar las publicaciones de una página de estado status_page_posts_list

Lista las publicaciones de incidencias de una página de estado, las más recientes primero según posted_at. Úsalo para encontrar el id de una publicación o ver el historial de incidencias. Filtra opcionalmente por status (investigating, identified, monitoring o resolved). Paginado con page y per_page (hasta 100). Cada publicación tiene id (spp_...), title, body (null cuando está vacío), status, posted_at y updated_at. El status_page_id viene de status_pages_list.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/status_pages/:status_page_id/posts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /status_pages/:status_page_id/posts/:id.json Editar una publicación de una página de estado status_page_posts_update

Edita una publicación de incidencia. Solo cambian los datos que envías, así que envía solo status para resolver una incidencia. Los suscriptores reciben correo solo cuando el estado realmente cambia y notify no es false (por defecto true). Editar solo el título o el cuerpo no envía ningún correo. Los correos van a los suscriptores confirmados de una página publicada y tienen un límite de frecuencia por página. Los valores de status válidos son investigating, identified, monitoring y resolved. El id viene de status_page_posts_list. Necesita el permiso uptime.manage. Devuelve la publicación actualizada.

Permiso: uptime.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/status_pages/:status_page_id/posts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /status_pages/:status_page_id/subscribers/:id.json Eliminar a un suscriptor status_page_subscribers_delete

Quita a un suscriptor de correo de una página de estado para que deje de recibir correos de incidencias y de disponibilidad. No se puede deshacer, pero la persona puede volver a suscribirse en la página pública. El id es el id del suscriptor de status_page_subscribers_list (un UUID simple, no un id con prefijo). Necesita el permiso uptime.manage. Devuelve el suscriptor quitado.

Permiso: uptime.manage

Ejemplo
curl -X DELETE https://privatusanalytics.com/status_pages/:status_page_id/subscribers/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /status_pages/:status_page_id/subscribers.json Listar los suscriptores de una página de estado status_page_subscribers_list

Lista los suscriptores de correo de una página de estado, ordenados por correo. Usa confirmed true para ver solo a las personas que confirmaron su dirección (solo ellas reciben correos) o confirmed false para las pendientes. Paginado con page y per_page (hasta 100). Cada elemento tiene id (un UUID, usado por status_page_subscribers_delete), email, confirmed_at (null mientras está pendiente) y created_at. El status_page_id viene de status_pages_list. Necesita el permiso uptime.manage y devuelve datos personales (direcciones de correo). Necesita el plan Business o Enterprise (si no, 402 plan_limit).

Permiso: uptime.manage

Ejemplo
curl https://privatusanalytics.com/status_pages/:status_page_id/subscribers.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/status_pages.json Crear una página de estado status_pages_create

Crea una página de estado pública para un espacio de trabajo que muestra las comprobaciones de disponibilidad elegidas, las publicaciones de incidencias y un formulario de suscripción por correo. name es obligatorio (máx. 100 caracteres). slug (letras minúsculas, dígitos y guiones, único entre todos los espacios de trabajo) se deriva del nombre por defecto y la página se sirve en /status/<slug>. check_ids lista las comprobaciones de disponibilidad que se muestran (ids upc_... de uptime_checks_list) y solo se aceptan las comprobaciones creadas con public true. published es true por defecto, así que la página es visible para todos de inmediato. La marca opcional es description (máx. 2,000 caracteres), logo_url (debe ser https), brand_color (hex como #06755b) y custom_domain (un nombre de host que apuntas con un CNAME a la aplicación, único). Usa status_page_posts_create para publicar incidencias después. Necesita el permiso uptime.manage. Devuelve la página con id (sp_...), slug, check_ids y subscribers (recuento de suscriptores confirmados). El plan define cuántas páginas tiene un espacio de trabajo: ninguna en Free (402 plan_limit), 1 en Pro y 10 en Business. Un custom_domain y los suscriptores de correo necesitan el plan Business o Enterprise. Las páginas que superan el número del plan se conservan y quedan fuera de línea.

Permiso: uptime.manage

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/status_pages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /status_pages/:id.json Eliminar una página de estado status_pages_delete

Elimina de forma permanente una página de estado junto con todas sus publicaciones de incidencias y sus suscriptores. La página pública y su dominio personalizado dejan de funcionar al instante y no se puede deshacer. Las comprobaciones de disponibilidad en sí no se eliminan. El id viene de status_pages_list. Necesita el permiso uptime.manage. Devuelve la página eliminada.

Permiso: uptime.manage

Ejemplo
curl -X DELETE https://privatusanalytics.com/status_pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/status_pages.json Listar páginas de estado status_pages_list

Lista las páginas de estado de un espacio de trabajo ordenadas por nombre. Usa query para buscar parte de un nombre o de un slug. Cuando quien llama está limitado a algunos sitios, solo se devuelven las páginas cuyas comprobaciones están todas dentro de esos sitios. Paginado con page y per_page (hasta 100). Cada elemento tiene los campos descritos en status_pages_get. Necesita el workspace_id de workspaces_list.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/status_pages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /status_pages/:id.json Obtener una página de estado status_pages_get

Devuelve una página de estado con sus ajustes. Los campos son id (sp_...), workspace_id, name, slug, custom_domain (null cuando no hay), description, logo_url, brand_color, published, check_ids (ids de las comprobaciones de disponibilidad que se muestran en la página), subscribers (recuento de suscriptores de correo confirmados) y created_at. Usa status_page_posts_list para sus incidencias y status_page_subscribers_list para las personas. El id viene de status_pages_list.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/status_pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /status_pages/:id.json Cambiar una página de estado status_pages_update

Modifica una página de estado. Solo cambian los datos que envías, así que envía solo published false para dejar la página fuera de línea o check_ids para reemplazar las comprobaciones mostradas (la lista completa se reemplaza, no se fusiona). Los parámetros y sus límites son los mismos que en status_pages_create. Envía custom_domain como una cadena vacía para quitar el dominio personalizado. Solo se pueden mostrar las comprobaciones con public true, y quien tenga acceso limitado a algunos sitios solo puede poner en una página comprobaciones de esos sitios. El id viene de status_pages_list. Necesita el permiso uptime.manage. Devuelve la página actualizada.

Permiso: uptime.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/status_pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Rastreadores

DELETE /sites/:site_id/crawlers/connection.json Desconectar Cloudflare y eliminar las visitas de rastreadores que importó crawlers_cloudflare_disconnect

Desconecta Cloudflare de un sitio. Esto elimina el token de API guardado y todas las visitas de rastreadores importadas de Cloudflare, y no se puede deshacer. Las visitas que llegaron de los registros del servidor enviados se conservan. El token sigue existiendo en tu cuenta de Cloudflare hasta que lo elimines allí. Falla si el sitio no tiene conexión. Devuelve la conexión eliminada. Necesita sites.manage.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/crawlers/connection.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/crawlers/sync.json Importar ahora las visitas de rastreadores desde Cloudflare crawlers_cloudflare_sync

Pone en cola una importación inmediata de Cloudflare para un sitio que ya está conectado, en lugar de esperar a la programación habitual. Responde de inmediato (HTTP 202) con la conexión, y la importación se ejecuta en segundo plano. Consulta crawlers_report y observa cloudflare.last_synced_at para saber cuándo terminó. Falla si el sitio no tiene conexión con Cloudflare. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/crawlers/sync.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/crawlers.json Informe de rastreadores de IA: visitas por rastreador a lo largo del tiempo, rutas principales por rastreador, por categoría crawlers_report

Informa de qué rastreadores de IA, de búsqueda y de SEO acceden al sitio, con qué frecuencia y a qué rutas, a partir de los registros del servidor enviados y de la importación de Cloudflare. Es tráfico de rastreadores, no de visitantes, así que no aparece en stats_breakdown. category es ai (por defecto), search, seo, other o all, y crawler acota a un bot concreto, como GPTBot o ClaudeBot. Elige el rango con period (por defecto 30d) o con from y to personalizados. El resultado tiene period (from y to como fechas), category, crawler, totals (hits, rutas distintas, rastreadores distintos), categories (hits por categoría, ignorando el filtro de categoría), crawlers (hasta 50 filas con crawler, category, hits, paths), series (etiquetas por día y hits diarios de los 8 rastreadores principales), top_paths (las 10 rutas más solicitadas de cada uno de los 8 rastreadores principales), has_data (false hasta que existan hits) y cloudflare (la conexión con zone, status y last_synced_at, o null). Los resultados se guardan en caché hasta 30 minutos, salvo justo después de un cambio en Cloudflare. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/crawlers.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Recompensas

POST /sites/:site_id/testimonials/settings/rewards/:id/copy.json Copia la recompensa de un formulario a otros formularios del mismo sitio testimonial_rewards_copy

Copia el título, el texto, el código y el estado activado o desactivado de la recompensa de este formulario a cada formulario de form_ids (de 1 a 100 formularios del mismo sitio, que no estén en la papelera). Una recompensa que el formulario de destino ya tiene se reemplaza. El servidor responde con 422 y el código unknown_ids cuando un id no es un formulario del sitio, y entonces no se copia nada.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/settings/rewards/:id/copy.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/settings/rewards.json Lista la recompensa de cada formulario de un sitio testimonial_rewards_list

Una fila por formulario. Un formulario sin recompensa tiene enabled false.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/rewards.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/settings/rewards/:id.json Define la recompensa que muestra un formulario en su paso de agradecimiento testimonial_rewards_update

El id es el id del formulario. El código es texto que aportas tú. Privatus Analytics no lo crea, comprueba ni hace caducar.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/settings/rewards/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Recopilación

POST /embed/ads/e.json Registra que una creatividad se mostró, se vio o recibió un clic, llamado por el cargador de anuncios ad_serving_event

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/embed/ads/e.json \
  -H "Content-Type: application/json" -d '{…}'
GET /embed/ads/:site.json Los huecos de anuncios de un sitio y las creatividades que muestra cada uno, consultado por el cargador de anuncios ad_serving_slots

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/embed/ads/:site.json
POST /api/overlay.json Los clics de una página para la capa de clics, que llama pa.overlay.js con su pase click_overlays_read

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/api/overlay.json \
  -H "Content-Type: application/json" -d '{…}'
POST /api/logs.json Enviar registros de acceso del servidor para informes de rastreadores de IA (JSON {lines: [...]} o texto de registro combinado, con la clave de registros de rastreadores del sitio como token Bearer) crawler_logs_create

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/api/logs.json \
  -H "Content-Type: application/json" -d '{…}'
POST /api/event.json Recopilar una visita del navegador (lo usa /js/pa.js) ingest_event

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/api/event.json \
  -H "Content-Type: application/json" -d '{…}'
GET /api/experiment.json Indica si un experimento envía a este visitante a una página variante. Lo llama el script de cabecera de experimentos ingest_experiment

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/api/experiment.json
GET /js/exp/:site.json El script que carga la etiqueta de cabecera opcional de experimentos para un sitio ingest_experiment_script

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/js/exp/:site.json
POST /api/survey.json Registra que una tarjeta de encuesta se mostró, se descartó o se respondió ingest_survey

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/api/survey.json \
  -H "Content-Type: application/json" -d '{…}'
GET /api/surveys.json Qué encuesta mostrar en una página, consultado por el módulo de preguntas del tracker ingest_surveys

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/api/surveys.json

Registro de auditoría

GET /workspaces/:workspace_id/audit_log.json Listar entradas del registro de auditoría (añade .csv para exportar) audit_logs_get

Devuelve el registro de auditoría del espacio de trabajo, un historial paginado, del más reciente al más antiguo, de quién cambió qué (ajustes, miembros, sitios, objetivos, tokens, etc.). Necesita el permiso workspace.manage y un plan con historial de auditoría. El plan Free no lo tiene y la llamada falla con un error de límite de plan, Pro conserva 30 días, Business 365 días y Enterprise no tiene límite. Las entradas más antiguas que la ventana de retención nunca se devuelven. Filtra con actor (el correo de un miembro, coincidencia exacta), item_type (el tipo de registro, como Site, Goal o Membership), event (create, update o destroy), y from y to (YYYY-MM-DD, ambos inclusive, en UTC). Cada entrada tiene id, created_at, event, item_type, item_id, target (una etiqueta legible como Site: example.com), actor_email (null cuando el cambio lo hizo el sistema o un usuario eliminado), actor_name, token_name (el token de API usado, null para una sesión de navegador), changes (un objeto que asigna a cada campo cambiado un par [antes, después], con los secretos eliminados) e ip (la dirección que usó el miembro o el cliente de la API, null cuando se desconoce). En la aplicación está disponible una exportación CSV del mismo registro, y solo allí.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/audit_log.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Reglas de canal

POST /sites/:site_id/channel_rules.json Añadir una regla de canal channel_rules_create

Añade una regla de canal personalizada al final de la lista, de modo que se ejecuta después de todas las reglas existentes y la taxonomía integrada solo se aplica cuando ninguna regla coincide. channel es el nombre que se asigna (hasta 32 caracteres, p. ej. Partners). conditions es una lista no vacía de objetos con field (referrer_host, utm_source, utm_medium, utm_campaign, ref o path), operator (is, contains, starts_with o regex) y value. Todas las condiciones deben cumplirse para que se aplique la regla, y la comparación no distingue mayúsculas. Una condición con un valor en blanco se descarta, y se rechaza una regla que se quede sin condiciones. Se rechaza una expresión regular que no compile. La regla se aplica a las visitas nuevas en cuestión de minutos y no cambia el historial. Usa channel_rules_move para reordenar y channel_rules_preview para probarla. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/channel_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/channel_rules/:id.json Eliminar una regla de canal channel_rules_delete

Elimina una regla de canal personalizada, localizada por su id de channel_rules_list. Las visitas que ya clasificó conservan su canal, y las visitas nuevas pasan a la siguiente regla que coincida o a la taxonomía integrada. Las reglas restantes conservan su orden. Devuelve la regla eliminada. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/channel_rules/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/channel_rules.json Listar las reglas de canal en orden channel_rules_list

Lista las reglas de canal personalizadas de un sitio en su orden de evaluación (primero la posición 1). Las reglas se ejecutan de arriba abajo con cada visita nueva y la primera regla cuyas condiciones coinciden todas decide el canal. Una visita que no coincide con ninguna regla recibe el canal integrado (direct, organic_search, paid_search, email, etc.). Cada regla tiene id (un UUID), channel (el nombre que asigna), position (empieza en 1), conditions (una lista de objetos con field, operator y value, que deben cumplirse todos) y created_at. Las reglas solo afectan a las visitas registradas después de que exista la regla y nunca reescriben datos antiguos. Usa channel_rules_preview para probar una visita de ejemplo. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/channel_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/channel_rules/:id/move.json Subir o bajar una regla de canal channel_rules_move

Mueve una regla de canal dentro del orden de evaluación, porque gana la primera regla que coincide y el orden decide qué canal recibe una visita. direction es up o down (un puesto), o top o bottom (hasta los extremos). Una regla que ya está en el borde se queda donde está sin error. Las posiciones se renumeran de 1 a n y se devuelve la regla actualizada con su nueva posición. Usa channel_rules_list primero para ver el orden actual. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/channel_rules/:id/move.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/channel_rules/preview.json Previsualizar el canal de un referente y unas etiquetas UTM de ejemplo channel_rules_preview

Simulación que te dice qué canal recibiría una visita de ejemplo con las reglas actuales del sitio. No se guarda nada. Envía cualquiera de referrer (una URL o un nombre de host simple, se ignoran los prefijos www y m), utm_source, utm_medium, utm_campaign, ref, path (ruta de entrada como /pricing) y paid_click (true si la URL llevaba un id de clic como gclid). El resultado tiene channel (el nombre del canal ganador), custom_rule (true cuando lo decidió una regla personalizada, false cuando lo hizo la taxonomía integrada) y referrer_host (el nombre de host limpiado que se usó para comparar). Un referente de los propios dominios del sitio cuenta como interno. Úsalo después de channel_rules_create o channel_rules_move para confirmar el efecto. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/channel_rules/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /sites/:site_id/channel_rules/:id.json Cambiar una regla de canal channel_rules_update

Modifica una regla de canal personalizada, localizada por su id de channel_rules_list. Envía channel para cambiar el nombre del canal que asigna y conditions para reemplazar toda la lista de condiciones (la lista se reemplaza, no se fusiona, así que envía todas las condiciones que quieras conservar). Los parámetros omitidos se dejan como están. Los campos de las condiciones, los operadores y la validez de las expresiones regulares se comprueban igual que en channel_rules_create. El cambio se aplica solo a las visitas nuevas. Para cambiar el orden usa channel_rules_move. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/channel_rules/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Reglas de tráfico

POST /sites/:site_id/traffic_rules.json Añadir una regla de tráfico traffic_rules_create

Añade un patrón a una de las listas de bloqueo o de permiso del sitio. list es uno de hostnames, paths, referrers, countries, ip_ranges, user_agents o events. pattern usa * como comodín y la comparación no distingue mayúsculas, por ejemplo /admin/*, un nombre de host, un host de referente como spam.example, un código de país de dos letras (se guarda en mayúsculas), un nombre de navegador con versión principal, ya que el user agent se reduce (por ejemplo Chrome 120), o un nombre de evento personalizado. ip_ranges aceptan una dirección IPv4 o IPv6 o un CIDR (203.0.113.0/24), que debe ser válido. Un patrón puede existir una vez por lista, y un sitio puede tener hasta 500 reglas. Que la lista bloquee o permita lo que coincide depende de su modo, que por defecto es block y se cambia con sites_update. Las visitas coincidentes se descartan en la recopilación y no se guardan, y la regla se aplica en cuestión de minutos solo a las visitas nuevas. Necesita sites.manage. Necesita el plan Pro o superior (si no, 402 plan_limit).

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/traffic_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/traffic_rules/:id.json Eliminar una regla de tráfico traffic_rules_delete

Elimina una regla de tráfico, localizada por su id de traffic_rules_list. Las visitas que descartaba se cuentan de nuevo a partir de ese momento, y las visitas ya descartadas se pierden para siempre. Ten en cuenta que eliminar el último patrón de una lista en modo allow hace que esa lista deje de filtrar. Devuelve la regla eliminada. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/traffic_rules/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/traffic_rules.json Listar reglas de tráfico traffic_rules_list

Lista las reglas de tráfico del sitio, que son listas de bloqueo o de permiso aplicadas en el momento de la recopilación para decidir qué visitas cuentan. Cada regla tiene id (un UUID para actualizar y eliminar), list (hostnames, paths, referrers, countries, ip_ranges, user_agents o events), pattern, label (nota opcional), mode (block o allow, el modo de toda esa lista) y created_at. En modo block se descarta una visita que coincide con cualquier patrón de la lista, en modo allow se descarta una visita que no coincide con ninguno, y una lista vacía no filtra nada. Filtra con list. El modo de una lista no se define aquí, se define con sites_update usando traffic_rule_modes. Usa traffic_rules_test para comprobar una visita de ejemplo. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/traffic_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/traffic_rules/test.json Probar si una visita se contaría con las reglas actuales del sitio traffic_rules_test

Simulación que te dice si una visita de ejemplo se contaría con las reglas de tráfico actuales del sitio. No se guarda nada. Envía cualquiera de url (una URL de página completa, se comprueban su host y su ruta), referrer (URL o nombre de host), country (código de dos letras), ip (se comprueba con ip_ranges, nunca se guarda), user_agent (una cadena User-Agent completa, reducida a navegador y versión principal) y event (un nombre de evento personalizado). Los valores que omites no se comprueban. El resultado tiene counted (true si la visita se registraría), blocked_by (la lista que la descartó, o null), mode (block o allow de esa lista, o null) y values (los valores normalizados que se comprobaron). Las reglas se leen en vivo, así que una regla nueva se ve al instante. Necesita analytics.read. Necesita el plan Pro o superior (si no, 402 plan_limit).

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/traffic_rules/test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /sites/:site_id/traffic_rules/:id.json Cambiar una regla de tráfico traffic_rules_update

Cambia el patrón o la etiqueta de una regla de tráfico, localizada por su id de traffic_rules_list. Solo cambian los datos que envías. La lista no se puede cambiar: elimina y vuelve a crear la regla para moverla a otra lista. El patrón debe seguir siendo válido para su lista (un CIDR para ip_ranges) y único dentro de ella. Envía una etiqueta vacía para borrarla. Se aplica solo a las visitas nuevas. Necesita sites.manage. Necesita el plan Pro o superior (si no, 402 plan_limit).

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/traffic_rules/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Rendimiento

GET /sites/:site_id/performance.json Web Vitals: cuadro de mando p75, tendencia diaria y desgloses por página, dispositivo, navegador y país performance_report

Informe de Web Vitals de visitantes reales. Devuelve period, metric, sample_rate, scorecard, trend y breakdowns. scorecard tiene una fila para cada uno de LCP, INP, CLS, FCP y TTFB con p75 (el percentil 75, en milisegundos salvo CLS, que es una puntuación sin unidad), samples, rating (good, needs_improvement o poor, null sin datos), good, needs_improvement y poor (porcentaje de muestras), previous_p75, change (porcentaje respecto al periodo anterior, null cuando se desconoce) y thresholds [límite good, límite poor]. trend es el p75 diario de la métrica elegida como {date, p75, samples}. breakdowns tiene page, device, browser y country, cada uno con hasta limit filas (por defecto 10, máx. 100) de la métrica elegida como {value, p75, samples, rating, slow_share, poor}, las peores y más activas primero. Elige metric con exactamente uno de LCP, INP, CLS, FCP o TTFB en mayúsculas (por defecto LCP). sample_rate es la proporción de visitas que informan de vitals, así que los recuentos son muestras y no todas las visitas. Acepta los parámetros compartidos period, compare, filters y segment. Para los vitals de una página usa pages_detail.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/performance.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Roles

POST /workspaces/:workspace_id/roles.json Crear un rol personalizado roles_create

Crea un rol personalizado, un conjunto de permisos con nombre que puedes dar a los miembros mediante invitations_create o members_update con role custom y el id del rol como custom_role_id. Necesita el plan Business y members.manage. permissions debe listar al menos un nombre de los valores permitidos (analytics.read, analytics.export, content.write, sites.manage, uptime.manage, members.manage, tokens.manage, billing.manage, workspace.manage) y no puedes incluir un permiso que tú mismo no tengas. Devuelve el rol (consulta roles_list para los campos).

Permiso: members.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/roles.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /workspaces/:workspace_id/roles/:id.json Eliminar un rol personalizado (no debe estar en uso) roles_delete

Elimina un rol personalizado. No se puede deshacer y falla mientras algún miembro o invitación pendiente siga usando el rol, así que pasa antes a esas personas a otro rol con members_update (encuéntralas con members_list). Los roles integrados no se pueden eliminar. Toma el id (uuid) de roles_list. Requiere members.manage. Devuelve el rol eliminado.

Permiso: members.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/roles/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/roles.json Listar roles personalizados roles_list

Lista los roles personalizados de un espacio de trabajo, ordenados por nombre. Los roles personalizados son una función del plan Business que agrupa permisos bajo un nombre propio, y los roles integrados (owner, admin, editor, analyst, viewer, billing) no se listan aquí. Cada rol tiene id (uuid, usado como custom_role_id en invitations_create y members_update), name, permissions (nombres como analytics.read, content.write, members.manage), members (el número de miembros que lo tienen) y created_at. Quien tenga acceso limitado a algunos sitios solo ve los roles dentro de su alcance.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/roles.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/roles/:id.json Actualizar un rol personalizado roles_update

Cambia el nombre de un rol personalizado y/o reemplaza toda su lista de permisos. Solo cambian los datos que envías, y permissions reemplaza la lista existente en lugar de añadirse a ella. El cambio se aplica al instante a todos los miembros e invitaciones pendientes que tienen el rol. Solo puedes editar un rol cuyos permisos tengas todos, y quien tenga acceso limitado a algunos sitios necesita alcance sobre todos los sitios de quienes lo tienen. Requiere members.manage. Toma el id (uuid) de roles_list. Devuelve el rol actualizado.

Permiso: members.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/roles/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

SCIM

POST /scim/v2/Users.json Aprovisionar un usuario scim_users_create

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/scim/v2/Users.json \
  -H "Content-Type: application/json" -d '{…}'
DELETE /scim/v2/Users/:id.json Desaprovisionar un usuario scim_users_delete

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/scim/v2/Users/:id.json \
  -H "Content-Type: application/json" -d '{…}'
GET /scim/v2/Users.json Listar usuarios aprovisionados scim_users_list

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/scim/v2/Users.json
GET /scim/v2/Users/:id.json Obtener un usuario aprovisionado scim_users_get

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/scim/v2/Users/:id.json
PATCH /scim/v2/Users/:id.json Actualizar un usuario (PATCH active, name) scim_users_update

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/scim/v2/Users/:id.json \
  -H "Content-Type: application/json" -d '{…}'

SSO

POST /workspaces/:workspace_id/sso/activate.json Activar una configuración de SSO probada sso_activate

Activa el SSO para el espacio de trabajo. La configuración ya debe tener el estado tested, lo que ocurre tras un inicio de sesión de prueba correcto (se inicia desde la página de ajustes de SSO del espacio de trabajo en la aplicación, necesita un inicio de sesión en el navegador y no se puede ejecutar desde aquí), o ya estar active. Solo plan Business. Tras la activación los miembros pueden iniciar sesión con SSO, y establecer enforced mediante sso_update exige entonces SSO en todos los inicios de sesión. Falla cuando la configuración no se ha probado o el plan no tiene SSO. Requiere workspace.manage. Devuelve la configuración con status active (consulta sso_get).

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/activate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/sso/deactivate.json Desactivar SSO (vuelve a borrador) sso_deactivate

Desactiva el SSO devolviendo la configuración a draft y borrando enforced, de modo que los miembros vuelven a los demás métodos de inicio de sesión del espacio de trabajo. Los datos del proveedor se conservan. Reactivarlo requiere un nuevo inicio de sesión de prueba y sso_activate. Asegúrate antes de que los miembros tienen otra forma de iniciar sesión. Funciona en cualquier plan. Requiere workspace.manage. Devuelve la configuración con status draft (consulta sso_get).

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/deactivate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/sso/scim_token.json Generar un nuevo token SCIM (se muestra una sola vez) sso_scim_token

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/scim_token.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/sso.json Obtener los ajustes de SSO sso_get

Devuelve la configuración de inicio de sesión único (SSO) del espacio de trabajo, o un borrador vacío cuando no existe ninguna. Los campos son protocol (saml u oidc), status (draft, testing, tested o active), enforced (los miembros deben iniciar sesión mediante SSO), domains (dominios de correo que usan este SSO), idp_sso_url e idp_entity_id para SAML, oidc_issuer y oidc_client_id para OIDC, default_role y jit_provisioning (crear miembros en el primer inicio de sesión con SSO) y scim_enabled. Los secretos nunca se devuelven, solo los booleanos idp_cert_present y oidc_client_secret_present. El SSO es una función del plan Business. Requiere workspace.manage.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/sso.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/sso.json Crear o actualizar los ajustes de SSO sso_update

Crea o edita los ajustes de SSO del espacio de trabajo. Solo plan Business. Solo cambian los datos que envías. Para SAML envía protocol saml con idp_sso_url, idp_entity_id e idp_cert (texto PEM). Para OIDC envía protocol oidc con oidc_issuer, oidc_client_id y oidc_client_secret, que es de solo escritura y un valor vacío conserva el secreto existente. domains lista los dominios de correo que usan este SSO. default_role es el rol que se da a los miembros creados por el aprovisionamiento del primer inicio de sesión o por SCIM (no owner ni custom) y solo puedes definir un rol que tú mismo podrías conceder. Cambiar cualquier dato del proveedor de identidad devuelve una configuración active o tested a draft y desactiva enforced, así que debe probarse de nuevo antes de que sso_activate funcione. enforced true solo se acepta mientras status es active. Requiere workspace.manage. Devuelve la configuración (consulta sso_get).

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/sso.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Segmentos

POST /sites/:site_id/segments.json Guardar filtros como segmento segments_create

Guarda un conjunto de filtros como un segmento con nombre que se puede reutilizar en cualquier herramienta de estadísticas mediante segment_id. Pasa name y filters (todas las condiciones deben cumplirse, y un grupo {any: [...]} coincide cuando se cumple una de varias, consulta el parámetro filters para los nombres de dimensión y los operadores). Los filtros se comprueban, así que una dimensión desconocida o un valor incorrecto devuelve un 422 con un mensaje por fila. Usa segments_preview antes para comprobar con qué coincide un conjunto de filtros. shared es true por defecto y hace que el segmento sea visible para todos los que tienen acceso al sitio, y false lo mantiene privado para ti. Devuelve el segmento con id (seg_...), site_id, name, description, filters, summary (una descripción en lenguaje sencillo), shared, mine y marcas de tiempo. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/segments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/segments/:id.json Eliminar un segmento segments_delete

Elimina de forma permanente un segmento guardado. Los paneles y enlaces que lo usan pasan a mostrar todo el tráfico. No se toca ningún dato de analíticas y no hay forma de deshacerlo. Devuelve el segmento eliminado. Los ids (seg_...) vienen de segments_list. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/segments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/segments.json Listar los segmentos que puedes usar en un sitio segments_list

Lista los segmentos guardados de un sitio, ordenados por nombre: los compartidos más tus propios segmentos privados. Cada segmento tiene id (seg_...), site_id, name, description, filters, summary, shared, mine y marcas de tiempo. Pasa un id como segment_id a cualquier herramienta de estadísticas (stats_aggregate, stats_breakdown, funnels_get y otras) para aplicar los filtros del segmento. Paginado con los parámetros de página estándar. Usa segments_create para añadir uno.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/segments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/segments/preview.json Describir filtros en lenguaje natural y contar los visitantes que coincidieron en los últimos 30 días segments_preview

Comprueba un conjunto de filtros sin guardar nada. Devuelve summary (los filtros en lenguaje sencillo), visitors (cuántos visitantes coincidieron en los últimos 30 días, null cuando los filtros no son válidos), period (siempre 30d) y filters (la forma limpia y canónica que se guardaría). Los filtros usan el mismo formato que segments_create, incluidos los grupos {any: [...]} y los nombres escritos en palabras, opcionales, de países, canales y objetivos, que se convierten en códigos e ids. Los filtros no válidos devuelven un 422 que nombra la fila. Úsalo para probar filtros antes de segments_create, y stats_aggregate con filters para obtener cifras de otro periodo.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/segments/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/segments/:id.json Obtener un segmento segments_get

Devuelve un segmento guardado: id (seg_...), site_id, name, description, filters (las condiciones guardadas), summary (una descripción en lenguaje sencillo, como Visitors from the United States on mobile), shared (visible para todos los que tienen acceso al sitio), mine (true cuando lo creaste tú) y marcas de tiempo. Puedes leer los segmentos compartidos y tus propios segmentos privados. Los ids vienen de segments_list. Para contar cuántos visitantes coinciden con un conjunto de filtros usa segments_preview.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/segments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/segments/:id.json Renombrar un segmento o cambiar sus filtros o su uso compartido segments_update

Cambia el nombre de un segmento, reemplaza sus filtros o cambia quién puede verlo. Solo cambian los datos que envías. Enviar filters reemplaza todos los filtros existentes, con el mismo formato y las mismas comprobaciones que en segments_create. shared false lo hace privado para su creador. description se puede borrar enviándola vacía. Todo lo que usa el segmento, como las llamadas de estadísticas con su segment_id, cambia de inmediato. Devuelve el segmento. Los ids vienen de segments_list. Necesita el permiso content.write.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/segments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Seguimiento

POST /sites/:site_id/tracking/ingest_key.json Crear o rotar la clave de registros de rastreadores (se muestra una sola vez) tracking_ingest_key_rotate

Crea una nueva clave secreta de registros de rastreadores (empieza por pik_) para un sitio y reemplaza cualquier clave existente. La clave autentica las subidas de registros de acceso del servidor para el informe de rastreadores de IA (POST /api/logs). Úsalo tanto para crear la primera clave como para rotarla. La clave nueva funciona al instante y la anterior deja de funcionar al instante, así que despliega la clave nueva de inmediato para evitar errores 401 en las subidas de registros. La clave completa solo se devuelve en esta respuesta, en el campo key, así que guárdala en un almacén de secretos. Después solo se conserva y se muestra un prefijo corto (prefix aquí, ingest_key_prefix en el sitio). Devuelve site_id, key y prefix. Requiere sites.manage. Usa tracking_ingest_key_revoke para quitar la clave sin reemplazarla.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/tracking/ingest_key.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/tracking/ingest_key.json Revocar la clave de registros de rastreadores tracking_ingest_key_revoke

Quita la clave de registros de rastreadores de un sitio. A partir de entonces, toda subida de registros enviada con esa clave se rechaza con 401 hasta que crees una nueva con tracking_ingest_key_rotate. El seguimiento del navegador con el id público del sitio no se ve afectado. La clave no se puede restaurar. Requiere sites.manage. Devuelve el objeto del sitio (consulta sites_get), donde ingest_key_prefix ahora es null.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/tracking/ingest_key.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/tracking/verify.json Comprobar que el rastreador está instalado en el sitio (etiqueta de script, id del sitio, CSP y política de referente) tracking_verify

Obtiene la página del sitio y comprueba que el script de seguimiento de Privatus Analytics está instalado correctamente, y marca el sitio como verificado cuando se encuentra el script con el id de este sitio. Por defecto solicita la página de inicio (https://domain/) y url puede nombrar otra página, pero solo en el dominio propio del sitio, en dominios adicionales o en sus subdominios. El resultado (en data) tiene url, status (estado HTTP), script_found, site_ids (cada id data-site encontrado en la página), installed (true cuando el id de este sitio está entre ellos), csp y csp_ok (si la Content-Security-Policy de la página permite que el tracker se cargue y envíe), referrer_policy y referrer_ok (una política no-referrer hace que cada visita aparezca como directa) y checked_at. Lo obtiene por la internet pública, lee como máximo 2 MB y tiene un límite de frecuencia por espacio de trabajo y por host, así que responde 429 cuando se llama con demasiada frecuencia. Si la página no es accesible, devuelve un error de validación. Usa sites_setup_get para ver si han llegado eventos. Requiere sites.manage.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/tracking/verify.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/tracking/snippet.json Generar el fragmento de seguimiento con las opciones elegidas tracking_snippet

Construye la etiqueta de script HTML para instalar el seguimiento en un sitio y la devuelve con el id del sitio como data.site_id y data.snippet. Elígelo en lugar de sites_setup_get cuando necesites personalizarlo, y usa tracking_verify después para comprobar la página en vivo. Por defecto se cargan todos los módulos del tracker y las páginas vistas son automáticas. modules lo reduce a un subconjunto de engage (tiempo y desplazamiento), auto (enlaces salientes, descargas, formularios, errores 404), vitals (Web Vitals), clicks (mapas de clics) y ask (encuestas en el sitio). manual true desactiva la página vista automática para que las envíes tú. spa establece el seguimiento de navegación de aplicaciones de una sola página en auto, history, hash u off. domains limita el seguimiento a esos nombres de host, exclude lista patrones glob de rutas que se omiten, query_params lista parámetros de consulta adicionales que se conservan y mask lista máscaras de ruta del lado del cliente escritas como /u/*->/u/:id. No se guarda nada, el fragmento se genera a partir de los parámetros cada vez. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/tracking/snippet.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Sincronización con almacén de datos

POST /workspaces/:workspace_id/warehouses.json Añadir un destino de almacén de datos warehouse_destinations_create

Añade un destino de almacén de datos que recibe los eventos sin procesar de cada día (solo plan Business). Cada día a las 02:00 UTC se sube el día UTC anterior, la primera ejecución es a las siguientes 02:00 UTC y una ejecución fallida se reintenta una hora después. Debe indicarse kind, que decide los ajustes obligatorios. s3 (también GCS, R2 y MinIO mediante endpoint) necesita bucket, access_key_id y secret_access_key, con region, prefix y endpoint opcionales (https, solo hosts públicos). bigquery necesita service_account_json, dataset y table, con project_id opcional. snowflake necesita account, user, private_key (RSA en PEM), database, schema y table, con warehouse y role opcionales. azure necesita sas_url (un enlace SAS https de un contenedor de blobs con permiso de escritura), con prefix opcional. Los secretos (secret_access_key, service_account_json, private_key, sas_url) son de solo escritura y nunca se devuelven. site_ids limita los sitios (ids pa_...), vacío significa todos los sitios, y un miembro o token limitado a algunos sitios debe nombrarlos. Las propiedades de evento solo se envían cuando están marcadas como seguras para exportar (consulta event_properties_list). Necesita el permiso workspace.manage. Devuelve el destino con id (whd_...), un destino enmascarado y configured (los nombres de los ajustes rellenados).

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/warehouses.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /warehouses/:id.json Eliminar un destino de almacén de datos warehouse_destinations_delete

Elimina un destino de almacén de datos para que no se envíe nada más. Los datos que ya se subieron permanecen en tu bucket o almacén, y no se puede deshacer, aunque puedes volver a añadir el destino (el historial no se reenvía automáticamente). Cualquier sincronización manual aún en cola no se retira. El id viene de warehouse_destinations_list. Necesita el permiso workspace.manage. Devuelve el destino eliminado.

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/warehouses/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/warehouses.json Listar destinos de almacén de datos warehouse_destinations_list

Lista los destinos de almacén de datos de un espacio de trabajo ordenados por nombre, opcionalmente solo de un tipo (s3, bigquery, snowflake o azure). Un miembro o token limitado a algunos sitios solo ve los destinos cuyos sitios están todos entre los suyos, y los destinos que envían todos los sitios se le ocultan. Paginado con page y per_page (hasta 100). Cada elemento tiene los campos descritos en warehouse_destinations_get. Necesita el workspace_id de workspaces_list y el permiso workspace.manage.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/warehouses.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /warehouses/:id.json Obtener un destino de almacén de datos (sin secretos) warehouse_destinations_get

Devuelve un destino de almacén de datos sin credenciales. Los campos son id (whd_...), kind (s3, bigquery, snowflake o azure), name, target (un resumen enmascarado como s3://bucket/prefix), configured (nombres de los ajustes rellenados, los secretos solo se muestran por nombre), site_ids (vacío significa todos los sitios), schedule (daily), schema_version (el formato de fila enviado), last_run_at, next_run_at, last_error (null cuando la última ejecución funcionó) y created_at. El id viene de warehouse_destinations_list. Comprueba last_error después de warehouse_destinations_sync para ver cómo fue una sincronización.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/warehouses/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /warehouses/:id/sync.json Poner en cola ahora una sincronización de un día warehouse_destinations_sync

Pone en cola una subida inmediata de un día UTC de eventos sin procesar a un destino, fuera de la programación diaria. Solo plan Business. date (YYYY-MM-DD) debe ser anterior a hoy en UTC y por defecto es ayer. Sube ese día para todos los sitios del destino, así que evita sincronizar un día que ya se envió, y las sincronizaciones manuales tienen un límite de 30 por hora por espacio de trabajo. La llamada devuelve 202 con el destino de inmediato y la subida se ejecuta en segundo plano. Consulta warehouse_destinations_get y lee last_run_at y last_error para ver el resultado. El id viene de warehouse_destinations_list. Necesita el permiso workspace.manage.

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/warehouses/:id/sync.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /warehouses/:id.json Actualizar un destino de almacén de datos (los secretos en blanco se conservan) warehouse_destinations_update

Modifica un destino de almacén de datos (solo plan Business). Solo cambian los datos que envías y kind no se puede cambiar. Un secreto en blanco conserva el valor guardado, así que puedes editar otros ajustes sin volver a enviar las credenciales. Los ajustes se validan según el kind del destino como en warehouse_destinations_create. Enviar site_ids reemplaza la lista de sitios. Cuando cambia el destino (otro bucket, dataset, tabla, base de datos o similar), el avance de los días sin terminar empieza de nuevo, de modo que esos días se envían otra vez al nuevo lugar. El id viene de warehouse_destinations_list. Necesita el permiso workspace.manage. Devuelve el destino actualizado.

Permiso: workspace.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/warehouses/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Sitio web

GET /blog.json Lista las entradas del blog blog_list

Lista las entradas del blog de Privatus Analytics, las más recientes primero, con slug, title, kicker, rubric (el resumen en una frase), description, path y fechas, y sin cuerpo. Para leer una usa blog_get con su slug. Paginado con page y per_page (máximo 100). Público, no necesita autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/blog.json
GET /blog/:slug.json Lee una entrada del blog (Markdown y HTML) blog_get

Devuelve una entrada del blog por su slug (de blog_list, la última parte de /blog/<slug>) con sus encabezados, su cuerpo en Markdown y el HTML renderizado. Las entradas están escritas en inglés. Público, no necesita autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/blog/:slug.json
GET /changelog.json Listar las entradas del registro de cambios changelog_list

Novedades del producto publicadas, las más recientes primero. También disponible como RSS en /changelog.rss.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/changelog.json
POST /contact.json Enviar un mensaje al equipo de Privatus Analytics contact_create

Los clientes de navegador envían un token de Cloudflare Turnstile como `cf-turnstile-response`. Las solicitudes con un token de API no necesitan ninguno.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/contact.json \
  -H "Content-Type: application/json" -d '{…}'
POST /newsletter/confirm.json Confirmar una suscripción al boletín (token firmado) newsletter_confirm

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/newsletter/confirm.json \
  -H "Content-Type: application/json" -d '{…}'
POST /newsletter.json Suscribir un correo al boletín newsletter_subscribe

Los clientes de navegador envían un token de Cloudflare Turnstile como `cf-turnstile-response`. Las solicitudes con un token de API no necesitan ninguno.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/newsletter.json \
  -H "Content-Type: application/json" -d '{…}'
POST /newsletter/unsubscribe.json Darse de baja con un token de enlace firmado newsletter_unsubscribe

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/newsletter/unsubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
GET /pricing.json Obtener planes, precios y límites de los planes pricing_get

Los mismos datos que la página de precios: la escala de eventos, todos los límites de los planes y qué cuenta como un evento. Pasa events para obtener el nivel correspondiente.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/pricing.json
GET /status.json Obtener el estado actual del sistema status_get

Estado de la base de datos, Redis y los trabajos en segundo plano, comprobado como máximo cada 15 segundos.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/status.json
GET /tools/header-checker.json Comprobar el Referrer-Policy y la CSP de una página para analítica tools_header_check

Obtiene una página pública y comprueba las cabeceras de respuesta que afectan a las analíticas. Úsalo cuando falten datos de seguimiento o los referentes parezcan incorrectos. Examina Referrer-Policy, las directivas script-src y connect-src de Content-Security-Policy (si Privatus Analytics puede cargarse y enviar datos), Permissions-Policy y el número de cabeceras Set-Cookie. Devuelve url (la URL final tras hasta 3 redirecciones), status (estado HTTP) y findings, cada uno con check, value (puede ser null), level (ok, warn o info) y una nota en lenguaje sencillo. La URL debe ser http o https y pública, se rechazan las direcciones privadas e internas, solo se lee el primer 1 MB y la obtención agota el tiempo a los 5 segundos. Límite de 10 llamadas por minuto por cliente. Público, sin necesidad de autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/tools/header-checker.json
GET /tools/privacy-policy-generator.json Redactar un párrafo de política de privacidad para Privatus Analytics tools_privacy_policy

Redacta un párrafo de política de privacidad que describe cómo recopila datos Privatus Analytics en el sitio del cliente (sin cookies, sin datos personales guardados, ubicación solo por país). Es un punto de partida, no asesoramiento legal. Los parámetros son site_name (hasta 120 caracteres), contact_email (opcional, añade una frase de contacto) y honors_gpc (por defecto true, añade una frase que indica que se respetan Do Not Track y Global Privacy Control). Devuelve site_name, paragraphs (array de cadenas), text (los párrafos unidos con líneas en blanco, con la dirección de Privatus Analytics entre paréntesis tras el nombre) y html (los párrafos como elementos <p>, con el nombre como enlace simple). El texto se escribe en el idioma de la solicitud, inglés por defecto. No hace ningún cambio en ninguna cuenta. Público, sin necesidad de autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/tools/privacy-policy-generator.json
GET /tools/qr-code.json Generar un código QR como SVG tools_qr_code

Genera un código QR como imagen SVG para imprimir o para carteles. Combínalo con un enlace que tenga parámetros UTM de tools_utm_builder. Los parámetros son text (la URL o el texto, hasta 1,000 caracteres) y level (corrección de errores l, m, q o h, por defecto m, un nivel más alto soporta más daño pero necesita un código más denso). Devuelve text, level, size (módulos por lado) y svg (un documento SVG independiente, negro sobre blanco). Se rechaza un texto demasiado largo para el nivel elegido. Para los códigos QR de enlaces cortos con seguimiento usa links_qr. Público, sin necesidad de autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/tools/qr-code.json
GET /tools/tracker-scanner.json Listar cookies y rastreadores conocidos de una página tools_tracker_scan

Obtiene una página pública y lista las cookies que establece y los rastreadores de terceros conocidos a los que hace referencia. Úsalo para una comprobación rápida de lo que carga una página antes de elegir un enfoque de consentimiento. Es un análisis estático del HTML y de las cabeceras de respuesta únicamente, no ejecuta JavaScript, así que se pierden las cookies establecidas por scripts y las etiquetas cargadas más tarde por un gestor de etiquetas. Devuelve url (URL final tras hasta 3 redirecciones), status, truncated (true cuando solo se leyó el primer 1 MB), cookies (name, domain, path, expires, secure, http_only y same_site, los valores nunca se devuelven), trackers (name, category, match y evidence, donde category es advertising, analytics, session_recording, tag_manager, marketing o privacy_analytics) y third_party_hosts (nombres de host ordenados de otros sitios). La URL debe ser http o https pública, con un tiempo de espera de obtención de 5 segundos, y las llamadas están limitadas a 10 por minuto por cliente. Público, sin necesidad de autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/tools/tracker-scanner.json
GET /tools/utm-builder.json Crear una URL de campaña con parámetros UTM tools_utm_builder

Construye una URL de campaña con parámetros UTM y señala los errores habituales. Los parámetros son url (debe ser http o https), source, medium y campaign (todos obligatorios) y term y content opcionales. Los parámetros utm_ existentes en la URL se reemplazan y los demás parámetros de consulta se conservan. Devuelve url (el enlace terminado), params (los valores utm_ que se añadieron, sin los que están en blanco) y warnings (cadenas para valores con letras mayúsculas, espacios, o texto que parece una dirección de correo o un número largo, que nunca deberían estar en una URL). Usa valores en minúsculas y sin espacios para que la misma campaña no se divida en varias filas en los informes. No guarda nada. Público, sin necesidad de autenticación.

Permiso: public

Ejemplo
curl https://privatusanalytics.com/tools/utm-builder.json
POST /waitlist.json Unirse a una lista de espera (alojamiento en la UE) waitlist_join

Los clientes de navegador envían un token de Cloudflare Turnstile como `cf-turnstile-response`. Las solicitudes con un token de API no necesitan ninguno.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/waitlist.json \
  -H "Content-Type: application/json" -d '{…}'

Sitios

POST /sites/:site_id/data_reset.json Eliminar todos los eventos y visitas de un rango de fechas (se ejecuta en segundo plano, no se puede deshacer) sites_reset_data

Elimina de forma irreversible las páginas vistas, los eventos personalizados y las visitas de un sitio en un rango de fechas, y no se puede deshacer. Úsalo para borrar tráfico de prueba o quitar un periodo erróneo. No elimina el sitio, sus objetivos ni sus ajustes (usa sites_delete para el sitio). from y to son fechas YYYY-MM-DD, ambas inclusive y leídas en la zona horaria del sitio, y to no debe ser anterior a from. confirm debe ser el dominio del sitio exactamente como lo muestra sites_get (no distingue mayúsculas). La solicitud se acepta y responde de inmediato con status queued, site_id, from y to. La eliminación se ejecuta en segundo plano por lotes, así que las cifras de las herramientas de estadísticas pueden tardar un poco en estabilizarse, y no hay ningún endpoint de estado que consultar: revisa las herramientas de estadísticas hasta que el rango esté vacío. La acción queda registrada en el registro de auditoría. Requiere el permiso sites.manage.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/data_reset.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/filter_stats.json Resumen del tráfico filtrado: bots, reglas de tráfico o redacciones de PII por motivo y país (solo recuentos) sites_filter_stats

Recuentos de visitas que se descartaron o se limpiaron antes de guardarse, durante los últimos días. Úsalo para ver cuánto tráfico de bots, tráfico bloqueado por reglas o redacción tiene un sitio. Elige kind con bot (visitas descartadas como bots), rule (visitas descartadas por las reglas de tráfico) o redaction (valores redactados por el depurador de datos personales). Devuelve kind, days, total, by_reason, by_country y by_day. by_reason y by_country son listas de {value, count} (hasta 50, las mayores primero, value null cuando se desconoce) y by_day es una lista de {date, count}. days se limita entre 1 y 395 y por defecto es 30. Son solo recuentos agregados. No se guarda ninguna dirección IP, user agent ni valor redactado, así que nada se puede rastrear hasta una persona. Estas visitas no se cuentan como eventos para la facturación. Usa traffic_rules_list para ver o cambiar las reglas.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/filter_stats.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/access.json Listar los miembros y si pueden ver este sitio sites_access_list

Muestra qué miembros del espacio de trabajo pueden ver un sitio. Se listan todos los miembros del espacio de trabajo en el orden en que se unieron, sin paginar. Los campos son membership_id (el uuid usado por sites_access_update), email, name, role, access (true cuando el miembro puede ver este sitio) y locked (true para propietarios y administradores, que siempre tienen acceso y no se pueden cambiar). Los demás miembros tienen acceso cuando tienen todos los sitios o una concesión explícita para este sitio. Usa members_list para ver la lista completa de sitios de un miembro. Requiere members.manage.

Permiso: members.manage

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/access.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/access.json Conceder o quitar el acceso de un miembro a este sitio sites_access_update

Concede o quita el acceso de un miembro a un sitio. membership_id viene de sites_access_list (o members_list) y access es true para conceder o false para quitar. Los propietarios y administradores siempre tienen acceso y no se pueden cambiar. Quitar el acceso a un miembro que tenía todos los sitios lo pasa a una lista explícita de todos los demás sitios del espacio de trabajo y desactiva su include_future_sites, así que no recibirá los sitios creados más adelante. Conceder acceso a alguien que ya tiene todos los sitios no cambia nada. No puedes cambiar a un miembro que tiene permisos que a ti te faltan o sitios que no son tuyos. Requiere members.manage. Devuelve la fila de ese miembro con la misma forma que sites_access_list.

Permiso: members.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/access.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/favorite.json Marcar un sitio con estrella (aparece primero en Todos los sitios) sites_favorite

Marca un sitio con una estrella para el usuario que llama, de modo que sites_list y la página de todos los sitios lo muestren primero. Solo afecta a quien llama, nunca a otros miembros, y marcar un sitio ya marcado no cambia nada. La llamada no necesita ningún parámetro aparte del id del sitio. Usa sites_unfavorite para quitar la estrella. Requiere analytics.read. Devuelve el sitio (consulta sites_get), con favorite true.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/favorite.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/favorite.json Quitar la estrella de un sitio sites_unfavorite

Quita la estrella del usuario que llama a un sitio, de modo que ya no aparezca fijado el primero en sites_list. Solo afecta a quien llama y no hace nada si el sitio no tenía estrella. Usa sites_favorite para volver a marcarlo. Requiere analytics.read. Devuelve el sitio (consulta sites_get), con favorite false.

Permiso: analytics.read

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/favorite.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/setup.json Estado de instalación y fragmento de un sitio sites_setup_get

Devuelve lo necesario para instalar el seguimiento en un sitio y si han llegado datos. Los campos son site_id, snippet (la etiqueta de script HTML lista para pegar con todos los módulos del tracker activados), receiving_data (true una vez recibido el primer evento) y first_event_at (ISO 8601, null hasta entonces). Consúltalo tras la instalación para ver si están llegando eventos. Usa tracking_snippet en su lugar cuando quieras un fragmento personalizado (módulos elegidos, páginas vistas manuales, modo SPA, máscaras) y tracking_verify para obtener la página en vivo y comprobar que el script está presente. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/setup.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /transfers/:token/accept.json Aceptar la transferencia de un sitio a uno de tus espacios de trabajo site_transfers_accept

Acepta una invitación de transferencia de sitio y mueve el sitio a uno de los espacios de trabajo de quien llama. El parámetro de ruta token viene del enlace de la invitación, y workspace_id es el espacio de trabajo de destino (ws_...) en el que quien llama tiene sites.manage. El correo de quien llama debe coincidir con la dirección a la que se envió la invitación, y el destino no puede ser el espacio de trabajo del que procede el sitio. El sitio conserva su id, ajustes, objetivos y datos, pero se borran las concesiones de acceso por miembro y sus enlaces compartidos pasan al nuevo espacio de trabajo. Falla cuando la invitación ya no está pendiente o ha caducado, cuando el destino ha alcanzado el límite de sitios de su plan o cuando ya tiene un sitio activo con el mismo dominio. El traslado no se puede deshacer salvo transfiriéndolo de vuelta. Un token que llama a esto debe pertenecer al espacio de trabajo de destino y tener sites.manage. Devuelve la transferencia con status accepted.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/transfers/:token/accept.json \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/transfer.json Iniciar la transferencia de un sitio a otro espacio de trabajo (se envía un correo al destinatario) sites_transfer_start

Inicia el traslado de un sitio a otro espacio de trabajo enviando al destinatario por correo un enlace de invitación válido durante 7 días. No se mueve nada hasta que el destinatario inicia sesión con ese correo y acepta (site_transfers_accept), así que el sitio se queda aquí hasta entonces. Iniciar una nueva transferencia cancela cualquier transferencia pendiente anterior del mismo sitio. email debe ser una dirección válida y el destinatario elige el espacio de trabajo de destino. Los correos de transferencia tienen un límite de frecuencia. Usa sites_transfer_cancel para retirarla. Requiere sites.manage. Devuelve la transferencia con site_id, site_domain, from_workspace, to_email, status pending y expires_at.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/transfer.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/transfer.json Cancelar una transferencia de sitio pendiente sites_transfer_cancel

Cancela la invitación de transferencia pendiente del sitio para que su enlace deje de funcionar. Falla con un error de validación cuando no hay ninguna transferencia pendiente. Una transferencia que ya se aceptó no se puede cancelar. Requiere sites.manage. Devuelve la transferencia con status canceled.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/transfer.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /transfers/:token.json Obtener una transferencia pendiente a partir de su token enviado por correo site_transfers_get

Muestra una invitación de transferencia de sitio a partir del token de su enlace (el parámetro de ruta token, del correo de invitación enviado por sites_transfer_start). Quien llama debe haber iniciado sesión o usar un token de API. Devuelve site_id, site_domain, from_workspace (el nombre del espacio de trabajo que envía), to_workspace_id (null hasta que se acepta), to_email (la dirección invitada), status (pending, accepted o canceled) y expires_at. Las invitaciones caducan 7 días después de enviarse. Usa site_transfers_accept para aceptarla.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl https://privatusanalytics.com/transfers/:token.json
POST /workspaces/:workspace_id/sites.json Añadir un sitio sites_create

Añade un sitio web a un espacio de trabajo y lo devuelve, incluido el fragmento de seguimiento que hay que instalar. El plan del espacio de trabajo limita el número de sitios (Free permite 3) y la llamada falla con un error de límite del plan cuando se alcanza. domain es obligatorio y se normaliza (por ejemplo, una URL completa o un prefijo www se reduce al nombre de host). name es por defecto el dominio, timezone es por defecto la zona horaria del espacio de trabajo (un nombre IANA como Europe/Berlin) y currency la moneda del espacio de trabajo (un código ISO 4217 de 3 letras como USD). Los efectos secundarios son una notificación site.created a los canales de notificación del espacio de trabajo, la puesta en cola de una primera auditoría SEO del sitio y de una comprobación del domain rating, y un correo con el código de seguimiento al miembro que lo creó (con recordatorios mientras no lleguen datos). Los miembros limitados a sitios seleccionados que optaron por los sitios futuros obtienen acceso a él. Requiere sites.manage. Continúa con tracking_snippet o sites_setup_get para instalar y tracking_verify para comprobar.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sites.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:id.json Eliminar un sitio (se purga tras 7 días) sites_delete

Elimina un sitio. Es una eliminación suave: el sitio deja de recopilar datos y desaparece de las listas de inmediato, y sus datos se purgan de forma permanente después de 7 días, así que trátalo como irreversible y contacta con soporte rápido si fue un error. confirm debe ser el dominio del sitio (no distingue mayúsculas). Las transferencias pendientes del sitio se cancelan y se envía una notificación site.deleted a los canales de notificación del espacio de trabajo. Para borrar solo parte del tráfico y conservar el sitio usa sites_reset_data. Requiere sites.manage. Devuelve el sitio.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/sites.json Listar los sitios de un espacio de trabajo sites_list

Lista los sitios de un espacio de trabajo a los que quien llama tiene acceso, paginados, con los sitios marcados con estrella de quien llama primero. Usa query para buscar en el dominio o el nombre (coincidencia parcial, sin distinguir mayúsculas), label para conservar los sitios que llevan una etiqueta y sort como position (el orden guardado, por defecto), name o visitors (visitantes de los últimos 30 días, los más numerosos primero). meta de la respuesta tiene la paginación por página más stats, un objeto con el id del sitio como clave y visitors (visitantes únicos recientes), change (variación porcentual respecto al periodo anterior), sparkline (una lista de valores diarios) y live (visitantes actuales), y totals de toda la página. Cada elemento tiene los mismos campos que sites_get. Este es el punto de partida para encontrar los ids de sitio (pa_...) que usan todas las demás herramientas de sitio. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/sites.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:id.json Obtener un sitio y todos sus ajustes sites_get

Devuelve los ajustes y el estado de un sitio por su id público (pa_..., de sites_list). Los campos principales son id, workspace_id (ws_...), domain, name, extra_domains y multi_domain_mode (combined o separate), timezone (nombre IANA), currency (ISO 4217), labels, opciones de privacidad (honor_dnt, honor_gpc, pii_scrubber, redaction_rules, allowed_params, path_masks), retention_months (null significa conservar todos los datos), bot_filtering, traffic_rule_modes (un objeto que asigna a una lista de reglas block o allow), vitals_sample_rate (un porcentaje), conversion_denominator (visits o visitors), public_dashboard y public_indexable, ingest_key_prefix (null cuando el sitio no tiene clave de registros de rastreadores), verified_at, first_event_at y last_event_at (null hasta que llegan datos), domain_rating (puede ser null), snippet (la etiqueta de seguimiento HTML), favorite (si quien llama le puso estrella) y created_at. Requiere analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:id.json Actualizar los ajustes del sitio sites_update

Actualiza los ajustes de un sitio, cambiando solo los campos que envías. Los campos de nombre e identidad son name, domain (cambiarlo vuelve a comprobar el domain rating), extra_domains (una lista de nombres de host) y multi_domain_mode (combined cuenta un visitante entre dominios, separate los mantiene separados). timezone es un nombre IANA y currency un código ISO 4217 de 3 letras. Los campos de privacidad son honor_dnt, honor_gpc, pii_scrubber, redaction_rules (una lista de objetos con name y pattern, pattern una expresión regular), allowed_params (parámetros de consulta que se conservan), path_masks (una lista de objetos con pattern y replacement) y bot_filtering. Las listas reemplazan toda la lista existente. retention_months no debe superar la retención del plan (Free 6 meses). traffic_rule_modes asigna a una lista de reglas (hostnames, paths, referrers, countries, ip_ranges, user_agents o events) block o allow. vitals_sample_rate es un porcentaje y el plan lo limita (10 en Free, 100 en los planes de pago). conversion_denominator es visits o visitors. public_dashboard hace que cualquiera que tenga el enlace pueda ver las estadísticas y public_indexable permite que los motores de búsqueda indexen esa página. Los cambios surten efecto para los eventos nuevos en cuestión de instantes. Requiere sites.manage. Devuelve el sitio actualizado.

Permiso: sites.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Solicitudes de dominio personalizado de testimonios

POST /sites/:site_id/testimonials/settings/custom_domain.json Pide un dominio personalizado en un muro o en formularios testimonial_custom_domain_requests_create

Los dominios personalizados de testimonios los configura a mano el equipo de Privatus Analytics. Esto guarda la solicitud y avisa al equipo, que envía por correo el registro DNS que añadir. El nombre de host no funciona hasta que el estado de la solicitud es active. Desde Business: los demás planes reciben 402 plan_limit.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/settings/custom_domain.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/settings/custom_domain.json Retira una solicitud de dominio personalizado, por su nombre de host testimonial_custom_domain_requests_delete

Solo se puede retirar una solicitud en la que el equipo no ha empezado a trabajar (estado requested). Una que está en curso responde con wrong_state. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/settings/custom_domain.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/settings/custom_domain.json Lista las solicitudes de dominio personalizado de un sitio testimonial_custom_domain_requests_list

Cada solicitud de un nombre de host en un muro o en formularios, las más recientes primero, con su estado. El nombre de host funciona solo cuando status es active. Funciona en todos los planes, así que las solicitudes anteriores aún se pueden leer.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/custom_domain.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Solicitudes de retirada

POST /sites/:site_id/testimonials/removal_requests/:id/dismiss.json Descarta una solicitud de retirada testimonial_removal_requests_dismiss

Cierra la solicitud con una nota y deja el testimonio donde se muestra. No se elimina nada y no se envía ningún correo a la persona que lo pidió. La nota es obligatoria. Una solicitud que ya está decidida responde con 422.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/removal_requests/:id/dismiss.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/removal_requests.json Lista las solicitudes de retirada de un sitio testimonial_removal_requests_list

Solicitudes abiertas salvo que se pida otro estado. El correo que escribió quien dio el testimonio se devuelve solo a quien llama y puede cambiar contenido.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/removal_requests.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/removal_requests/:id/resolve.json Decide una solicitud de retirada testimonial_removal_requests_resolve

trash envía el testimonio a la papelera, lo que lo quita de cada widget, muro y página pública a la vez y se puede deshacer durante 30 días. dismiss lo deja mostrándose y necesita una nota.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/removal_requests/:id/resolve.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/removal_requests/:id.json Obtiene una solicitud de retirada testimonial_removal_requests_get

Una solicitud con el testimonio al que se refiere, la nota que dejó la persona, si el correo que escribió coincide con el del testimonio, cuántas veces lo pidió y la decisión una vez que hay una. El correo en sí se devuelve solo a quien llama con content.write.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/removal_requests/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Solicitudes de testimonios

POST /requests/resubscribe/:token.json Confirma que se vuelven a recibir solicitudes de testimonios testimonial_request_resubscribes_confirm

El POST detrás del botón de la página de confirmación. Levanta la exclusión, así que se puede volver a preguntar a la dirección.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/requests/resubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /requests/resubscribe.json Pide el correo que permite a una dirección volver a recibir solicitudes testimonial_request_resubscribes_create

Envía un correo de confirmación a la propia dirección, cuando se había dado de baja. La respuesta es la misma se hubiera dado de baja o no.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/requests/resubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
POST /requests/unsubscribe/:token.json Cancela la suscripción de una dirección a las solicitudes de testimonios testimonial_request_unsubscribes_create

El POST detrás del botón de la página de cancelación, y lo que llama el propio botón de cancelar suscripción de una app de correo. El token viene del enlace del correo.

Permiso: public · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/requests/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/requests.json Inicia una solicitud como borrador testimonial_requests_create

Crea un borrador con su correo y sus destinatarios. No se envía nada hasta testimonial_requests_send. Lo que se omite parte de un valor predeterminado: el correo, un seguimiento a los 5 días, el nombre del sitio como remitente y tú como dirección de respuesta. Cada destinatario se guarda como queued, o como skipped con el motivo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/requests/:id.json Elimina un borrador testimonial_requests_delete

Solo se puede eliminar una solicitud que nunca se envió. Una solicitud enviada se conserva como registro del correo que se envió. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/requests/:id/duplicate.json Copia una solicitud en un borrador nuevo testimonial_requests_duplicate

La copia tiene el mismo formulario y correo, y todavía no tiene destinatarios.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id/duplicate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/requests.json Lista las solicitudes de un sitio testimonial_requests_list

Las más recientes primero, cada una con su correo y los recuentos de su embudo. Filtra por estado, formulario o periodo.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/requests.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/requests/:id/preview.json Ve un correo de una solicitud como lo recibe su primer destinatario testimonial_requests_preview

El remitente, el asunto y el cuerpo con los campos de combinación rellenados. No se envía nada. step 0 es el primer correo, de 1 a 3 los seguimientos.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/requests/:id/resume.json Reanuda una solicitud detenida testimonial_requests_resume

Continúa donde se detuvo. Un seguimiento que venció mientras estaba detenida se reprograma desde ahora, así que no sale nada de golpe. Esto envía correos a personas fuera del espacio de trabajo, así que se avisa al miembro por correo de que lo reanudó un asistente.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id/resume.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/requests/:id/send.json Envía una solicitud, ahora o a una hora testimonial_requests_send

Necesita confirm_relationship: true. Los destinatarios en cola se comprueban una vez más y luego salen los primeros correos (o esperan a send_at). Los seguimientos van a las personas que no han respondido. Los correos de solicitud se envían a través del proveedor de correo propio del sitio (Ajustes > Envío de correo, desde Business), así que un sitio sin una conexión que funcione recibe 422 no_email_connection o email_connection_paused, y otro plan recibe 402 plan_limit. Cada correo cuenta para el tope mensual de correos de solicitud del sitio (10.000 salvo que fijemos otro). En el tope no se descarta nada: las personas siguen en cola y el envío continúa el día 1. Esto envía correos a personas fuera del espacio de trabajo, así que se avisa al miembro por correo de que lo envió un asistente.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id/send.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/requests/:id/send_test.json Envía un correo de una solicitud a tu propia dirección testimonial_requests_send_test

Va solo a la dirección de quien llama, a través del proveedor de correo propio del sitio como los reales (422 no_email_connection sin uno). No tiene enlace personal ni contador de aperturas, y no cuenta para el tope mensual del sitio.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id/send_test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/requests/:id.json Obtiene una solicitud con su correo, seguimientos y recuentos del embudo testimonial_requests_get

Devuelve el correo, los seguimientos, el estado y los recuentos del embudo (sent, opened, clicked, submitted, bounced, unsubscribed) de una solicitud.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/requests/:id/stop.json Detiene una solicitud testimonial_requests_stop

Cancela de inmediato todos los correos aún no enviados. Lo ya enviado no se ve afectado, y testimonial_requests_resume continúa donde se detuvo.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id/stop.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /sites/:site_id/testimonials/requests/:id.json Cambia el nombre, el formulario o el correo de una solicitud testimonial_requests_update

Permitido en cualquier momento. Un cambio se aplica a todos los correos aún no enviados. Cambiar el retraso de un seguimiento reprograma los seguimientos que están esperando.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/requests/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Suscripciones

DELETE /sites/:site_id/subscriptions/connections/:provider.json Desconectar un proveedor de pagos y eliminar su clave y los datos de suscripciones subscriptions_disconnect

Desconecta un proveedor de pagos (stripe, paddle, lemon_squeezy, chargebee o polar) de un sitio y elimina de forma permanente la clave de API guardada y todas las filas de suscripción leídas de él. No se puede deshacer, y las cifras de MRR, cancelaciones y cohortes dejan de incluir al instante las suscripciones de ese proveedor. Falla si ese proveedor no está conectado. Devuelve la conexión quitada. Necesita sites.manage.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/subscriptions/connections/:provider.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/subscriptions/sync.json Leer ahora las suscripciones de un proveedor de pagos subscriptions_sync

Pone en cola una sincronización inmediata de las suscripciones de un proveedor conectado (stripe, paddle, lemon_squeezy, chargebee o polar) en lugar de esperar a la programación habitual. Responde de inmediato (HTTP 202) con la conexión y la sincronización se ejecuta en segundo plano. Consulta subscriptions_report o comprueba last_synced_at y last_error en la conexión. Los informes se guardan en caché hasta 15 minutos. Falla si el proveedor no está conectado. Necesita sites.manage.

Permiso: sites.manage

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/subscriptions/sync.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/subscriptions/cohorts.json Cuadrícula de cohortes: bajas o retención por mes del primer pago subscriptions_cohorts

La cuadrícula de cohortes de cancelaciones de las suscripciones del sitio, una fila por mes del primer pago. months es 6, 12 (por defecto) o 24 cohortes. plan conserva solo las suscripciones de un plan (consulta plans en subscriptions_report). metric es subscriptions (recuento) o mrr (dinero). view es churn (la proporción que había terminado en ese punto, por defecto) o retention (la proporción que sigue activa). Devuelve metric, view, months, plan (el filtro, o null), currency y cohorts, cada una con month (YYYY-MM), size (suscripciones, o MRR en unidades menores de la moneda del sitio) y cells, donde cada celda tiene offset (meses desde el mes de la cohorte, 0 es el primero), retained (misma unidad que size) y percent (0 a 100, null para una cohorte vacía). Las pruebas que nunca pagaron no están en ninguna cohorte. Para el MRR, el ARR y la cancelación principales usa subscriptions_report. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/subscriptions/cohorts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/subscriptions.json Métricas de suscripciones: MRR, ARR, movimientos del MRR, bajas, retención de ingresos, pruebas, planes y una previsión subscriptions_report

Métricas de suscripciones del sitio, leídas de su cuenta conectada de Stripe, Paddle, Lemon Squeezy, Chargebee o Polar. months es 6, 12 (por defecto) o 24. plan conserva solo las suscripciones de un plan, con el nombre que lista plans. Los campos de dinero son enteros en unidades menores de la moneda del sitio (el currency de la respuesta), con las demás monedas convertidas al cambio de hoy. El resultado tiene currency, connected (false cuando no hay ningún proveedor conectado), plan (el filtro de plan, o null), connections (una por proveedor conectado con provider, account_name, sandbox, status, last_error, last_synced_at y created_at, nunca una clave), skipped_currencies (monedas sin tipo de cambio, cuyo dinero no se cuenta), totals, series, forecast y plans. totals tiene mrr_minor, arr_minor, previous_mrr_minor (el MRR de hace 30 días), active_subscriptions, arpa_minor (null sin suscripciones), trialing, trial_conversion_rate (porcentaje de pruebas que terminaron en los últimos 90 días y pagaron, null cuando no terminó ninguna), y de los últimos 30 días new_subscriptions, new_mrr_minor, expansion_mrr_minor, contraction_mrr_minor, churned_subscriptions, churned_mrr_minor, net_new_mrr_minor, quick_ratio (MRR nuevo más MRR de expansión por cada unidad de MRR cancelado más MRR de contracción, null cuando no se perdió nada), subscription_churn_rate y mrr_churn_rate (porcentaje, null sin base). También tiene net_revenue_retention y gross_revenue_retention (porcentaje de lo que pagaban hace 12 meses las suscripciones que entonces pagaban y que ahora siguen pagando, con y sin mejoras de plan, null sin base) y forecast_mrr_minor (el MRR dentro de 12 meses, null sin previsión). series tiene una fila por mes (month como YYYY-MM) con mrr_minor, active_subscriptions, los mismos campos de movimientos y churn_rate. forecast tiene una fila por mes para los próximos 12 meses (month, mrr_minor), proyectada a partir de los últimos tres meses completos, y está vacía si no hay tres meses completos que empezaran con MRR. plans lista hasta 50 planes por MRR con plan (null para las suscripciones cuyo proveedor no dio nombre de plan), mrr_minor, active_subscriptions, churned_subscriptions y subscription_churn_rate (últimos 30 días), siempre para todos los planes. Una suscripción cuenta desde su primer pago. Las mejoras y rebajas de plan se conocen desde la primera sincronización, y antes de ella los meses pasados usan el precio que tenía una suscripción cuando se leyó por primera vez. Para la retención por mes del primer pago usa subscriptions_cohorts. Necesita analytics.read.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/subscriptions.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Testimonios

GET /sites/:site_id/testimonials/overview.json Lee las cifras de un sitio, lo que necesita atención y lo que pasó recientemente testimonials_overview

stats contiene las cinco cifras de la página de Resumen: testimonios aprobados, pendientes, nuevos este mes, valoración media y en uso. attention lista lo que necesita una decisión con su recuento. activity son los últimos 10 eventos y latest_approved los tres testimonios aprobados más recientemente.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/overview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/setup.json Obtiene la lista de configuración de un sitio testimonials_setup_get

Devuelve los elementos import, testimonials, approve, ask, widget y teammate, cada uno con done y dismissed. Un elemento está hecho según lo que contiene el sitio, nunca por un clic. hidden es true cuando cada elemento está hecho o descartado, que es cuando la Bandeja deja de mostrar la tarjeta.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/setup.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/setup.json Descarta un elemento de la lista de configuración, o toda la tarjeta testimonials_setup_update

dismiss es la clave de un elemento (import, testimonials, approve, ask, widget o teammate) o all para toda la tarjeta. Descartar oculta el elemento y nunca lo marca como hecho, y no se puede recuperar mediante la API.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/setup.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/:id/approve.json Aprueba un testimonio para que pueda mostrarse testimonials_approve

Un testimonio en espera de cuota no se puede aprobar: el servidor responde con 422 y el código waiting_for_allowance. La respuesta incluye meta.undo_id.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/:id/approve.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/bulk.json Ejecuta una acción sobre una selección de testimonios, o sobre todo lo que coincide con un filtro testimonials_bulk

Envía ids (hasta 100, se ejecutan a la vez, todos o ninguno) o filters con confirm_count (el resultado completo). Más de 100 se ejecutan en segundo plano y la respuesta tiene state running. Acciones: approve, reject, mark_pending, pin, unpin, add_tags, remove_tags, add_to_collection, remove_from_collection, set_property, trash, restore. Cada una responde con un id de deshacer que testimonials_bulk_undo acepta durante 7 días. delete_permanently es la única acción que no se puede deshacer: necesita sites.manage y su respuesta indica undoable false. Por MCP las dos acciones que eliminan, trash y delete_permanently, no se ejecutan: la herramienta responde con human_only y la página de la app donde lo hace una persona, y todas las demás acciones se ejecutan. Por la API, la acción export (con ids o filters, y un format opcional de csv, json, ndjson o xlsx) no cambia nada: necesita analytics.export y responde con 202 y la exportación para descargar.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/bulk.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/bulk/:id/undo.json Deshace una acción masiva en un plazo de 7 días testimonials_bulk_undo

Repone el valor anterior en cada testimonio que cambió la ejecución. Uno que cambió de nuevo desde entonces se deja como está y se cuenta en left. Por MCP no se ejecuta un deshacer que eliminaría o enviaría a la papelera (el deshacer de una restauración, de una ejecución de traducción y de una ejecución de creación de imágenes): la herramienta responde con human_only y la página de la app donde lo hace una persona.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/bulk/:id/undo.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials.json Añade un testimonio a mano o mediante la API testimonials_create

Se guarda por la única vía de entrada que usan todas las rutas. Cuenta para la cuota mensual de testimonios nuevos del plan, y al llegar a la cuota el servidor responde con 422 y el código allowance_reached (solo el envío de un formulario de un cliente se retiene en espera). La misma persona diciendo las mismas palabras de nuevo se rechaza con el código duplicate salvo que allow_duplicate sea true. El mismo external_id otra vez devuelve el que ya está guardado.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/:id/permanent.json Elimina un testimonio definitivamente, con su historial, registro de consentimiento y archivos testimonials_delete

Esto no se puede deshacer. Funciona con un testimonio en la papelera o fuera de ella, necesita confirm y el permiso sites.manage. Por MCP la herramienta no elimina nada y responde con la página donde lo hace una persona.

Permiso: sites.manage · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/:id/permanent.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/:id.json Envía un testimonio a la papelera durante 30 días testimonials_trash

El testimonio conserva su estado, etiquetas, colecciones y archivos, no se muestra en ninguna parte y se elimina definitivamente a los 30 días. testimonials_restore lo devuelve exactamente como estaba. La respuesta incluye meta.undo_id. Enviar a la papelera uno que ya está allí no cambia nada. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/facets.json Cuenta los testimonios detrás de cada valor de filtro, para las mismas entradas que la lista testimonials_facets

La forma de la biblioteca sin leer ningún testimonio. Cada faceta cuenta sus valores sin tener en cuenta su propia elección y con todos los demás filtros aplicados. meta incluye el total y el filtro en palabras.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/facets.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/:id/highlight.json Marca la mejor frase de un testimonio, o bórrala testimonials_highlight

highlight debe ser una parte exacta de las palabras del testimonio, o el servidor responde con 422. Un highlight vacío lo borra. Cada cambio es una versión en el historial.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/:id/highlight.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/:id/history.json Lista cada versión de las palabras, el título, la valoración y el destacado de un testimonio testimonials_history

La más reciente primero. La versión 1 es el testimonio tal como se recibió y no tiene autor. Cada versión posterior tiene el miembro que la hizo, cuándo, la nota que dejó y, en una restauración, la versión que repuso. Paginado con page y per_page.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/:id/history.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials.json Lista los testimonios de un sitio, filtrados y ordenados testimonials_list

Tres formas de indicar cuáles, y se suman: las entradas de facetas (status, tag_id, has_video y el resto), q (el cuadro de búsqueda con sus operadores, por ejemplo rating:5 has:video tag:onboarding "nos salvó") y conditions con match (filas estructuradas). Envía facets como true para obtener el recuento en vivo detrás de cada valor de faceta en meta.facets. Nada de la papelera se lista salvo que trashed sea true, que lista solo la papelera.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/:id/pend.json Devuelve un testimonio a pendiente testimonials_pend

Devuelve un testimonio aprobado o rechazado a pendiente, de modo que no se muestra en ninguna parte hasta que se decida de nuevo. La respuesta incluye meta.undo_id. Un testimonio en la papelera se rechaza con el código in_trash.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/:id/pend.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/:id/pin.json Fija un testimonio para que se muestre primero, o desfíjalo testimonials_pin

Un testimonio fijado se muestra primero dondequiera que se exhiba. Envía pinned false para desfijarlo. La respuesta incluye meta.undo_id cuando algo cambió.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/:id/pin.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/:id/reject.json Rechaza un testimonio. Se conserva y no se muestra en ninguna parte testimonials_reject

El testimonio conserva todo lo que tiene y no se muestra en ninguna parte. Rechazar uno que ya está rechazado no cambia nada. La respuesta incluye meta.undo_id, que testimonials_bulk_undo acepta durante 7 días. Un testimonio en la papelera se rechaza con el código in_trash.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/:id/reject.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/:id/restore.json Restaura un testimonio de la papelera, exactamente como estaba testimonials_restore

Devuelve un testimonio de la papelera a su estado, etiquetas, colecciones y los lugares que lo mostraban. Nunca cuenta como un testimonio nuevo. Uno que no está en la papelera se rechaza con el código not_in_trash.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/:id/restore.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/:id/restore_version.json Repone las palabras, el título, la valoración y el destacado de una versión anterior testimonials_restore_version

No se elimina nada del historial. La restauración es una versión nueva que indica de cuál procede. La versión 1 devuelve el testimonio a las palabras tal como se recibieron. Un número de versión desconocido es un 422.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/:id/restore_version.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/:id.json Obtiene un testimonio con su persona, archivos, registro de consentimiento, etiquetas y dónde se usa testimonials_get

Devuelve un testimonio del sitio por su id (tm_...), esté o no en la papelera. person.email es null salvo que quien llama tenga content.write, y has_email indica si hay uno registrado. media lista los archivos con su estado de procesamiento. used_in lista cada widget, muro e imagen que lo muestra.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/showable.json Lista los testimonios que el público puede ver, tal como el público puede verlos testimonials_showable

Los testimonios aprobados más recientes de un sitio que pueden mostrarse en público, para una exhibición propia fuera de los widgets y muros. Cada uno incluye solo lo que permite su registro de consentimiento: una persona cuyo nombre no puede mostrarse aparece como Un cliente, y una foto o una grabación se omite salvo que se haya permitido. Un testimonio pendiente, rechazado o en la papelera, o uno en espera de cuota, nunca se lista. No hay correo en la respuesta.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/showable.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/triage.json Obtiene el siguiente testimonio de una cola de triaje testimonials_triage

Sin filtro la cola es Pendiente, sin esperar cuota, el recibido hace más tiempo primero. Con los filtros de la bandeja es ese resultado en su orden. Envía after con el id recién gestionado para obtener el siguiente. data es null cuando la cola termina. meta incluye remaining y total.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/triage.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/:id.json Edita un testimonio. Los cambios en las palabras, el título, la valoración y el destacado se guardan en su historial testimonials_update

Solo cambian las entradas enviadas. Un cambio en body, title, rating o highlight añade una versión al historial con edit_note y nunca cambia la marca de verificado. rating null la borra. highlight debe ser una parte exacta de las palabras, y uno vacío lo borra. properties cambia solo las claves enviadas. add_tags y remove_tags aceptan nombres o ids. El estado, el fijado y la papelera tienen sus propias herramientas. Un testimonio en la papelera no se puede editar.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Tokens de API

POST /workspaces/:workspace_id/api_tokens.json Crear un token de API (el token se devuelve una sola vez) api_tokens_create

Crea un token de API para el miembro que hace la llamada en un espacio de trabajo y devuelve el secreto una sola vez en el campo token. Cópialo de inmediato: no se puede volver a leer, y un token perdido debe revocarse y crearse de nuevo. Un token solo puede restringir lo que su miembro puede hacer. permissions, si se omite, toma por defecto todos los permisos del propio miembro (una lista vacía explícita se rechaza, y pedir un permiso que no tienes es un error). site_ids acepta ids públicos de sitio (pa_...) y limita el token a esos sitios, y si está vacío el token funciona con todos los sitios a los que su miembro tiene acceso (o conserva la lista de sitios del token que hace esta llamada). expires_at es opcional, en formato ISO 8601, debe estar en el futuro y a un máximo de 3 años: omítelo para un token que nunca caduca. allowed_ips limita el token a esas IP o rangos CIDR. Un token que hace esta llamada necesita tokens.manage. Un espacio de trabajo que exige autenticación en dos pasos rechaza los tokens de miembros sin un segundo factor propio. Devuelve los mismos campos que api_tokens_list más token.

Permiso: member · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/api_tokens.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /workspaces/:workspace_id/api_tokens/:id.json Revocar un token de API api_tokens_delete

Revoca un token de API de forma inmediata y permanente. Las solicitudes que lo usen fallan a partir de ese momento, y un token revocado no se puede restaurar: crea uno nuevo. El registro del token permanece en la lista con el estado revoked (usa api_tokens_list con include_revoked para verlo), y revocar un token ya revocado no cambia nada. Toma el id (un uuid) de api_tokens_list. Puedes revocar tus propios tokens. Revocar el de otra persona requiere tokens.manage y acceso a todos los sitios que cubre el token. Un token que llama a esto necesita tokens.manage. Devuelve el token revocado sin su secreto.

Permiso: member · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/api_tokens/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/api_tokens.json Listar tokens de API api_tokens_list

Lista los tokens de API de un espacio de trabajo, del más reciente al más antiguo y paginados. Sin el permiso tokens.manage solo ves tus propios tokens, y con él ves los de todos los miembros. Los tokens revocados y caducados se ocultan salvo que include_revoked sea true. Cada elemento tiene id (uuid, usado por api_tokens_delete), name, token_prefix (los primeros caracteres, para reconocer un token), owner (el correo del miembro), permissions (nombres como analytics.read), site_ids (ids públicos de sitio pa_..., un array vacío significa todos los sitios a los que el propietario tiene acceso), allowed_ips, oauth_client (el nombre de la aplicación conectada cuando el token se emitió mediante OAuth, si no null), status (active, expired o revoked), expires_at, last_used_at, revoked_at y created_at. El secreto nunca se devuelve aquí, token siempre es null en una lista. Solo se muestra una vez, con api_tokens_create.

Permiso: member

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/api_tokens.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Traducciones de testimonios

POST /sites/:site_id/testimonials/translations.json Traduce testimonios a los idiomas que ofrece un sitio testimonial_translations_create

Llama primero a testimonial_translations_estimate. Esto envía el cuerpo, el título y el destacado de los testimonios elegidos a Google Cloud Translation (nunca un nombre, un correo ni una empresa), y se avisa al miembro por correo de que lo inició un asistente. La traducción ocurre en segundo plano, y una fila que ya está guardada nunca se obtiene de nuevo. En la cuota mensual de caracteres el resto se guarda como en espera y continúa el día 1. Responde con 402 plan_limit por debajo de Business, y con 422 not_configured mientras la traducción no está configurada.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/translations.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/translations/:testimonial_id/:language.json Quita una traducción guardada testimonial_translations_delete

El testimonio se muestra de nuevo con sus propias palabras dondequiera que se usara ese idioma. Los caracteres ya gastados en ella no se devuelven. Funciona en todos los planes. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/translations/:testimonial_id/:language.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/translations/estimate.json Cuenta los caracteres que enviaría una ejecución de traducción, antes de ejecutarla testimonial_translations_estimate

Indica los testimonios de una forma: testimonial_ids, collection_id o all_approved. La respuesta da los testimonios, los caracteres que se enviarían, los caracteres ya guardados y lo que queda del mes. Indica caracteres, nunca un precio. No se obtiene nada.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/translations/estimate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/translations.json Lista las traducciones guardadas de un sitio testimonial_translations_list

Una fila por testimonio e idioma, la cambiada más recientemente primero, 25 por página. Filtra por idioma, estado, origen o testimonial_id. Funciona en todos los planes, así que las traducciones hechas antes de una rebaja de plan aún se pueden leer.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/translations.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/translations/:testimonial_id/:language.json Escribe o corrige una traducción a mano testimonial_translations_update

La fila se marca como editada, y una ejecución posterior no la sobrescribe salvo que se envíe overwrite_edited. No se obtiene nada y nada cuenta para la cuota. El original nunca cambia. Desde Business (402 plan_limit en otros).

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/translations/:testimonial_id/:language.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Vistas guardadas de testimonios

POST /sites/:site_id/testimonials/views.json Guarda con un nombre un filtro, texto de búsqueda, orden y diseño de la bandeja testimonial_saved_views_create

Una vista personal solo necesita analytics.read. Una compartida necesita content.write y de lo contrario se rechaza con el código not_allowed. Una vista fijada está en la barra lateral con su recuento. Ábrela con testimonials_list y view_id.

Permiso: analytics.read

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/views.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/views/:id.json Elimina una vista guardada. No se toca ningún testimonio testimonial_saved_views_destroy

Una vista guardada es un filtro almacenado, así que solo desaparece la vista. Un widget o muro alimentado por la vista conserva sus ajustes y no tiene nada que mostrar hasta que se le dé otra fuente. Una vista personal la elimina su propietario, y una compartida necesita content.write. De lo contrario la llamada se rechaza con el código not_allowed. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: analytics.read · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/views/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/views.json Lista las vistas guardadas de un sitio que quien llama puede abrir testimonial_saved_views_list

Devuelve las vistas propias de quien llama y todas las compartidas, las fijadas primero en su orden y luego por nombre. scope es all (el valor predeterminado), mine o shared. Pasa el id de una vista como view_id a testimonials_list para leer los testimonios que contiene.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/views.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/views/:id.json Renombra una vista guardada, cambia lo que guarda, fíjala o compártela testimonial_saved_views_update

Solo cambian las entradas enviadas: name, la búsqueda guardada (q), filters, sort, layout, columns, position, pinned y shared. Una vista personal la cambia su propietario. Cambiar una vista compartida, y compartir o dejar de compartir cualquier vista, necesita content.write.

Permiso: analytics.read

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/views/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Webhooks

GET /workspaces/:workspace_id/webhooks/:webhook_id/deliveries.json Listar los envíos de un webhook webhook_deliveries_list

Lista las entregas enviadas a un webhook (la ruta recibe webhook_id), de la más reciente a la más antigua y paginadas. Cada una tiene id (whd_...), event, status (pending, succeeded para cualquier respuesta 2xx, o failed), status_code (null cuando no llegó respuesta), error (un motivo breve como un tiempo de espera agotado, si no null), attempt (cuántos intentos van), duration_ms, payload (los datos JSON enviados), response_body (los primeros 2000 caracteres de la respuesta) y delivered_at y created_at. Filtra con status succeeded o failed. Úsalo para depurar un endpoint y webhook_deliveries_redeliver para enviar una de nuevo.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:webhook_id/deliveries.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/webhooks/:webhook_id/deliveries/:id/redeliver.json Volver a enviar un envío webhook_deliveries_redeliver

Envía de nuevo la carga de una entrega pasada como una nueva entrega al mismo endpoint (id whd_..., de webhook_deliveries_list). Esto hace una solicitud HTTP a la URL del cliente, así que el receptor puede procesar el mismo evento dos veces. Tiene un límite de frecuencia por espacio de trabajo (compartido con webhooks_test). Se pone en cola, así que la respuesta es una nueva entrega con status pending, consulta webhook_deliveries_list para ver el resultado.

Permiso: workspace.manage

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:webhook_id/deliveries/:id/redeliver.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/webhooks.json Añadir un endpoint de webhook webhooks_create

Añade un endpoint que recibe JSON enviado por POST para los eventos del espacio de trabajo (la ruta recibe workspace_id). url debe ser una dirección https pública, se rechazan las direcciones privadas e internas. events es una lista obligatoria elegida entre alert.triggered, alert.resolved, goal.completed_threshold, uptime.down, uptime.up, export.ready, import.completed, import.failed, site.created, site.deleted, member.added, usage.threshold y site_audit.completed. enabled es true por defecto. Se genera un secreto de firma (whsec_...) que se devuelve en la respuesta, y cada entrega lleva una cabecera Privatus-Signature con una marca de tiempo y un HMAC-SHA256 del cuerpo hecho con él. Las entregas fallidas se reintentan con espera creciente y el endpoint se desactiva tras 20 fallos seguidos. Usa webhooks_test para enviar una muestra.

Permiso: workspace.manage

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/webhooks.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /workspaces/:workspace_id/webhooks/:id.json Eliminar un webhook webhooks_delete

Elimina un endpoint de webhook y todo su registro de entregas. No se puede deshacer y los reintentos pendientes se detienen. Para pausarlo en su lugar usa webhooks_update con enabled false. El id (wh_...) viene de webhooks_list. Devuelve el webhook eliminado.

Permiso: workspace.manage

Ejemplo
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces/:workspace_id/webhooks.json Listar webhooks webhooks_list

Lista los endpoints de webhook salientes de un espacio de trabajo (la ruta recibe workspace_id), del más antiguo al más reciente. Cada uno tiene id (wh_...), url, events (los nombres de evento que recibe), enabled, status (active, failing tras fallos recientes, o disabled), secret (el secreto de firma, trátalo como información sensible), consecutive_failures, last_success_at, last_failure_at y created_at. Necesita el permiso workspace.manage. Esto es para enviar eventos sin procesar a tu propio servidor. Para notificar a personas usa notification_channels_list. Usa webhook_deliveries_list para ver lo que se envió.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/webhooks/:id.json Obtener un webhook webhooks_get

Devuelve un endpoint de webhook por id (wh_..., de webhooks_list), incluido su secreto de firma (whsec_...), que se usa para verificar la cabecera Privatus-Signature de cada entrega. Los campos son url, events, enabled, status (active, failing o disabled), secret, consecutive_failures, last_success_at, last_failure_at y created_at. Necesita el permiso workspace.manage.

Permiso: workspace.manage

Ejemplo
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/webhooks/:id/test.json Enviar un envío de prueba webhooks_test

Pone en cola una entrega webhook.test con un mensaje de ejemplo a un endpoint, aunque esté desactivado, lo que hace una solicitud HTTP a la URL del cliente. Tiene un límite de frecuencia por espacio de trabajo (compartido con webhook_deliveries_redeliver) y una prueba no se reintenta. La entrega se envía en segundo plano, así que la respuesta devuelve la entrega en cola con status pending. Consulta webhook_deliveries_list un momento después para ver status_code, error, duration_ms y response_body.

Permiso: workspace.manage

Ejemplo
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id/test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
PATCH /workspaces/:workspace_id/webhooks/:id.json Actualizar un webhook (eventos, URL, activado, rotar secreto) webhooks_update

Modifica un webhook (id de webhooks_list). Solo cambian los datos que envías. Enviar events reemplaza toda la lista. Establecer enabled true en un endpoint desactivado restablece su recuento de fallos, que es la forma de reactivar uno que se desactivó tras fallos repetidos. Establece rotate_secret true para generar un nuevo secreto de firma, que se muestra en la respuesta, y el anterior deja de funcionar al instante, así que el receptor debe actualizarse. Las reglas de url son las mismas que en webhooks_create. Devuelve el webhook.

Permiso: workspace.manage

Ejemplo
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'

Widgets

POST /sites/:site_id/testimonials/widgets/:id/copied.json Anota que se copió la incrustación en HTML pegado de un widget testimonial_widgets_mark_copied

El HTML pegado no se actualiza solo. Después de esta llamada, testimonial_widgets_embed informa de cuántas veces cambió el widget desde entonces.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id/copied.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/widgets.json Crea un widget testimonial_widgets_create

Una llamada incluye el widget completo: el diseño y sus opciones, qué lo alimenta, qué muestra cada tarjeta y su aspecto. Lo que se omite parte de un valor predeterminado, y un ajuste de estilo en blanco hereda el kit de marca. Sigue con testimonial_widgets_embed para obtener el código que pegar.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/widgets.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /sites/:site_id/testimonials/widgets/:id.json Envía un widget a la papelera testimonial_widgets_trash

Sus incrustaciones no muestran nada y no ocupan espacio hasta que se restaure. Se elimina definitivamente a los 30 días. Por MCP la herramienta no cambia nada y responde con la página de la app donde lo hace una persona.

Permiso: content.write · Solo HTTP (no es una herramienta MCP)

Ejemplo
curl -X DELETE https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/widgets/:id/duplicate.json Copia un widget con todos sus ajustes testimonial_widgets_duplicate

Hace una copia con un id nuevo y el nombre terminado en "copy". La copia tiene su propio código de incrustación y no se ha visto en vivo en ningún sitio. El original no cambia.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id/duplicate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/widgets/:id/embed.json Obtiene el código de incrustación de un widget y lo que pesa testimonial_widgets_embed

Devuelve el fragmento de script (recomendado), el HTML pegado, el código del marco y la dirección de los datos públicos, con el tamaño medido del script cargador y de este widget. El HTML pegado y el marco son null para la ventana emergente de esquina.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id/embed.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/widgets.json Lista los widgets de un sitio testimonial_widgets_list

Los widgets de la papelera no se listan. Cada widget incluye sus ajustes, cuántos testimonios muestra ahora, sus vistas y clics de los últimos 30 días y la primera página en la que se vio en vivo.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/widgets.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/widgets/:id/installs.json Lista las páginas en las que se vio un widget en vivo testimonial_widgets_installs

Hasta 50 páginas, las más recientes primero. Solo se pueden detectar el script y el marco.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id/installs.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/widgets/:id/restore.json Restaura un widget de la papelera testimonial_widgets_restore

Vuelve a donde se había pegado.

Permiso: content.write

Ejemplo
curl -X POST https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id/restore.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /sites/:site_id/testimonials/widgets/:id.json Obtiene un widget con cada ajuste, lo que muestra y dónde está activo testimonial_widgets_get

Todo lo que guarda el constructor: el diseño y sus opciones, qué alimenta el widget (una colección, una vista guardada, etiquetas o una lista elegida a mano), qué muestra cada tarjeta, el estilo, el idioma y el marcado de reseñas, con dónde se vio en vivo y cuántos testimonios muestra ahora. Un widget de la papelera responde con 404.

Permiso: analytics.read

Ejemplo
curl https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/widgets/:id.json Cambia un widget testimonial_widgets_update

Solo cambian las entradas enviadas. Un cambio guardado llega a cada sitio donde está el widget sin tocar su código, porque sus copias en caché se borran.

Permiso: content.write

Ejemplo
curl -X PATCH https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'