Docs
Parcourir la documentation

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.

Voir en 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

Toutes les opérations

Authentification

Envoyez Authorization: Bearer pat_…. Créez des jetons dans les paramètres de l’espace de travail, section Jetons d’API. Guide d’authentification.

JSON partout

Ajoutez .json à n’importe quel chemin. Les réponses sont { "data": … } et les erreurs sont { "error": { "code", "message" } }. Erreurs.

MCP

Envoyez du JSON-RPC en POST à https://privatusanalytics.com/mcp avec le même jeton. Chaque opération ci-dessous est un outil. Guide MCP.

Télécharger openapi.json · 527 opérations

Abonnements

DELETE /sites/:site_id/subscriptions/connections/:provider.json Déconnecter un prestataire de paiement et supprimer sa clé et les données d’abonnement subscriptions_disconnect

Déconnecte un fournisseur de paiement (stripe, paddle, lemon_squeezy, chargebee ou polar) d’un site et supprime définitivement la clé d’API stockée ainsi que chaque ligne d’abonnement lue depuis celui-ci. Cette action est irréversible, et les chiffres de MRR, de désabonnement et de cohortes retirent aussitôt les abonnements de ce fournisseur. Échoue si ce fournisseur n’est pas connecté. Renvoie la connexion retirée. Exige sites.manage.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lire maintenant les abonnements d’un prestataire de paiement subscriptions_sync

Met en file d’attente une synchronisation immédiate des abonnements depuis un fournisseur connecté (stripe, paddle, lemon_squeezy, chargebee ou polar) au lieu d’attendre le calendrier habituel. Il répond aussitôt (HTTP 202) avec la connexion et la synchronisation s’exécute en arrière-plan. Interrogez subscriptions_report ou vérifiez last_synced_at et last_error sur la connexion. Les rapports sont mis en cache jusqu’à 15 minutes. Échoue si le fournisseur n’est pas connecté. Exige sites.manage.

Permission : sites.manage

Exemple
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 Grille de cohortes : attrition ou rétention par mois du premier paiement subscriptions_cohorts

La grille de cohortes de désabonnement des abonnements du site, une ligne par mois de premier paiement. months vaut 6, 12 (par défaut) ou 24 cohortes. plan ne garde que les abonnements d’un forfait (voir plans dans subscriptions_report). metric vaut subscriptions (nombre) ou mrr (montant). view vaut churn (la part qui avait pris fin à ce stade, par défaut) ou retention (la part toujours en cours). Renvoie metric, view, months, plan (le filtre, ou null), currency et cohorts, chacun avec month (YYYY-MM), size (abonnements, ou MRR en unités mineures de la devise du site) et cells, où chaque cellule contient offset (mois écoulés depuis le mois de la cohorte, 0 est le premier), retained (même unité que size) et percent (de 0 à 100, null pour une cohorte vide). Les essais qui n’ont jamais payé ne sont dans aucune cohorte. Pour le MRR, l’ARR et le désabonnement globaux, utilisez subscriptions_report. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/subscriptions/cohorts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/subscriptions.json Indicateurs d’abonnement : MRR, ARR, mouvements de MRR, attrition, rétention des revenus, essais, forfaits et une prévision subscriptions_report

Métriques d’abonnement du site, lues depuis son compte Stripe, Paddle, Lemon Squeezy, Chargebee ou Polar connecté. months vaut 6, 12 (par défaut) ou 24. plan ne garde que les abonnements d’un forfait, nommé comme le liste plans. Les champs monétaires sont des entiers en unités mineures de la devise du site (le currency de la réponse), les autres devises étant converties au taux du jour. Le résultat contient currency, connected (false lorsqu’aucun fournisseur n’est connecté), plan (le filtre de forfait, ou null), connections (une par fournisseur connecté avec provider, account_name, sandbox, status, last_error, last_synced_at et created_at, jamais une clé), skipped_currencies (devises sans taux, dont les montants ne sont pas comptés), totals, series, forecast et plans. totals contient mrr_minor, arr_minor, previous_mrr_minor (le MRR d’il y a 30 jours), active_subscriptions, arpa_minor (null sans abonnements), trialing, trial_conversion_rate (pourcentage d’essais terminés au cours des 90 derniers jours qui ont payé, null lorsqu’aucun n’est terminé), et pour les 30 derniers jours new_subscriptions, new_mrr_minor, expansion_mrr_minor, contraction_mrr_minor, churned_subscriptions, churned_mrr_minor, net_new_mrr_minor, quick_ratio (le MRR nouveau plus l’expansion pour chaque unité de MRR perdu plus la contraction, null lorsque rien n’a été perdu), subscription_churn_rate et mrr_churn_rate (pourcentage, null sans base). Il contient aussi net_revenue_retention et gross_revenue_retention (pourcentage de ce que payaient il y a 12 mois les abonnements alors payants qu’ils paient aujourd’hui, avec et sans montées en gamme, null sans base) et forecast_mrr_minor (le MRR dans 12 mois, null sans prévision). series contient une ligne par mois (month au format YYYY-MM) avec mrr_minor, active_subscriptions, les mêmes champs de mouvement et churn_rate. forecast contient une ligne par mois pour les 12 prochains mois (month, mrr_minor), projetée à partir des trois derniers mois complets, et est vide sans trois mois complets ayant commencé avec du MRR. plans liste jusqu’à 50 forfaits par MRR avec plan (null pour les abonnements dont le fournisseur n’a donné aucun nom de forfait), mrr_minor, active_subscriptions, churned_subscriptions et subscription_churn_rate (30 derniers jours), toujours pour chaque forfait. Un abonnement compte à partir de son premier paiement. Les montées et baisses de gamme sont connues à partir de la première synchronisation, et avant cela les mois passés utilisent le prix qu’avait un abonnement lors de sa première lecture. Pour la rétention par mois de premier paiement, utilisez subscriptions_cohorts. Exige analytics.read.

Permission : analytics.read

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

Aide et commentaires

POST /help.json Envoyer une question ou un commentaire à l’équipe Privatus Analytics support_message_send

Le message est envoyé par e-mail à l’équipe avec les détails de votre compte, de votre espace de travail et de votre offre. La réponse et un accusé de réception sont envoyés à l’e-mail de votre compte. Jusqu’à 10 messages par jour.

Permission : member

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

Alertes

POST /alerts/:id/acknowledge.json Prendre en compte le dernier incident alerts_acknowledge

Marque le dernier incident non acquitté d’une alerte comme vu par l’utilisateur appelant. Cela ne résout pas l’incident et ne met pas l’alerte en sourdine : l’alerte se résout d’elle-même lorsque la condition disparaît. Si l’alerte n’a aucun incident non acquitté, l’appel échoue avec une erreur de validation. Renvoie l’alerte. Utilisez alerts_history pour voir les incidents avec leurs acknowledged_at et acknowledged_by. Ne nécessite que l’accès en lecture aux statistiques, les lecteurs peuvent donc acquitter.

Permission : analytics.read

Exemple
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 Créer une alerte alerts_create

Crée une règle d’alerte qui surveille un site (ou tout l’espace de travail pour le type usage) et avertit les canaux choisis lorsqu’elle se déclenche. Le chemin prend workspace_id. name et kind sont obligatoires. kind détermine ce qu’il faut fournir d’autre. threshold exige site_id, metric (visitors, visits, pageviews, bounce_rate ou conversion), operator (gt, gte, lt ou lte) et threshold, et conversion exige aussi goal_id. anomaly exige site_id et metric (visitors, visits ou pageviews), compare la dernière fenêtre avec la même fenêtre de chacune des 4 semaines précédentes et utilise sensitivity (low, medium ou high). operator lt n’alerte que sur les baisses, gt que sur les pics et vide sur les deux. goal exige site_id, goal_id et threshold (nombre de complétions dans la fenêtre). no_data exige site_id et threshold en heures sans événement (24 par défaut). usage n’exige aucun site et threshold en pourcentage du quota mensuel d’événements (80 par défaut). uptime exige site_id et, facultativement, uptime_check_id (par défaut toutes les vérifications du site). ssl exige site_id et threshold en jours avant l’expiration d’un certificat ou d’un domaine (14 par défaut). vitals exige site_id, metric (lcp, inp, cls, fcp ou ttfb) et threshold en millisecondes (un score pour cls). subscriptions exige site_id, metric (mrr_drop : le MRR a baissé de plus de threshold pour cent au cours des 30 derniers jours, churn_rate ou mrr_churn_rate : l’attrition des 30 derniers jours dépasse threshold pour cent) et threshold (10 par défaut), et il est ignoré tant que le site n’a aucun fournisseur de paiement connecté ou rien à mesurer. window_minutes (60 par défaut, de 5 à 10080) indique jusqu’où chaque évaluation remonte dans le temps. channel_ids proviennent de notification_channels_list et sensitivity vaut medium par défaut. Les alertes sont évaluées automatiquement toutes les 5 minutes. Les seuils bounce_rate et conversion sont des pourcentages de 0 à 100. Renvoie l’alerte créée avec l’état ok.

Permission : content.write

Exemple
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 Supprimer une alerte alerts_delete

Supprime définitivement une règle d’alerte et tout son historique d’incidents. Cette action est irréversible et les notifications s’arrêtent aussitôt. Pour mettre une alerte en pause sans perdre l’historique, utilisez alerts_update avec enabled false ou alerts_mute. L’id (alr_...) provient de alerts_list. Renvoie l’alerte supprimée telle qu’elle était. Exige la permission d’écriture de contenu.

Permission : content.write

Exemple
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 Historique des incidents d’une alerte alerts_history

Liste les incidents d’une alerte, du plus récent au plus ancien, avec pagination. Chaque incident contient triggered_at, resolved_at (null tant qu’il est ouvert), value (la valeur mesurée au déclenchement, dans la même unité que le seuil de l’alerte), message (une description lisible), acknowledged_at et acknowledged_by (nom affiché du membre, ou null). Définissez open à true pour ne voir que les incidents non résolus. Utilisez alerts_acknowledge pour marquer le dernier comme vu et alerts_get pour l’état actuel de la règle.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/alerts/:id/history.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/alerts.json Lister les alertes alerts_list

Liste les règles d’alerte d’un espace de travail (le chemin prend workspace_id), triées par nom, avec pagination. Renvoie un tableau data d’alertes avec la pagination meta. Chaque alerte contient id (alr_...), site_id (pa_..., null pour les alertes usage qui surveillent tout l’espace de travail), name, kind, metric, operator, threshold, window_minutes, sensitivity, goal_id, channel_ids (identifiants nch_...), state (ok ou triggered), enabled, muted_until, last_triggered_at, last_evaluated_at et created_at. Restreignez avec site_id, state (ok ou triggered) ou kind. Utilisez site_alerts_list pour lister les alertes d’un site à partir d’un chemin de site, alerts_get pour une seule alerte et alerts_history pour ses incidents. Un appelant limité à certains sites ne voit jamais les alertes usage.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/alerts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /alerts/:id/mute.json Mettre en sourdine (ou réactiver) les notifications d’une alerte alerts_mute

Coupe les notifications d’une alerte pendant un certain nombre de minutes, alors qu’elle continue d’être évaluée et d’enregistrer des incidents dans son historique. minutes vaut 60 par défaut, le maximum est 43200 (30 jours) et 0 réactive aussitôt les notifications. La réponse est l’alerte avec muted_until fixé à la fin de la mise en sourdine (null lorsqu’elle est réactivée). Utilisez alerts_update avec enabled false pour arrêter complètement l’évaluation et alerts_acknowledge pour marquer un incident comme vu sans mise en sourdine.

Permission : content.write

Exemple
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 Obtenir une alerte alerts_get

Renvoie une règle d’alerte par id (alr_..., provenant de alerts_list ou site_alerts_list). La réponse est l’objet alerte avec id, site_id (null pour les alertes usage), name, kind, metric, operator, threshold, window_minutes, sensitivity, goal_id, channel_ids, state (ok ou triggered), enabled, muted_until, last_triggered_at, last_evaluated_at et created_at. Elle n’inclut pas les incidents : utilisez alerts_history pour cela. threshold est un nombre dont l’unité dépend du type (voir alerts_create). Exige l’accès en lecture aux statistiques.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/alerts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /alerts/:id.json Mettre à jour une alerte alerts_update

Modifie une règle d’alerte existante (id provenant de alerts_list). Seules les entrées que vous envoyez changent, tout le reste garde sa valeur. Les mêmes règles par type que pour alerts_create s’appliquent au résultat : changer kind ou metric peut donc exiger le site_id, goal_id, operator ou threshold correspondant. Envoyez channel_ids pour remplacer toute la liste des canaux de notification, et enabled false pour arrêter l’évaluation sans supprimer. Pour couper les notifications un moment tout en continuant d’enregistrer les incidents, utilisez plutôt alerts_mute. Renvoie l’alerte mise à jour.

Permission : content.write

Exemple
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 Lister les alertes d’un site site_alerts_list

Liste les règles d’alerte d’un site (le chemin prend site_id), triées par nom, avec pagination. Renvoie les mêmes objets alerte et accepte les mêmes filtres state et kind que alerts_list, mais seulement pour ce site : les alertes usage (qui n’ont pas de site) ne sont donc pas incluses. Choisissez-le lorsque vous avez déjà un identifiant de site, et alerts_list lorsque vous voulez toutes les alertes de l’espace de travail. Chaque alerte contient id (alr_...), site_id, name, kind, metric, operator, threshold, window_minutes, sensitivity, goal_id, channel_ids, state (ok ou triggered), enabled, muted_until, last_triggered_at, last_evaluated_at et created_at.

Permission : analytics.read

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

Analytics

GET /sites/:site_id/clicks.json Carte des clics : les éléments les plus cliqués du site, ou d’une page avec la part de ses visites qui ont cliqué sur chacun clicks_list

Les clics par élément, issus du module de clics du traceur. Un élément est un court sélecteur CSS (balise, id et jusqu’à deux classes, quatre niveaux au plus), ou [data-privatus-click="name"] quand le site l’a nommé. Passez path (il commence par une barre oblique, tel qu’il est stocké) pour une seule page. Les éléments sont alors {selector, clicks, visits, visit_share}, page_visits est le nombre de visites qui ont vu la page, et visit_share est le pourcentage d’entre elles (de 0 à 100) qui ont cliqué sur l’élément. Sans path, les éléments sont {path, selector, clicks, visits} pour tout le site. visits compte les visites qui ont cliqué au moins une fois. Renvoie period, path, page_visits et elements, les plus cliqués en premier. Aucun texte d’élément, aucune coordonnée et aucun mouvement de souris ne sont jamais collectés. Utilisez pages_detail pour le reste d’une page.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/clicks.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/overview.json Vue d’ensemble du site : métriques, séries de graphique, principaux panneaux, visiteurs en direct et notes stats_overview

Un seul appel qui renvoie tout ce qu’affiche la page de vue d’ensemble du site : utilisez-le pour répondre à une question large comme « comment va ce site », plutôt que d’appeler plusieurs outils. Renvoie period, metrics (visitors, visits, pageviews, views_per_visit, bounce_rate, visit_duration, revenue), interval, series (une entrée par intervalle de temps), panels, notes et live_visitors. Avec compare, il ajoute comparison_period, comparison, change et comparison_series, comme dans stats_aggregate et stats_timeseries. Les unités sont celles de ces outils : bounce_rate est un pourcentage de 0 à 100, visit_duration est le nombre médian de millisecondes d’engagement, revenue est un entier en unités mineures (centimes). panels est un objet indexé par nom de dimension, chacun contenant les 10 premières lignes avec leur part, dans la même forme de ligne que stats_breakdown pour cette dimension. Par défaut, il renvoie channel, referrer, page, entry_page, country, device, browser, os, utm_campaign, event et goal. Envoyez panels pour choisir d’autres dimensions (n’importe quel nom de dimension sauf les clés prop). notes liste les annotations de la période sous la forme {id, date, end_date, title, url, color}. live_visitors compte les visiteurs des 5 dernières minutes. Pour plus de 10 lignes d’une dimension, utilisez stats_breakdown, et pour un seul chiffre, stats_aggregate. Accepte les entrées communes period, compare, filters et segment.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/overview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/experiments/external.json Rapport d’expérience : taux de conversion par variante, gain par rapport au contrôle et significativité (test z de deux proportions) experiments_report

Rapporte un test A/B à partir des données d’événements. Les visites sont attribuées à la variante trouvée dans une propriété d’événement (la première valeur vue dans la visite, par exemple la propriété variant avec les valeurs control et b), et une conversion est une visite qui a atteint un objectif. Les entrées obligatoires sont property (clé en minuscules, 64 caractères maximum) et goal_id (un objectif actif, provenant de goals_list). Renvoie period, property, goal {id, name}, control, confidence (0.95) et variants. Chaque variante contient visits, conversions, conversion_rate (pourcentage, de 0 à 100), control (true pour la référence), uplift (variation en pourcentage du taux de conversion par rapport au contrôle, null pour le contrôle ou lorsque le taux du contrôle est 0), z, p_value et significant (true lorsque p_value est inférieur à 0.05, avec un test z à deux proportions). Le contrôle est la variante que vous passez dans control, sinon celle nommée control, sinon la variante avec le plus de visites. 20 variantes au maximum, les plus fréquentées d’abord. Assurez-vous d’abord que le site envoie la variante comme propriété d’événement. Accepte les entrées communes period et filters. Pour un simple taux de conversion d’objectif, utilisez goals_get. Exige le forfait Business ou Enterprise (sinon 402 plan_limit).

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/experiments/external.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/insights.json Changements notables par rapport à la période précédente, en langage naturel (plus fortes variations, évolutions de conversion des objectifs) insights_get

Les changements notables d’un site en langage clair, comparés à la période précédente de même durée. Renvoie period, comparison_period et insights. La période couvre des jours entiers jusqu’à hier, choisie avec period (7d, 14d, 28d ou 30d, 7d par défaut). Chaque insight contient dimension (total, channel, page, country ou goal), metric, value, previous, current, change et sentence. change est un pourcentage pour les compteurs et des points de pourcentage pour le taux de conversion d’un objectif, et sentence est une phrase anglaise prête à lire. Il inclut le total des visiteurs et des pages vues, les deux plus fortes variations par dimension (changements de 20 % ou plus avec au moins 10 visites ou vues) et les objectifs dont le taux de conversion a varié d’un demi-point ou plus. Les plus importants d’abord, limités par limit (8 par défaut, 20 maximum). Les résultats sont conservés pour la journée. Pour des chiffres exacts, utilisez stats_aggregate et stats_breakdown, et utilisez cet outil pour trouver ce qui a changé.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/insights.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/journeys.json Parcours : les 3 principaux chemins en 3 étapes après une page (ou toute entrée), ou avant une page ou un objectif journeys_explore

Explore les chemins de trois pages les plus courants au sein des visites. En mode forward (par défaut), il montre les chemins après une page de départ donnée dans path, ou après n’importe quelle entrée lorsque path est vide. En mode reverse, il montre les chemins menant à une page de fin (path) ou à un objectif (goal_id, qui passe automatiquement en reverse). reverse exige path ou goal_id. path doit commencer par une barre oblique. Renvoie period, mode, path, goal, sampled, sample_rate (pourcentage), total_visits et le graphe de chemins avec nodes et links par étape, limité à limit pages par étape (de 2 à 12, 6 par défaut). Au-dessus de 100 000 visites, les données sont échantillonnées. Les filtres de page sont ignorés, car ils couperaient les chemins. Les chemins sont construits par visite, puisqu’aucun identifiant de visiteur n’est stocké. Accepte les entrées communes period, filters et segment. Pour les pages voisines d’une page, utilisez pages_detail, et pour la conversion par étape, funnels_get.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/journeys.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/pages/detail.json Détail d’une page : métriques, pages précédentes et suivantes, sources, Web Vitals, événements et carte des clics pour un chemin pages_detail

Une page en détail. Passez path (il doit commencer par une barre oblique, par exemple /pricing), exactement tel qu’il est stocké (sans chaîne de requête ni hôte). Renvoie period, path, url, metrics, previous_pages, next_pages, sources, vitals, events, clicks, goals et notes. metrics contient visitors, visits, pageviews, entrances, exits, entry_rate, exit_rate et bounce_rate (pourcentages, de 0 à 100), time_on_page (millisecondes médianes) et scroll_depth (pourcentage médian), ces deux derniers étant null sans données d’engagement. previous_pages et next_pages sont les pages vues avant et après dans la même visite, sous la forme {value, count, share}, avec (entrance) et (exit) comme valeurs spéciales. sources contient les principaux canaux et référents des visites qui sont entrées par cette page. vitals contient les valeurs p75 par Web Vital avec leurs évaluations. events sont les événements personnalisés déclenchés sur la page, clicks sont les sélecteurs d’éléments les plus cliqués, goals sont les objectifs atteints sur la page et notes sont les annotations qui la mentionnent. Utilisez stats_breakdown avec la dimension page pour classer les pages et referrers_detail pour un site référent.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/pages/detail.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/referrers.json Référents : les sites qui renvoient vers ce site, avec visiteurs, engagement, type de trafic et nombre de pages avec lien referrers_list

Classe les sites externes qui ont envoyé des visiteurs, avec ce que chacun a envoyé. Les visites directes (sans référent) sont exclues. Renvoie period, summary, channels, page, limit, has_more et rows. summary contient visitors, visits, pageviews, bounce_rate (pourcentage), visit_duration (millisecondes d’engagement médianes), revenue (unités mineures, centimes), sites (nombre de sites référents) et share (pourcentage de toutes les visites provenant de référents). channels montre les types de trafic sous la forme {value, visitors, visits}. Chaque ligne contient value (l’hôte du référent), visitors, visits, pageviews, bounce_rate, visit_duration, revenue, channel (son canal habituel), linking_pages (le nombre de pages différentes de ce site qui pointent ici) et share (pourcentage des visiteurs référés). Triez avec sort (visitors, visits, pageviews ou revenue, visitors par défaut), restreignez avec search (texte contenu dans l’hôte) et parcourez les pages avec page et limit (100 maximum) tant que has_more vaut true. Utilisez referrers_detail pour un seul site. Accepte les entrées communes period, compare, filters et segment.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/referrers.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/referrers/detail.json Détail d’un référent : indicateurs et tendance d’un site référent, ses pages avec lien, pages d’entrée, pays, appareils, campagnes et conversions referrers_detail

Un site référent en détail. Passez referrer comme l’hôte sans www et sans chemin (par exemple news.ycombinator.com), la même valeur que dans referrers_list. Renvoie period, referrer, url, channel (son canal le plus courant), metrics, share (pourcentage de toutes les visites), interval, series (le trafic dans le temps), linking_pages, landing_pages, channels, countries, devices, campaigns, goals et, avec compare, comparison, change et comparison_series. metrics et series utilisent les mêmes champs et unités que stats_aggregate et stats_timeseries. linking_pages sont les pages du référent qui ont envoyé des visiteurs, sous forme de lignes avec path, url, visitors et share (les chaînes de requête ne sont jamais stockées). landing_pages sont les pages où ces visiteurs sont entrés. channels, countries, devices et campaigns sont les valeurs principales avec leurs métriques, et goals liste les objectifs qu’ils ont atteints avec conversions et conversion_rate. Utilisez referrers_list pour classer les sites référents et stats_breakdown avec la dimension referrer pour une simple liste.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/referrers/detail.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/stats/aggregate.json Métriques principales d’une période (avec comparaison) stats_aggregate

Les chiffres clés d’une période, sous la forme d’un seul objet. Renvoie period {from, to} et metrics {visitors, visits, pageviews, views_per_visit, bounce_rate, visit_duration, revenue}. Avec compare, il renvoie aussi comparison_period, comparison (les mêmes métriques pour l’autre période) et change (variation en pourcentage par métrique, null lorsque la valeur précédente était 0). Unités : bounce_rate est un pourcentage de 0 à 100 (10.9 signifie 10,9 %). visit_duration est le temps d’engagement médian d’une visite en millisecondes. revenue est un entier en unités mineures (centimes) de la devise du site. views_per_visit est un nombre décimal. Les visiteurs sont comptés par jour, car aucun identifiant de visiteur persistant n’est stocké : une personne qui revient un autre jour est donc comptée à nouveau. Utilisez-le pour les totaux et l’évolution d’une période à l’autre. Utilisez stats_timeseries pour un graphique dans le temps, stats_breakdown pour les valeurs principales d’une dimension et stats_overview pour tout en un seul appel. Restreignez chacun avec filters (voir filters pour les noms de dimensions et les opérateurs).

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/stats/aggregate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/breakdown/:dimension.json Principales valeurs d’une dimension (pages, sources, pays…) stats_breakdown

Les valeurs principales d’une dimension avec leurs métriques, les plus importantes d’abord, avec pagination. La dimension est la dernière partie du chemin et doit être un nom exact tiré de sa description (par exemple country, page, channel, utm_campaign, prop:plan). Renvoie period, dimension, label, page, limit, has_more et rows. Demandez la page suivante tant que has_more vaut true. Chaque ligne contient value et share (pourcentage du total de la période). Les autres champs d’une ligne dépendent de la dimension. Les dimensions de visite (channel, referrer, referrer_url, utm_*, ref, hostname, country, language, device, browser, browser_version, os, os_version, screen, entry_page, exit_page, interaction, bot_score) donnent visitors, visits, pageviews, views_per_visit, bounce_rate, visit_duration et revenue. page donne pageviews, visits, time_on_page (millisecondes) et scroll_depth (pourcentage), sans visitors. event et prop:<key> donnent completions, visits, revenue et conversion_rate. goal donne goal_id, completions, conversions, conversion_rate et revenue. Unités : bounce_rate et conversion_rate sont des pourcentages (0 à 100), les durées sont en millisecondes, revenue est en unités mineures (centimes). Une dimension incorrecte renvoie une erreur 422 qui liste les noms valides. Utilisez search pour chercher une valeur dans toutes les lignes, et filters pour restreindre d’abord les données (par exemple les pages visitées depuis un pays). Pour une page ou un référent en détail, utilisez pages_detail ou referrers_detail. Les dimensions interaction et bot_score exigent le forfait Business ou Enterprise : en répartition, elles répondent 402 plan_limit sur les autres forfaits, et un filtre qui en utilise une est ignoré.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/breakdown/:dimension.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/stats/timeseries.json Métriques par intervalle de temps pour les graphiques stats_timeseries

Les métriques par intervalle de temps, pour les graphiques et les tendances. Renvoie period, interval (l’intervalle réellement utilisé) et series, une liste de {date, visitors, visits, pageviews, views_per_visit, bounce_rate, visit_duration, revenue}, une entrée par intervalle avec date comme début de l’intervalle au format ISO 8601. Avec compare, il renvoie aussi comparison_series pour l’autre période, intervalle par intervalle. Les unités sont les mêmes que pour stats_aggregate : bounce_rate est un pourcentage (0 à 100), visit_duration est le nombre médian de millisecondes d’engagement, revenue est en unités mineures (centimes). interval vaut auto par défaut, ce qui choisit minute, hour, day, week ou month selon la période. Définissez-le pour forcer une taille d’intervalle. Utilisez stats_aggregate pour un seul total et stats_breakdown pour répartir selon une dimension comme country ou page.

Permission : analytics.read

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

Analytique des témoignages

GET /sites/:site_id/testimonials/analytics/breakdown.json Répartir une métrique de témoignages par formulaire, demande, widget, mur, témoignage, canal, page, pays ou source testimonial_stats_breakdown

Renvoie des lignes, de la plus grande à la plus petite, chacune avec key, label, value et share (un pourcentage du total), ou numerator et denominator pour un taux. Une ligne d’un enregistrement (formulaire, demande, widget, mur, témoignage) contient son id. Chaque dimension n’accepte que certaines métriques : formulaire et canal prennent les métriques de formulaire, demande les métriques de demande, widget et mur leurs propres vues, clics, taux de clic et video_plays, témoignage prend testimonial_views et video_plays, page et pays prennent les métriques de vues et de clics, et source prend new_testimonials. Une paire qui ne convient pas répond par 422 et nomme les métriques qui conviennent.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/analytics/breakdown.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/analytics/export.json Mettre en file un fichier d’une section de l’analytique des témoignages testimonial_stats_export

Crée un export de type testimonial_stats pour la période donnée et le renvoie en file d’attente. Interrogez exports_get jusqu’à ce que status soit complete, puis exports_download. section choisit les lignes : days (une ligne par jour, semaine ou mois avec chaque métrique), forms, channels, requests, widgets, walls, pages, testimonials, sources ou countries. Le fichier est conservé 7 jours. Répond par 422 in_progress quand trop d’exports sont déjà en file.

Permission : analytics.export

Exemple
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 Lire l’analytique des témoignages d’un site en un seul appel testimonial_stats_overview

Renvoie tout ce que l’onglet Analytique sous Témoignages affiche pour une période : cards (form_views, submissions, completion_rate, answer_rate, widget_views, wall_views, chacune avec previous et change quand compare est défini), chart (une métrique dans le temps), une ligne par formulaire, demande, widget et mur, channels (comment les formulaires ont été ouverts), pages (où les widgets et les murs ont été vus), top_testimonials, new_testimonials (par source et par statut actuel) et countries. Les taux sont des pourcentages de 0 à 100 et valent null quand il n’y a rien à diviser. blank vaut true tant que le site n’a jamais rien compté, et recorded liste les métriques qu’il a déjà comptées. Ce sont des totaux quotidiens de la fonctionnalité Témoignages, pas de l’analytique web : utilisez stats_overview pour les visiteurs et les pages vues.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/analytics.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/analytics/timeseries.json Lire une métrique de témoignages par jour, par semaine ou par mois testimonial_stats_timeseries

Renvoie des points avec date, to, value et, quand compare est défini, previous et previous_date, plus total, previous_total et change. Un taux (completion_rate, answer_rate, widget_click_rate, wall_click_rate) est calculé à partir des totaux de chaque intervalle et vaut null pour un intervalle où il n’y a rien à diviser. new_testimonials est compté à partir des témoignages eux-mêmes selon le jour où chacun a été ajouté.

Permission : analytics.read

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

Application mobile

GET /workspaces/:workspace_id/app.json Obtenir ce dont l'application mobile a besoin pour ouvrir un espace de travail mobile_bootstraps_get

Renvoie, pour un espace de travail (le chemin prend workspace_id), le rôle et les permissions de l'appelant, features (les rapports restreints inclus dans le forfait : traffic_quality, bot_detection, external_experiments, campaign_costs, status_pages, traffic_rules, experiment_advanced (les paramètres avancés d'une expérience) et survey_ai_themes (les thèmes des réponses écrites d'un sondage) sous forme de true ou false, et retention_months sous forme de nombre de mois ou null pour aucune limite), sites_count (les sites que l'appelant peut ouvrir) et min_app_version (la plus ancienne version de l'application mobile que l'API prend encore en charge). L'application mobile la lit une seule fois à l'ouverture d'un espace de travail, afin d'afficher un rapport absent du forfait comme non inclus au lieu de le demander. Nécessite analytics.read.

Permission : analytics.read · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/app.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /account/device.json Arrêter les notifications push vers l'application mobile mobile_devices_delete

Supprime l'enregistrement push de la connexion à l'application mobile qui appelle, de sorte que l'appareil ne reçoit plus de push. La connexion elle-même reste, et l'application peut s'enregistrer de nouveau. La déconnexion (POST /oauth/revoke avec le jeton de rafraîchissement) le supprime aussi. Seul un jeton de l'application mobile peut l'appeler.

Permission : member · HTTP uniquement (pas un outil MCP)

Exemple
curl -X DELETE https://privatusanalytics.com/account/device.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /account/device.json Obtenir l'enregistrement push de l'application mobile mobile_devices_get

Renvoie l'appareil de la connexion à l'application mobile qui appelle : registered (false tant que l'application n'a pas enregistré de jeton push), platform, locale, timezone, app_version, kinds (tous les types de push existants), muted_kinds et muted_site_ids (ce que la personne a désactivé). Seul un jeton de l'application mobile peut l'appeler.

Permission : member · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/account/device.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /account/device.json Enregistrer l'application mobile pour les notifications push mobile_devices_update

Enregistre l'appareil de la connexion à l'application mobile qui appelle pour les notifications push, ou modifie ce qu'il reçoit. Seules les entrées envoyées changent. Le premier appel nécessite platform et push_token. Un appareil reçoit un push pour uptime (un contrôle est tombé ou revenu), alert (une alerte s'est déclenchée ou résolue), site_audit (un audit de site est terminé), experiment (une expérience a un résultat ou est terminée) et usage (le quota mensuel est presque ou entièrement utilisé), pour chaque site que son membre peut ouvrir, sur tous les forfaits. muted_kinds et muted_site_ids désactivent des types et des sites, et chacun remplace sa liste entière. Enregistrer un jeton push détenu par une autre connexion de l'application le transfère à celle-ci. Seul un jeton de l'application mobile peut l'appeler. C'est l'une des deux écritures qu'un tel jeton peut effectuer.

Permission : member · HTTP uniquement (pas un outil MCP)

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

Assistant

POST /sites/:site_id/ask.json Poser une question dans une nouvelle conversation (compte dans la limite mensuelle de questions IA) assistant_ask

Démarre une nouvelle conversation Ask sur un site et répond à sa première question à partir des statistiques de ce site. Utilisez-le pour une question en langage clair sur un site. Utilisez assistant_ask_followup pour poursuivre une conversation existante et les outils de statistiques lorsque vous connaissez déjà la requête exacte. La réponse est produite par un modèle d’IA qui exécute lui-même des requêtes d’analyse en lecture seule, l’appel peut donc prendre plusieurs secondes. Il compte pour une question IA dans le quota mensuel de l’espace de travail (5 en Free, 20 en Pro, 100 en Business) et échoue avec une erreur de limite lorsque le quota est épuisé. La question peut contenir 2 000 caractères au maximum. Les conversations sont privées pour le membre qui les a démarrées et sont supprimées 30 jours après leur dernier message. Renvoie la conversation (id, site_id, title tiré de la question, created_at, updated_at, expires_at) avec un tableau messages. Chaque message contient role (user ou assistant), content (le texte de la réponse), queries (les requêtes d’analyse exactes exécutées par l’assistant), chart (définition de graphique, peut être null), goal_draft (objectif suggéré, peut être null), le nombre de jetons et created_at. Si la réponse échoue, la conversation est supprimée et aucune question n’est comptée. Exige analytics.read.

Permission : analytics.read

Exemple
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 Supprimer une conversation Ask et ses messages assistant_conversations_delete

Supprime définitivement une conversation Ask et tous ses messages, immédiatement. Cette action est irréversible. Récupérez l’id de la conversation dans assistant_conversations_list. Seul le membre qui a démarré une conversation peut la voir et la supprimer. Exige analytics.read et un site_id. Renvoie le résumé de la conversation supprimée (id, site_id, title, horodatages). Cela ne rembourse pas les questions IA déjà comptées pour le mois.

Permission : analytics.read

Exemple
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 Lister vos conversations Ask pour un site assistant_conversations_list

Liste les conversations Ask du membre connecté sur un site, les plus récemment mises à jour d’abord. Les conversations des autres membres ne sont jamais affichées. Utilisez-le pour trouver un id de conversation pour assistant_conversations_get, assistant_ask_followup ou assistant_conversations_delete. Chaque élément contient id, site_id, title (la première question, tronquée à 80 caractères), created_at, updated_at et expires_at, mais aucun message. Paginé avec page et per_page (maximum 100). Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/ask.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/ask/:id.json Une conversation Ask : questions, réponses, requêtes sous-jacentes et graphiques assistant_conversations_get

Renvoie une conversation Ask avec tout l’historique de ses messages. Récupérez l’id de la conversation dans assistant_conversations_list ou dans le résultat de assistant_ask. Les champs sont id, site_id, title, created_at, updated_at, expires_at (30 jours après le dernier message, puis la conversation est supprimée) et messages. Chaque message contient role (user ou assistant), content, queries (les requêtes d’analyse exécutées par l’assistant), chart (peut être null), goal_draft (peut être null) ainsi que input_tokens et output_tokens (entiers, peuvent être null). Seul le membre qui a démarré la conversation peut la lire. Exige analytics.read.

Permission : analytics.read

Exemple
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 Poser une question complémentaire dans une conversation (compte dans la limite mensuelle de questions IA). Renvoie la réponse. assistant_ask_followup

Pose une question de suivi dans une conversation Ask existante, de sorte que l’assistant garde les questions et réponses précédentes comme contexte. Utilisez plutôt assistant_ask pour démarrer une nouvelle conversation. Récupérez conversation_id dans assistant_conversations_list. L’appel peut prendre plusieurs secondes, car l’assistant exécute des requêtes d’analyse en lecture seule. Chaque question compte dans le quota mensuel de questions IA de l’espace de travail (5 en Free, 20 en Pro, 100 en Business) et échoue avec une erreur de limite lorsqu’il est épuisé. La question peut contenir 2 000 caractères au maximum. Renvoie uniquement le nouveau message de l’assistant (pas toute la conversation) avec id, role, content (la réponse), queries (les requêtes exactes exécutées), chart (peut être null), goal_draft (peut être null), input_tokens, output_tokens et created_at. Exige analytics.read et ne fonctionne que sur vos propres conversations.

Permission : analytics.read

Exemple
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 '{…}'

Audit du site

GET /sites/:site_id/audit/issues.json Lister les problèmes d’un audit du site, une ligne par contrôle site_audit_issues_list

Liste les problèmes d’un audit, une ligne par contrôle qui a signalé quelque chose, les pires d’abord (erreurs, puis avertissements, puis avis, chacun selon les URL concernées). Chaque ligne contient check_key (à utiliser avec site_audit_issues_get et les outils de mise en sourdine), title, category, severity (error, warning ou notice), affected (URL signalées, hors celles mises en sourdine), added et fixed (changements depuis l’audit précédent) et pageviews (visites des pages concernées dans les 30 jours précédant l’audit). Par défaut, le dernier audit terminé, ou passez audit_id. Filtrez avec severity, category et new_only (uniquement les contrôles avec des URL nouvelles depuis l’audit précédent). Paginé avec page et per_page (100 maximum, 50 par défaut). Pour voir quelles URL un contrôle a signalées, utilisez site_audit_issues_get. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/audit/issues.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/audit/issues/:check_key.json Obtenir un contrôle de l’audit du site : pourquoi il compte, comment le corriger et les URL concernées site_audit_issues_get

Détails d’un contrôle d’un audit, par check_key provenant de site_audit_issues_list (par exemple title_missing). Renvoie audit_id, issue (la même ligne que dans la liste), why (ce que signifie le problème), fix (comment le corriger), muted (true si tout le contrôle est mis en sourdine pour le site) et urls, les URL signalées avec page_id (à utiliser avec site_audit_pages_get), url, pageviews, detail (faits supplémentaires sur la constatation, peut être vide), is_new et muted. sort vaut pageviews (par défaut, les plus fréquentées d’abord) ou url. Paginé avec page et per_page (100 maximum, 25 par défaut). Par défaut, le dernier audit terminé, ou passez audit_id. Les URL mises en sourdine sont triées en dernier. Exige analytics.read.

Permission : analytics.read

Exemple
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 Masquer une vérification de l’audit du site sur plusieurs URL, ou plusieurs vérifications entières, en un seul appel site_audit_mutes_bulk

Met en sourdine de nombreuses constatations en une seule requête, tout ou rien. Utilisez l’une de deux formes. Soit envoyez check_key plus urls (jusqu’à 100 URL) pour mettre un contrôle en sourdine sur plusieurs pages, soit envoyez check_keys (jusqu’à 100) pour mettre en sourdine des contrôles entiers pour le site. Ne mélangez pas urls avec check_keys. Un contrôle inconnu ou une URL invalide fait échouer toute la requête et ne met rien en sourdine. Les éléments déjà en sourdine sont renvoyés tels quels. Les décomptes et le score du dernier audit sont actualisés une seule fois à la fin. Renvoie la liste des mises en sourdine. Annulez chacune avec site_audit_mutes_delete. Exige content.write.

Permission : content.write

Exemple
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 Masquer un contrôle de l’audit du site, pour tout le site ou pour une URL site_audit_mutes_create

Met en sourdine un contrôle pour le site, ou pour une seule URL. check_key provient de site_audit_issues_list. Omettez url pour mettre le contrôle en sourdine partout, ou passez une URL complète (comme https://example.com/old) pour le mettre en sourdine sur cette page uniquement, l’URL étant normalisée comme le fait le robot d’exploration. Les décomptes et le score du dernier audit se mettent à jour aussitôt. Mettre deux fois la même chose en sourdine renvoie la mise en sourdine existante au lieu d’une erreur. Pour en mettre beaucoup à la fois, utilisez site_audit_mutes_bulk, et pour annuler, site_audit_mutes_delete. Exige content.write.

Permission : content.write

Exemple
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 Réafficher un contrôle de l’audit du site site_audit_mutes_delete

Retire une mise en sourdine, retrouvée par son id dans site_audit_mutes_list, pour que le contrôle ou l’URL compte de nouveau dans le score de l’audit. Le dernier audit est recompté immédiatement. Cela ne retire que la mise en sourdine et ne supprime aucune donnée d’audit. Renvoie la mise en sourdine retirée. Exige content.write.

Permission : content.write

Exemple
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 Lister les contrôles qu’un site a masqués site_audit_mutes_list

Liste les contrôles mis en sourdine pour le site, du plus récent au plus ancien. Une mise en sourdine masque un contrôle soit pour tout le site (url vaut null), soit pour une URL : ces constatations restent donc hors des décomptes et du score, même si les audits les enregistrent toujours. Chaque ligne contient id (un id de mise en sourdine, à utiliser avec site_audit_mutes_delete), site_id, check_key, title, url (null pour une mise en sourdine sur tout le site), muted_by (le nom du membre, null si inconnu) et created_at. Filtrez avec check_key. Paginé avec page et per_page (100 maximum). Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/audit/mutes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/audit/notifications.json Activer ou désactiver votre e-mail récapitulatif d’audit pour un site site_audit_notifications_update

Active ou désactive l’e-mail récapitulatif hebdomadaire de l’audit pour le membre appelant sur un site. C’est une préférence personnelle qui n’affecte pas les autres membres. enabled à true envoie au membre le récapitulatif après les audits de ce site, false l’arrête. Renvoie site_id, enabled et all_sites_enabled (false lorsque le membre a désactivé les e-mails d’audit pour tous les sites dans les réglages de son compte, ce qui l’emporte sur celui-ci). Tout membre avec analytics.read peut modifier son propre réglage.

Permission : analytics.read

Exemple
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 Lister et filtrer les pages d’un audit du site site_audit_pages_list

L’explorateur de pages, qui liste les URL d’un audit (le dernier terminé par défaut, ou audit_id). kind vaut page (par défaut, documents HTML), resource (images, scripts, feuilles de style) ou external (liens vers d’autres sites). Filtrez par state (queued, fetched, skipped, blocked, failed), status_class (2xx, 3xx, 4xx ou 5xx), indexable, in_sitemap, has_issues (en comptant uniquement les problèmes non mis en sourdine), depth (clics depuis la page de départ) et query (texte dans l’URL ou le titre). sort vaut pageviews (par défaut), inlinks, depth, response_ms (les plus lentes d’abord) ou word_count (les moins fournies d’abord). Chaque ligne contient id (un UUID pour site_audit_pages_get), url, path, kind, state, status, depth, indexable, indexability_reason, title, word_count, response_ms, cache_status, inlinks, pageviews, in_sitemap et issues (nombre). Paginé avec page et per_page (100 maximum). Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/audit/pages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/audit/pages/:id.json Obtenir une page auditée : ses métadonnées, problèmes, liens entrants et liens sortants site_audit_pages_get

Tout ce que l’audit a stocké sur une URL, par id (un UUID provenant de site_audit_pages_list ou des urls de site_audit_issues_get). Renvoie id, audit_id, page (url, status, redirect_to, content_type, bytes, response_ms, title, meta_description, h1, canonical, robots_meta, indexable et indexability_reason, word_count, lang, hreflang, schema_types, balises sociales, images_count, images_missing_alt, nombres de liens, link_score, in_sitemap, has_tracker, pageviews et search_clicks, fetched_at et plus), redirect_target_id (la page vers laquelle elle redirige dans l’audit, ou null), issues (check_key, title, category, severity, detail, is_new, muted), et inlinks et outlinks (jusqu’à 100 chacun avec page_id, url, status, kind, anchor, nofollow, count). Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/audit/pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/audit/settings.json Obtenir les réglages d’audit d’un site site_audit_settings_get

Renvoie les réglages d’audit du site. Les champs sont site_id, enabled (audits programmés activés ou non, activés par défaut), include_subdomains, check_external_links, exclude_paths, ignored_params, extra_start_urls, next_run_at (quand le prochain audit programmé est dû, null s’il n’y en a pas), page_limit (pages par audit avec le forfait actuel, null lorsque illimité) et interval_days (jours entre les audits programmés avec le forfait). Un site qui n’a jamais modifié ses réglages renvoie les valeurs par défaut. Modifiez-les avec site_audit_settings_update. Exige sites.manage.

Permission : sites.manage

Exemple
curl https://privatusanalytics.com/sites/:site_id/audit/settings.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/audit/settings.json Modifier les réglages d’audit d’un site site_audit_settings_update

Modifie la façon dont le site est audité. Seules les entrées que vous envoyez changent. enabled active ou désactive les audits programmés et manuels (l’activer programme le prochain audit à un intervalle du forfait d’ici). include_subdomains et check_external_links sont des booléens. Les trois listes remplacent la liste stockée, elles ne sont pas fusionnées : envoyez donc la liste complète. exclude_paths sont des préfixes de chemin que le robot d’exploration ignore et chacun doit commencer par une barre oblique (jusqu’à 50). ignored_params sont des noms de paramètres de requête qui ne créent jamais une page différente, comme utm_source ou sessionid (jusqu’à 50, lettres, chiffres, point, tiret, tiret bas). extra_start_urls sont des URL http ou https complètes à explorer en plus de la page d’accueil (jusqu’à 20). Une liste peut aussi être envoyée sous forme de texte avec une entrée par ligne. Renvoie les réglages mis à jour. Exige sites.manage.

Permission : sites.manage

Exemple
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 Se désabonner des e-mails récapitulatifs d’audit avec le jeton d’un e-mail site_audit_unsubscribes_create

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/audit/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/audit/cancel.json Annuler l’audit du site en cours site_audit_cancel

Arrête l’audit en cours ou en file d’attente pour le site. L’audit est marqué comme canceled et rien de l’exploration inachevée n’est rapporté. Un audit annulé ne consomme pas le quota mensuel du forfait Free. Échoue avec une erreur de validation si aucun audit n’est actif. Renvoie l’audit annulé. Exige content.write.

Permission : content.write

Exemple
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 Comparer deux audits du site : URL ajoutées et corrigées par contrôle site_audit_compare

Compare deux audits du site, contrôle par contrôle. audit_id est l’audit le plus récent et base_id le plus ancien. Les deux ont des valeurs par défaut sensées (le dernier audit terminé comparé à l’audit terminé qui le précède), et l’outil les inverse si vous les passez dans le mauvais ordre. Renvoie audit et base (chacun un résumé d’audit, base null s’il n’y a rien avant) et checks, un objet par contrôle dont les URL ont changé, avec check_key, title, category, severity, base_affected, affected, added et fixed (nombres d’URL), triés avec les erreurs d’abord. Les contrôles sans changement sont omis. Pour deux audits consécutifs, added et fixed sont exacts, pour des audits plus éloignés ils représentent la variation nette. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/audit/compare.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/audit.json Lancer un audit du site maintenant site_audit_run

Démarre maintenant une nouvelle exploration et un audit SEO du site. Il explore les pages publiques du site en arrière-plan : il répond donc aussitôt avec le nouvel audit au statut queued. Interrogez site_audit_get (champ live) ou site_audit_history jusqu’à ce que le statut soit complete. Refusé avec une erreur de validation lorsque l’audit est désactivé dans site_audit_settings_update, lorsqu’un autre audit est déjà en file d’attente ou en cours, lorsqu’un audit manuel a été lancé au cours des dernières 24 heures, et avec le forfait Free lorsqu’un audit a été exécuté au cours des 30 derniers jours (les audits échoués et annulés ne comptent pas). Les sites non vérifiés sans événements sont aussi limités à un audit par jour et par domaine. Les pages explorées sont plafonnées par le forfait (Free 100, Pro 1 000, Business 10 000). Vérifiez d’abord can_run dans site_audit_get. Exige content.write.

Permission : content.write

Exemple
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 Lister les audits d’un site, du plus récent au plus ancien site_audit_history

Liste les audits du site, du plus récent au plus ancien, chacun avec id (aud_...), status (queued, running, analyzing, complete, partial, failed ou canceled), trigger (first, scheduled ou manual), score (de 0 à 100, null tant qu’il n’est pas terminé), score_band, page_limit, pages_crawled, urls_discovered, errors, warnings, notices, new_issues, fixed_issues, failure (la raison en cas d’échec, sinon null) et les horodatages. Filtrez avec status. Paginé avec page et per_page (100 maximum). Utilisez les ids avec site_audit_get, site_audit_compare et les outils de problèmes et de pages. Pour l’état actuel d’un audit, utilisez site_audit_get. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/audit/history.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/audit.json Obtenir la vue d’ensemble de l’audit du site : score, totaux, principaux problèmes par trafic et audit en cours site_audit_get

La vue d’ensemble de l’audit SEO du site, le meilleur premier appel pour les questions d’audit. Par défaut, il décrit le dernier audit terminé, ou passez audit_id (aud_..., provenant de site_audit_history) pour un audit plus ancien. Le résultat contient audit (l’audit terminé avec score de 0 à 100, score_band, score_delta, nombres d’erreurs, d’avertissements et d’avis, pages_crawled, page_limit, capped, summary et détails robots, ou null si aucun n’est terminé), live (l’audit en cours, ou null), enabled et next_run_at (le calendrier), can_run avec run_blocked (live, disabled ou too_soon) et run_allowed_at (quand site_audit_run est de nouveau autorisé), changes (nombres d’URL ajoutées et corrigées par gravité), trend (jusqu’à 30 scores récents sous la forme id, finished_at, score), top_issues (jusqu’à 10 contrôles classés par gravité puis par pages vues des pages concernées) et email_enabled (votre propre préférence d’e-mail récapitulatif). Poursuivez avec site_audit_issues_list pour chaque problème et site_audit_pages_list pour les URL. Exige analytics.read.

Permission : analytics.read

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

Campagnes

POST /sites/:site_id/campaigns/costs.json Définir les dépenses d’une campagne pour un mois campaign_costs_create

Enregistre les dépenses publicitaires d’une campagne pour un mois, afin que campaigns_list puisse afficher le coût par acquisition et le retour sur dépenses publicitaires. Si une entrée existe déjà pour la même campagne et le même mois, elle est remplacée et non dupliquée : vous pouvez donc aussi appeler cet outil deux fois sans risque. campaign est la valeur utm_campaign telle qu’elle apparaît dans vos liens suivis, month est au format YYYY-MM (une date complète comme 2026-09-15 est acceptée et ramenée au premier du mois) et amount est en unités majeures sous forme de nombre (1250.50, pas en unités mineures). currency est un code ISO à 3 lettres facultatif et vaut par défaut la devise du site. La réponse renvoie l’entrée stockée avec amount_minor en unités mineures. Pour plusieurs lignes à la fois, utilisez campaign_costs_import. Exige content.write. Exige le forfait Business ou Enterprise (sinon 402 plan_limit).

Permission : content.write

Exemple
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 Supprimer une entrée de coût de campagne campaign_costs_delete

Supprime définitivement une entrée de dépenses, retrouvée par son id dans campaign_costs_list. Cette action est irréversible, et le CPA et le ROAS de cette campagne et de ce mois cessent aussitôt d’inclure la dépense. Les autres mois et campagnes ne sont pas touchés. Renvoie l’entrée supprimée. Exige content.write. Exige le forfait Business ou Enterprise (sinon 402 plan_limit).

Permission : content.write

Exemple
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 Importer des coûts de campagne depuis un CSV (campaign,month,amount[,currency]) campaign_costs_import

Importe en masse des dépenses publicitaires depuis un CSV, la manière rapide de charger de nombreuses campagnes et de nombreux mois. Envoyez le texte CSV dans csv (idéal pour les outils et les appels d’API) ou téléversez un fichier dans file (multipart uniquement). La première ligne doit être un en-tête contenant campaign, month et amount, avec une colonne currency facultative, par exemple campaign,month,amount,currency puis spring_sale,2026-09,1250.50,USD. Month est au format YYYY-MM, amount est en unités majeures et currency vaut par défaut la devise du site. Les lignes sont mises à jour ou créées par campagne et par mois : réimporter le même fichier ne crée donc pas de doublons. Les limites sont 1 Mo et 5 000 lignes. Une ligne incorrecte n’arrête pas l’import. La réponse contient imported (nombre enregistré), failed (nombre rejeté) et errors (les 50 premiers messages, chacun nommant sa ligne, où la ligne 2 est la première ligne de données). Une colonne d’en-tête manquante, un fichier trop volumineux ou un CSV mal formé fait échouer toute la requête. Exige content.write. Exige le forfait Business ou Enterprise (sinon 402 plan_limit).

Permission : content.write

Exemple
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 Lister les entrées de coût de campagne campaign_costs_list

Liste les entrées de dépenses publicitaires enregistrées pour un site, le mois le plus récent d’abord, puis par nom de campagne. Chaque ligne est une campagne pour un mois avec amount_minor (entier en unités mineures de la devise, donc 125050 signifie 1 250,50), currency (ISO 4217, en majuscules), month au format YYYY-MM et l’id de l’entrée (un UUID, à utiliser pour campaign_costs_update et campaign_costs_delete). Passez campaign pour ne voir qu’une campagne (correspondance insensible à la casse sur la valeur utm_campaign). Paginé avec page et per_page (100 maximum). Les coûts alimentent le CPA et le ROAS dans campaigns_list : c’est donc ici qu’il faut vérifier les dépenses d’une campagne. Exige analytics.read. Exige le forfait Business ou Enterprise (sinon 402 plan_limit).

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/campaigns/costs.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/campaigns/costs/:id.json Modifier une entrée de coût de campagne campaign_costs_update

Modifie une entrée de dépenses existante, retrouvée par son id dans campaign_costs_list. Seules les entrées que vous envoyez changent : envoyez donc uniquement amount pour corriger un montant. amount est en unités majeures (1250.50) et est stocké en unités mineures, month est au format YYYY-MM, currency est un code ISO à 3 lettres. Changer campaign ou month vers une combinaison qu’une autre entrée possède déjà échoue avec une erreur de validation au lieu de fusionner. Pour corriger les dépenses d’une campagne et d’un mois sans connaître l’id, appelez campaign_costs_create, qui remplace l’entrée existante. Exige content.write. Exige le forfait Business ou Enterprise (sinon 402 plan_limit).

Permission : content.write

Exemple
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 Générer et valider une URL avec balises UTM campaigns_builder

Construit une URL balisée UTM pour une page de destination et vérifie les valeurs. Rien n’est enregistré et aucune donnée n’est lue : vous pouvez donc l’appeler à répétition sans risque. Passez destination (une URL complète en https://) ainsi que utm_source, utm_medium, utm_campaign, utm_content et utm_term selon les besoins, ou choisissez un preset (newsletter, social, paid_search, etc.) pour remplir utm_source et utm_medium lorsque vous les laissez vides. Renvoie url (null en cas d’erreur), valid, destination, preset, les valeurs utm_* nettoyées, issues (une liste de {field, level, message}, où le niveau error bloque l’URL et warning ne fait que suggérer une correction, comme la mise en minuscules) et presets (les valeurs de preset disponibles). Les valeurs sont nettoyées en minuscules et sans espaces. Utilisez campaigns_hygiene pour trouver les valeurs UTM désordonnées qui existent déjà dans votre trafic et campaigns_list pour rendre compte des campagnes qui ont été diffusées. Pour conserver un lien balisé avec une URL courte et un décompte de clics, utilisez plutôt links_create.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/campaigns/builder.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/campaigns/hygiene.json Hygiène UTM : valeurs quasi identiques, problèmes de style et sources inconnues campaigns_hygiene

Repère les valeurs UTM désordonnées dans le trafic d’une période afin que vous puissiez corriger le balisage. Renvoie period, duplicates, style_issues et unknown_sources. duplicates regroupe les valeurs de utm_source, utm_medium ou utm_campaign qui ne diffèrent que par la casse, les espaces ou la ponctuation (Facebook, facebook et face-book), chacune sous la forme {field, suggestion, variants: [{value, visits}]} avec l’orthographe la plus visitée en suggestion. style_issues liste les valeurs qui enfreignent la convention minuscules et sans espaces sous la forme {field, value, visits, suggestion} (jusqu’à 50). unknown_sources liste les valeurs de utm_source qui ne sont pas un canal reconnu sous la forme {value, visits} (jusqu’à 50). Seules les 500 premières valeurs par champ sont analysées. Les décomptes sont des visites. Les suggestions ne sont que des conseils et rien n’est modifié. Pour fusionner des variantes dans un seul canal, utilisez channel_rules_create. Accepte les entrées communes period et filters. Utilisez campaigns_list pour les performances et campaigns_builder pour créer des URL balisées propres.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/campaigns/hygiene.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/campaigns.json Synthèse des campagnes avec conversions, revenus, coût, CPA et ROAS campaigns_list

Rapport de performance des campagnes construit à partir de utm_campaign, avec le coût et le retour sur dépenses publicitaires. Renvoie period, currency (la devise du site), goal_id et goal_name (l’objectif dont les conversions sont comptées), campaigns, totals et unconverted_costs. Chaque campagne contient visitors, visits, conversions, conversion_rate (pourcentage de 0 à 100, conversions divisées par visites), revenue et sources (des lignes par source et support avec les mêmes métriques). Lorsque des coûts existent (provenant de campaign_costs_list), une campagne a aussi cost, cpa (coût par conversion, null lorsqu’il n’y a aucune conversion) et roas (revenu divisé par le coût, un ratio comme 2.5, null lorsqu’il n’y a aucun coût). Les montants (revenue, cost, cpa) sont des entiers en unités mineures (centimes) de la devise du site. Les coûts sont associés aux noms de campagne sans tenir compte de la casse et répartis au prorata des jours de chaque mois dans la période. Une campagne avec un coût mais sans trafic est tout de même listée. 100 campagnes au maximum, les plus actives d’abord. Seules les visites avec un utm_campaign sont incluses. goal_id vaut par défaut le premier objectif actif : passez-le explicitement pour mesurer un objectif précis (les ids proviennent de goals_list). Utilisez campaigns_hygiene pour nettoyer les noms et stats_breakdown avec la dimension utm_campaign pour une simple répartition du trafic.

Permission : analytics.read

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

Canaux de notification

DELETE /channels/:id.json Supprimer un canal de notification notification_channels_delete

Supprime un canal de notification et le retire de chaque alerte qui l’utilisait : ces alertes cessent donc d’y notifier. Cette action est irréversible et les alertes elles-mêmes sont conservées. L’id (nch_...) provient de notification_channels_list. Renvoie le canal supprimé.

Permission : content.write

Exemple
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 Lister les canaux de notification notification_channels_list

Liste les canaux de notification d’un espace de travail (le chemin prend workspace_id), triés par nom, avec pagination. Un canal est un endroit où les alertes sont envoyées. Chacun contient id (nch_...), kind (email, slack, teams, discord, webhook, pagerduty, opsgenie ou push), name, target (un résumé masqué comme les adresses e-mail ou la fin d’une URL de webhook, les secrets ne sont jamais renvoyés), last_used_at et created_at. Filtrez par kind. Utilisez les ids comme channel_ids dans alerts_create et alerts_update. Les appelants limités à certains sites ne voient que les canaux utilisés par des alertes sur leurs sites.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/channels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /channels/:id/send_test.json Envoyer un message de test via un canal notification_channels_send_test

Envoie un vrai message de test par le canal (un e-mail, une publication de discussion, un appel de webhook, etc.) : ne l’utilisez donc que lorsque l’utilisateur le souhaite. L’appel échoue avec une erreur qui nomme la cause si l’envoi ne fonctionne pas, sinon il renvoie le canal. Les envois de test sont limités en débit par espace de travail, et les canaux e-mail aussi par adresse extérieure. Utilisez-le après notification_channels_create ou notification_channels_update pour confirmer qu’une URL ou une clé est correcte.

Permission : content.write

Exemple
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 Obtenir un canal de notification notification_channels_get

Renvoie un canal de notification par id (nch_..., provenant de notification_channels_list). La réponse contient kind, name, target (un résumé masqué, les secrets comme les URL de webhook et les clés ne sont jamais renvoyés), last_used_at et created_at. Utilisez notification_channels_send_test pour vérifier qu’il envoie bien.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/channels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /notifications/unsubscribe/:token.json Désabonner une adresse d’un canal d’alerte ou d’une vérification de disponibilité avec le jeton d’un e-mail notification_unsubscribes_create

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/notifications/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /push_subscription.json Enregistrer un navigateur pour les notifications push push_subscriptions_create

Enregistre le navigateur actuel pour les alertes web push, à l’aide des trois valeurs du PushSubscription du navigateur (endpoint, p256dh et auth). Un abonnement reçoit les alertes de chaque espace de travail auquel le membre appartient, pour chaque site : c’est pourquoi un jeton d’API ne peut l’utiliser que lorsqu’il peut lire tout son espace de travail et que le membre n’a aucun autre espace de travail. L’appeler à nouveau avec le même endpoint met à jour les clés et déplace l’abonnement vers l’appelant. L’endpoint doit être l’URL https publique d’un service push. Cela n’enregistre que le navigateur : les alertes ont donc toujours besoin d’un canal de notification de type push (notification_channels_create). Renvoie endpoint_host (le nom d’hôte du service push, pas l’endpoint complet) et created_at. Les sessions ouvertes via un fournisseur d’identité d’espace de travail ne peuvent pas l’utiliser.

Permission : member

Exemple
curl -X POST https://privatusanalytics.com/push_subscription.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /push_subscription.json Supprimer l’enregistrement push d’un navigateur push_subscriptions_delete

Retire l’un des enregistrements push de navigateur du membre connecté, afin que ce navigateur cesse de recevoir les notifications d’alerte. Passez le même endpoint que celui utilisé avec push_subscriptions_create. Échoue avec not found lorsqu’aucun abonnement de ce type n’existe pour le membre. Renvoie l’abonnement retiré sous la forme endpoint_host et created_at. Cela ne supprime aucun canal de notification. Soumis aux mêmes restrictions de jeton que push_subscriptions_create.

Permission : member

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

Collecte

POST /embed/ads/e.json Enregistrer qu'un visuel a été affiché, vu ou cliqué, appelé par le chargeur publicitaire ad_serving_event

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/embed/ads/e.json \
  -H "Content-Type: application/json" -d '{…}'
GET /embed/ads/:site.json Les espaces publicitaires d'un site et les visuels que chacun affiche, appelé par le chargeur publicitaire ad_serving_slots

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/embed/ads/:site.json
POST /api/overlay.json Les clics d’une page pour la superposition de clics, appelée par pa.overlay.js avec son laissez-passer click_overlays_read

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/api/overlay.json \
  -H "Content-Type: application/json" -d '{…}'
POST /api/logs.json Envoyer les journaux d’accès serveur pour le rapport sur les robots d’IA (JSON {lines: [...]} ou texte de journal combiné, avec la clé des journaux de robots du site comme jeton Bearer) crawler_logs_create

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/api/logs.json \
  -H "Content-Type: application/json" -d '{…}'
POST /api/event.json Collecter un hit du navigateur (utilisé par /js/pa.js) ingest_event

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/api/event.json \
  -H "Content-Type: application/json" -d '{…}'
GET /api/experiment.json Indique si une expérience envoie ce visiteur vers une page variante, appelé par le script d’en-tête des expériences ingest_experiment

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/api/experiment.json
GET /js/exp/:site.json Le script que la balise d’en-tête facultative des expériences charge pour un site ingest_experiment_script

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/js/exp/:site.json
POST /api/survey.json Enregistrer qu’une carte de sondage a été affichée, fermée ou remplie ingest_survey

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/api/survey.json \
  -H "Content-Type: application/json" -d '{…}'
GET /api/surveys.json Quel sondage afficher sur une page, appelé par le module de questions du traceur ingest_surveys

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/api/surveys.json

Collections de témoignages

POST /sites/:site_id/testimonials/collections/:id/items.json Ajouter des témoignages à une collection manuelle testimonial_collections_add_items

Jusqu’à 100 à la fois. Ils s’ajoutent en bas, ou en haut avec position top, dans l’ordre donné. La réponse contient meta.undo_id, que testimonials_bulk_undo accepte pendant 7 jours. Une collection intelligente n’accepte rien à la main.

Permission : content.write

Exemple
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 Créer une collection, manuelle ou intelligente testimonial_collections_create

kind manual se compose à la main, et testimonial_ids la démarre déjà remplie. kind smart est maintenue à jour par des conditions : des lignes de field, operator et value reliées par match. La réponse contient le compte et les règles en langage clair, donc un seul appel transforme une phrase en collection vivante. Essayez d’abord les règles avec testimonial_collections_preview. Le type ne change jamais ensuite.

Permission : content.write

Exemple
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 Placer une collection dans la corbeille pendant 30 jours testimonial_collections_destroy

Ses témoignages ne sont pas touchés. Un widget ou un mur qu’elle alimente n’en affiche rien jusqu’à sa restauration. Restaurez-la avec testimonial_trash_restore. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les collections d’un site testimonial_collections_list

Chaque collection vient avec le nombre de témoignages qu’elle contient en ce moment, combien sont approuvés, ses règles en langage clair s’il s’agit d’une collection intelligente, et les widgets et les murs qu’elle alimente. Les collections de la corbeille sont exclues.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/collections.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/collections/preview.json Essayer un ensemble de règles sans rien enregistrer testimonial_collections_preview

Répond avec le nombre de témoignages qui correspondent en ce moment, les règles en langage clair et cinq exemples. Utilisez-le avant testimonial_collections_create ou testimonial_tags_update. Une ligne invalide donne une erreur 422 qui nomme la ligne.

Permission : analytics.read

Exemple
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 Retirer des témoignages d’une collection manuelle testimonial_collections_remove_items

Jusqu’à 100 à la fois. Les témoignages eux-mêmes ne changent pas. La réponse contient meta.undo_id, et une annulation remet chacun à sa place.

Permission : content.write

Exemple
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 Déplacer un témoignage à une autre place dans une collection manuelle testimonial_collections_reorder

Désignez la place avec exactement un parmi position (comptée à partir de 1), before_id ou after_id. L’ordre est celui servi à chaque widget et à chaque mur que la collection alimente.

Permission : content.write

Exemple
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 Obtenir une collection avec ses compteurs, ses règles et ce qu’elle alimente testimonial_collections_get

Ses témoignages sont testimonials_list avec collection_id.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/collections/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/collections/:id.json Changer le nom, la description, les règles ou l’ordre de service d’une collection testimonial_collections_update

Seul ce qui est envoyé change. Envoyer conditions remplace toutes les règles d’une collection intelligente. Le type est fixe.

Permission : content.write

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

Compte

GET /account.json Obtenir votre profil et vos préférences account_get

Renvoie le profil et les préférences du membre connecté. Utilisez-le pour lire les réglages avant de les modifier avec account_update. Il s’agit de la personne, pas d’un espace de travail. Le forfait et les factures de l’espace de travail se trouvent dans billing_get. Les champs sont email, unconfirmed_email (renseigné tant qu’un changement d’e-mail attend sa confirmation, sinon null), name (peut être null), theme (system, light ou dark), default_landing (sites ou last_site), locale (code de langue de l’application connectée), timezone (nom IANA, peut être null), shortcuts_enabled, reduce_motion, product_emails, site_audit_emails, marketing_emails, newsletter (tous des booléens où true signifie abonné), two_factor (booléen), passkeys (nombre de clés d’accès enregistrées) et created_at (ISO 8601). Une session ouverte uniquement via le fournisseur d’identité d’un espace de travail ne voit que email et les réglages d’affichage.

Permission : member

Exemple
curl https://privatusanalytics.com/account.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /account.json Mettre à jour votre profil et vos préférences account_update

Met à jour le profil du membre connecté, ses préférences d’affichage et ses abonnements par e-mail. Seules les entrées que vous envoyez changent, tout le reste demeure. Changer email ne prend pas effet immédiatement. Un e-mail de confirmation est envoyé à la nouvelle adresse (avec limitation de débit) et unconfirmed_email affiche l’adresse en attente jusqu’à sa confirmation. Les jetons d’API ne peuvent pas changer l’adresse e-mail ni réactiver marketing_emails après un désabonnement : les deux exigent un navigateur connecté. Désactiver marketing_emails est autorisé. Les sessions ouvertes par un fournisseur d’identité d’espace de travail ne peuvent modifier que les réglages d’affichage (theme, default_landing, locale, timezone, shortcuts_enabled, reduce_motion). Renvoie le compte mis à jour sous la même forme que account_get. Cela ne supprime pas le compte et ne peut pas modifier les réglages de l’espace de travail.

Permission : member

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

Connexions d’achat des témoignages

DELETE /sites/:site_id/testimonials/settings/purchase_connections/:id.json Déconnecter un compte de paiement testimonial_purchase_connections_delete

Supprime la connexion et sa clé. Les acheteurs qui attendent encore leur premier email ne sont pas sollicités. La demande permanente reste comme trace de ce qui a été envoyé.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les connexions d’achat d’un site testimonial_purchase_connections_list

Chacune avec sa règle, son état et sa demande permanente. La clé n’est jamais renvoyée. paused vaut true sur une offre sans demandes après un achat : la connexion est conservée, ne lit aucun paiement et ne sollicite personne.

Permission : sites.manage

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

Corbeille des témoignages

DELETE /sites/:site_id/testimonials/trash/permanent.json Supprimer définitivement jusqu’à 100 éléments de la corbeille testimonial_trash_delete_permanently

Cette action est irréversible. confirm est le nom de l’élément (le nom de la personne pour un témoignage) ou son id pour un seul élément, et le nom du site pour plusieurs. Seuls les éléments de la corbeille sont acceptés.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Supprimer définitivement tout ce qui est dans la corbeille testimonial_trash_empty

Cette action est irréversible. confirm est le nom du site. Jusqu’à 100 éléments sont supprimés à la fois. Une corbeille plus grande est vidée en arrière-plan et la réponse a l’état running.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister le contenu de la corbeille, un type à la fois testimonial_trash_list

Répond avec les éléments d’un type (testimonial par défaut) et, dans meta.counts, le nombre d’éléments de chaque type dans la corbeille. Chaque élément indique ce à quoi il revient, ce qui l’affichait, qui l’a mis dans la corbeille et quand il en sort.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/trash.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/trash/restore.json Restaurer jusqu’à 100 éléments de la corbeille, exactement comme ils étaient testimonial_trash_restore

Les ids doivent être d’un seul type. Restaurer des témoignages répond avec un id d’annulation (data.id et meta.undo_id) que testimonial_undo_records_undo accepte pendant 7 jours. Une restauration ne compte jamais comme un nouveau témoignage.

Permission : content.write

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

Demandes de domaine personnalisé des témoignages

POST /sites/:site_id/testimonials/settings/custom_domain.json Demander un domaine personnalisé pour un mur ou des formulaires testimonial_custom_domain_requests_create

Les domaines personnalisés pour les témoignages sont installés à la main par l’équipe de Privatus Analytics. Cet appel enregistre la demande et prévient l’équipe, qui envoie par email l’enregistrement DNS à ajouter. Le nom d’hôte ne fonctionne pas tant que le statut de la demande n’est pas active. Business et plus : les autres offres obtiennent 402 plan_limit.

Permission : sites.manage

Exemple
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 Retirer une demande de domaine personnalisé, par son nom d’hôte testimonial_custom_domain_requests_delete

Seule une demande que l’équipe n’a pas commencé à traiter (statut requested) peut être retirée. Une demande en cours répond par wrong_state. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les demandes de domaine personnalisé d’un site testimonial_custom_domain_requests_list

Chaque demande de nom d’hôte pour un mur ou des formulaires, de la plus récente à la plus ancienne, avec son statut. Le nom d’hôte ne fonctionne qu’une fois status passé à active. Fonctionne sur toutes les offres, donc les demandes antérieures peuvent encore être lues.

Permission : analytics.read

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

Demandes de retrait

POST /sites/:site_id/testimonials/removal_requests/:id/dismiss.json Rejeter une demande de retrait testimonial_removal_requests_dismiss

Clôt la demande avec une note et laisse le témoignage là où il est affiché. Rien n’est supprimé et aucun email n’est envoyé à la personne qui l’a demandé. La note est obligatoire. Une demande déjà décidée répond par 422.

Permission : content.write

Exemple
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 Lister les demandes de retrait d’un site testimonial_removal_requests_list

Les demandes ouvertes, sauf si un autre statut est demandé. L’email saisi par l’auteur n’est renvoyé qu’à un appelant qui peut modifier le contenu.

Permission : analytics.read

Exemple
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 Décider d’une demande de retrait testimonial_removal_requests_resolve

trash place le témoignage dans la corbeille, ce qui le retire aussitôt de chaque widget, mur et page publique et peut être annulé pendant 30 jours. dismiss le laisse affiché et exige une note.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir une demande de retrait testimonial_removal_requests_get

Une demande avec le témoignage concerné, la note laissée par la personne, si l’email saisi correspond à l’email du témoignage, combien de fois elle a demandé et la décision lorsqu’il y en a une. L’email lui-même n’est renvoyé qu’à un appelant disposant de content.write.

Permission : analytics.read

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

Demandes de témoignage

POST /requests/resubscribe/:token.json Confirmer la réception de nouveau des demandes de témoignage testimonial_request_resubscribes_confirm

Le POST derrière le bouton de la page de confirmation. Il lève le refus, donc l’adresse peut de nouveau être sollicitée.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/requests/resubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /requests/resubscribe.json Demander l’email qui permet à une adresse de recevoir de nouveau des demandes testimonial_request_resubscribes_create

Envoie un email de confirmation à l’adresse elle-même, lorsqu’elle s’était désabonnée. La réponse est la même qu’elle se soit désabonnée ou non.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/requests/resubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
POST /requests/unsubscribe/:token.json Désabonner une adresse des demandes de témoignage testimonial_request_unsubscribes_create

Le POST derrière le bouton de la page de désabonnement, et ce qu’appelle le bouton de désabonnement d’une application de messagerie. Le jeton vient du lien dans l’email.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/requests/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/testimonials/requests.json Lancer une demande en brouillon testimonial_requests_create

Crée un brouillon avec son email et ses destinataires. Rien n’est envoyé avant testimonial_requests_send. Tout ce qui est omis part d’une valeur par défaut : l’email, une relance après 5 jours, le nom du site comme expéditeur et vous comme adresse de réponse. Chaque destinataire est enregistré comme en file d’attente, ou comme ignoré avec la raison.

Permission : content.write

Exemple
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 Supprimer un brouillon testimonial_requests_delete

Seule une demande jamais envoyée peut être supprimée. Une demande envoyée est conservée comme trace des emails qui ont été envoyés. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Copier une demande dans un nouveau brouillon testimonial_requests_duplicate

La copie a le même formulaire et le même email, et pas encore de destinataires.

Permission : content.write

Exemple
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 Lister les demandes d’un site testimonial_requests_list

Du plus récent au plus ancien, chacune avec son email et ses compteurs d’entonnoir. Filtrez par statut, formulaire ou période.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/requests.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/requests/:id/preview.json Voir un email d’une demande tel que le reçoit son premier destinataire testimonial_requests_preview

L’expéditeur, l’objet et le corps avec les champs de fusion remplis. Rien n’est envoyé. step 0 est le premier email, 1 à 3 les relances.

Permission : analytics.read

Exemple
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 Reprendre une demande arrêtée testimonial_requests_resume

Reprend là où elle s’est arrêtée. Une relance devenue due pendant l’arrêt est reprogrammée à partir de maintenant, donc rien ne part en rafale. Cela envoie des emails à des personnes extérieures à l’espace de travail, donc le membre est prévenu par email qu’un assistant l’a reprise.

Permission : content.write

Exemple
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 Envoyer une demande, maintenant ou à une heure donnée testimonial_requests_send

Exige confirm_relationship: true. Les destinataires en file sont vérifiés une dernière fois, puis les premiers emails partent (ou attendent send_at). Les relances vont aux personnes qui n’ont pas répondu. Les emails de demande sont envoyés par le fournisseur d’email propre au site (Réglages > Envoi d’emails, Business et plus), donc un site sans connexion fonctionnelle obtient 422 no_email_connection ou email_connection_paused, et une autre offre obtient 402 plan_limit. Chaque email compte dans le plafond mensuel d’emails de demande du site (10 000 sauf autre valeur que nous fixons). Au plafond, rien n’est abandonné : les personnes restent en file et l’envoi reprend le 1er. Cela envoie des emails à des personnes extérieures à l’espace de travail, donc le membre est prévenu par email qu’un assistant l’a envoyé.

Permission : content.write

Exemple
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 Envoyer un email d’une demande à votre propre adresse testimonial_requests_send_test

Part uniquement vers l’adresse de l’appelant, par le fournisseur d’email propre au site comme les vrais (422 no_email_connection sans fournisseur). Il n’a ni lien personnel ni compteur d’ouvertures, et ne compte pas dans le plafond mensuel du site.

Permission : content.write

Exemple
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 Obtenir une demande avec son email, ses relances et ses compteurs d’entonnoir testimonial_requests_get

Renvoie l’email, les relances, le statut et les compteurs d’entonnoir (sent, opened, clicked, submitted, bounced, unsubscribed) d’une demande.

Permission : analytics.read

Exemple
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 Arrêter une demande testimonial_requests_stop

Annule aussitôt chaque email pas encore envoyé. Rien de ce qui est déjà envoyé n’est affecté, et testimonial_requests_resume reprend là où elle s’est arrêtée.

Permission : content.write

Exemple
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 Changer le nom, le formulaire ou l’email d’une demande testimonial_requests_update

Permis à tout moment. Un changement s’applique à chaque email pas encore envoyé. Changer le délai d’une relance recalcule l’horaire des relances en attente.

Permission : content.write

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

Destinataires des demandes de témoignage

POST /sites/:site_id/testimonials/requests/:request_id/recipients.json Ajouter des personnes à une demande testimonial_request_recipients_create

Jusqu’à 500 en un appel. Ajoutées à un brouillon, elles attendent testimonial_requests_send. Ajoutées à une demande en cours, elles reçoivent aussitôt leur premier email. La réponse indique combien ont été mises en file et combien ignorées, par raison. Ajouter à une demande en cours envoie des emails à des personnes extérieures à l’espace de travail, donc le membre est prévenu par email.

Permission : content.write

Exemple
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 Retirer des personnes choisies d’une demande testimonial_request_recipients_delete

Seulement les personnes à qui rien n’a été envoyé (en file ou ignorées). Accepte jusqu’à 100 adresses dans le corps de la requête. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Ajouter des personnes à une demande depuis un fichier CSV testimonial_request_recipients_import

Deux appels. Envoyez le fichier (ou son texte comme csv) pour obtenir les colonnes, leurs premières lignes et un upload_token. Envoyez ensuite la correspondance du numéro de colonne vers le champ. Jusqu’à 5 Mo et 10 000 lignes. Ajouter à une demande en cours envoie des emails à des personnes extérieures à l’espace de travail, donc le membre est prévenu par email.

Permission : content.write

Exemple
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 Lister les personnes d’une demande testimonial_request_recipients_list

Filtrez selon la situation actuelle de la personne : le statut opened signifie « a ouvert sans cliquer ni répondre ». L’adresse email est null sauf si l’appelant peut modifier le contenu.

Permission : analytics.read

Exemple
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 Reprendre des personnes choisies d’une demande testimonial_request_recipients_resume

Elles reprennent là où elles s’étaient arrêtées. Accepte jusqu’à 100 adresses dans le corps de la requête. Cela envoie des emails à des personnes extérieures à l’espace de travail, donc le membre est prévenu par email.

Permission : content.write

Exemple
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 Arrêter des personnes choisies d’une demande testimonial_request_recipients_stop

Elles ne reçoivent plus d’email. Chacune garde son statut et gagne « stopped ». Accepte jusqu’à 100 adresses dans le corps de la requête.

Permission : content.write

Exemple
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 '{…}'

Disponibilité

POST /sites/:site_id/uptime.json Ajouter une vérification de disponibilité pour un site uptime_checks_create

Ajoute une vérification de disponibilité liée à un site. Utilisez workspace_uptime_checks_create pour une vérification qui n’appartient à aucun site. kind décide de la cible. http vérifie le code de statut de url, keyword vérifie que le corps de la réponse de url contient keyword, tcp se connecte à host et port, et dns vérifie que host se résout. Les champs des autres types sont ignorés. url vaut par défaut la page d’accueil du site pour les vérifications http. expected_status (de 100 à 599, 200 par défaut), http_method (GET ou HEAD) et timeout_seconds (de 1 à 30, 20 par défaut) s’appliquent aux vérifications http et keyword. interval_seconds est le temps entre deux sondages, il doit être au moins égal au minimum du forfait (Free 300, Pro 60, Business 30) et vaut par défaut 300 ou le minimum s’il est plus élevé. public à true permet à la vérification d’apparaître sur une page d’état. Les adresses privées et internes sont refusées, et le forfait limite le nombre de vérifications par espace de travail (Free 3, Pro 20, Business 100). Le premier sondage s’exécute en quelques instants, status commence à pending. Exige la permission uptime.manage. Renvoie la vérification avec id (upc_...).

Permission : uptime.manage

Exemple
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 Supprimer une vérification de disponibilité et son historique uptime_checks_delete

Supprime définitivement une vérification de disponibilité avec ses résultats et son historique d’incidents, et la retire de toute page d’état qui l’affiche. Cette action est irréversible. Utilisez uptime_checks_pause pour arrêter les sondages tout en gardant l’historique. L’id provient de uptime_checks_list. Exige la permission uptime.manage. Renvoie la vérification supprimée.

Permission : uptime.manage

Exemple
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 Lister les vérifications de disponibilité d’un site uptime_checks_list

Liste les vérifications de disponibilité d’un site, y compris les vérifications d’espace de travail qui sondent le domaine du site ou l’un de ses sous-domaines. Triées par nom. Utilisez workspace_uptime_checks_list pour chaque vérification de l’espace de travail. Filtrez avec status (up, down, pending ou paused) ou query (une partie du nom, de l’url ou de l’hôte). Paginé avec page et per_page (jusqu’à 100). Chaque vérification contient id (upc_...), workspace_id, site_id (null pour les vérifications d’espace de travail), name, kind, url, host, port, keyword, expected_status, http_method, interval_seconds, timeout_seconds, status (up, down, pending ou paused), enabled, public, last_checked_at, next_check_at, last_response_ms (millisecondes), ssl_expires_at, ssl_issuer, domain_expires_at et created_at. Utilisez uptime_checks_get pour les pourcentages de disponibilité et les incidents.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /uptime/checks/:id/pause.json Mettre en pause une vérification de disponibilité uptime_checks_pause

Met en pause une vérification de disponibilité pour qu’elle ne soit plus sondée. Tout incident ouvert est clos aussitôt et aucune alerte down ou up n’est envoyée pendant la pause. L’historique est conservé et son statut s’affiche comme paused. Reprenez-la avec uptime_checks_resume. L’id provient de uptime_checks_list. Exige la permission uptime.manage. Renvoie la vérification.

Permission : uptime.manage

Exemple
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 Reprendre une vérification de disponibilité en pause uptime_checks_resume

Reprend une vérification de disponibilité en pause. Elle est sondée au prochain passage du planificateur et son statut reste pending jusqu’à l’arrivée du premier résultat. L’id provient de uptime_checks_list. Exige la permission uptime.manage. Renvoie la vérification.

Permission : uptime.manage

Exemple
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 Obtenir une vérification de disponibilité : disponibilité 24 h/7 j/30 j, temps de réponse et incidents uptime_checks_get

Renvoie une vérification de disponibilité avec son historique, et pas seulement ses réglages. Choisissez range (24h par défaut, 7d ou 30d) pour le graphique de temps de réponse. La réponse contient check (réglages et état en direct, voir uptime_checks_list), uptime (pourcentage sur 24h, 7d et 30d, null tant que le premier sondage n’a pas eu lieu), range, response_times (unité hour ou day, libellés sous forme d’heures ISO 8601, et séries du temps de réponse moyen en millisecondes par emplacement avec null pour les trous) et incidents (les 50 plus récents avec started_at, resolved_at null tant qu’ils sont ouverts, duration_seconds, cause et failed_locations). Seuls les sondages réussis comptent dans les temps de réponse. L’id provient de uptime_checks_list.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/uptime/checks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /uptime/checks/:id.json Modifier une vérification de disponibilité uptime_checks_update

Modifie une vérification de disponibilité. Seules les entrées que vous envoyez changent. Les règles et les limites sont les mêmes que dans uptime_checks_create (l’intervalle doit être au moins égal au minimum du forfait, les adresses privées sont refusées). Changer kind efface les champs de cible qui ne s’appliquent plus. Changer interval_seconds programme immédiatement le prochain sondage. L’id provient de uptime_checks_list. Exige la permission uptime.manage. Renvoie la vérification mise à jour.

Permission : uptime.manage

Exemple
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 Centre de données des sondes, User-Agent et plages d’IP de sortie (pour autoriser nos sondes de disponibilité) uptime_probes_list

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/uptime/probes.json
POST /uptime/probes/results.json Envoyer les résultats d’un agent de sonde externe (jeton Bearer de sonde de disponibilité) uptime_probes_results

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/uptime/probes/results.json \
  -H "Content-Type: application/json" -d '{…}'
POST /workspaces/:workspace_id/uptime.json Ajouter une vérification de disponibilité d’espace de travail (non liée à un site) workspace_uptime_checks_create

Ajoute une vérification de disponibilité qui appartient à tout l’espace de travail plutôt qu’à un seul site. Utilisez uptime_checks_create pour lier une vérification à un site. Les entrées, les limites du forfait et les règles sont les mêmes, voir uptime_checks_create. kind vaut http, keyword, tcp ou dns et décide lesquels de url, keyword, host et port s’appliquent. Comme il n’y a pas de site, une vérification http exige une url explicite. Les appelants limités à certains sites ne peuvent pas créer de vérifications d’espace de travail. Nécessite le workspace_id de workspaces_list et la permission uptime.manage. Renvoie la vérification avec id (upc_...) et site_id à null.

Permission : uptime.manage

Exemple
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 Lister toutes les vérifications de disponibilité d’un espace de travail workspace_uptime_checks_list

Liste chaque vérification de disponibilité d’un espace de travail, y compris celles qui ne sont liées à aucun site, triées par nom. Un appelant limité à certains sites ne voit que les vérifications de ces sites. Utilisez uptime_checks_list pour les vérifications d’un seul site. Filtrez avec status (up, down, pending ou paused) ou query (une partie du nom, de l’url ou de l’hôte). Paginé avec page et per_page (jusqu’à 100). Chaque élément contient les champs décrits dans uptime_checks_list. Nécessite le workspace_id de workspaces_list.

Permission : analytics.read

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

Documentation

GET /docs/api.json Lister toutes les opérations de l’API et tous les outils MCP docs_api

Renvoie le catalogue complet de chaque opération de l’API, qui est aussi chaque outil MCP. Utilisez-le pour découvrir quel outil ou quel point d’accès existe et exactement ce qu’il demande. Chaque élément contient tool_name, summary, description (peut être null), group, verb (méthode HTTP), path (modèle avec des paramètres substituables), permission (la permission dont un membre ou un jeton a besoin, null pour les outils publics), input_schema (JSON Schema des entrées) et response_schema (JSON Schema de la réponse). La réponse est volumineuse. Pour un outil que vous connaissez déjà, préférez les pages de documentation (docs_search). docs_openapi renvoie les mêmes informations sous forme de document OpenAPI. Public, aucune authentification requise.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/docs/api.json
GET /docs.json Lister les pages de documentation docs_list

Liste chaque page de documentation avec title, description, path (comme /docs/api/authentication), section et sans corps. Utilisez-le pour parcourir ce qui existe. Pour trouver une page par sujet, utilisez docs_search, et pour en lire une, utilisez docs_get avec sa section et sa page. Paginé avec page et per_page (maximum 100). Public, aucune authentification requise.

Permission : public

Exemple
curl https://privatusanalytics.com/docs.json
GET /openapi.json Document OpenAPI 3.1 de toute l’API docs_openapi

Renvoie le document OpenAPI 3 décrivant toute l’API publique en JSON brut (non enveloppé dans un champ data). Utilisez-le lorsque vous avez besoin d’une spécification lisible par machine pour la génération de code. Pour une liste consultable d’opérations avec leurs schémas d’entrée et de réponse, docs_api est plus facile à lire. Il décrit les mêmes opérations que celles exposées comme outils MCP. Public, aucune authentification requise.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/openapi.json
GET /docs/:section/:page.json Lire une page de documentation (Markdown et HTML) docs_get

section et page proviennent du chemin de la page /docs/<section>/<page>. Utilisez la page "index" pour un aperçu de la section.

Permission : public

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

Domain Rating

GET /sites/:site_id/domain-rating.json Rapport Domain Rating : la dernière note, les liens entrants et sortants, l’évolution depuis la publication précédente et l’historique par mois domain_rating_report

Renvoie le Domain Rating du site, une estimation de 0 à 100 de la force des liens pointant vers son domaine, ainsi que le nombre de liens entrants et sortants et leur historique. Il s’agit du score propre à Privatus Analytics, pas d’une métrique Google. Les évaluations sont mises à jour une fois par mois à chaque publication : les changements apparaissent donc chaque mois. months (de 1 à 120, 12 par défaut) définit le nombre de points mensuels d’historique à inclure. Le résultat contient domain, checked_at (la dernière vérification du site, null si jamais), release (le mois des dernières données au format YYYY-MM), rating, inbound_links, outbound_links (chacun null s’il n’est pas encore connu), changes (les mêmes trois métriques sous forme de différence avec la publication précédente, null lorsque l’une ou l’autre est inconnue) et history (une ligne par mois avec month, rating, inbound_links, outbound_links, la plus ancienne d’abord). Un nouveau site peut rester non évalué pendant quelques minutes. Exige analytics.read.

Permission : analytics.read

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

Doublons de témoignages

POST /sites/:site_id/testimonials/duplicates/dismiss.json Indiquer qu’un groupe n’est pas un doublon. Il ne revient jamais dans la file testimonial_duplicates_dismiss

testimonial_ids doit être chaque exemplaire d’un groupe ouvert de la file des doublons qui est hors de la corbeille, tel que testimonial_duplicates_list les renvoie. Rien n’est fusionné ni modifié sur les témoignages, et ils ne sont plus jamais regroupés. Pour scinder un groupe de trois, fusionnez d’abord les deux qui sont identiques. Le serveur répond par 422 lorsque les ids ne forment pas exactement un groupe ouvert.

Permission : content.write

Exemple
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 Lister les groupes de témoignages qui sont probablement le même en double testimonial_duplicates_list

Les correspondances exactes viennent en premier. Chaque groupe contient ses exemplaires en entier et keeper_id, l’exemplaire qui serait conservé. meta.exact_groups est le nombre de groupes que testimonial_duplicates_merge_exact fusionnerait.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/duplicates.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/:id/merge.json Fusionner des exemplaires d’un témoignage dans celui du chemin testimonials_merge

L’exemplaire conservé garde son statut et son état de vérification, et ses mots sauf si body_from désigne un autre exemplaire. Il gagne les étiquettes, collections manuelles, emplacements et propriétés personnalisées qui lui manquent. Les exemplaires vont dans la corbeille marqués comme fusionnés, et en restaurer un annule la fusion pour cet exemplaire. Un exemplaire arrivé ce mois-ci cesse de compter comme un nouveau témoignage. La réponse contient meta.undo_id.

Permission : content.write

Exemple
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 Fusionner d’un coup toutes les correspondances exactes de la file testimonial_duplicates_merge_exact

Envoyez d’abord dry_run pour obtenir les compteurs, puis confirm_count avec le total qu’il a donné. Jusqu’à 100 groupes sont fusionnés par appel. La réponse contient meta.undo_id, et une seule annulation défait toute l’exécution.

Permission : content.write

Exemple
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 '{…}'

Détection des bots

GET /sites/:site_id/bot-detection.json Rapport de détection avancée des bots : hits sur les pages honeypot du site, par page et par ce qui a trahi le bot bot_detection_report

Rapporte les hits sur les pages honeypot du site. Une page honeypot est une page atteinte uniquement par un lien caché et configurée comme la page de détection avancée des bots de l’application l’indique. Ces hits sont des bots : ce ne sont donc jamais des pages vues ni des visites, et ils n’apparaissent pas dans stats_overview ni dans stats_breakdown. Choisissez la plage avec period (7d, 30d (par défaut), 90d ou 12mo). Les hits sont conservés 12 mois. Le résultat contient period, from (le début de la plage), has_data (false jusqu’au premier hit), totals (hits, pages distinctes, automated (hits où le traceur a vu un navigateur automatisé) et no_interaction (hits sans entrée du pointeur, du clavier ou tactile)), pages (jusqu’à 50 lignes avec path, hits et last_hit_at), reasons (hits par résultat du filtre de bots standard : known_bot, automation, datacenter, empty_user_agent, referrer_spam, ou undetected pour un hit que le filtre aurait compté comme une personne) et recent (les 50 derniers hits avec occurred_at, path, country, browser, device, bot_reason, automation et interacted). Aucune adresse IP ni aucun User-Agent n’est conservé avec un hit, seulement des hachages à clé de ceux-ci qui ne peuvent identifier personne, et ils ne sont jamais renvoyés. Exige analytics.read et le forfait Business ou Enterprise (sinon 402 plan_limit).

Permission : analytics.read

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

Emplacements publicitaires

POST /sites/:site_id/experiments/ads.json Créer un emplacement publicitaire ad_placements_create

Crée un espace d'une seule taille sur le site. Envoyez size (une taille courante comme medium_rectangle ou leaderboard) ou width et height en pixels. key est le nom sous lequel la balise du site le désigne, et il est tiré du nom s'il est omis. Ajoutez ensuite des visuels avec ad_creatives_create et placez sur le site la balise obtenue avec ad_placements_embed. Nécessite content.write.

Permission : content.write

Exemple
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 Supprimer un emplacement publicitaire avec ses visuels ad_placements_delete

Supprime définitivement un emplacement avec ses visuels et leurs images, ses expériences publicitaires et leurs résultats, ainsi que ses liens sponsor. La balise sur le site n'affiche alors plus rien. L'outil MCP ne l'exécute pas et répond avec human_only et la page où une personne le supprime. Nécessite content.write.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir la balise qui affiche un emplacement sur le site ad_placements_embed

Le script du chargeur (une fois par page) et l'espace de cet emplacement, en html à coller. L'espace garde sa taille avant l'exécution du chargeur. Nécessite analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/experiments/ads/:id/embed.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/experiments/ads.json Lister les emplacements publicitaires d'un site avec leurs 30 derniers jours ad_placements_list

Chaque emplacement avec sa clé, sa taille, son nombre de visuels et ses statistiques (impressions, impressions visibles, clics et ctr, le taux de clic par impression visible) sur les 30 derniers jours. Nécessite analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/experiments/ads.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/experiments/ads/:id.json Obtenir un emplacement avec les chiffres de chaque visuel ad_placements_get

L'emplacement, ses visuels avec leurs statistiques sur la période (7d, 30d ou 90d) et les chiffres de l'emplacement jour par jour. humans_only conserve ce que le score de bots juge probablement humain (Pro et supérieur). Nécessite analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/experiments/ads/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/experiments/ads/:id.json Modifier un emplacement publicitaire ad_placements_update

Modifie le nom, la clé, la taille ou le libellé. Seules les valeurs envoyées changent. Une nouvelle clé exige la nouvelle balise sur le site. Nécessite content.write.

Permission : content.write

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

En direct

GET /sites/:site_id/live.json Visiteurs en direct, flux d’activité et ce qui est populaire en ce moment (30 dernières minutes) live_get

Ce qui se passe sur le site en ce moment. Renvoie live_visitors (visiteurs des 5 dernières minutes), window_minutes (30), sparkline (visites par minute pour les 30 dernières minutes, les plus anciennes d’abord, chacune {minute, visits}), feed (l’activité la plus récente), top_pages, top_referrers, top_countries (chacun jusqu’à 8 lignes de {value, visits}) et top_events (jusqu’à 8 de {value, completions}) pour les 30 dernières minutes. Les entrées de feed contiennent occurred_at, kind, name, path, channel, referrer_host, country, device et browser. Elles sont anonymes, sans IP, ville ni trace de visiteur. feed montre tous les hits par défaut, ou seulement les pages vues ou les événements, avec limit entrées (50 par défaut, jusqu’à la taille du tampon de 100). Les chiffres ne sont pas mis en cache et n’acceptent pas de période. Passez filters (même format que stats_aggregate) pour limiter tous les chiffres et le feed aux hits correspondants. Utilisez live_wallboard pour une vue compacte de plusieurs sites et stats_overview pour une période complète.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/live.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/live/wallboard.json Cartes d’écran d’affichage (en direct et aujourd’hui) pour un ou plusieurs sites live_wallboard

Cartes compactes à gros chiffres pour un ou plusieurs sites, conçues pour un écran de bureau. Renvoie rotate_seconds, generated_at et sites. Chaque carte de site contient id (pa_...), name, domain, live_visitors (5 dernières minutes), sparkline (par minute, 30 dernières minutes), visitors_today, pageviews_today, bounce_rate_today (pourcentage, de 0 à 100), top_pages, top_countries et top_referrers (5 lignes chacun). Aujourd’hui s’entend dans le fuseau horaire propre du site et les chiffres sont lus à partir des données en direct. site_ids liste les sites à inclure (jusqu’à 12, uniquement les sites que votre jeton peut ouvrir), sinon le site du chemin est utilisé. rotate_seconds est borné entre 5 et 300 et indique seulement à un écran combien de temps afficher chaque carte. Pour un écran public partageable, utilisez wallboard_links_create. Utilisez live_get pour la vue en direct complète d’un site.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/live/wallboard.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /wallboard/:token.json Écran d’affichage pour un jeton d’écran (aucune connexion requise) live_public_wallboard

Permission : public · HTTP uniquement (pas un outil MCP)

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

Entonnoirs

POST /sites/:site_id/funnels.json Créer un entonnoir funnels_create

Crée un entonnoir, une séquence d’étapes que les visites parcourent, mesurée par visite. Passez name et steps, une liste ordonnée de {type, value, match, name}. type vaut page, event ou goal. value est un chemin pour les étapes page (par exemple /pricing), un nom d’événement personnalisé pour les étapes event, ou un id d’objectif (goal_..., provenant de goals_list) pour les étapes goal. match ne concerne que les étapes page et vaut exact, prefix, glob (caractère générique *) ou regex, avec glob par défaut lorsque la valeur contient un * et exact sinon. name est un libellé facultatif. Les étapes avec une valeur vide sont ignorées. order_mode vaut strict (chaque étape doit venir après la précédente, par défaut) ou any (étapes dans n’importe quel ordre). window vaut visit (par défaut) ou day, et les deux mesurent au sein d’une seule visite, car aucun identifiant de visiteur n’est stocké. Les limites du forfait s’appliquent. Free autorise 3 entonnoirs par site et 5 étapes, Pro autorise 10 étapes et Business 20, et un entonnoir a besoin d’au moins 2 étapes. Renvoie l’entonnoir avec id (fun_...). Lisez les résultats avec funnels_get. Exige la permission content.write.

Permission : content.write

Exemple
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 Supprimer un entonnoir funnels_delete

Supprime définitivement la définition d’un entonnoir. Aucune donnée d’analyse n’est touchée, mais l’entonnoir et ses réglages ne peuvent pas être récupérés et il n’y a pas d’annulation possible. Renvoie l’entonnoir supprimé. Les ids (fun_...) proviennent de funnels_list. Utilisez plutôt funnels_update pour modifier un entonnoir. Exige la permission content.write.

Permission : content.write

Exemple
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 Lister les entonnoirs avec entrées, réalisations et taux funnels_list

Liste les entonnoirs d’un site avec leurs résultats principaux pour la période, triés par nom. Chaque entonnoir contient id (fun_...), name, steps, order_mode, window et stats {entered, completed, conversion_rate}, où entered correspond aux visites qui ont atteint l’étape 1, completed aux visites qui ont atteint la dernière étape et conversion_rate est un pourcentage (de 0 à 100). Paginé avec page et per_page (100 maximum, 25 par défaut). Accepte les entrées communes period et filters. Pour le détail étape par étape, utilisez funnels_get, et utilisez funnels_create pour en ajouter un.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/funnels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/funnels/:id.json Rapport d’entonnoir : effectifs par étape, conversion, abandons, temps entre les étapes et destination des visites à la place funnels_get

Le rapport de conversion d’un entonnoir pour une période. Renvoie period, funnel_id, name, order_mode, window, steps, overall_conversion_rate, breakdown et, avec compare, comparison. Chaque étape contient index (à partir de 1), name, type, value, match, count (les visites qui l’ont atteinte), step_conversion_rate (pourcentage de l’étape précédente), overall_conversion_rate (pourcentage de l’étape 1), dropoff et dropoff_rate (les visites parties après cette étape), median_seconds_from_previous (null pour l’étape 1) et next_pages (les 5 pages les plus visitées ensuite par les visites perdues, avec (exit) pour celles qui sont parties). Les taux sont des pourcentages de 0 à 100. Définissez breakdown à channel, device, country, utm_campaign, utm_source, browser ou os pour obtenir la conversion globale par valeur (les 20 premières). comparison contient les décomptes de l’autre période, overall_conversion_rate et change (pourcentage, null lorsque le taux précédent était 0). Les filtres de page sont ignorés ici, car ils couperaient les visites : utilisez plutôt une étape page. Accepte les entrées communes period, compare, filters et segment. Les ids proviennent de funnels_list.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/funnels/:id.json Mettre à jour un entonnoir funnels_update

Modifie un entonnoir. Seules les entrées que vous envoyez changent. Envoyer steps remplace toute la liste d’étapes : envoyez donc chaque étape dans l’ordre (le format et les limites d’étapes sont les mêmes que dans funnels_create, Free autorise 5 étapes, Pro 10 et Business 20, et les étapes goal doivent nommer des objectifs de ce site). Vous pouvez aussi modifier name, order_mode (strict ou any) et window (visit ou day). Les résultats sont calculés à partir de la définition à la lecture : modifier un entonnoir s’applique donc immédiatement à tout l’historique, et les chiffres passés affichés auparavant seront différents. Renvoie l’entonnoir. Les ids proviennent de funnels_list. Exige la permission content.write.

Permission : content.write

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

Entreprises des témoignages

GET /sites/:site_id/testimonials/companies.json Lister les entreprises d’un site avec leurs personnes, leurs témoignages et leur note moyenne testimonial_companies_list

Une ligne par entreprise, regroupée d’après le nom d’entreprise et le site web des personnes du site. Une personne sans entreprise n’est dans aucune. query correspond à une partie d’un nom d’entreprise ou de l’hôte de son site web. sort vaut name (par défaut), people_desc, testimonials_desc ou received_desc.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/companies.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/companies/:id/merge.json Fusionner une entreprise dans une autre, pour deux graphies d’une même entreprise testimonial_companies_merge

Chaque personne de l’entreprise du chemin prend le nom et l’URL de l’entreprise désignée par into.

Permission : content.write

Exemple
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 Obtenir une entreprise avec ses personnes testimonial_companies_get

L’id est la clé de l’entreprise, un hôte de site web ou un nom normalisé, tel que testimonial_companies_list le renvoie. Ses témoignages sont testimonials_list avec company.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/companies/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/companies/:id.json Corriger le nom et l’URL d’une entreprise pour toutes ses personnes à la fois testimonial_companies_update

L’id d’une entreprise vient de son URL ou de son nom, donc la réponse peut contenir un nouvel id.

Permission : content.write

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

Espaces de travail

GET /workspaces/:workspace_id/white_label.json Obtenir la marque en marque blanche white_label_get

Renvoie l’image de marque en marque blanche de l’espace de travail. Les champs sont workspace_id (ws_...), brand_name, brand_logo_url et brand_color (une couleur hexadécimale comme #06755b), chacun null lorsqu’il n’est pas défini, hide_branding, available (true lorsque le forfait inclut la marque blanche, soit Business et au-dessus) et active (true lorsque l’image de marque est définie et en vigueur). L’image de marque remplace Privatus Analytics sur les tableaux de bord partagés, les intégrations, les pages d’état et les rapports par e-mail. Exige workspace.manage.

Permission : workspace.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/white_label.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/white_label.json Définir la marque blanche pour les tableaux de bord partagés et les rapports par e-mail (Business) white_label_update

Définit l’image de marque en marque blanche de l’espace de travail. Forfait Business uniquement, sinon il échoue avec une erreur de forfait. Seules les entrées que vous envoyez changent, et une chaîne vide efface brand_name, brand_logo_url ou brand_color. brand_logo_url doit être une URL https vers une image et brand_color une couleur hexadécimale comme #06755b. hide_branding à true retire le lien Privatus Analytics des tableaux de bord partagés, des intégrations et des pages d’état, ainsi que le logo des rapports par e-mail. Le changement s’applique immédiatement aux liens de partage existants. Exige workspace.manage. Renvoie l’image de marque (voir white_label_get).

Permission : workspace.manage

Exemple
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 Obtenir les paramètres de sécurité de l’espace de travail workspace_security_get

Renvoie la politique de sécurité de l’espace de travail. Les champs sont workspace_id (ws_...), enforce_2fa (les membres doivent utiliser l’authentification à deux facteurs), login_methods (les méthodes autorisées parmi password, magic_link, passkey, google, github et sso), session_ttl_hours (déconnexion après ce nombre d’heures, null pour aucune limite), app_ip_allowlist (adresses IP ou plages CIDR autorisées à utiliser l’application et l’API, vide signifie de n’importe où) et support_access_until (heure ISO 8601 jusqu’à laquelle le support Privatus Analytics peut consulter l’espace de travail, null lorsqu’aucun accès n’est accordé). Exige workspace.manage.

Permission : workspace.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/security.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/security.json Mettre à jour les paramètres de sécurité de l’espace de travail (2FA, méthodes de connexion, durée de session, liste d’IP autorisées, accès du support) workspace_security_update

Modifie la politique de sécurité de l’espace de travail, uniquement les entrées que vous envoyez. enforce_2fa à true exige que chaque membre utilise l’authentification à deux facteurs et nécessite le forfait Business. login_methods remplace la liste autorisée par des valeurs parmi password, magic_link, passkey, google, github et sso, et retirer une méthode déconnecte les connexions mémorisées des membres, qui doivent donc se reconnecter. session_ttl_hours déconnecte les membres après ce nombre d’heures (0 retire la limite). app_ip_allowlist remplace la liste des adresses IP ou plages CIDR autorisées à accéder à l’application et à l’API (forfait Business, une liste vide signifie de n’importe où) et est refusée si elle excluait l’adresse IP de l’appelant : vous ne pouvez donc pas vous enfermer dehors. support_access à true permet au support Privatus Analytics de consulter l’espace de travail pendant 7 jours et false retire cet accès. Exige workspace.manage. Renvoie la politique (voir workspace_security_get).

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Créer un espace de travail (vous en devenez le propriétaire) workspaces_create

Permission : member · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/workspaces.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
DELETE /workspaces/:id.json Supprimer un espace de travail et tous ses sites (propriétaire uniquement, résilie tout abonnement) workspaces_delete

Supprime un espace de travail avec tous ses sites. C’est une suppression logique : tout disparaît aussitôt et est définitivement purgé après 7 jours, considérez-la donc comme irréversible. Seul le propriétaire peut le faire, et confirm doit être le nom exact de l’espace de travail (sensible à la casse). Un abonnement payant actif est d’abord résilié immédiatement, et si cette résiliation échoue, rien n’est supprimé. Les transferts de site en attente depuis l’espace de travail sont annulés. Les membres perdent l’accès. Utilisez workspaces_get pour lire le nom. Exige workspace.manage et le rôle owner. Renvoie l’espace de travail.

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

Exemple
curl -X DELETE https://privatusanalytics.com/workspaces/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
GET /workspaces.json Lister vos espaces de travail workspaces_list

Liste les espaces de travail auxquels l’appelant appartient, triés par nom. Un jeton d’API ou une connexion MCP ne voit que l’espace de travail pour lequel il a été émis. Chaque élément contient id (ws_..., utilisé comme workspace_id par la plupart des outils), name, timezone, currency, plan, plan_events, subscription_status et role (le rôle de l’appelant). Appelez ensuite sites_list avec un id d’espace de travail pour trouver les ids de site. Créer un espace de travail n’est possible que dans l’application.

Permission : member

Exemple
curl https://privatusanalytics.com/workspaces.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:id.json Obtenir un espace de travail workspaces_get

Renvoie un espace de travail par son id public (ws_..., provenant de workspaces_list). Les champs sont id, name, timezone (nom IANA), currency (ISO 4217), plan (free, pro, business ou enterprise), plan_events (le quota mensuel d’événements du forfait), subscription_status (none, trialing, active, past_due, paused ou canceled), role (le rôle de l’appelant dans celui-ci) et created_at. Utilisez billing_get pour les détails complets de facturation et billing_usage pour l’utilisation de ce mois. Tout membre peut le lire.

Permission : member

Exemple
curl https://privatusanalytics.com/workspaces/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:id.json Mettre à jour les paramètres de l’espace de travail workspaces_update

Modifie le nom, le fuseau horaire par défaut ou la devise par défaut d’un espace de travail, uniquement les entrées que vous envoyez. timezone est un nom IANA comme Europe/Berlin et currency est un code ISO 4217 à 3 lettres. Ce sont des valeurs par défaut pour les nouveaux sites, elles ne modifient pas les sites existants (utilisez sites_update pour ceux-ci). Exige workspace.manage. Renvoie l’espace de travail (voir workspaces_get).

Permission : workspace.manage

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

Exports

POST /workspaces/:workspace_id/exports.json Mettre un export en file d’attente (généré en arrière-plan) exports_create

Met en file d’attente un export de données construit en arrière-plan et le renvoie aussitôt avec le statut queued. Choisissez-le lorsque vous avez besoin d’un fichier (CSV, JSON, XLSX, NDJSON ou un ZIP de panneaux de tableau de bord), et utilisez d’abord exports_preview pour vérifier les colonnes et la taille sans rien créer. Pour des chiffres légers, utilisez plutôt les outils de statistiques. Les entrées obligatoires sont workspace_id (chemin), site_id, from et to (YYYY-MM-DD, bornes incluses, dans le fuseau horaire de l’export). kind décide de ce qui est exporté et des options qui s’appliquent. aggregated (par défaut) donne les métriques de visite par intervalle de temps et utilise grouping, dimensions (jusqu’à 6), metrics, filters et segment_id. pageviews, events et raw donnent une ligne par hit et utilisent fields, filters et segment_id, exigent le forfait Pro ou supérieur et sont limités à 400 jours (raw à 93 jours). imported donne les statistiques quotidiennes importées et n’utilise que dimensions. dashboard donne un ZIP des panneaux de la vue d’ensemble (format zip uniquement). Les file_format autorisés par type sont csv, json ou xlsx pour aggregated, pageviews, events et imported, csv ou ndjson pour raw, et zip pour dashboard. Les options qui ne s’appliquent pas au type choisi sont ignorées. Un espace de travail peut avoir au plus 5 exports en file d’attente ou en cours en même temps. La réponse est l’export avec id (exp_...), status, row_count et expires_at (null tant qu’il n’est pas construit). Interrogez exports_get jusqu’à ce que status vaille complete, puis appelez exports_download. L’utilisateur demandeur reçoit un e-mail lorsqu’il est prêt, un webhook export.ready est envoyé et l’action est consignée dans le journal d’audit. Les propriétés d’événements dans la colonne props n’incluent que celles marquées comme sûres pour l’export (voir event_properties_list).

Permission : analytics.export

Exemple
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 Supprimer un export et son fichier exports_delete

Supprime définitivement un export et son fichier généré. Le lien de téléchargement cesse aussitôt de fonctionner et c’est irréversible, mais vous pouvez recréer l’export. Utilisez-le pour retirer un export terminé ou échoué dont vous n’avez plus besoin, puisque les fichiers sont aussi supprimés automatiquement 7 jours après leur construction. L’id provient de exports_list. Renvoie l’objet d’export supprimé tel qu’il était avant la suppression.

Permission : analytics.export · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir un lien signé vers le fichier (valable 10 minutes) exports_download

Renvoie un lien de téléchargement de courte durée pour un export terminé. Choisissez-le après que exports_get a montré le statut complete. La réponse contient url (un lien signé valable 10 minutes, à récupérer immédiatement), expires_at (le moment où le lien cesse de fonctionner, ISO 8601), filename et byte_size (octets). Il échoue avec un code d’erreur not found expired lorsque l’export a plus de 7 jours, et avec une erreur de validation lorsque l’export est encore en file d’attente ou en cours ou lorsqu’il a échoué (le message d’erreur en donne la raison). Appelez-le à nouveau pour obtenir un lien neuf tant que l’export lui-même n’a pas expiré. L’id provient de exports_list.

Permission : analytics.export

Exemple
curl https://privatusanalytics.com/exports/:id/download.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/exports.json Lister les exports (la file de tâches) exports_list

Liste les exports d’un espace de travail pour les sites auxquels vous avez accès, du plus récent au plus ancien. Utilisez-le pour trouver l’id d’un export, vérifier quels exports sont encore en cours ou voir ce qui a expiré. Filtrez avec site_id, status (queued, running, complete, failed ou expired) et kind (aggregated, pageviews, events, imported, raw ou dashboard). Paginé avec page et per_page (jusqu’à 100), et renvoie data (une liste d’exports, voir exports_get pour les champs) plus la pagination meta. Nécessite le workspace_id de workspaces_list.

Permission : analytics.export

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/exports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/exports/preview.json Prévisualiser un export : les 20 premières lignes et le nombre de lignes estimé exports_preview

Simulation d’un export qui ne crée rien. Il prend les mêmes entrées que exports_create et renvoie kind, file_format, columns (les noms de colonnes dans l’ordre), rows (jusqu’à 20 lignes d’exemple sous forme d’objets indexés par colonne) et estimated_rows (un nombre de lignes approximatif du fichier complet). Pour le type dashboard, les lignes d’exemple listent chaque nom de fichier avec son nombre de lignes. Utilisez-le pour valider les dimensions, les champs, les filtres et la plage de dates, et pour voir la taille de l’export avant d’appeler exports_create. Il s’exécute de façon synchrone : gardez donc une plage de dates raisonnable. Les erreurs de validation sont les mêmes que pour exports_create, y compris l’exigence du forfait Pro pour les types au niveau des lignes. Rien n’est stocké et aucun e-mail n’est envoyé.

Permission : analytics.export

Exemple
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 Obtenir un export et son statut exports_get

Renvoie un export, avec sa progression. Utilisez-le pour interroger un export démarré avec exports_create jusqu’à ce que status vaille complete ou failed. Les statuts sont queued, running, complete, failed et expired. Les champs comprennent id (exp_...), site_id (pa_...), kind, format, status, params (la définition stockée de l’export), row_count (null jusqu’à complete), error (renseigné en cas d’échec), completed_at, expires_at (les fichiers sont conservés 7 jours après la fin), download_url (renseigné uniquement tant que le fichier peut être téléchargé, utilisez exports_download pour obtenir un lien signé) et created_at. L’id provient de exports_create ou exports_list.

Permission : analytics.export

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

Expériences

POST /sites/:site_id/experiments.json Créer une expérience en brouillon experiments_create

Crée un test A/B ou un test d’URL fractionnées pour un site. Il est enregistré en brouillon et n’envoie aucun visiteur nulle part tant qu’une personne ne le démarre pas dans l’app. Sont requis name, path (la page d’origine, comme /pricing), goal_id (issu de goals_list) et variants : une liste de { name, path, weight } où la première ligne est la page d’origine (son path est ignoré) et chaque autre ligne est une page du même site. Omettez tous les weight pour une répartition égale, ou envoyez des poids dont la somme est 100. Le forfait Gratuit autorise une expérience à la fois avec l’origine et une variante. Pro et supérieur ajoutent d’autres variantes, l’allocation automatique, le ciblage, un * dans le chemin, des objectifs secondaires, un démarrage planifié et des groupes exclusifs. Nécessite content.write. Renvoie l’expérience.

Permission : content.write

Exemple
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 Supprimer une expérience avec ses résultats experiments_delete

Supprime définitivement une expérience avec ses variantes et ses résultats. Cette action est irréversible. Utilisez experiments_pause pour l’arrêter et garder les résultats. L’outil MCP ne l’exécute pas et répond avec human_only et la page où une personne la supprime. Nécessite content.write.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Copier une expérience en nouveau brouillon experiments_duplicate

Crée un brouillon avec les mêmes pages, parts, objectif et règles qu’une expérience existante, sans aucun de ses résultats. Utilisez-le pour modifier un test déjà démarré. Compte dans la limite du forfait comme une nouvelle expérience. Nécessite content.write. Renvoie la nouvelle expérience.

Permission : content.write

Exemple
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 Terminer une expérience définitivement experiments_end

Termine une expérience en cours ou en pause. Elle ne peut plus être redémarrée, ses résultats sont conservés et elle ne compte plus dans la limite du forfait. L’outil MCP ne l’exécute pas et répond avec human_only et la page où une personne la termine. L’API l’exécute. Nécessite content.write.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les expériences d’un site experiments_list

Liste les tests A/B et les tests d’URL fractionnées d’un site, du plus récent au plus ancien. Filtrez avec status (draft, scheduled, running, paused, ended ou all, all par défaut). Paginé avec page et per_page (25 par défaut, jusqu’à 100). Chaque expérience a id (exp_...), name, status, path (la page d’origine), goal_id, variants (id, name, path, weight, control), les règles de fin et locked (true quand le forfait ne la couvre plus). Nécessite analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/experiments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/experiments/:id/pause.json Mettre une expérience en pause et garder ses résultats experiments_pause

Met en pause une expérience en cours ou planifiée. Tous les visiteurs reçoivent de nouveau la page d’origine immédiatement et les résultats obtenus jusque-là sont conservés. experiments_start la reprend. Nécessite content.write. Renvoie l’expérience.

Permission : content.write

Exemple
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 Obtenir une expérience avec ses résultats experiments_get

Renvoie une expérience par id (exp_..., issu de experiments_list) avec ses résultats : par variante les visites, les conversions et le taux de conversion sur l’objectif, et par rapport à l’origine le gain, la plage probable de la différence, la valeur p, la significativité au niveau de confiance choisi et la probabilité de battre l’origine. results.progress indique à quelle distance elle est de pouvoir désigner une gagnante, et results.mismatch.found à true signifie que les visites ne sont pas réparties selon les parts, donc que le résultat ne doit pas être cru. split ventile les résultats par appareil, canal ou pays (Pro et supérieur) et humans_only ne garde que les visites que le score de bot juge probablement humaines (Business). Une visite est comptée pour une variante quand elle a vu cette variante, et une conversion ne compte qu’après. Nécessite analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/experiments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/experiments/:id/start.json Démarrer une expérience experiments_start

Démarre une expérience en brouillon ou en pause, de sorte que les visiteurs de la page d’origine commencent à être envoyés vers les variantes. Avec un starts_at dans le futur, elle attend cette heure. Comme elle redirige de vrais visiteurs, l’outil MCP ne l’exécute pas et répond avec human_only et la page où une personne la démarre. L’API l’exécute. Nécessite content.write.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Mettre à jour une expérience experiments_update

Modifie une expérience. Seules les entrées envoyées changent, et variants remplace toute la liste. Une fois l’expérience démarrée, seuls name et send_to_winner peuvent changer, car de nouvelles pages, parts ou objectifs en cours de route fausseraient le résultat : utilisez experiments_duplicate et modifiez la copie. Nécessite content.write. Renvoie l’expérience.

Permission : content.write

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

Exécutions d’importation des témoignages

GET /sites/:site_id/testimonials/imports/sources/:import_source_id/runs.json Lister les exécutions d’une source, de la plus récente à la plus ancienne testimonial_import_runs_list

Chaque exécution a son numéro, ce qui l’a lancée, son statut, les pages lues et le nombre de témoignages trouvés, nouveaux, en doublon, en échec et conservés, avec les heures de début et de fin.

Permission : analytics.read

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

Facturation

POST /workspaces/:workspace_id/billing/badge.json Activer ou désactiver le bonus du badge (forfait gratuit) billing_badge

Active ou désactive pour un espace de travail Free le bonus du badge Privatus Analytics, qui augmente le quota mensuel d’événements. Définissez enabled à true pour l’activer. Une vérification en arrière-plan cherche alors le badge sur les sites de l’espace de travail et le valide, ce qui peut prendre un moment : lisez ensuite billing_get et regardez badge.verified_at. Définissez enabled à false pour le désactiver, ce qui efface les dates de vérification et retire le bonus. L’activer sur un espace de travail Pro ou Business est refusé, car les forfaits payants n’ont pas de bonus. Renvoie l’objet de facturation de l’espace de travail comme billing_get. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Annuler à la fin de la période de facturation billing_cancel

Annule l’abonnement payant à la fin de la période payée en cours. Rien n’est remboursé et le forfait reste actif jusqu’à current_period_ends_at, après quoi l’espace de travail passe au forfait Free. Utilisez billing_resume pour annuler cette action avant cette date. Échoue lorsque l’espace de travail n’a pas d’abonnement ou qu’une annulation est déjà programmée. Le reason facultatif (l’une des valeurs de l’énumération) et comment forment un questionnaire de départ. Un comment, s’il est fourni, est envoyé par e-mail à l’équipe Privatus Analytics comme message de retour du membre et n’est pas stocké. Renvoie l’objet de facturation avec cancel_at_period_end à true. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Changer de forfait, de palier ou d’intervalle (au prorata) billing_change_plan

Fait passer l’abonnement existant à un autre forfait, palier d’événements ou intervalle de facturation. Cette action est payante. Le changement prend effet immédiatement et Paddle calcule un prorata : un débit ou un crédit est donc appliqué aussitôt au moyen de paiement enregistré. Exécutez d’abord billing_preview avec les mêmes entrées pour voir les montants exacts. Échoue si l’espace de travail n’a pas d’abonnement (utilisez billing_checkout dans ce cas), si la cible est le forfait, le palier et l’intervalle actuels, ou si aucun prix n’existe pour cette combinaison de forfait et d’événements. La valeur events doit être l’un des paliers de plans_list. Renvoie l’objet de facturation mis à jour. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Démarrer un paiement Paddle pour un forfait payant billing_checkout

Démarre un paiement Paddle pour un espace de travail qui n’a pas encore d’abonnement et renvoie une URL de paiement hébergée. Rien n’est débité tant qu’une personne n’a pas terminé le paiement dans un navigateur : donnez donc l’url à la personne. Utilisez plutôt billing_change_plan lorsque l’espace de travail a déjà un abonnement. Les entrées sont plan (pro ou business), events (un palier d’événements par mois de plans_list) et interval (month ou year, month par défaut). Les prix incluent la TVA ou la taxe de vente. Un programme de remise approuvé est appliqué automatiquement et indiqué dans discount_id. Renvoie transaction_id, url (peut être null), price_id, plan, events, interval, amount (dollars entiers pour l’intervalle), client_token et environment (sandbox ou production, utilisé par la fenêtre Paddle), custom_data et discount_id (peut être null). Échoue si l’espace de travail a déjà un abonnement. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Demander une remise pour association, éducation ou open source billing_discount

Demande un programme de remise pour l’espace de travail. Cela soumet une candidature à l’examen de l’équipe et envoie un e-mail à l’équipe Privatus Analytics, sans accorder de remise par lui-même. Les programmes sont nonprofit, education, open_source (50 % de réduction), open_source_free (Pro gratuit jusqu’à 1 M d’événements par mois) et agency (20 % de réduction sur chaque espace de travail dont vous êtes propriétaire). Une seule candidature ouverte (pending, approved ou active) est autorisée par espace de travail, et vous pouvez candidater à nouveau après un rejet ou une révocation. license n’est conservé que pour les deux programmes open source. Renvoie la candidature avec program, status, percent, comp_events (peut être null), organization_name, website, proof_url, license, note, rejection_reason, created_at, reviewed_at, applied_at et revoked_at (horodatages pouvant être null). Suivez l’avancement plus tard dans le champ discount de billing_get. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir un lien pour mettre à jour le moyen de paiement billing_payment_method

Renvoie un lien Paddle où une personne peut mettre à jour le moyen de paiement de l’abonnement. L’appel lui-même ne modifie rien. Donnez l’url à la personne pour qu’elle l’ouvre dans un navigateur. Le résultat contient kind (payment_method) et url. Échoue lorsque l’espace de travail n’a pas d’abonnement actif. Pour les factures, les adresses et tous les autres détails de facturation, utilisez billing_portal. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir un lien vers le portail client Paddle billing_portal

Renvoie un lien vers le portail client Paddle, où une personne peut consulter ses factures, ses moyens de paiement et ses adresses. L’appel lui-même ne modifie rien. Donnez l’url à la personne pour qu’elle l’ouvre dans un navigateur. Le résultat contient kind (portal) et url. Échoue si l’espace de travail n’a pas encore de client Paddle (il n’a jamais payé) ou lorsque le client est partagé avec d’autres espaces de travail auxquels l’appelant n’a pas accès, car le portail expose toutes les données du client. Utilisez billing_payment_method pour la seule carte. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Prévisualiser un changement de forfait avec le prorata billing_preview

Montre ce que coûterait dès maintenant le passage de l’abonnement à un autre forfait, palier ou intervalle, sans rien modifier. Exécutez-le toujours avant billing_change_plan avec les mêmes entrées plan, events et interval. Échoue si l’espace de travail n’a pas d’abonnement ou si la cible est égale au prix actuel. Renvoie plan, events, interval, price_id, amount (prix catalogue en dollars entiers pour l’intervalle), currency, charge_minor (ce qui serait débité maintenant), credit_minor (crédit pour le temps non utilisé) et result_minor (montant net), tous en unités mineures de la devise, result_action (charge ou credit, peut être null), next_billed_at (peut être null) et warnings (des chaînes, par exemple lorsque l’utilisation du mois dernier dépasse le nouveau palier ou que des limites du forfait, comme les sites ou les membres, seraient dépassées par le nouveau forfait). Exige billing.manage.

Permission : billing.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/billing/resume.json Annuler une résiliation programmée ou reprendre une pause billing_resume

Annule une annulation programmée, ou reprend un abonnement mis en pause, pour que le forfait continue de se renouveler. Utilisez-le après billing_cancel et avant current_period_ends_at. Un abonnement en pause reprend immédiatement. Échoue lorsqu’il n’y a aucune annulation programmée et que l’abonnement n’est pas en pause. Renvoie l’objet de facturation mis à jour. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir le forfait, l’abonnement et l’utilisation billing_get

Renvoie le forfait et l’état de facturation de l’espace de travail. Utilisez-le avant de changer quoi que ce soit en facturation, et pour savoir si l’abonnement est actif ou en cours d’annulation. Les champs comprennent workspace_id, plan (free, pro, business ou enterprise), plan_events (le palier d’événements par mois vendu), allowance (les événements par mois réellement autorisés, bonus de badge compris), billing_interval (month ou year, peut être null), price (dollars entiers pour l’intervalle, peut être null), subscription_status, current_period_ends_at, cancel_at_period_end (true lorsqu’une annulation est programmée), canceled_at, auto_upgrade, discount (la dernière candidature de remise, peut être null), discount_percent, billing_emails (tableau), tax_id, badge (opted_in, verified_at, checked_at et la taille du bonus) et usage (le même objet que renvoie billing_usage). Exige billing.manage. Les factures se trouvent dans billing_invoices_list et une vue de l’utilisation mois par mois dans billing_usage.

Permission : billing.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/billing.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/billing.json Mettre à jour les e-mails de facturation, le numéro de TVA et la mise à niveau automatique billing_update

Met à jour les réglages de facturation de l’espace de travail. Seules les entrées que vous envoyez changent. billing_emails est un tableau d’au plus 5 adresses supplémentaires pour les factures et les avis de facturation, et remplace toute la liste. tax_id est stocké sur l’espace de travail et n’est pas ajouté aux factures : il doit donc aussi être saisi lors du paiement. auto_upgrade vaut false par défaut. Lorsqu’il vaut true, atteindre la limite mensuelle d’événements fait passer l’espace de travail au palier suivant et facture la différence au lieu de mettre la collecte en pause. L’activer alors que la collecte est déjà en pause à cause de la limite applique la mise à niveau et facture immédiatement, puis envoie un e-mail de confirmation, et si Paddle refuse la mise à niveau, rien n’est enregistré. Renvoie l’objet de facturation comme billing_get. Exige billing.manage.

Permission : billing.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir l’utilisation du mois, la prévision et la répartition par site billing_usage

Renvoie l’utilisation d’événements de l’espace de travail pour un mois. Utilisez-le pour vérifier à quel point l’espace de travail est proche de sa limite mensuelle stricte. L’entrée est month (n’importe quel jour du mois, le mois en cours par défaut). Seules les pages vues et les événements personnalisés comptent. Les champs sont month, events, bots (nombre agrégé de bots, non facturé), allowance, percent (de 0 à 100 et au-delà, une décimale), forecast et forecast_percent (projection linéaire jusqu’à la fin du mois, null pour les mois passés), days_left, status (ok, warning à 80 %, over à 100 %, paused ou locked), sites (par site : site_id, domain, name, events et part en pourcentage, le plus grand d’abord), history (les mois précédents sous la forme month et events), access_locked_at, collection_paused (true lorsque les nouveaux événements sont abandonnés), pause_reason (limit ou staff, peut être null), collection_paused_at et resumes_at (le 1er du mois suivant lorsque la pause vient de la limite). Exige billing.manage.

Permission : billing.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/usage.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/billing/invoices.json Lister les factures billing_invoices_list

Liste les transactions de facturation de l’espace de travail, de la plus récente à la plus ancienne. Chaque élément contient id (à utiliser avec billing_invoices_get), invoice_number (peut être null), status, amount_minor (entier en unités mineures de la devise, donc 900 signifie 9,00), currency (code ISO comme USD) et billed_at (ISO 8601, peut être null). Paginé avec page et per_page (maximum 100). Il ne liste que les transactions. Pour obtenir le PDF, appelez billing_invoices_get, et pour mettre à jour la carte, utilisez billing_payment_method. Exige billing.manage.

Permission : billing.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/invoices.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/billing/invoices/:id.json Obtenir le lien PDF d’une facture billing_invoices_get

Renvoie un lien vers la facture PDF d’une transaction facturée. Récupérez l’id de la facture dans billing_invoices_list (le champ id, un identifiant de transaction Paddle). Le résultat contient kind (invoice) et url, qui est un lien vers le PDF fourni par Paddle : récupérez-le ou partagez-le peu après l’appel. Échoue si l’id n’appartient pas à cet espace de travail ou si Paddle n’a pas de facture pour cette transaction. Exige billing.manage.

Permission : billing.manage

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

Forfaits

GET /plans.json Lister les forfaits, prix et limites plans_list

Liste les forfaits publics (free, pro, business et enterprise) avec leurs limites et leurs paliers de prix, afin que vous puissiez choisir des valeurs valides pour billing_checkout, billing_preview et billing_change_plan. Chaque forfait contient name, events (événements par mois inclus, null pour les forfaits à paliers ou sur mesure), badge_bonus (événements mensuels supplémentaires grâce au badge, Free uniquement, sinon null), limits (un objet de limites du forfait comme les sites, les places de membres, la durée de conservation de l’historique en mois, les objectifs par site, les questions IA et les requêtes d’API par heure), tiers (chacun avec les événements par mois et le prix mensuel et annuel en dollars entiers, TVA ou taxe de vente comprise) et contact_sales (true pour les forfaits sur mesure). L’objet meta ajoute currency, une note sur la tarification annuelle, counted (ce qui compte comme un événement facturable) et not_counted. Pour le forfait d’un espace de travail précis, utilisez billing_get. Public, aucune authentification requise.

Permission : public

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

Formulaires

POST /sites/:site_id/testimonials/forms.json Créer un formulaire testimonial_forms_create

Un seul appel porte le formulaire entier : étapes, questions, logique de saut, texte de consentement et langue. Tout ce qui est omis part d’une valeur par défaut raisonnable dans la langue du formulaire, et le slug vient du nom. Le lien est https://privatus.page/f/<slug>. L’acheminement des notes basses et le CSS personnalisé exigent l’offre Business (402 plan_limit sinon). Les réponses vidéo et audio sont proposées à l’auteur à partir de l’offre Pro.

Permission : content.write

Exemple
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 Supprimer définitivement un formulaire testimonial_forms_delete

Supprime le formulaire, ses enregistrements d’envois, sa récompense et ses retours privés. Les témoignages qu’il a recueillis sont conservés. Cette action est irréversible, donc c’est une personne qui la fait sur la page. L’API accepte confirm (le nom ou l’id du formulaire).

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Placer un formulaire dans la corbeille testimonial_forms_trash

Son lien répond que le formulaire est fermé jusqu’à sa restauration. La corbeille est vidée après 30 jours. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Copier un formulaire, éventuellement dans une autre langue testimonial_forms_duplicate

Copie chaque réglage sauf le slug, les statistiques et la récompense.

Permission : content.write

Exemple
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 Lister les formulaires d’un site testimonial_forms_list

Les formulaires de la corbeille sont listés avec trashed true, et exclus sinon. Chaque formulaire contient ses réglages, sa récompense et le nombre d’envois qu’il a reçus.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/forms.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/forms/:id/qr.json Obtenir le code QR d’un formulaire en SVG ou en PNG testimonial_forms_qr

Le code contient le lien du formulaire avec ?src=qr, donc les scans sont comptés comme leur propre canal. Un slug modifié garde un code imprimé fonctionnel.

Permission : analytics.read

Exemple
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 Restaurer un formulaire depuis la corbeille. Son lien fonctionne de nouveau testimonial_forms_restore

Sort un formulaire de la corbeille tel qu’il était, avec ses questions, ses envois et ses retours privés. Son lien (/f/<slug>) et ses intégrations acceptent de nouveau des réponses. Le serveur répond par 422 avec le code not_in_trash pour un formulaire qui n’est pas dans la corbeille.

Permission : content.write

Exemple
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 Obtenir le lien d’un formulaire, les liens de son code QR et ses extraits d’intégration testimonial_forms_share

Renvoie le lien, l’extrait d’intégration en ligne et l’extrait d’intégration en fenêtre contextuelle. Les entrées de la fenêtre contextuelle (trigger, label, position, accent) changent l’extrait de la fenêtre contextuelle.

Permission : analytics.read

Exemple
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 Obtenir un formulaire avec chaque étape, question, règle et réglage testimonial_forms_get

Renvoie le formulaire entier tel que testimonial_forms_create et testimonial_forms_update l’acceptent, avec son slug, son lien, sa récompense et son nombre d’envois. Un formulaire de la corbeille n’est pas trouvé ici : restaurez-le d’abord.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/forms/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/forms/:id.json Changer un formulaire. Seules les entrées envoyées changent testimonial_forms_update

Un changement d’étape, de question ou de texte de consentement fait monter la version du formulaire, que chaque enregistrement de consentement conserve. Un slug modifié laisse l’ancien lien rediriger. Envoyez questions comme la liste entière.

Permission : content.write

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

Images de témoignages

POST /sites/:site_id/testimonials/images/bulk.json Créer des images pour chaque témoignage approuvé d’une collection testimonial_images_bulk_create

Jusqu’à 200 témoignages par exécution, une image par taille chacun. Un texte trop long pour l’image est tiré de son extrait mis en avant, ou à défaut de ses premières phrases (excerpted indique combien). La réponse liste les images lancées, les témoignages écartés avec la raison, et export_id : un zip des PNG apparaît sur la page Exports quand ils sont dessinés.

Permission : content.write

Exemple
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 Créer des images d’un témoignage approuvé, une par taille testimonial_images_create

Seul un témoignage approuvé peut être dessiné, parce que le PNG reçoit une adresse publique : tout autre est refusé avec not_approved. Chaque image démarre à rendering et est dessinée en arrière-plan. La réponse est la liste des images lancées. Interrogez testimonial_images_get pour file_url. Un 422 avec text_too_long signifie que les mots ne tiennent pas : utilisez text_mode highlight ou excerpt, ou une taille plus haute.

Permission : content.write

Exemple
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 Supprimer une image et son fichier testimonial_images_delete

Le PNG est supprimé de l’hôte de médias et son adresse cesse de fonctionner. Une image n’a pas de corbeille. Elle peut être refaite à partir de son témoignage avec testimonial_images_create. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les images d’un site testimonial_images_list

Les images faites à partir de témoignages approuvés, des plus récentes aux plus anciennes, 25 par page. Filtrez par statut, modèle, taille ou testimonial_id. Chacune contient file_url une fois prête.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/images.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/images/:id.json Obtenir une image, avec son état et l’adresse de son PNG testimonial_images_get

status vaut rendering, ready ou failed. file_url est défini une fois l’image prête. Interrogez-le après testimonial_images_create jusqu’à ce que status ne soit plus rendering.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/images/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/images/:id.json Changer la façon dont une image est dessinée et la redessiner testimonial_images_update

Envoyez seulement ce qui change. Sans rien envoyer, elle redessine la même image à partir du témoignage tel qu’il est maintenant, ce qui est aussi la façon de réessayer une image en échec. Un nouveau rendu a un nouveau file_url, et l’ancien fichier est supprimé.

Permission : content.write

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

Importations de témoignages par tableur

POST /sites/:site_id/testimonials/imports/spreadsheet.json Téléverser un tableur (ou envoyer du texte CSV) et lire ses colonnes testimonial_spreadsheet_imports_create

Étape 1 d’une importation par tableur. Envoyez file (CSV, TSV ou XLSX, 10 Mo et 5 000 lignes au plus, en-têtes sur la première ligne) ou content (texte CSV jusqu’à 1 Mo). La réponse contient les colonnes, trois exemples de valeurs de chacune et une première hypothèse de destination de chaque colonne. Rien n’est encore importé : poursuivez avec testimonial_spreadsheet_imports_update et testimonial_spreadsheet_imports_run. Un tableur ne compte jamais dans les témoignages mensuels ni dans les importations récupérées.

Permission : content.write

Exemple
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 Lire le fichier mis en correspondance dans l’étape de relecture testimonial_spreadsheet_imports_run

Les lignes exploitables attendent avec une case à cocher. Les lignes inexploitables sont listées avec leur numéro de ligne et la raison. Conservez-les avec testimonial_import_sources_keep, en utilisant l’id du tableur comme id de source.

Permission : content.write

Exemple
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 Obtenir les colonnes d’un tableur, ses exemples, sa correspondance, ses options et ses compteurs testimonial_spreadsheet_imports_get

Renvoie les colonnes du fichier avec des exemples de valeurs, le champ vers lequel va chaque colonne, les options (statut par défaut, étiquettes, collection, format de date, sort des doublons) et, une fois exécuté, le nombre de lignes qui attendent dans l’étape de relecture et le nombre de lignes conservées.

Permission : analytics.read

Exemple
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 Enregistrer la destination de chaque colonne et les options du fichier testimonial_spreadsheet_imports_update

Étapes 2 et 3 d’une importation par tableur. mapping est un objet associant un nom de colonne à un champ, avec une valeur vide pour exclure une colonne, et deux colonnes ne peuvent pas aller vers un même champ. Les options sont default_status (pending ou approved), tags, collection_id (une collection manuelle), default_source_name, date_format (auto, ymd, dmy ou mdy) et duplicates (skip ou queue). Seul ce qui est envoyé change, et rien n’est importé avant testimonial_spreadsheet_imports_run.

Permission : content.write

Exemple
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 '{…}'

Imports

DELETE /sites/:site_id/imports/google/connection.json Déconnecter votre compte Google Analytics et supprimer ses jetons d’accès stockés imports_google_disconnect

Retire la connexion Google Analytics stockée du membre appelant pour l’espace de travail de ce site : les imports GA4 ne peuvent donc plus lire depuis Google tant qu’elle n’est pas reconnectée dans l’application. Les données déjà importées restent et ne sont supprimées qu’en supprimant leur import avec imports_delete. L’autorisation n’est pas révoquée du côté de Google. Il échoue avec une erreur de validation lorsqu’il n’y a aucune connexion, ou tant qu’un des imports GA4 du membre est en file d’attente ou en cours. Renvoie un objet avec disconnected à true. La connexion se fait dans l’application (l’écran de connexion Google), il n’existe aucun outil pour cela.

Permission : sites.manage

Exemple
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 Lister les propriétés Google Analytics 4 à importer imports_google_properties

Liste les propriétés Google Analytics 4 que le compte Google connecté du membre appelant peut lire. Appelez-le avant imports_create avec la source ga4 pour obtenir le property_id à utiliser. Renvoie une liste d’objets avec id (comme properties/123456789, à passer comme property_id), name et account. Il échoue avec une erreur de validation lorsque le membre n’a pas connecté Google pour cet espace de travail (cela se fait dans l’application, il n’existe aucun outil pour cela) ou lorsque Google rejette la requête. Il fait un appel en direct à Google et ne modifie rien.

Permission : sites.manage

Exemple
curl https://privatusanalytics.com/sites/:site_id/imports/google/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/imports.json Démarrer un import (propriété GA4 ou envoi de CSV) imports_create

Démarre l’import de données historiques d’un autre outil d’analyse vers un site, traité en arrière-plan, et renvoie l’import avec le statut queued. Choisissez la source ga4 pour extraire de l’API Google Analytics 4, ce qui exige une connexion Google faite dans l’application, property_id (provenant de imports_google_properties) et date_from. date_to vaut par défaut la veille du premier événement suivi du site, ou hier. Les autres sources (universal_analytics, fathom, simple_analytics, plausible, matomo, umami, clicky) acceptent un export CSV téléversé comme entrée file (téléversement de formulaire multipart, jusqu’à 50 Mo), ce qui les rend peu pratiques à lancer via MCP et mieux adaptées à l’application. dimension n’est nécessaire que pour remplacer la détection de ce que détaillent les lignes du CSV, par exemple les exports Matomo Label. Les lignes importées ne comptent jamais dans le quota d’événements et n’apparaissent dans les statistiques que lorsque vous passez include_imported à true. Un espace de travail peut avoir au plus 5 imports en file d’attente ou en cours en même temps. Interrogez imports_get jusqu’à ce que status vaille complete ou failed. Exige la permission sites.manage.

Permission : sites.manage

Exemple
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 Supprimer un import et toutes ses données importées imports_delete

Supprime définitivement un import avec chaque ligne qu’il a apportée et son fichier téléversé. Les statistiques qui incluaient les données importées changent aussitôt lorsque include_imported est activé, et c’est irréversible, même si vous pouvez importer à nouveau. L’id provient de imports_list et nécessite le site_id. Renvoie l’import supprimé. Exige la permission sites.manage. Les données collectées par le traceur ne sont pas touchées.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les imports d’un site imports_list

Liste les imports d’un site, du plus récent au plus ancien. Utilisez-le pour trouver l’id d’un import ou vérifier si l’un d’eux est encore en cours. Filtrez éventuellement par status (queued, running, complete ou failed). Paginé avec page et per_page (jusqu’à 100). Chaque élément contient id, site_id, source, status, date_from, date_to, rows_imported, error, completed_at et created_at. Voir imports_get pour les détails et imports_create pour en démarrer un.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/imports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/imports/:id.json Obtenir un import et son statut imports_get

Renvoie un import d’un site, utilisé pour interroger un import démarré avec imports_create. Les champs sont id (imp_...), site_id, source, status (queued, running, complete ou failed), date_from et date_to (YYYY-MM-DD, null lorsqu’inconnu), rows_imported (nombre de lignes quotidiennes importées), error (renseigné en cas d’échec), completed_at et created_at. L’id provient de imports_create ou imports_list. Les lignes importées n’apparaissent dans les statistiques que lorsque l’appel de statistiques définit include_imported à true.

Permission : analytics.read

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

Jetons d’API

POST /workspaces/:workspace_id/api_tokens.json Créer un jeton d’API (le jeton n’est renvoyé qu’une fois) api_tokens_create

Crée un jeton d’API pour le membre appelant dans un espace de travail et renvoie le secret une seule fois dans le champ token. Copiez-le immédiatement : il ne peut plus être relu, et un jeton perdu doit être révoqué puis recréé. Un jeton ne peut que restreindre ce que son membre peut faire. permissions vaut par défaut toutes les permissions du membre lorsqu’il est omis (une liste vide explicite est refusée, et demander une permission que vous n’avez pas est une erreur). site_ids accepte des identifiants publics de site (pa_...) et limite le jeton à ces sites. Lorsqu’il est vide, le jeton fonctionne pour tous les sites auxquels son membre a accès (ou conserve la liste de sites du jeton qui fait cet appel). expires_at est facultatif, au format ISO 8601, doit être dans le futur et au plus à 3 ans : omettez-le pour un jeton qui n’expire jamais. allowed_ips limite le jeton à ces adresses IP ou plages CIDR. Un jeton qui fait cet appel a besoin de tokens.manage. Un espace de travail qui exige l’authentification à deux facteurs refuse les jetons des membres qui n’ont pas leur propre second facteur. Renvoie les mêmes champs que api_tokens_list, plus token.

Permission : member · HTTP uniquement (pas un outil MCP)

Exemple
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 Révoquer un jeton d’API api_tokens_delete

Révoque immédiatement et définitivement un jeton d’API. Les requêtes qui l’utilisent échouent dès lors, et un jeton révoqué ne peut pas être rétabli : créez-en un nouveau. L’enregistrement du jeton reste dans la liste avec le statut revoked (utilisez api_tokens_list avec include_revoked pour le voir), et révoquer un jeton déjà révoqué ne change rien. Récupérez l’id (un uuid) dans api_tokens_list. Vous pouvez révoquer vos propres jetons. Révoquer celui de quelqu’un d’autre exige tokens.manage et un accès à tous les sites couverts par le jeton. Un jeton qui fait cet appel a besoin de tokens.manage. Renvoie le jeton révoqué sans son secret.

Permission : member · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les jetons d’API api_tokens_list

Liste les jetons d’API d’un espace de travail, du plus récent au plus ancien, avec pagination. Sans la permission tokens.manage, vous ne voyez que vos propres jetons. Avec elle, vous voyez ceux de tous les membres. Les jetons révoqués et expirés sont masqués sauf si include_revoked vaut true. Chaque élément contient id (uuid, utilisé par api_tokens_delete), name, token_prefix (les premiers caractères, pour reconnaître un jeton), owner (l’e-mail du membre), permissions (des noms comme analytics.read), site_ids (identifiants publics de site pa_..., un tableau vide signifie tous les sites auxquels le propriétaire a accès), allowed_ips, oauth_client (le nom de l’application connectée lorsque le jeton a été émis via OAuth, sinon null), status (active, expired ou revoked), expires_at, last_used_at, revoked_at et created_at. Le secret lui-même n’est jamais renvoyé ici, token vaut toujours null dans une liste. Il n’est affiché qu’une seule fois par api_tokens_create.

Permission : member

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

Journal d’audit

GET /workspaces/:workspace_id/audit_log.json Lister les entrées du journal d’audit (ajoutez .csv pour exporter) audit_logs_get

Renvoie le journal d’audit de l’espace de travail, un historique paginé, du plus récent au plus ancien, de qui a modifié quoi (réglages, membres, sites, objectifs, jetons, etc.). Il exige la permission workspace.manage et un forfait avec historique d’audit. Le forfait Free n’en a pas et l’appel échoue avec une erreur de limite de forfait. Pro conserve 30 jours, Business 365 jours et Enterprise n’a pas de limite. Les entrées plus anciennes que la durée de conservation ne sont jamais renvoyées. Filtrez avec actor (l’e-mail d’un membre, correspondance exacte), item_type (le type d’enregistrement, comme Site, Goal ou Membership), event (create, update ou destroy), et from et to (YYYY-MM-DD, bornes incluses, en UTC). Chaque entrée contient id, created_at, event, item_type, item_id, target (un libellé lisible comme Site: example.com), actor_email (null lorsque le changement a été fait par le système ou par un utilisateur supprimé), actor_name, token_name (le jeton d’API utilisé, null pour une session de navigateur), changes (un objet associant chaque champ modifié à une paire [avant, après], secrets retirés) et ip (l’adresse utilisée par le membre ou le client d’API, null lorsqu’elle est inconnue). Un export CSV du même journal n’est disponible que dans l’application.

Permission : workspace.manage

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

Kit de marque des témoignages

DELETE /sites/:site_id/testimonials/settings/brand_kit.json Remettre le kit de marque des témoignages d’un site aux valeurs par défaut de Privatus Analytics testimonial_brand_kit_reset

Efface en une seule étape chaque couleur, chaque police, le rayon, le style des notes, les logos et le CSS personnalisé, et chaque formulaire, widget et mur change en conséquence. Cette action est irréversible, donc un assistant est dirigé vers la page Kit de marque au lieu de l’exécuter.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir le kit de marque des témoignages d’un site, avec chaque couleur résolue pour le clair et le sombre testimonial_brand_kit_get

Renvoie les couleurs, les polices, le rayon des coins, le style des notes, les logos, l’interrupteur du badge et le CSS personnalisé avec lesquels chaque formulaire, widget et mur du site est dessiné. Un réglage jamais modifié revient avec la valeur par défaut de Privatus Analytics.

Permission : analytics.read

Exemple
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 Changer le kit de marque des témoignages d’un site testimonial_brand_kit_update

Seules les entrées que vous envoyez sont modifiées. Envoyez une chaîne vide pour remettre un réglage à la valeur par défaut de Privatus Analytics. Le CSS personnalisé est vérifié à l’enregistrement, et tout ce qui n’est pas autorisé est refusé avec la ligne concernée. Le CSS personnalisé exige l’offre Business, et masquer le badge aussi. Sans elle, le serveur répond par 402 plan_limit.

Permission : sites.manage

Exemple
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 '{…}'

Langues des témoignages

GET /sites/:site_id/testimonials/settings/languages.json Obtenir les réglages de langue des témoignages d’un site testimonial_languages_get

La langue par défaut, les langues proposées, si les témoignages nouvellement approuvés sont traduits automatiquement, si l’offre inclut la traduction, si la traduction est configurée, et les caractères utilisés et restants du mois.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/settings/languages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/settings/languages.json Définir la langue par défaut, les langues proposées et la traduction automatique testimonial_languages_update

Envoyez seulement ce qui change. La langue par défaut fait toujours partie des langues proposées, et une langue dans laquelle un formulaire est rédigé ne peut pas être retirée (in_use). Activer auto_translate exige Business ou plus (402 plan_limit ailleurs) : dès lors, les mots de chaque témoignage nouvellement approuvé sont envoyés à Google Cloud Translation, et le membre est prévenu par email qu’un assistant a changé cela.

Permission : sites.manage

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

Liste d’annulation des témoignages

GET /sites/:site_id/testimonials/settings/undo.json Lister ce qui a été modifié ces 7 derniers jours et peut être annulé testimonial_undo_records_list

Du plus récent au plus ancien. Chaque enregistrement indique ce qui a été exécuté, par qui, combien il a changé et ignoré et pourquoi, et jusqu’à quand il peut être annulé.

Permission : analytics.read

Exemple
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 Lire un enregistrement d’annulation testimonial_undo_records_get

Pour une exécution en arrière-plan, state vaut running et processed indique où elle en est.

Permission : analytics.read

Exemple
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 Annuler une action groupée ou une modification unique dans un délai de 7 jours testimonial_undo_records_undo

Remet l’ancienne valeur sur tout ce que l’exécution a changé. Ce qui a été modifié de nouveau depuis est laissé tel quel et compté dans left. Une fusion de personnes ou de doublons s’annule de la même façon. Via MCP, une annulation qui supprimerait ou placerait dans la corbeille n’est pas exécutée (l’annulation d’une restauration, d’une exécution de traduction et d’une exécution de création d’images) : l’outil répond par human_only et la page de l’app où une personne le fait.

Permission : content.write

Exemple
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 '{…}'

Membres

POST /workspaces/:workspace_id/invitations.json Inviter des personnes par e-mail invitations_create

Invite une ou plusieurs personnes dans un espace de travail par e-mail et envoie à chacune un e-mail d’invitation avec un lien valable 14 jours. emails est une liste d’au plus 50 adresses (une chaîne séparée par des virgules, des espaces ou des points-virgules fonctionne aussi dans le formulaire de l’application), et les adresses qui sont déjà membres sont ignorées, mais c’est une erreur lorsque toutes le sont. Inviter une adresse qui a déjà une invitation en attente remplace cette invitation et envoie un nouvel e-mail. role est l’un des rôles de members_list (viewer par défaut, owner ne peut pas être invité). Utilisez le rôle custom avec custom_role_id (l’id provenant de roles_list, forfait Business). Par défaut, l’accès couvre tous les sites, y compris les futurs. Pour limiter l’accès, définissez all_sites à false et listez site_ids sous forme d’ids publics de site (pa_...). Les invitations en attente comptent dans la limite de membres du forfait (Free autorise 3 membres) et l’appel échoue lorsque la limite serait dépassée. Les e-mails d’invitation sont limités en débit. Vous ne pouvez pas accorder un rôle avec plus de permissions ou de sites que les vôtres. Exige members.manage. Renvoie les invitations créées (voir invitations_list pour les champs).

Permission : members.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Révoquer une invitation en attente invitations_delete

Révoque une invitation en attente pour que son lien ne fonctionne plus, et libère la place qu’elle occupait. La suppression est irréversible : invitez à nouveau la personne avec invitations_create. Récupérez l’id (un uuid) dans invitations_list. Un appelant limité à certains sites ne peut révoquer que les invitations qui n’accordent pas plus que ses propres sites. Exige members.manage. Renvoie l’invitation révoquée.

Permission : members.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les invitations en attente invitations_list

Liste les invitations d’équipe en attente d’un espace de travail, de la plus récente à la plus ancienne, avec pagination. Les invitations acceptées et révoquées ne sont pas listées (utilisez members_list pour les personnes qui ont rejoint), et les invitations expirées restent jusqu’à ce qu’elles soient remplacées ou révoquées. Exige members.manage. Un appelant limité à certains sites ne voit que les invitations à sa portée. Chaque élément contient id (uuid, utilisé par invitations_delete), email, role, custom_role (le nom du rôle personnalisé lorsque role vaut custom, sinon null), all_sites, site_ids (ids publics de site pa_..., vide lorsque all_sites vaut true), invited_by (l’e-mail de la personne qui a invité), expires_at et created_at.

Permission : members.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/invitations.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /workspaces/:workspace_id/members/:id.json Retirer un membre (ou quitter l’espace de travail) members_delete

Retire un membre d’un espace de travail, ou laisse l’appelant le quitter lorsque l’id correspond à sa propre adhésion. C’est immédiat et irréversible : la personne perd l’accès, ses jetons d’API pour cet espace de travail sont révoqués et tout lien SCIM est supprimé. Ses notes et ses anciennes entrées d’audit restent. Le propriétaire ne peut être ni retiré ni partir : transférez d’abord la propriété avec ownership_transfers_create. Retirer quelqu’un d’autre exige members.manage, et vous ne pouvez pas retirer quelqu’un qui a plus de permissions ou de sites que vous. Quitter ne demande aucune permission, mais un jeton limité en permissions ou en sites ne peut pas servir à partir. La personne peut être invitée à nouveau plus tard avec invitations_create. Récupérez l’id (l’uuid de l’adhésion) dans members_list. Renvoie le membre retiré.

Permission : member · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les membres de l’espace de travail members_list

Liste les membres d’un espace de travail dans l’ordre où ils ont rejoint, avec pagination. Utilisez query pour chercher par nom ou e-mail (partiel, insensible à la casse) et role pour filtrer par rôle. Les invitations en attente ne sont pas incluses (utilisez invitations_list). Chaque membre contient id (l’uuid de l’adhésion, utilisé par members_update, members_delete et ownership_transfers_create), email, name (peut être null), role, custom_role (nom, null sauf si role vaut custom), custom_role_id, all_sites, include_future_sites, site_ids (ids publics de site pa_..., vide lorsque all_sites vaut true), two_factor (indique si le membre a une application d’authentification ou une clé d’accès), last_active_at (peut être null) et created_at. Les appelants limités à certains sites ne voient que les membres à leur portée.

Permission : member

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/members.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/members/:id.json Modifier le rôle ou l’accès aux sites d’un membre members_update

Modifie le rôle et/ou l’accès aux sites d’un membre dans un espace de travail. Seules les entrées que vous envoyez changent. Pour changer le rôle, envoyez role (admin, editor, analyst, viewer ou billing, et custom avec custom_role_id provenant de roles_list dans le forfait Business). Le rôle du propriétaire ne peut pas être modifié ici, utilisez plutôt ownership_transfers_create, et vous ne pouvez pas modifier votre propre adhésion ni celle de quelqu’un qui est au-dessus de vous. Pour limiter les sites, envoyez all_sites à false avec site_ids (ids publics de site pa_...), et ajoutez include_future_sites à true pour accorder aussi les sites créés plus tard. Envoyez all_sites à true pour donner accès à tous les sites. Une liste site_ids envoyée sans all_sites à false est une erreur pour un membre qui a actuellement tous les sites. Vous ne pouvez pas accorder plus de permissions ou de sites que vous n’en avez. Exige members.manage. Récupérez l’id dans members_list. Renvoie le membre mis à jour.

Permission : members.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Transférer la propriété de l’espace de travail à un autre membre (propriétaire uniquement, vous devenez administrateur) ownership_transfers_create

Transfère la propriété d’un espace de travail à un autre membre et rétrograde l’appelant au rang d’admin, ce qui est difficile à annuler car seul le nouveau propriétaire peut la retransférer. Seul le propriétaire actuel peut l’appeler, et un jeton ne doit pas être limité à certains sites ou permissions. membership_id est l’uuid d’adhésion du nouveau propriétaire provenant de members_list (pas un id d’utilisateur ni un e-mail) et la personne doit déjà être membre : invitez-la d’abord si ce n’est pas le cas. Le nouveau propriétaire reçoit le rôle owner avec accès à tous les sites, et le rôle owner ne peut pas être donné via members_update. Un espace de travail Free ne peut pas être donné à quelqu’un qui possède déjà un autre espace de travail Free. La facturation reste avec l’espace de travail. Un jeton qui fait cet appel a besoin de members.manage. Renvoie l’enregistrement du nouveau propriétaire.

Permission : member · HTTP uniquement (pas un outil MCP)

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

Mentions des témoignages

GET /sites/:site_id/testimonials/mentions.json Lister les mots et les expressions qui reviennent dans les témoignages d’un site testimonial_mentions_list

Chaque terme vient avec le nombre de témoignages qui le contiennent, sa part, la note moyenne de ceux-ci, et les 90 derniers jours comparés aux 90 précédents. Triez par rating_asc pour lire ce dont les gens se plaignent, ou par rising pour ce qui est nouveau. meta.refreshed_at indique quand les termes ont été reconstruits pour la dernière fois. Passez un terme à testimonials_list comme mention pour lire les témoignages.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/mentions.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/mentions/tag.json Étiqueter chaque témoignage qui mentionne un mot ou une expression testimonial_mentions_tag

Une action groupée sur tout le résultat, avec annulation. Le terme est n’importe quel mot ou expression de deux mots, mis en correspondance par radical comme les Mentions sont comptées. Une étiquette nommée pour la première fois est créée. Répond avec un id d’annulation que testimonials_bulk_undo accepte pendant 7 jours. Au-delà de 100, l’exécution se fait en arrière-plan.

Permission : content.write

Exemple
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 Masquer un terme qui n’est que du bruit, ou le réafficher testimonial_mentions_update

Un terme masqué quitte la liste des Mentions et la facette Mentions de la boîte de réception, et reste masqué quand les termes sont reconstruits.

Permission : content.write

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

Migrations de témoignages

POST /sites/:site_id/testimonials/imports/migrations/:id/discard.json Écarter ce qu’une migration a lu testimonial_migrations_discard

Donnez item_ids (ids issus de testimonial_migrations_review) ou all true pour tout ce qui attend encore, jamais les deux. Un élément écarté quitte l’étape de relecture et ce qui a été lu sur la personne est effacé. Aucun témoignage n’est supprimé. Sinon, le serveur répond par 422 avec le code selection ou unknown_ids.

Permission : content.write

Exemple
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 Lister les migrations d’un site testimonial_migrations_list

Du plus récent au plus ancien. Une migration est un fichier d’export d’un autre outil de témoignages. Chacune indique l’outil d’origine, son statut et le nombre de témoignages trouvés, conservés, en doublon et en échec.

Permission : analytics.read

Exemple
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 Conserver comme témoignages ce qu’une migration a lu testimonial_migrations_keep

Donnez item_ids (jusqu’à 100 par appel, issus de testimonial_migrations_review) ou all true, jamais les deux. Chaque élément conservé devient un témoignage au statut pending ou approved, et keep_approval true garde l’approbation qu’il avait dans l’autre outil. Avec all, les doublons probables sont exclus sauf si include_likely_duplicates vaut true. Rien de ce qui est conservé ne compte dans les témoignages mensuels. Ce qui n’est pas conservé reste 30 jours dans l’étape de relecture.

Permission : content.write

Exemple
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 Lister ce qu’une migration a lu et qui n’a pas encore été décidé testimonial_migrations_review

Liste les éléments qui attendent encore une décision, de l’exécution la plus récente à la plus ancienne. show vaut new, duplicates ou all (par défaut), et rating ne garde que les notes en étoiles listées. Passez les ids des éléments à testimonial_migrations_keep ou testimonial_migrations_discard.

Permission : analytics.read

Exemple
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 Obtenir l’avancement d’une migration et ses compteurs testimonial_migrations_get

Renvoie l’outil d’où vient le fichier, le statut, le nombre de témoignages trouvés, conservés, en doublon et en échec, le nombre de fichiers médias qu’elle apporte et ses heures de début et de fin. Interrogez-la tant que le statut indique que le fichier est encore en cours de lecture.

Permission : analytics.read

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

Murs d’amour

POST /sites/:site_id/testimonials/walls.json Créer un Mur d’amour testimonial_walls_create

Une page hébergée à https://privatus.page/w/<slug>. Tout ce qui est omis part d’une valeur par défaut : le titre Wall of Love, la mise en page en mosaïque, le slug tiré du nom.

Permission : content.write

Exemple
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 Placer un mur dans la corbeille testimonial_walls_trash

Sa page répond qu’il a été retiré jusqu’à sa restauration, et une copie intégrée n’affiche rien. La restauration le remet à la même adresse. Il est supprimé définitivement après 30 jours. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Copier un mur sous un nouveau nom et une nouvelle adresse testimonial_walls_duplicate

Fait une copie avec un nouvel id, un nom se terminant par « copy » et un slug à elle, donc avec sa propre adresse. L’original et son adresse ne sont pas modifiés.

Permission : content.write

Exemple
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 Obtenir le lien d’un mur et le code pour le placer dans une autre page testimonial_walls_embed

L’adresse publique du mur, et les extraits de script, de cadre et de lien simple qui le placent dans une autre page. Les extraits ne changent jamais quand le mur est modifié.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/walls/:id/embed.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/walls.json Lister les Murs d’amour d’un site testimonial_walls_list

Chaque Mur d’amour du site qui n’est pas dans la corbeille, avec son adresse, ce qui l’alimente et le nombre de témoignages qu’il affiche. Utilisez q pour chercher par nom ou slug et sort pour trier par nom ou par date la plus récente.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/walls.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/walls/:id/restore.json Restaurer un mur depuis la corbeille testimonial_walls_restore

Sort un mur de la corbeille. Sa page répond de nouveau à la même adresse, et chaque copie intégrée l’affiche de nouveau sans changer le code qui avait été collé.

Permission : content.write

Exemple
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 Obtenir un mur avec chaque réglage testimonial_walls_get

Tout ce que le constructeur stocke : l’adresse (/w/<slug>), l’en-tête et le bouton, la mise en page, ce qui alimente le mur, ce que montre chaque carte, le style et les réglages pour les moteurs de recherche. Un mur de la corbeille répond par 404.

Permission : analytics.read

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

Seules les entrées envoyées changent. Un slug modifié laisse l’ancienne adresse rediriger.

Permission : content.write

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

Médias des témoignages

POST /sites/:site_id/testimonials/media/uploads.json Démarrer un téléversement, ou ajouter un fichier depuis une adresse web testimonial_media_uploads_create

Deux façons. Pour téléverser, envoyez filename, content_type et byte_size : la réponse contient upload, avec l’url vers laquelle faire un PUT du fichier, les en-têtes à envoyer avec et, pour un gros fichier, des parts qui peuvent être envoyées une par une. Appelez ensuite testimonial_media_uploads_finish. Ou envoyez source_url et le fichier est téléchargé et traité pour vous : interrogez testimonial_media_get jusqu’à ce que son état soit ready. Limites : vidéo et audio jusqu’à 500 Mo et aussi longs que l’offre le permet (2 minutes sur Pro, 10 minutes sur Business, aucune sur Free, où le serveur répond par 402 plan_limit), images jusqu’à 10 Mo, logo jusqu’à 2 Mo.

Permission : content.write

Exemple
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 Supprimer un fichier qu’aucun témoignage ne garde testimonial_media_delete

Un fichier qui appartient à un témoignage est supprimé avec le témoignage, par la corbeille. Les fichiers stockés sont supprimés et leurs adresses sont retirées du cache.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Indiquer qu’un téléversement est terminé, pour que le fichier soit vérifié et traité testimonial_media_uploads_finish

Appelez-le une fois le fichier envoyé. Le fichier doit être dans le stockage de téléversement et avoir exactement la taille annoncée. L’appeler deux fois est sans risque.

Permission : content.write

Exemple
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 Réessayer un fichier en échec testimonial_media_retry

Traite de nouveau le fichier à partir du téléversement conservé. Le téléversement est conservé 24 heures après un échec. Ensuite, le serveur répond par not_retryable et le fichier doit être téléversé de nouveau.

Permission : content.write

Exemple
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 Obtenir un fichier avec son état et l’endroit où le charger testimonial_media_get

L’url est l’adresse durable du fichier terminé sur l’hôte de médias, et elle est null tant que l’état n’est pas ready. L’adresse est la même pour tout le monde et n’est pas signée, donc ne transmettez que l’adresse d’un fichier dont le champ shareable vaut true.

Permission : analytics.read

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

Notes

POST /sites/:site_id/notes.json Ajouter une note à un site (utilisez la source "deploy" pour les webhooks de version) notes_create

Ajoute une annotation aux graphiques d’un site, par exemple un lancement, une campagne ou une version. Utilisez plutôt workspace_notes_create pour une note qui s’affiche sur tous les sites. date vaut par défaut aujourd’hui dans le fuseau horaire du site, et end_date marque une période (YYYY-MM-DD). title est affiché sur le graphique, body est du texte brut et url peut pointer vers une PR ou un journal des modifications. color vaut neutral, brand, blue, amber, red ou violet, neutral par défaut. source vaut manual par défaut. Les intégrations de déploiement envoient source deploy, et alors title vaut par défaut un texte construit à partir de version (une version de publication ou un commit) et color vaut blue par défaut. Exige content.write. Renvoie la note créée (voir notes_list pour les champs).

Permission : content.write

Exemple
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 Supprimer une note notes_delete

Supprime définitivement une note de site, qui disparaît des graphiques et ne peut pas être restaurée. La note doit appartenir à ce site : les notes d’espace de travail sont supprimées avec workspace_notes_delete. Récupérez l’id (note_...) dans notes_list. Exige content.write. Renvoie la note supprimée.

Permission : content.write

Exemple
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 Lister les notes d’un site (y compris les notes de l’espace de travail) notes_list

Liste les annotations (notes) affichées sur les graphiques d’un site, la date la plus récente d’abord, avec pagination. Renvoie les notes propres au site plus les notes d’espace de travail qui s’appliquent à tous les sites. Filtrez avec from et to (YYYY-MM-DD, une note correspond lorsque sa date tombe dans la plage), source (manual, deploy, system, import ou incident) et query (une recherche insensible à la casse dans title, body et url). Utilisez workspace_notes_list pour la vue de l’espace de travail sur tous les sites. Chaque note contient id (note_...), site_id (l’id public de site pa_..., null pour une note d’espace de travail), date, end_date (null pour un seul jour), title, body (texte brut, peut être null), url (peut être null), color (neutral, brand, blue, amber, red ou violet), source et created_at. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/notes/:id.json Obtenir une note notes_get

Renvoie une note par son id (note_..., provenant de notes_list) pour un site, y compris les notes d’espace de travail qui s’appliquent au site. Une note est une annotation datée affichée sur les graphiques, par exemple un lancement, une campagne ou un déploiement. Les champs sont id, site_id (null lorsqu’elle concerne l’espace de travail), date et end_date (YYYY-MM-DD, end_date null pour un seul jour), title, body (peut être null), url (peut être null), color (neutral, brand, blue, amber, red ou violet), source (manual, deploy, system, import ou incident) et created_at. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/notes/:id.json Modifier une note notes_update

Modifie une note de site en ne changeant que les champs que vous envoyez (date, end_date, title, body, url, color). La source ne peut pas être modifiée. Envoyer une url vide retire le lien, et une date à null est ignorée. La note doit appartenir à ce site : les notes d’espace de travail se modifient avec workspace_notes_update. Récupérez l’id (note_...) dans notes_list. Exige content.write. Renvoie la note mise à jour.

Permission : content.write

Exemple
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 Ajouter une note pour tout l’espace de travail (affichée sur chaque site) workspace_notes_create

Ajoute une annotation d’espace de travail qui apparaît sur les graphiques de tous les sites de l’espace de travail, par exemple un lancement à l’échelle de l’entreprise ou une panne. Elle est créée sans site (site_id vaut null). Utilisez notes_create pour une note sur un seul site. date vaut par défaut aujourd’hui dans le fuseau horaire de l’espace de travail, end_date marque une période (YYYY-MM-DD), color vaut neutral, brand, blue, amber, red ou violet. Exige content.write, et un appelant limité à certains sites ne peut pas créer de notes d’espace de travail. Renvoie la note créée.

Permission : content.write

Exemple
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 Supprimer une note de l’espace de travail workspace_notes_delete

Supprime définitivement une note d’espace de travail, qui disparaît des graphiques de tous les sites et ne peut pas être restaurée. Seules les notes sans site peuvent être supprimées ici : utilisez notes_delete pour une note de site. Récupérez l’id (note_...) dans workspace_notes_list. Exige content.write, et un appelant limité à certains sites ne peut pas supprimer de notes d’espace de travail. Renvoie la note supprimée.

Permission : content.write

Exemple
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 Lister les notes d’un espace de travail workspace_notes_list

Liste les annotations d’un espace de travail, la date la plus récente d’abord, avec pagination. Renvoie les notes d’espace de travail (qui s’affichent sur tous les sites) plus les notes de chaque site auquel l’appelant a accès : vérifiez donc site_id sur chaque élément (null signifie espace de travail). Utilisez notes_list pour un seul site. Filtrez avec from et to (YYYY-MM-DD), source (manual, deploy, system, import ou incident) et query (recherche dans title, body et url). Les champs sont id (note_...), site_id, date, end_date, title, body, url, color (neutral, brand, blue, amber, red ou violet), source et created_at. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/notes/:id.json Modifier une note de l’espace de travail workspace_notes_update

Modifie une note d’espace de travail en ne changeant que les champs que vous envoyez (date, end_date, title, body, url, color). Seules les notes sans site peuvent être modifiées ici : utilisez notes_update pour une note de site. Récupérez l’id (note_...) dans workspace_notes_list. Exige content.write, et un appelant limité à certains sites ne peut pas modifier de notes d’espace de travail. Renvoie la note mise à jour.

Permission : content.write

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

Objectifs

POST /sites/:site_id/goals/:id/archive.json Archiver un objectif (masqué dans les rapports) goals_archive

Archive un objectif. Un objectif archivé est masqué des rapports, ne compte pas dans la limite d’objectifs du forfait et garde sa définition : il peut donc être restauré plus tard avec goals_unarchive. Aucune donnée n’est supprimée. Renvoie l’objectif avec archived à true et archived_at renseigné. Archiver un objectif déjà archivé ne fait rien. Utilisez goals_delete pour le supprimer définitivement. Exige la permission content.write.

Permission : content.write

Exemple
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 Créer un objectif goals_create

Crée un objectif de conversion. Les objectifs sont des définitions appliquées à la lecture des rapports : un nouvel objectif compte donc immédiatement les événements correspondants dans tout l’historique existant. name et kind sont obligatoires. kind décide des autres entrées qui s’appliquent. page exige pattern (un chemin, par exemple /thank-you, avec match_type exact, prefix, glob ou regex) et peut utiliser hostname. event exige event_name et peut utiliser conditions (tests de propriété comme {key: plan, operator: is, value: pro}, tous doivent correspondre, opérateurs is, is_not, contains, gt, lt). engagement exige pattern plus scroll_threshold (pourcentage de 1 à 100) et/ou time_threshold_seconds (atteint lorsque l’un des deux est satisfait). outbound fait correspondre le domaine du lien avec pattern (par exemple stripe.com) et download fait correspondre le fichier avec pattern (par exemple *.pdf). value_mode vaut none (par défaut), fixed (utilise fixed_value, un montant décimal dans la devise du site comme 49.5, stocké dans fixed_value_minor en centimes) ou revenue (le revenu propre à l’événement). count_mode vaut once_per_visit (par défaut) ou every. Les espaces de travail Free autorisent 10 objectifs actifs par site, les forfaits payants sont illimités. Renvoie l’objectif avec id (goal_...). Exige la permission content.write.

Permission : content.write

Exemple
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 Supprimer un objectif (les données sont conservées) goals_delete

Supprime définitivement la définition d’un objectif. Aucune donnée d’événement n’est supprimée, mais l’objectif disparaît des rapports, et les étapes d’entonnoir, les parcours et les expériences qui y renvoient cessent de fonctionner. Il n’y a pas d’annulation possible. Pour masquer un objectif et le garder, utilisez goals_archive. Renvoie l’objectif supprimé. Les ids (goal_...) proviennent de goals_list. Exige la permission content.write.

Permission : content.write

Exemple
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 Copier un objectif goals_duplicate

Copie la définition d’un objectif dans un nouvel objectif actif. La copie s’appelle name si vous l’envoyez, sinon le nom d’origine suivi de (copy). Elle compte dans la limite d’objectifs du forfait (10 objectifs actifs par site en Free). Renvoie le nouvel objectif avec un nouvel id. Utilisez-le pour démarrer une variante d’un objectif, puis modifiez-la avec goals_update. Exige la permission content.write.

Permission : content.write

Exemple
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 Lister les objectifs avec réalisations, conversions, taux et valeur pour une période goals_list

Liste les objectifs d’un site avec leurs résultats pour la période. Chaque objectif est la définition (id goal_..., name, kind, match_type, pattern, hostname, event_name, conditions, scroll_threshold, time_threshold_seconds, value_mode, fixed_value_minor en centimes, count_mode, archived, archived_at) plus stats {completions, conversions, conversion_rate, value, change}. conversion_rate est un pourcentage (de 0 à 100), value est en unités mineures (centimes) et change est la variation en pourcentage des conversions par rapport à la période précédente (null lorsque le décompte précédent était 0). status filtre sur active (par défaut), archived ou all. Paginé avec page et per_page (100 maximum, 25 par défaut). Utilisez goals_get pour le rapport complet d’un objectif. Accepte les entrées communes period, compare et filters.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/goals.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/goals/:id.json Rapport d’objectif : métriques, graphique, ventilations et parcours menant à la conversion goals_get

Un objectif en détail pour une période. Renvoie period, goal_id, goal (la définition), metrics, interval, series, breakdowns, journey et, avec compare, comparison_period, comparison et change. metrics contient completions (chaque événement correspondant), conversions (les visites avec au moins une complétion), conversion_rate (pourcentage de 0 à 100) et value (unités mineures, centimes). conversion_rate divise par les visites, ou par les visiteurs lorsque le site est configuré ainsi. series est une liste de {date, completions, conversions, conversion_rate} par intervalle de temps (définissez interval pour le changer). breakdowns contient les 10 premiers par conversions pour channel, utm_campaign, entry_page, country et device, chacun sous la forme {value, completions, conversions, conversion_rate}. journey montre converting_visits, median_seconds_to_convert, median_pages_before et pages_before (les 10 pages les plus vues avant la conversion, avec visites et part). Utilisez goals_list pour tous les objectifs à la fois et funnels_get pour les parcours en plusieurs étapes. Accepte les entrées communes period, compare, filters et segment.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/goals/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/goals/:id/unarchive.json Restaurer un objectif archivé goals_unarchive

Restaure un objectif archivé pour qu’il apparaisse de nouveau dans les rapports. Il compte à nouveau dans la limite d’objectifs du forfait (10 objectifs actifs par site en Free) : l’appel échoue donc avec une erreur de limite de forfait lorsque le site est déjà plein. Restaurer un objectif qui n’est pas archivé ne fait rien. Renvoie l’objectif avec archived à false. Les ids proviennent de goals_list avec status archived. Exige la permission content.write.

Permission : content.write

Exemple
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 Mettre à jour un objectif goals_update

Modifie la définition d’un objectif. Seules les entrées que vous envoyez changent. La nouvelle définition s’applique immédiatement à tout l’historique : les chiffres de conversion passés changeront donc. Les entrées sont les mêmes que dans goals_create, et les mêmes combinaisons s’appliquent, par exemple event_name et conditions n’ont d’effet que pour les objectifs event, et scroll_threshold et time_threshold_seconds que pour les objectifs engagement. fixed_value est un montant décimal dans la devise du site (stocké en centimes). Envoyer conditions remplace toutes les conditions existantes. Renvoie l’objectif. Les ids proviennent de goals_list. Exige la permission content.write.

Permission : content.write

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

Pages d’état

GET /status/:slug/confirm/:token.json Confirmer un abonnement depuis le lien reçu par e-mail public_status_pages_confirm

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/status/:slug/confirm/:token.json
GET /status/:slug.json Page d’état publique : état actuel, barres de disponibilité sur 90 jours, incidents et publications public_status_pages_get

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/status/:slug.json
POST /status/:slug/subscribers.json Abonner une adresse e-mail (double confirmation) public_status_pages_subscribe

Les clients navigateur envoient un jeton Cloudflare Turnstile dans `cf-turnstile-response`. Les requêtes avec un jeton d’API n’en ont pas besoin.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/status/:slug/subscribers.json \
  -H "Content-Type: application/json" -d '{…}'
POST /status/:slug/unsubscribe/:token.json Se désabonner avec le jeton reçu par e-mail public_status_pages_unsubscribe

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
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 Publier une mise à jour d’incident (envoie un e-mail aux abonnés) status_page_posts_create

Publie une mise à jour d’incident sur une page d’état et, par défaut, envoie un e-mail à ses abonnés confirmés. Choisissez-le pour annoncer ou mettre à jour un incident, et utilisez status_page_posts_update pour faire avancer un incident existant (par exemple vers resolved) au lieu de créer une nouvelle publication. title est obligatoire (200 caractères au maximum). status vaut investigating (par défaut), identified, monitoring ou resolved. body est du texte brut (10 000 caractères au maximum), posted_at est une heure ISO 8601 qui vaut par défaut maintenant, et notify (true par défaut) contrôle l’e-mail. Les e-mails ne sont envoyés que pour une page publiée et sont limités en débit par page : au-delà de la limite, la publication est tout de même mise en ligne mais personne ne reçoit d’e-mail. Le status_page_id provient de status_pages_list. Exige la permission uptime.manage. Renvoie la publication avec id (spp_...), title, body, status, posted_at et updated_at.

Permission : uptime.manage

Exemple
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 Supprimer une publication de page d’état status_page_posts_delete

Supprime définitivement la publication d’un incident d’une page d’état. Elle disparaît aussitôt de la page publique et c’est irréversible. Aucun e-mail n’est envoyé. L’id provient de status_page_posts_list. Exige la permission uptime.manage. Renvoie la publication supprimée.

Permission : uptime.manage

Exemple
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 Lister les publications d’une page d’état status_page_posts_list

Liste les publications d’incident d’une page d’état, les plus récentes d’abord selon posted_at. Utilisez-le pour trouver l’id d’une publication ou voir l’historique des incidents. Filtrez éventuellement par status (investigating, identified, monitoring ou resolved). Paginé avec page et per_page (jusqu’à 100). Chaque publication contient id (spp_...), title, body (null lorsqu’il est vide), status, posted_at et updated_at. Le status_page_id provient de status_pages_list.

Permission : analytics.read

Exemple
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 Modifier une publication de page d’état status_page_posts_update

Modifie la publication d’un incident. Seules les entrées que vous envoyez changent : envoyez donc uniquement status pour résoudre un incident. Les abonnés ne reçoivent un e-mail que lorsque le statut change réellement et que notify n’est pas false (true par défaut). Modifier uniquement le titre ou le corps n’envoie aucun e-mail. Les e-mails vont aux abonnés confirmés d’une page publiée et sont limités en débit par page. Les valeurs de statut valides sont investigating, identified, monitoring et resolved. L’id provient de status_page_posts_list. Exige la permission uptime.manage. Renvoie la publication mise à jour.

Permission : uptime.manage

Exemple
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 Retirer un abonné status_page_subscribers_delete

Retire un abonné par e-mail d’une page d’état afin qu’il cesse de recevoir les e-mails d’incident et de disponibilité. Cette action est irréversible, mais la personne peut se réabonner sur la page publique. L’id est l’id d’abonné provenant de status_page_subscribers_list (un UUID simple, pas un id avec préfixe). Exige la permission uptime.manage. Renvoie l’abonné retiré.

Permission : uptime.manage

Exemple
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 Lister les abonnés d’une page d’état status_page_subscribers_list

Liste les abonnés par e-mail d’une page d’état, triés par adresse. Utilisez confirmed à true pour ne voir que les personnes qui ont confirmé leur adresse (seules celles-ci reçoivent des e-mails) ou confirmed à false pour celles en attente. Paginé avec page et per_page (jusqu’à 100). Chaque élément contient id (un UUID, utilisé par status_page_subscribers_delete), email, confirmed_at (null tant qu’en attente) et created_at. Le status_page_id provient de status_pages_list. Exige la permission uptime.manage et renvoie des données personnelles (adresses e-mail). Exige le forfait Business ou Enterprise (sinon 402 plan_limit).

Permission : uptime.manage

Exemple
curl https://privatusanalytics.com/status_pages/:status_page_id/subscribers.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/status_pages.json Créer une page d’état status_pages_create

Crée une page d’état publique pour un espace de travail qui affiche des vérifications de disponibilité choisies, des publications d’incident et une inscription par e-mail. name est obligatoire (100 caractères au maximum). slug (lettres minuscules, chiffres et tirets, unique parmi tous les espaces de travail) est tiré par défaut du nom et la page est servie à /status/<slug>. check_ids liste les vérifications de disponibilité à afficher (ids upc_... provenant de uptime_checks_list) et seules les vérifications créées avec public à true sont acceptées. published vaut true par défaut : la page est donc visible de tous immédiatement. L’image de marque facultative comprend description (2 000 caractères au maximum), logo_url (doit être en https), brand_color (hexadécimal comme #06755b) et custom_domain (un nom d’hôte dont vous faites pointer un CNAME vers l’application, unique). Utilisez ensuite status_page_posts_create pour publier des incidents. Exige la permission uptime.manage. Renvoie la page avec id (sp_...), slug, check_ids et subscribers (nombre d’abonnés confirmés). Le forfait fixe le nombre de pages d’un espace de travail : aucune en Free (402 plan_limit), 1 en Pro et 10 en Business. Un custom_domain et des abonnés par e-mail exigent le forfait Business ou Enterprise. Les pages au-delà du nombre prévu par le forfait sont conservées et hors ligne.

Permission : uptime.manage

Exemple
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 Supprimer une page d’état status_pages_delete

Supprime définitivement une page d’état avec toutes ses publications d’incident et tous ses abonnés. La page publique et son domaine personnalisé cessent aussitôt de fonctionner et c’est irréversible. Les vérifications de disponibilité elles-mêmes ne sont pas supprimées. L’id provient de status_pages_list. Exige la permission uptime.manage. Renvoie la page supprimée.

Permission : uptime.manage

Exemple
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 Lister les pages d’état status_pages_list

Liste les pages d’état d’un espace de travail, triées par nom. Utilisez query pour faire correspondre une partie d’un nom ou d’un slug. Lorsque l’appelant est limité à certains sites, seules les pages dont toutes les vérifications appartiennent à ces sites sont renvoyées. Paginé avec page et per_page (jusqu’à 100). Chaque élément contient les champs décrits dans status_pages_get. Nécessite le workspace_id de workspaces_list.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/status_pages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /status_pages/:id.json Obtenir une page d’état status_pages_get

Renvoie une page d’état avec ses réglages. Les champs sont id (sp_...), workspace_id, name, slug, custom_domain (null lorsqu’il n’y en a pas), description, logo_url, brand_color, published, check_ids (ids des vérifications de disponibilité affichées sur la page), subscribers (nombre d’abonnés e-mail confirmés) et created_at. Utilisez status_page_posts_list pour ses incidents et status_page_subscribers_list pour les personnes. L’id provient de status_pages_list.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/status_pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /status_pages/:id.json Modifier une page d’état status_pages_update

Modifie une page d’état. Seules les entrées que vous envoyez changent : envoyez donc uniquement published à false pour mettre la page hors ligne ou check_ids pour remplacer les vérifications affichées (toute la liste est remplacée, pas fusionnée). Les entrées et leurs limites sont les mêmes que dans status_pages_create. Envoyez custom_domain sous forme de chaîne vide pour retirer le domaine personnalisé. Seules les vérifications avec public à true peuvent être affichées, et un appelant limité à certains sites ne peut mettre sur une page que des vérifications de ces sites. L’id provient de status_pages_list. Exige la permission uptime.manage. Renvoie la page mise à jour.

Permission : uptime.manage

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

Partage

GET /badge/:site_id.json Badge compteur de visiteurs (SVG) pour un site public badges_get

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/badge/:site_id.json
GET /share/:token/breakdown/:dimension.json Principales valeurs d’une dimension partagée shares_breakdown

Les valeurs principales d’une dimension derrière un lien de partage, l’équivalent partagé de stats_breakdown. Le chemin prend token (la dernière partie de l’URL de partage) et dimension, qui doit appartenir à une section que le lien partage : par exemple sources partage channel, referrer et referrer_url, pages partage page, entry_page, exit_page et hostname, campaigns partage les dimensions utm_, locations partage country et language, technology partage device, browser, os et screen, conversions partage goal et events partage event. Une dimension hors des sections du lien est refusée avec une erreur de validation. limit va de 1 à 100 lignes (10 par défaut). Les lignes ont les mêmes champs et unités que stats_breakdown pour cette dimension. La période et les filtres verrouillés du lien l’emportent sur period, from, to et filters, et les filtres de l’appelant sont ignorés lorsque le lien ne les autorise pas. Un lien protégé par mot de passe exige l’en-tête X-Share-Password.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/share/:token/breakdown/:dimension.json
GET /share/:token.json Vue d’ensemble du tableau de bord partagé pour un jeton de partage shares_overview

Lit le tableau de bord derrière un lien de partage pour des personnes qui n’ont pas de compte. Le token du chemin est la dernière partie d’une URL de partage (/share/<token>) et c’est le seul identifiant : un lien protégé par mot de passe exige aussi l’en-tête X-Share-Password, et un lien sso exige un membre connecté. Il accepte aussi un id de site (pa_...) lorsque le tableau de bord public du site est activé. Renvoie les mêmes données que stats_overview, limitées à ce que le lien partage. C’est-à-dire period, metrics (visitors, visits, pageviews, views_per_visit, bounce_rate en pourcentage, visit_duration en millisecondes, revenue en unités mineures), les séries du graphique pour interval, les données de comparaison lorsque compare est défini, et des panels de valeurs principales uniquement pour les sections partagées. Il ajoute site (id, name, domain, timezone), sections et locked_period. live_visitors n’apparaît que lorsque le lien partage live. Une période et des filtres verrouillés sur le lien l’emportent sur period, from, to et filters. Utilisez shares_breakdown pour plus de lignes d’une dimension. Pour vos propres sites, utilisez stats_overview.

Permission : public · HTTP uniquement (pas un outil MCP)

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

Performance

GET /sites/:site_id/performance.json Web Vitals : tableau de bord p75, tendance quotidienne et ventilations par page, appareil, navigateur et pays performance_report

Rapport Web Vitals provenant de vrais visiteurs. Renvoie period, metric, sample_rate, scorecard, trend et breakdowns. scorecard contient une ligne pour chacun de LCP, INP, CLS, FCP et TTFB avec p75 (le 75e centile, en millisecondes sauf CLS, qui est un score sans unité), samples, rating (good, needs_improvement ou poor, null sans données), good, needs_improvement et poor (pourcentage des échantillons), previous_p75, change (pourcentage par rapport à la période précédente, null lorsqu’inconnu) et thresholds [limite good, limite poor]. trend est le p75 quotidien de la métrique choisie sous la forme {date, p75, samples}. breakdowns contient page, device, browser et country, chacun avec jusqu’à limit lignes (10 par défaut, 100 maximum) de la métrique choisie sous la forme {value, p75, samples, rating, slow_share, poor}, les pires et les plus fréquentées d’abord. Choisissez metric avec exactement l’un de LCP, INP, CLS, FCP ou TTFB en majuscules (LCP par défaut). sample_rate est la part des visites qui rapportent les vitals : les décomptes sont donc des échantillons et non toutes les visites. Accepte les entrées communes period, compare, filters et segment. Pour les vitals d’une page, utilisez pages_detail.

Permission : analytics.read

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

Personnes des témoignages

POST /sites/:site_id/testimonials/people/:id/ask_again.json Lancer une demande dont cette personne est l’unique destinataire testimonial_people_ask_again

Elle utilise le formulaire que la personne a utilisé en dernier, ou le formulaire de départ. Rien n’est envoyé tant que la demande n’est pas envoyée. Le serveur répond par 422 avec le code no_email, bounced ou unsubscribed lorsque la personne ne peut pas être sollicitée, et requests_unavailable lorsque les demandes ne sont pas disponibles.

Permission : content.write

Exemple
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 Ajouter une personne à un site testimonial_people_create

name est obligatoire (120 caractères au plus). email n’est jamais montré publiquement : il regroupe les témoignages ultérieurs sous cette personne et permet au site de la solliciter de nouveau, et une adresse qu’une autre personne du site a déjà est refusée. avatar_media_id est l’id (med_...) d’une image déjà téléversée sur le site. Ajouter une personne n’ajoute aucun témoignage.

Permission : content.write

Exemple
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 Supprimer définitivement une personne, avec tout ce qu’elle a dit, les fichiers et l’historique des demandes testimonial_people_delete_permanently

Pour une demande d’effacement. Cette action est irréversible. Elle exige confirm, le nom ou l’id de la personne, et laisse une seule entrée d’audit qui ne contient ni le nom ni les mots.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les personnes d’un site, filtrées et triées testimonial_people_list

Chaque personne vient avec son nombre de témoignages, le nombre de ceux approuvés, sa note moyenne et la dernière demande avec son résultat. L’email est null sauf si l’appelant détient content.write, et has_email indique toujours si un email est enregistré.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/people.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/people/:id/merge.json Fusionner d’autres fiches de la même personne dans celle-ci testimonial_people_merge

La personne du chemin reste. Tout ce que les autres ont dit et chaque demande qui leur a été envoyée passe sur elle, et les autres sont supprimées. Un champ vide chez cette personne est rempli à partir des autres, de la plus ancienne à la plus récente, et use indique quelles fiches l’emportent pour un champ. La réponse contient meta.undo_id, que testimonial_undo_records_undo accepte pendant 7 jours.

Permission : content.write

Exemple
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 Obtenir une personne avec ce qui lui a été demandé et les personnes qui ressemblent à la même personne testimonial_people_get

Ses témoignages sont testimonials_list avec person_id. can_ask et cannot_ask_reason indiquent si testimonial_people_ask_again aboutirait.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/people/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/people/:id.json Modifier une personne. Seuls les champs envoyés changent testimonial_people_update

Une valeur vide efface un champ, sauf le nom. Un email qu’une autre personne du site a déjà est refusé. La page d’entreprise sur laquelle une personne est listée suit le nom et le site web de l’entreprise.

Permission : content.write

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

Programme d’affiliation

GET /account/affiliate/commissions.json Lister vos commissions d’affiliation affiliate_commissions_list

Commissions, reprises pour remboursement ou rétrofacturation et annulations de reprise, les plus récentes en premier. Les montants sont en centimes.

Permission : member

Exemple
curl https://privatusanalytics.com/account/affiliate/commissions.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /account/affiliate/signup-box.json Obtenir le code et les résultats de votre encart d’inscription d’affilié affiliate_signup_box_get

Le code d’intégration de votre encart d’inscription (un script et un iframe simple) pour le thème choisi, les attributs qui préremplissent le formulaire, les événements que le script déclenche sur votre page et les chiffres de l’encart : inscriptions en attente de confirmation, inscriptions confirmées et clients payants. available vaut false tant que votre candidature d’affilié n’est pas approuvée.

Permission : member

Exemple
curl https://privatusanalytics.com/account/affiliate/signup-box.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /account/affiliate.json Obtenir votre statut d’affilié, votre lien de parrainage et vos statistiques affiliate_get

Le statut de votre candidature d’affiliation, votre lien de parrainage, les inscriptions et les clients payants que vous avez parrainés, et les soldes par devise (en période de blocage, à verser, versé). status vaut none si vous n’avez pas candidaté.

Permission : member

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

Propriétés personnalisées des témoignages

POST /sites/:site_id/testimonials/settings/properties.json Ajouter une propriété personnalisée à un site testimonial_properties_create

Un site peut avoir jusqu’à 20 propriétés actives. La clé est fixe une fois créée, parce que les liens de formulaire, les règles et l’API l’utilisent. Omettez-la et elle est suggérée d’après le libellé.

Permission : sites.manage

Exemple
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 Supprimer définitivement une propriété personnalisée et ses valeurs testimonial_properties_destroy

Cette action est irréversible. Elle supprime la propriété et sa valeur de chaque témoignage. confirm est la clé. Une propriété utilisée par une collection intelligente ou une règle d’étiquetage automatique ne peut pas être supprimée tant qu’elles l’utilisent. Archiver est la façon courante d’en retirer une.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les propriétés personnalisées d’un site, dans l’ordre d’affichage testimonial_properties_list

Chacune indique sa clé, son type et ses choix, combien de témoignages ont une valeur (filled), si son type peut encore changer, et quelles collections intelligentes et règles d’étiquetage automatique l’utilisent.

Permission : analytics.read

Exemple
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 Changer, réordonner, archiver ou rétablir une propriété personnalisée testimonial_properties_update

Seules les entrées que vous envoyez changent quelque chose. Renommer un choix le renomme sur chaque témoignage qui l’a. Une propriété utilisée par une collection intelligente ou une règle d’étiquetage automatique ne peut pas être archivée tant qu’elles l’utilisent.

Permission : sites.manage

Exemple
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 '{…}'

Rapport sponsor

GET /sponsor/:token.json Un rapport sponsor, grâce au jeton de son lien ad_reports_get

Permission : public · HTTP uniquement (pas un outil MCP)

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

Rapports par e-mail

DELETE /recipients/:id.json Retirer un destinataire d’un rapport par e-mail email_report_recipients_delete

Retire une adresse d’un rapport e-mail (id du destinataire, provenant de email_report_recipients_list). L’adresse cesse de recevoir les rapports et sa ligne est supprimée. Si l’adresse s’était désabonnée d’elle-même, le désabonnement reste enregistré : la retirer ne permet donc à personne de l’inviter à nouveau. Pour modifier de nombreuses adresses à la fois, envoyez plutôt la liste complète via email_reports_update. Renvoie le destinataire retiré.

Permission : content.write

Exemple
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 Lister les destinataires d’un rapport par e-mail avec leur statut email_report_recipients_list

Statuts : active (reçoit les rapports), pending (invité, pas encore accepté), declined ou unsubscribed. Ajoutez ou retirez des adresses via la liste des destinataires du rapport.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/reports/:report_id/recipients.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /recipients/:id/resend.json Renvoyer une invitation de rapport en attente email_report_recipients_resend

Renvoie l’invitation avec de nouveaux liens. Autorisé une fois tous les 7 jours par adresse et par rapport.

Permission : content.write

Exemple
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 Créer un rapport par e-mail email_reports_create

Crée un rapport d’analyse programmé envoyé par e-mail couvrant un ou plusieurs sites (le chemin prend workspace_id). name et site_ids (ids pa_...) sont obligatoires. frequency vaut daily, weekly (par défaut, envoyé en semaine) ou monthly (le 1er du mois), hour est l’heure du jour de 0 à 23 dans le fuseau horaire de l’espace de travail (8 par défaut) et weekday va de 0 pour dimanche à 6 pour samedi (1 par défaut, utilisé uniquement par les rapports hebdomadaires). blocks choisit le contenu parmi kpis, chart, pages, sources, goals, campaigns, vitals, uptime, testimonials et subscriptions (par défaut kpis, chart, pages, sources, goals, testimonials, subscriptions). subscriptions affiche le MRR et ce qui l’a fait bouger sur la période, pour un site avec un fournisseur de paiement connecté. recipients est une liste d’adresses e-mail (jusqu’à 50). Les membres de l’espace de travail sont actifs aussitôt, toute autre adresse est pending et reçoit un e-mail d’invitation, et ne reçoit les rapports qu’après l’avoir accepté. Les adresses qui se sont désabonnées sont refusées. Si recipients est omis, l’utilisateur appelant est ajouté. Un rapport activé a besoin d’au moins un destinataire. Le forfait Free autorise 3 rapports, les forfaits payants sont illimités. Renvoie le rapport avec next_run_at. Utilisez email_reports_send_test pour en voir un aperçu.

Permission : content.write

Exemple
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 Journal d’envoi d’un rapport par e-mail email_reports_deliveries

Liste le journal d’envoi d’un rapport e-mail, du plus récent au plus ancien, avec pagination. Chaque entrée contient status (sent pour un envoi programmé, test, failed ou skipped), recipients_count, error (la raison d’un échec, sinon null) et sent_at. Filtrez avec status. Utilisez-le pour confirmer qu’un rapport programmé est bien parti ou pour voir pourquoi il a échoué. Utilisez email_reports_send_test pour déclencher un e-mail de test.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/reports/:id/deliveries.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /reports/:id.json Supprimer un rapport par e-mail email_reports_delete

Supprime définitivement un rapport e-mail avec ses destinataires et son journal d’envoi. Cette action est irréversible et plus aucun e-mail n’est envoyé. Pour arrêter l’envoi tout en gardant le rapport, utilisez email_reports_update avec enabled false. L’id (rep_...) provient de email_reports_list. Renvoie le rapport supprimé.

Permission : content.write

Exemple
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 Lister les rapports par e-mail email_reports_list

Liste les rapports e-mail programmés d’un espace de travail (le chemin prend workspace_id), triés par nom, avec pagination. Chaque rapport contient id (rep_...), name, site_ids, frequency, hour, weekday, recipients (chaque adresse du rapport), recipient_details (id, email, status, invited_at, expires_at, confirmed_at pour chacun), blocks, attach_pdf, intro, enabled, last_sent_at, next_run_at et created_at. Filtrez par frequency (daily, weekly ou monthly). Un appelant limité à certains sites ne voit que les rapports dont tous les sites sont les siens. Seuls les destinataires avec le statut active reçoivent réellement les rapports. Utilisez email_reports_deliveries pour le journal d’envoi.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/reports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /reports/:id/send_test.json Envoyer un rapport par e-mail maintenant à titre de test email_reports_send_test

Envoie le rapport à une adresse tout de suite, à titre de test, sans modifier son calendrier ni last_sent_at. Envoie un vrai e-mail : ne l’utilisez donc que lorsque l’utilisateur le souhaite. recipient vaut par défaut l’utilisateur appelant et ne peut être que l’appelant, un autre membre de l’espace de travail ou un destinataire actif du rapport. Pour toute autre adresse, le test est envoyé à l’appelant. Les envois de test sont limités en débit par espace de travail et par adresse extérieure, et un envoi refusé renvoie une erreur de limite de débit. Renvoie l’envoi avec status (test, ou failed avec la raison dans error), recipients_count et sent_at. Utilisez email_reports_deliveries pour le journal complet.

Permission : content.write

Exemple
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 Obtenir un rapport par e-mail email_reports_get

Renvoie un rapport e-mail par id (rep_..., provenant de email_reports_list). La réponse contient name, site_ids, frequency, hour, weekday, recipients, recipient_details avec chaque adresse et son statut d’adhésion, blocks, attach_pdf, intro, enabled, last_sent_at et next_run_at (horodatages UTC). recipients liste chaque adresse, y compris celles en attente : seules les adresses avec le statut active dans recipient_details reçoivent les rapports. Utilisez email_reports_deliveries pour ce qui a été envoyé.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/reports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /reports/:id.json Mettre à jour un rapport par e-mail email_reports_update

Modifie un rapport e-mail (id provenant de email_reports_list). Seules les entrées que vous envoyez changent. Envoyer recipients remplace toute la liste. Les adresses que vous retirez sont supprimées, les nouvelles suivent les mêmes règles d’adhésion que pour email_reports_create (les membres sont actifs aussitôt, les autres reçoivent un e-mail d’invitation) et les adresses déjà présentes sur le rapport gardent leur statut. Modifier frequency, hour, weekday ou enabled recalcule next_run_at. Définissez enabled à false pour mettre en pause. Utilisez email_report_recipients_list pour voir le statut d’adhésion et email_report_recipients_resend ou email_report_recipients_delete pour gérer des adresses individuelles.

Permission : content.write

Exemple
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 Accepter une invitation à un rapport report_invites_accept

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/reports/invites/:token/accept.json \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/invites/:token/decline.json Refuser une invitation à un rapport report_invites_decline

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/reports/invites/:token/decline.json \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/resubscribe/:token.json Recevoir de nouveau les rapports après une désinscription report_resubscribes_confirm

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/reports/resubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/unsubscribe/:token/resubscribe.json Envoyer à une adresse un lien pour recevoir de nouveau les rapports report_resubscribes_create

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/reports/unsubscribe/:token/resubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
POST /reports/unsubscribe/:token.json Désabonner une adresse d’un rapport par e-mail report_unsubscribes_create

Permission : public · HTTP uniquement (pas un outil MCP)

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

Rapports sponsor

Recherche

GET /sites/:site_id/search.json Rapport de recherche : clics, impressions, CTR, position, principales requêtes/pages, pages de destination et opportunités search_report

Performances de recherche provenant de Google Search Console et de Bing Webmaster, associées aux métriques des pages d’arrivée du site. Choisissez provider : all (par défaut) additionne tous les moteurs connectés, avec une position pondérée par les impressions et des pays et appareils issus de Google uniquement, ou google ou bing seul, et period comme d’habitude ou from et to personnalisés. limit (de 1 à 100, 25 par défaut) plafonne les lignes de chaque tableau. Le résultat contient period, provider, connection (property, status, last_synced_at du moteur choisi, ou null lorsqu’il n’est pas connecté ou que provider vaut all), connections (chaque moteur connecté avec provider, property, status et last_synced_at), latest_date (le jour le plus récent avec des données), delayed (true lorsque la plage dépasse latest_date), totals et series (par jour) chacun avec clicks, impressions, ctr (un pourcentage, pas une fraction, 2 décimales) et position (rang moyen, 1 est le meilleur, null si inconnu), breakdowns pour query, page, country et device (lignes de value plus les mêmes quatre métriques), landing_pages (pages principales avec visits, bounce_rate et conversion_rate en pourcentages, et conversions), et opportunities (low_ctr_queries avec au moins 100 impressions et un CTR inférieur à 2 %, et des pages striking_distance dont la position moyenne est de 8 à 20). Les valeurs de pays sont celles que rapporte le fournisseur. Utilisez stats_breakdown pour les données de visiteurs et cet outil pour ce qui se passe avant le clic. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/search.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
DELETE /sites/:site_id/search/connections/:provider.json Déconnecter Search Console ou Bing et supprimer ses données search_disconnect

Déconnecte un fournisseur de recherche (google ou bing) d’un site et supprime définitivement ses données de recherche importées pour ce fournisseur. Cette action est irréversible. L’autorisation Google est aussi retirée dès qu’aucun site ne l’utilise. Échoue si ce fournisseur n’est pas connecté. Renvoie la connexion retirée. Exige sites.manage.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Importer les données de recherche maintenant search_sync

Met en file d’attente un import immédiat des données de recherche pour un fournisseur connecté (google, par défaut, ou bing) au lieu d’attendre le calendrier habituel. Il répond aussitôt (HTTP 202) avec la connexion et l’import s’exécute en arrière-plan. Interrogez search_report et surveillez connection.last_synced_at. Les moteurs de recherche rapportent avec un retard de quelques jours : les jours les plus récents restent donc vides même après une synchronisation. Échoue si le fournisseur n’est pas connecté. Exige sites.manage.

Permission : sites.manage

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

Retours privés

GET /sites/:site_id/testimonials/forms/:form_id/feedback.json Lister les retours privés d’un formulaire, du plus récent au plus ancien testimonial_feedback_list

Un retour privé est une réponse avec une note de 1 à 3 sur un formulaire dont l’acheminement des notes basses est activé (Business et plus). Ce n’est jamais un témoignage, jamais public et jamais compté.

Permission : analytics.read

Exemple
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 Marquer une réponse de retour privé comme lue, ou de nouveau comme non lue testimonial_feedback_mark_read

Définit read_at sur une réponse de retour privé, ou l’efface avec read false. Marquer une réponse déjà lue garde l’heure de sa première lecture. Rien n’est envoyé à la personne qui l’a écrite.

Permission : analytics.read

Exemple
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 Obtenir une réponse de retour privé testimonial_feedback_get

Renvoie la note, le texte, le nom donné par la personne et la date de lecture. Un retour privé est une réponse avec une note basse sur un formulaire dont l’acheminement des notes basses est activé. Ce n’est jamais un témoignage et jamais public.

Permission : analytics.read

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

Robots d’exploration

DELETE /sites/:site_id/crawlers/connection.json Déconnecter Cloudflare et supprimer les visites de robots qu’il a importées crawlers_cloudflare_disconnect

Déconnecte Cloudflare d’un site. Cela supprime le jeton d’API stocké et chaque hit de robot importé depuis Cloudflare, et c’est irréversible. Les hits provenant des journaux serveur envoyés restent. Le jeton existe toujours dans votre compte Cloudflare tant que vous ne l’y supprimez pas. Échoue si le site n’a aucune connexion. Renvoie la connexion retirée. Exige sites.manage.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Importer maintenant les visites de robots depuis Cloudflare crawlers_cloudflare_sync

Met en file d’attente un import Cloudflare immédiat pour un site déjà connecté, au lieu d’attendre le calendrier habituel. Il répond aussitôt (HTTP 202) avec la connexion, et l’import s’exécute en arrière-plan. Interrogez crawlers_report et surveillez cloudflare.last_synced_at pour voir quand il est terminé. Échoue si le site n’a aucune connexion Cloudflare. Exige sites.manage.

Permission : sites.manage

Exemple
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 Rapport sur les robots d’IA : hits par robot dans le temps, principaux chemins par robot, par catégorie crawlers_report

Rapporte quels robots d’exploration IA, de recherche et SEO récupèrent le site, à quelle fréquence et quels chemins, à partir des journaux serveur envoyés et de l’import Cloudflare. Il s’agit du trafic des robots, pas du trafic des visiteurs : il n’apparaît donc pas dans stats_breakdown. category vaut ai (par défaut), search, seo, other ou all, et crawler restreint à un robot nommé comme GPTBot ou ClaudeBot. Choisissez la plage avec period (30d par défaut) ou from et to personnalisés. Le résultat contient period (from et to sous forme de dates), category, crawler, totals (hits, chemins distincts, robots distincts), categories (hits par catégorie, sans tenir compte du filtre category), crawlers (jusqu’à 50 lignes avec crawler, category, hits, paths), series (libellés par jour et hits quotidiens pour les 8 premiers robots), top_paths (les 10 chemins les plus récupérés pour chacun des 8 premiers robots), has_data (false tant qu’aucun hit n’existe) et cloudflare (la connexion avec zone, status et last_synced_at, ou null). Les résultats sont mis en cache jusqu’à 30 minutes, sauf juste après un changement Cloudflare. Exige analytics.read.

Permission : analytics.read

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

Règles de canaux

POST /sites/:site_id/channel_rules.json Ajouter une règle de canal channel_rules_create

Ajoute une règle de canal personnalisée à la fin de la liste : elle s’exécute donc après toutes les règles existantes, et la taxonomie intégrée ne s’applique que lorsqu’aucune règle ne correspond. channel est le nom à attribuer (32 caractères au maximum, par exemple Partners). conditions est une liste non vide d’objets avec field (referrer_host, utm_source, utm_medium, utm_campaign, ref ou path), operator (is, contains, starts_with ou regex) et value. Toutes les conditions doivent correspondre pour que la règle s’applique, et la correspondance ne tient pas compte de la casse. Une condition avec une valeur vide est ignorée, et une règle sans condition est rejetée. Une expression régulière qui ne compile pas est rejetée. La règle s’applique aux nouvelles visites en quelques minutes et ne modifie pas l’historique. Utilisez channel_rules_move pour réordonner et channel_rules_preview pour la tester. Exige sites.manage.

Permission : sites.manage

Exemple
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 Supprimer une règle de canal channel_rules_delete

Supprime une règle de canal personnalisée, retrouvée par son id dans channel_rules_list. Les visites qu’elle a déjà classées gardent leur canal, et les nouvelles visites passent à la prochaine règle correspondante ou à la taxonomie intégrée. Les règles restantes gardent leur ordre. Renvoie la règle supprimée. Exige sites.manage.

Permission : sites.manage

Exemple
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 Lister les règles de canal dans l’ordre channel_rules_list

Liste les règles de canal personnalisées d’un site dans l’ordre d’évaluation (position 1 d’abord). Les règles s’exécutent de haut en bas pour chaque nouvelle visite et la première règle dont toutes les conditions correspondent détermine le canal. Une visite qui ne correspond à aucune règle reçoit le canal intégré (direct, organic_search, paid_search, email, etc.). Chaque règle contient id (un UUID), channel (le nom qu’elle attribue), position (à partir de 1), conditions (une liste d’objets field, operator et value, qui doivent tous correspondre) et created_at. Les règles n’affectent que les visites enregistrées après leur création et ne réécrivent jamais les anciennes données. Utilisez channel_rules_preview pour tester une visite d’exemple. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/channel_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/channel_rules/:id/move.json Déplacer une règle de canal vers le haut ou le bas channel_rules_move

Déplace une règle de canal dans l’ordre d’évaluation, car la première règle correspondante l’emporte et l’ordre décide du canal d’une visite. direction vaut up ou down (d’un cran), ou top ou bottom (aux extrémités). Une règle déjà au bord reste en place sans erreur. Les positions sont renumérotées de 1 à n et la règle mise à jour est renvoyée avec sa nouvelle position. Utilisez d’abord channel_rules_list pour voir l’ordre actuel. Exige sites.manage.

Permission : sites.manage

Exemple
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 Prévisualiser le canal pour un référent et des balises UTM d’exemple channel_rules_preview

Simulation qui vous indique quel canal recevrait une visite d’exemple avec les règles actuelles du site. Rien n’est stocké. Envoyez n’importe lesquels de referrer (une URL ou un nom d’hôte seul, les préfixes www et m sont ignorés), utm_source, utm_medium, utm_campaign, ref, path (chemin d’arrivée comme /pricing) et paid_click (true si l’URL contenait un identifiant de clic comme gclid). Le résultat contient channel (le nom du canal gagnant), custom_rule (true lorsqu’une règle personnalisée en a décidé, false lorsque c’est la taxonomie intégrée) et referrer_host (le nom d’hôte nettoyé utilisé pour la correspondance). Un référent sur les domaines propres du site compte comme interne. Utilisez-le après channel_rules_create ou channel_rules_move pour confirmer l’effet. Exige analytics.read.

Permission : analytics.read

Exemple
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 Modifier une règle de canal channel_rules_update

Modifie une règle de canal personnalisée, retrouvée par son id dans channel_rules_list. Envoyez channel pour renommer le canal qu’elle attribue et conditions pour remplacer toute la liste de conditions (la liste est remplacée, pas fusionnée : envoyez donc chaque condition que vous voulez garder). Les entrées omises sont laissées telles quelles. Les champs de condition, les opérateurs et la validité des expressions régulières sont vérifiés comme dans channel_rules_create. Le changement ne s’applique qu’aux nouvelles visites. Pour changer l’ordre, utilisez channel_rules_move. Exige sites.manage.

Permission : sites.manage

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

Règles de trafic

POST /sites/:site_id/traffic_rules.json Ajouter une règle de trafic traffic_rules_create

Ajoute un motif à l’une des listes de blocage ou d’autorisation du site. list vaut hostnames, paths, referrers, countries, ip_ranges, user_agents ou events. pattern utilise * comme caractère générique et la correspondance ne tient pas compte de la casse, par exemple /admin/*, un nom d’hôte, un hôte référent comme spam.example, un code pays à deux lettres (stocké en majuscules), un nom de navigateur avec sa version majeure puisque le user agent est réduit (par exemple Chrome 120), ou un nom d’événement personnalisé. ip_ranges acceptent une adresse IPv4 ou IPv6 ou un CIDR (203.0.113.0/24), qui doit être valide. Un motif ne peut exister qu’une fois par liste, et un site peut avoir jusqu’à 500 règles. Le fait que la liste bloque ou autorise les correspondances dépend de son mode, qui vaut block par défaut et se change avec sites_update. Les hits correspondants sont abandonnés à la collecte et non stockés, et la règle s’applique en quelques minutes aux nouveaux hits uniquement. Exige sites.manage. Exige le forfait Pro ou supérieur (sinon 402 plan_limit).

Permission : sites.manage

Exemple
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 Supprimer une règle de trafic traffic_rules_delete

Supprime une règle de trafic, retrouvée par son id dans traffic_rules_list. Les hits qu’elle abandonnait sont de nouveau comptés à partir de là, et les hits déjà abandonnés sont perdus pour de bon. Notez que supprimer le dernier motif d’une liste en mode allow fait cesser le filtrage de cette liste. Renvoie la règle supprimée. Exige sites.manage.

Permission : sites.manage

Exemple
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 Lister les règles de trafic traffic_rules_list

Liste les règles de trafic du site, c’est-à-dire des listes de blocage ou d’autorisation appliquées à la collecte pour décider quels hits comptent. Chaque règle contient id (un UUID pour la mise à jour et la suppression), list (hostnames, paths, referrers, countries, ip_ranges, user_agents ou events), pattern, label (note facultative), mode (block ou allow, le mode de toute cette liste) et created_at. En mode block, un hit qui correspond à l’un des motifs de la liste est abandonné, en mode allow, un hit qui ne correspond à aucun est abandonné, et une liste vide ne filtre rien. Filtrez avec list. Le mode d’une liste ne se définit pas ici, il se définit avec sites_update via traffic_rule_modes. Utilisez traffic_rules_test pour vérifier un hit d’exemple. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/traffic_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/traffic_rules/test.json Tester si un hit serait compté avec les règles actuelles du site traffic_rules_test

Simulation qui vous indique si un hit d’exemple serait compté avec les règles de trafic actuelles du site. Rien n’est stocké. Envoyez n’importe lesquels de url (une URL de page complète, son hôte et son chemin sont vérifiés), referrer (URL ou nom d’hôte), country (code à deux lettres), ip (vérifiée par rapport à ip_ranges, jamais stockée), user_agent (une chaîne User-Agent complète, réduite au navigateur et à la version majeure) et event (un nom d’événement personnalisé). Les valeurs que vous omettez ne sont pas vérifiées. Le résultat contient counted (true si le hit serait enregistré), blocked_by (la liste qui l’a abandonné, ou null), mode (block ou allow pour cette liste, ou null) et values (les valeurs normalisées qui ont été vérifiées). Les règles sont lues en direct : une nouvelle règle apparaît donc aussitôt. Exige analytics.read. Exige le forfait Pro ou supérieur (sinon 402 plan_limit).

Permission : analytics.read

Exemple
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 Modifier une règle de trafic traffic_rules_update

Modifie le motif ou le libellé d’une règle de trafic, retrouvée par son id dans traffic_rules_list. Seules les entrées que vous envoyez changent. La liste ne peut pas être modifiée : supprimez et recréez la règle pour la déplacer vers une autre liste. Le motif doit rester valide pour sa liste (un CIDR pour ip_ranges) et unique en son sein. Envoyez un label vide pour l’effacer. S’applique uniquement aux nouveaux hits. Exige sites.manage. Exige le forfait Pro ou supérieur (sinon 402 plan_limit).

Permission : sites.manage

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

Récompenses

POST /sites/:site_id/testimonials/settings/rewards/:id/copy.json Copier la récompense d’un formulaire vers d’autres formulaires du même site testimonial_rewards_copy

Copie le titre, le texte, le code et l’état activé ou désactivé de la récompense de ce formulaire vers chaque formulaire de form_ids (1 à 100 formulaires du même site, hors de la corbeille). Une récompense que le formulaire cible a déjà est remplacée. Le serveur répond par 422 avec le code unknown_ids quand un id n’est pas un formulaire du site, et alors rien n’est copié.

Permission : sites.manage

Exemple
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 Lister la récompense de chaque formulaire d’un site testimonial_rewards_list

Une ligne par formulaire. Un formulaire sans récompense définie a enabled false.

Permission : analytics.read

Exemple
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 Définir la récompense qu’un formulaire affiche à son étape de remerciement testimonial_rewards_update

L’id est l’id du formulaire. Le code est un texte que vous fournissez. Privatus Analytics ne le crée pas, ne le vérifie pas et ne le fait pas expirer.

Permission : sites.manage

Exemple
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 '{…}'

Réglages des e-mails

POST /email/preferences/:token/unsubscribe.json Arrêter tous les e-mails d’une adresse qui peuvent être désactivés, avec le jeton de son lien de réglages des e-mails email_preferences_unsubscribe_all

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/email/preferences/:token/unsubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
POST /email/preferences/:token.json Désactiver ou réactiver les e-mails d’une adresse, avec le jeton de son lien de réglages des e-mails email_preferences_update

Permission : public · HTTP uniquement (pas un outil MCP)

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

Rôles

POST /workspaces/:workspace_id/roles.json Créer un rôle personnalisé roles_create

Crée un rôle personnalisé, un ensemble nommé de permissions que vous pouvez donner à des membres via invitations_create ou members_update avec le rôle custom et l’id du rôle comme custom_role_id. Il exige le forfait Business et members.manage. permissions doit lister au moins un nom parmi les valeurs autorisées (analytics.read, analytics.export, content.write, sites.manage, uptime.manage, members.manage, tokens.manage, billing.manage, workspace.manage) et vous ne pouvez pas inclure une permission que vous ne détenez pas vous-même. Renvoie le rôle (voir roles_list pour les champs).

Permission : members.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Supprimer un rôle personnalisé (doit être inutilisé) roles_delete

Supprime un rôle personnalisé. Cette action est irréversible et elle échoue tant qu’un membre ou une invitation en attente utilise encore le rôle : déplacez d’abord ces personnes vers un autre rôle avec members_update (trouvez-les avec members_list). Les rôles intégrés ne peuvent pas être supprimés. Récupérez l’id (uuid) dans roles_list. Exige members.manage. Renvoie le rôle supprimé.

Permission : members.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les rôles personnalisés roles_list

Liste les rôles personnalisés d’un espace de travail, triés par nom. Les rôles personnalisés sont une fonctionnalité du forfait Business qui regroupe des permissions sous un nom de votre choix, et les rôles intégrés (owner, admin, editor, analyst, viewer, billing) ne sont pas listés ici. Chaque rôle contient id (uuid, utilisé comme custom_role_id dans invitations_create et members_update), name, permissions (des noms comme analytics.read, content.write, members.manage), members (le nombre de membres qui le détiennent) et created_at. Les appelants limités à certains sites ne voient que les rôles à leur portée.

Permission : member

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/roles.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/roles/:id.json Mettre à jour un rôle personnalisé roles_update

Renomme un rôle personnalisé et/ou remplace toute sa liste de permissions. Seules les entrées que vous envoyez changent, et permissions remplace la liste existante au lieu de s’y ajouter. Le changement s’applique aussitôt à chaque membre et à chaque invitation en attente qui détient le rôle. Vous ne pouvez modifier qu’un rôle dont vous détenez toutes les permissions, et un appelant limité à certains sites a besoin d’une portée sur chaque site de ses détenteurs. Exige members.manage. Récupérez l’id (uuid) dans roles_list. Renvoie le rôle mis à jour.

Permission : members.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Provisionner un utilisateur scim_users_create

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/scim/v2/Users.json \
  -H "Content-Type: application/json" -d '{…}'
DELETE /scim/v2/Users/:id.json Déprovisionner un utilisateur scim_users_delete

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X DELETE https://privatusanalytics.com/scim/v2/Users/:id.json \
  -H "Content-Type: application/json" -d '{…}'
GET /scim/v2/Users.json Lister les utilisateurs provisionnés scim_users_list

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/scim/v2/Users.json
GET /scim/v2/Users/:id.json Obtenir un utilisateur provisionné scim_users_get

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/scim/v2/Users/:id.json
PATCH /scim/v2/Users/:id.json Mettre à jour un utilisateur (PATCH active, name) scim_users_update

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
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 Activer une configuration SSO testée sso_activate

Active le SSO pour l’espace de travail. La configuration doit déjà avoir le statut tested, ce qui arrive après une connexion d’essai réussie (lancée depuis la page de réglages SSO de l’espace de travail dans l’application, elle exige une connexion par navigateur et ne peut pas être exécutée d’ici), ou être déjà active. Forfait Business uniquement. Après l’activation, les membres peuvent se connecter avec le SSO, et définir enforced via sso_update exige alors le SSO pour chaque connexion. Il échoue lorsque la configuration n’est pas testée ou que le forfait n’a pas de SSO. Exige workspace.manage. Renvoie la configuration avec le statut active (voir sso_get).

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Désactiver le SSO (retour au brouillon) sso_deactivate

Désactive le SSO en remettant la configuration à l’état draft et en effaçant enforced : les membres reviennent alors aux autres méthodes de connexion de l’espace de travail. Les détails du fournisseur sont conservés. Le réactiver exige une nouvelle connexion d’essai et sso_activate. Assurez-vous d’abord que les membres ont un autre moyen de se connecter. Cela fonctionne avec n’importe quel forfait. Exige workspace.manage. Renvoie la configuration avec le statut draft (voir sso_get).

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Générer un nouveau jeton SCIM (affiché une seule fois) sso_scim_token

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir les paramètres SSO sso_get

Renvoie la configuration d’authentification unique (SSO) de l’espace de travail, ou un brouillon vide lorsqu’il n’y en a pas. Les champs sont protocol (saml ou oidc), status (draft, testing, tested ou active), enforced (les membres doivent se connecter via le SSO), domains (les domaines e-mail qui utilisent ce SSO), idp_sso_url et idp_entity_id pour SAML, oidc_issuer et oidc_client_id pour OIDC, default_role et jit_provisioning (créer des membres à la première connexion SSO), et scim_enabled. Les secrets ne sont jamais renvoyés, seulement les booléens idp_cert_present et oidc_client_secret_present. Le SSO est une fonctionnalité du forfait Business. Exige workspace.manage.

Permission : workspace.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/sso.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/sso.json Créer ou mettre à jour les paramètres SSO sso_update

Crée ou modifie les réglages SSO de l’espace de travail. Forfait Business uniquement. Seules les entrées que vous envoyez changent. Pour SAML, envoyez protocol saml avec idp_sso_url, idp_entity_id et idp_cert (texte PEM). Pour OIDC, envoyez protocol oidc avec oidc_issuer, oidc_client_id et oidc_client_secret, qui est en écriture seule et dont une valeur vide conserve le secret existant. domains liste les domaines e-mail qui utilisent ce SSO. default_role est le rôle donné aux membres créés par le provisionnement à la première connexion ou par SCIM (ni owner ni custom) et vous ne pouvez définir qu’un rôle que vous pourriez vous-même accorder. Modifier un détail du fournisseur d’identité renvoie une configuration active ou tested à l’état draft et désactive enforced : elle doit donc être testée à nouveau avant que sso_activate fonctionne. enforced à true n’est accepté que lorsque status vaut active. Exige workspace.manage. Renvoie la configuration (voir sso_get).

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

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

Segments

POST /sites/:site_id/segments.json Enregistrer des filtres comme segment segments_create

Enregistre un ensemble de filtres sous la forme d’un segment nommé réutilisable sur n’importe quel outil de statistiques via segment_id. Passez name et filters (toutes les conditions doivent correspondre, et un groupe {any: [...]} correspond lorsque l’une de plusieurs correspond, voir l’entrée filters pour les noms de dimensions et les opérateurs). Les filtres sont vérifiés : une dimension inconnue ou une mauvaise valeur renvoie donc une erreur 422 avec un message par ligne. Utilisez d’abord segments_preview pour vérifier ce qu’un ensemble de filtres couvre. shared vaut true par défaut et rend le segment visible à toutes les personnes ayant accès au site, false le garde privé. Renvoie le segment avec id (seg_...), site_id, name, description, filters, summary (une description en langage clair), shared, mine et horodatages. Exige la permission content.write.

Permission : content.write

Exemple
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 Supprimer un segment segments_delete

Supprime définitivement un segment enregistré. Les tableaux de bord et les liens qui l’utilisent reviennent à tout le trafic. Aucune donnée d’analyse n’est touchée et il n’y a pas d’annulation possible. Renvoie le segment supprimé. Les ids (seg_...) proviennent de segments_list. Exige la permission content.write.

Permission : content.write

Exemple
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 Lister les segments utilisables sur un site segments_list

Liste les segments enregistrés d’un site, triés par nom : les segments partagés plus vos propres segments privés. Chaque segment contient id (seg_...), site_id, name, description, filters, summary, shared, mine et horodatages. Passez un id comme segment_id à n’importe quel outil de statistiques (stats_aggregate, stats_breakdown, funnels_get et d’autres) pour appliquer les filtres du segment. Paginé via les paramètres de page standard. Utilisez segments_create pour en ajouter un.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/segments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/segments/preview.json Décrire des filtres en langage naturel et compter les visiteurs correspondants sur les 30 derniers jours segments_preview

Vérifie un ensemble de filtres sans rien enregistrer. Renvoie summary (les filtres en langage clair), visitors (combien de visiteurs correspondaient au cours des 30 derniers jours, null lorsque les filtres sont invalides), period (toujours 30d) et filters (la forme nettoyée et canonique qui serait stockée). Les filtres utilisent le même format que segments_create, y compris les groupes {any: [...]} et des noms écrits en toutes lettres facultatifs pour les pays, les canaux et les objectifs, qui sont convertis en codes et en ids. Des filtres invalides renvoient une erreur 422 qui nomme la ligne. Utilisez-le pour essayer des filtres avant segments_create, et stats_aggregate avec filters pour des chiffres sur une autre période.

Permission : analytics.read

Exemple
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 Obtenir un segment segments_get

Renvoie un segment enregistré : id (seg_...), site_id, name, description, filters (les conditions stockées), summary (une description en langage clair comme Visitors from the United States on mobile), shared (visible à toutes les personnes ayant accès au site), mine (true lorsque vous l’avez créé) et horodatages. Vous pouvez lire les segments partagés et vos propres segments privés. Les ids proviennent de segments_list. Pour compter combien de visiteurs correspondent à un ensemble de filtres, utilisez segments_preview.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/segments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/segments/:id.json Renommer un segment ou modifier ses filtres ou son partage segments_update

Renomme un segment, remplace ses filtres ou change qui peut le voir. Seules les entrées que vous envoyez changent. Envoyer filters remplace tous les filtres existants, dans le même format et avec les mêmes vérifications que segments_create. shared à false le rend privé pour son créateur. description peut être effacée en l’envoyant vide. Tout ce qui utilise le segment, comme les appels de statistiques avec son segment_id, change immédiatement. Renvoie le segment. Les ids proviennent de segments_list. Exige la permission content.write.

Permission : content.write

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

Site web

GET /blog.json Lister les articles du blog blog_list

Liste les articles du blog de Privatus Analytics, du plus récent au plus ancien, avec slug, title, kicker, rubric (le résumé en une phrase), description, path et dates, et sans corps. Pour en lire un, utilisez blog_get avec son slug. Paginé avec page et per_page (100 au maximum). Public, aucune authentification requise.

Permission : public

Exemple
curl https://privatusanalytics.com/blog.json
GET /blog/:slug.json Lire un article du blog (Markdown et HTML) blog_get

Renvoie un article du blog à partir de son slug (issu de blog_list, la dernière partie de /blog/<slug>) avec ses intertitres, son corps en Markdown et le HTML rendu. Les articles sont rédigés en anglais. Public, aucune authentification requise.

Permission : public

Exemple
curl https://privatusanalytics.com/blog/:slug.json
GET /changelog.json Lister les entrées du journal des modifications changelog_list

Mises à jour publiées du produit, les plus récentes en premier. Disponible aussi en RSS sur /changelog.rss.

Permission : public

Exemple
curl https://privatusanalytics.com/changelog.json
POST /contact.json Envoyer un message à l’équipe Privatus Analytics contact_create

Les clients navigateur envoient un jeton Cloudflare Turnstile dans `cf-turnstile-response`. Les requêtes avec un jeton d’API n’en ont pas besoin.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/contact.json \
  -H "Content-Type: application/json" -d '{…}'
POST /newsletter/confirm.json Confirmer un abonnement à la newsletter (jeton signé) newsletter_confirm

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/newsletter/confirm.json \
  -H "Content-Type: application/json" -d '{…}'
POST /newsletter.json Abonner une adresse e-mail à la newsletter newsletter_subscribe

Les clients navigateur envoient un jeton Cloudflare Turnstile dans `cf-turnstile-response`. Les requêtes avec un jeton d’API n’en ont pas besoin.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/newsletter.json \
  -H "Content-Type: application/json" -d '{…}'
POST /newsletter/unsubscribe.json Se désabonner avec un jeton de lien signé newsletter_unsubscribe

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/newsletter/unsubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
GET /pricing.json Obtenir les forfaits, prix et limites des forfaits pricing_get

Les mêmes données que la page des tarifs : l’échelle d’événements, chaque limite de forfait et ce qui compte comme un événement. Passez events pour obtenir le palier correspondant.

Permission : public

Exemple
curl https://privatusanalytics.com/pricing.json
GET /status.json Obtenir l’état actuel du système status_get

État de la base de données, de Redis et des tâches d’arrière-plan, vérifié au plus toutes les 15 secondes.

Permission : public

Exemple
curl https://privatusanalytics.com/status.json
GET /tools/header-checker.json Vérifier le Referrer-Policy et la CSP d’une page pour l’analytics tools_header_check

Récupère une page publique et vérifie les en-têtes de réponse qui affectent l’analyse. Utilisez-le lorsque des données de suivi manquent ou que les référents semblent incorrects. Il examine Referrer-Policy, les directives script-src et connect-src de la Content-Security-Policy (si Privatus Analytics peut charger et envoyer des données), Permissions-Policy et le nombre d’en-têtes Set-Cookie. Renvoie url (l’URL finale après jusqu’à 3 redirections), status (statut HTTP) et findings, chacun avec check, value (peut être null), level (ok, warn ou info) et une note en langage clair. L’URL doit être http ou https et publique, les adresses privées et internes sont refusées, seul le premier 1 Mo est lu et la récupération expire après 5 secondes. Limité à 10 appels par minute et par client. Public, aucune authentification requise.

Permission : public

Exemple
curl https://privatusanalytics.com/tools/header-checker.json
GET /tools/privacy-policy-generator.json Rédiger un paragraphe de politique de confidentialité pour Privatus Analytics tools_privacy_policy

Rédige un paragraphe de politique de confidentialité décrivant comment Privatus Analytics collecte des données sur le site du client (sans cookies, aucune donnée personnelle stockée, localisation limitée au pays). C’est un point de départ, pas un avis juridique. Les entrées sont site_name (120 caractères au maximum), contact_email (facultatif, ajoute une phrase de contact) et honors_gpc (true par défaut, ajoute une phrase indiquant que Do Not Track et Global Privacy Control sont respectés). Renvoie site_name, paragraphs (tableau de chaînes), text (les paragraphes joints par des lignes vides, avec l’adresse de Privatus Analytics entre parenthèses après le nom) et html (les paragraphes en éléments <p>, avec le nom en lien simple). Le texte est rédigé dans la langue de la requête, l’anglais par défaut. Il ne modifie aucun compte. Public, aucune authentification requise.

Permission : public

Exemple
curl https://privatusanalytics.com/tools/privacy-policy-generator.json
GET /tools/qr-code.json Générer un QR code au format SVG tools_qr_code

Génère un code QR sous forme d’image SVG pour l’impression ou les affiches. Associez-le à un lien avec des paramètres UTM provenant de tools_utm_builder. Les entrées sont text (l’URL ou le texte, 1 000 caractères au maximum) et level (correction d’erreurs l, m, q ou h, m par défaut, un niveau plus élevé résiste à plus de dégâts mais exige un code plus dense). Renvoie text, level, size (modules par côté) et svg (un document SVG autonome, noir sur blanc). Un texte trop long pour le niveau choisi est rejeté. Pour les codes QR de liens courts suivis, utilisez plutôt links_qr. Public, aucune authentification requise.

Permission : public

Exemple
curl https://privatusanalytics.com/tools/qr-code.json
GET /tools/tracker-scanner.json Lister les cookies et traqueurs connus d’une page tools_tracker_scan

Récupère une page publique et liste les cookies qu’elle dépose et les traceurs tiers connus qu’elle référence. Utilisez-le pour un contrôle rapide de ce qu’une page charge avant de choisir une approche du consentement. C’est une analyse statique du HTML et des en-têtes de réponse uniquement, elle n’exécute pas JavaScript : les cookies déposés par des scripts et les balises chargées plus tard par un gestionnaire de balises sont donc manqués. Renvoie url (URL finale après jusqu’à 3 redirections), status, truncated (true lorsque seul le premier 1 Mo a été lu), cookies (name, domain, path, expires, secure, http_only et same_site, les valeurs ne sont jamais renvoyées), trackers (name, category, match et evidence, où category vaut advertising, analytics, session_recording, tag_manager, marketing ou privacy_analytics) et third_party_hosts (noms d’hôte triés d’autres sites). L’URL doit être http ou https publique, avec un délai de récupération de 5 secondes, et les appels sont limités à 10 par minute et par client. Public, aucune authentification requise.

Permission : public

Exemple
curl https://privatusanalytics.com/tools/tracker-scanner.json
GET /tools/utm-builder.json Générer une URL de campagne avec paramètres UTM tools_utm_builder

Construit une URL de campagne avec des paramètres UTM et signale les erreurs courantes. Les entrées sont url (doit être http ou https), source, medium et campaign (tous obligatoires) et term et content facultatifs. Les paramètres utm_ déjà présents sur l’URL sont remplacés et les autres paramètres de requête sont conservés. Renvoie url (le lien final), params (les valeurs utm_ qui ont été ajoutées, celles qui sont vides étant omises) et warnings (des chaînes pour les valeurs avec des majuscules, des espaces, ou un texte qui ressemble à une adresse e-mail ou à un long nombre, qui ne devraient jamais figurer dans une URL). Utilisez des valeurs en minuscules sans espaces pour que la même campagne ne soit pas répartie sur plusieurs lignes dans les rapports. Il n’enregistre rien. Public, aucune authentification requise.

Permission : public

Exemple
curl https://privatusanalytics.com/tools/utm-builder.json
POST /waitlist.json Rejoindre une liste d’attente (hébergement UE) waitlist_join

Les clients navigateur envoient un jeton Cloudflare Turnstile dans `cf-turnstile-response`. Les requêtes avec un jeton d’API n’en ont pas besoin.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/waitlist.json \
  -H "Content-Type: application/json" -d '{…}'

Sites

POST /sites/:site_id/data_reset.json Supprimer tous les événements et visites d’une plage de dates (s’exécute en arrière-plan, irréversible) sites_reset_data

Supprime de façon irréversible les pages vues, les événements personnalisés et les visites d’un site pour une plage de dates, sans annulation possible. Utilisez-le pour effacer le trafic de test ou retirer une mauvaise période. Il ne supprime ni le site, ni ses objectifs, ni ses réglages (utilisez sites_delete pour le site). from et to sont des dates YYYY-MM-DD, bornes incluses et lues dans le fuseau horaire du site, et to ne doit pas être antérieur à from. confirm doit être exactement le domaine du site tel qu’affiché par sites_get (la casse n’a pas d’importance). La requête est acceptée et répond aussitôt avec status queued, site_id, from et to. La suppression s’exécute en arrière-plan par lots : les chiffres des outils de statistiques peuvent donc mettre un peu de temps à se stabiliser, et il n’y a pas de point d’accès de statut à interroger, consultez les outils de statistiques jusqu’à ce que la plage soit vide. L’action est consignée dans le journal d’audit. Exige la permission sites.manage.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Résumé du trafic filtré : bots, règles de trafic ou masquages de données personnelles par motif et par pays (comptages uniquement) sites_filter_stats

Nombre de hits abandonnés ou nettoyés avant le stockage, sur les derniers jours. Utilisez-le pour voir combien de trafic de bots, de trafic bloqué par des règles ou de masquage un site a. Choisissez kind parmi bot (hits abandonnés comme bots), rule (hits abandonnés par les règles de trafic) ou redaction (valeurs masquées par le nettoyeur de données personnelles). Renvoie kind, days, total, by_reason, by_country et by_day. by_reason et by_country sont des listes de {value, count} (jusqu’à 50, les plus grands d’abord, value null lorsqu’inconnu) et by_day est une liste de {date, count}. days est borné entre 1 et 395 et vaut 30 par défaut. Ce ne sont que des décomptes agrégés. Aucune adresse IP, aucun user agent et aucune valeur masquée ne sont stockés : rien ne peut donc être relié à une personne. Ces hits ne comptent pas comme des événements pour la facturation. Utilisez traffic_rules_list pour voir ou modifier les règles.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/filter_stats.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/access.json Lister les membres et indiquer s’ils peuvent voir ce site sites_access_list

Montre quels membres de l’espace de travail peuvent voir un site. Chaque membre de l’espace de travail est listé dans l’ordre d’arrivée, sans pagination. Les champs sont membership_id (l’uuid utilisé par sites_access_update), email, name, role, access (true lorsque le membre peut voir ce site) et locked (true pour les propriétaires et les admins, qui ont toujours accès et ne peuvent pas être modifiés). Les autres membres ont accès lorsqu’ils ont tous les sites ou une autorisation explicite pour ce site. Utilisez members_list pour voir la liste complète des sites d’un membre. Exige members.manage.

Permission : members.manage

Exemple
curl https://privatusanalytics.com/sites/:site_id/access.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/access.json Accorder ou retirer l’accès d’un membre à ce site sites_access_update

Accorde ou retire l’accès d’un membre à un site. membership_id provient de sites_access_list (ou members_list) et access vaut true pour accorder ou false pour retirer. Les propriétaires et les admins ont toujours accès et ne peuvent pas être modifiés. Retirer l’accès à un membre qui avait tous les sites le fait passer à une liste explicite de tous les autres sites de l’espace de travail et désactive son include_future_sites : il n’obtiendra donc pas les sites créés plus tard. Accorder l’accès à quelqu’un qui a déjà tous les sites ne change rien. Vous ne pouvez pas modifier un membre qui détient des permissions que vous n’avez pas ou des sites au-delà des vôtres. Exige members.manage. Renvoie la ligne de ce membre sous la même forme que sites_access_list.

Permission : members.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Mettre un site en favori (épinglé en premier dans Tous les sites) sites_favorite

Marque un site d’une étoile pour l’utilisateur appelant afin qu’il soit listé en premier par sites_list et sur la page de tous les sites. Cela n’affecte que l’appelant, jamais les autres membres, et marquer un site déjà étoilé ne change rien. L’appel n’a besoin d’aucune entrée en dehors de l’id du site. Utilisez sites_unfavorite pour retirer l’étoile. Exige analytics.read. Renvoie le site (voir sites_get), avec favorite à true.

Permission : analytics.read

Exemple
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 Retirer un site des favoris sites_unfavorite

Retire l’étoile de l’utilisateur appelant sur un site, qui n’est donc plus épinglé en premier dans sites_list. Cela n’affecte que l’appelant et ne fait rien si le site n’était pas étoilé. Utilisez sites_favorite pour le marquer à nouveau. Exige analytics.read. Renvoie le site (voir sites_get), avec favorite à false.

Permission : analytics.read

Exemple
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 État de l’installation et code d’intégration d’un site sites_setup_get

Renvoie ce qui est nécessaire pour installer le suivi sur un site et si des données sont arrivées. Les champs sont site_id, snippet (la balise script HTML prête à coller avec chaque module du traceur activé), receiving_data (true dès que le premier événement a été reçu) et first_event_at (ISO 8601, null jusque-là). Interrogez-le après l’installation pour voir si des événements arrivent. Utilisez plutôt tracking_snippet lorsque vous voulez un extrait personnalisé (modules choisis, pages vues manuelles, mode SPA, masques) et tracking_verify pour récupérer la page en ligne et vérifier que le script est présent. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/setup.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /transfers/:token/accept.json Accepter le transfert d’un site vers l’un de vos espaces de travail site_transfers_accept

Accepte une invitation de transfert de site et déplace le site dans l’un des espaces de travail de l’appelant. Le paramètre de chemin token provient du lien de l’invitation, et workspace_id est l’espace de travail de destination (ws_...) dans lequel l’appelant a sites.manage. L’adresse e-mail de l’appelant doit correspondre à celle à laquelle l’invitation a été envoyée, et la destination ne peut pas être l’espace de travail d’où vient le site. Le site garde son id, ses réglages, ses objectifs et ses données, mais les autorisations d’accès par membre sont effacées et ses liens partagés passent dans le nouvel espace de travail. Il échoue lorsque l’invitation n’est plus en attente ou a expiré, lorsque la destination a atteint la limite de sites de son forfait, ou lorsqu’elle a déjà un site actif avec le même domaine. Le déplacement ne peut être annulé qu’en retransférant. Un jeton qui fait cet appel doit appartenir à l’espace de travail de destination et avoir sites.manage. Renvoie le transfert avec le statut accepted.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl -X POST https://privatusanalytics.com/transfers/:token/accept.json \
  -H "Content-Type: application/json" -d '{…}'
POST /sites/:site_id/transfer.json Démarrer le transfert d’un site vers un autre espace de travail (envoie un e-mail au destinataire) sites_transfer_start

Démarre le déplacement d’un site vers un autre espace de travail en envoyant au destinataire par e-mail un lien d’invitation valable 7 jours. Rien ne bouge tant que le destinataire ne s’est pas connecté avec cette adresse e-mail et n’a pas accepté (site_transfers_accept) : le site reste donc ici jusque-là. Démarrer un nouveau transfert annule tout transfert en attente précédent pour le même site. email doit être une adresse valide et le destinataire choisit l’espace de travail de destination. Les e-mails de transfert sont limités en débit. Utilisez sites_transfer_cancel pour le retirer. Exige sites.manage. Renvoie le transfert avec site_id, site_domain, from_workspace, to_email, le statut pending et expires_at.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Annuler un transfert de site en attente sites_transfer_cancel

Annule l’invitation de transfert en attente du site pour que son lien cesse de fonctionner. Il échoue avec une erreur de validation lorsqu’aucun transfert n’est en attente. Un transfert déjà accepté ne peut pas être annulé. Exige sites.manage. Renvoie le transfert avec le statut canceled.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir un transfert en attente à partir du jeton reçu par e-mail site_transfers_get

Montre une invitation de transfert de site à partir du jeton de son lien (le paramètre de chemin token, provenant de l’e-mail d’invitation envoyé par sites_transfer_start). L’appelant doit être connecté ou utiliser un jeton d’API. Renvoie site_id, site_domain, from_workspace (le nom de l’espace de travail expéditeur), to_workspace_id (null jusqu’à l’acceptation), to_email (l’adresse invitée), status (pending, accepted ou canceled) et expires_at. Les invitations expirent 7 jours après leur envoi. Utilisez site_transfers_accept pour l’accepter.

Permission : public · HTTP uniquement (pas un outil MCP)

Exemple
curl https://privatusanalytics.com/transfers/:token.json
POST /workspaces/:workspace_id/sites.json Ajouter un site sites_create

Ajoute un site web à un espace de travail et le renvoie, avec l’extrait de suivi à installer. Le forfait de l’espace de travail limite le nombre de sites (Free en autorise 3) et l’appel échoue avec une erreur de limite de forfait lorsqu’elle est atteinte. domain est obligatoire et est normalisé (par exemple, une URL complète ou un préfixe www est réduit au nom d’hôte). name vaut par défaut le domaine, timezone vaut par défaut le fuseau horaire de l’espace de travail (un nom IANA comme Europe/Berlin) et currency la devise de l’espace de travail (un code ISO 4217 à 3 lettres comme USD). Les effets de bord sont une notification site.created envoyée aux canaux de notification de l’espace de travail, un premier audit SEO du site et une vérification du domain rating mis en file d’attente, et un e-mail avec le code de suivi envoyé au membre qui l’a créé (avec des rappels tant qu’aucune donnée n’arrive). Les membres limités à des sites choisis qui ont opté pour les sites futurs y obtiennent l’accès. Exige sites.manage. Poursuivez avec tracking_snippet ou sites_setup_get pour installer, et tracking_verify pour vérifier.

Permission : sites.manage

Exemple
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 Supprimer un site (purgé après 7 jours) sites_delete

Supprime un site. C’est une suppression logique : le site cesse de collecter et disparaît aussitôt des listes, et ses données sont définitivement purgées après 7 jours. Considérez-la donc comme irréversible et contactez rapidement le support si c’était une erreur. confirm doit être le domaine du site (la casse n’a pas d’importance). Les transferts en attente du site sont annulés et une notification site.deleted est envoyée aux canaux de notification de l’espace de travail. Pour n’effacer qu’une partie du trafic et garder le site, utilisez sites_reset_data. Exige sites.manage. Renvoie le site.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les sites d’un espace de travail sites_list

Liste les sites d’un espace de travail auxquels l’appelant a accès, avec pagination, les sites étoilés de l’appelant d’abord. Utilisez query pour chercher dans le domaine ou le nom (partiel, insensible à la casse), label pour ne garder que les sites qui portent une étiquette, et sort avec position (l’ordre enregistré, par défaut), name ou visitors (visiteurs des 30 derniers jours, les plus nombreux d’abord). Le meta de la réponse contient la pagination par page plus stats, un objet indexé par id de site avec visitors (visiteurs uniques récents), change (variation en pourcentage par rapport à la période précédente), sparkline (une liste de valeurs quotidiennes) et live (visiteurs actuels), ainsi que les totaux de la page. Chaque élément a les mêmes champs que sites_get. C’est le point de départ pour trouver les ids de site (pa_...) utilisés par tous les autres outils de site. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/sites.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:id.json Obtenir un site et tous ses paramètres sites_get

Renvoie les réglages et l’état d’un site par son id public (pa_..., provenant de sites_list). Les champs clés sont id, workspace_id (ws_...), domain, name, extra_domains et multi_domain_mode (combined ou separate), timezone (nom IANA), currency (ISO 4217), labels, les options de confidentialité (honor_dnt, honor_gpc, pii_scrubber, redaction_rules, allowed_params, path_masks), retention_months (null signifie tout conserver), bot_filtering, traffic_rule_modes (un objet associant une liste de règles à block ou allow), vitals_sample_rate (un pourcentage), conversion_denominator (visits ou visitors), public_dashboard et public_indexable, ingest_key_prefix (null lorsque le site n’a pas de clé des journaux de robots), verified_at, first_event_at et last_event_at (null jusqu’à l’arrivée de données), domain_rating (peut être null), snippet (la balise de suivi HTML), favorite (si l’appelant l’a étoilé) et created_at. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:id.json Mettre à jour les paramètres d’un site sites_update

Met à jour les réglages d’un site en ne changeant que les champs que vous envoyez. Les champs de nom et d’identité sont name, domain (le modifier relance la vérification du domain rating), extra_domains (une liste de noms d’hôte) et multi_domain_mode (combined compte un visiteur sur plusieurs domaines, separate les garde séparés). timezone est un nom IANA et currency un code ISO 4217 à 3 lettres. Les champs de confidentialité sont honor_dnt, honor_gpc, pii_scrubber, redaction_rules (une liste d’objets avec name et pattern, pattern étant une expression régulière), allowed_params (paramètres de requête à conserver), path_masks (une liste d’objets avec pattern et replacement) et bot_filtering. Les listes remplacent toute la liste existante. retention_months ne doit pas dépasser la conservation du forfait (Free 6 mois). traffic_rule_modes associe une liste de règles (hostnames, paths, referrers, countries, ip_ranges, user_agents ou events) à block ou allow. vitals_sample_rate est un pourcentage et le forfait le plafonne (10 en Free, 100 pour les forfaits payants). conversion_denominator vaut visits ou visitors. public_dashboard rend les statistiques consultables par toute personne disposant du lien et public_indexable permet aux moteurs de recherche d’indexer cette page. Les changements prennent effet pour les nouveaux événements en quelques instants. Exige sites.manage. Renvoie le site mis à jour.

Permission : sites.manage

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

Sondages

POST /sites/:site_id/surveys.json Créer un sondage surveys_create

Crée un sondage sans cookies sur le site. Il ne collecte rien tant que son statut n’est pas active : créez-le donc d’abord en draft ou passez status active pour démarrer aussitôt. name (interne, les visiteurs ne le voient jamais, 120 caractères au maximum) et questions (de 1 à 5 lignes dans l’ordre) sont obligatoires. Chaque question est un objet avec key (facultatif, un identifiant stable de lettres minuscules, chiffres et tirets bas, généré lorsqu’il est omis), kind (text, choice, multi, rating, nps ou yes_no), prompt (obligatoire, 200 caractères au maximum), required (booléen), choices (une liste d’au plus 10 options, uniquement pour choice et multi) et scale (3, 5, 7 ou 10, uniquement pour rating, 5 par défaut). NPS utilise toujours de 0 à 10. Le ciblage est trigger_kind (immediate, delay, scroll, exit ou manual) avec delay_seconds (de 0 à 600, 10 par défaut, uniquement pour delay) et scroll_percent (de 1 à 100, 50 par défaut, uniquement pour scroll), paths (lignes de match_type exact, prefix ou glob et pattern, vide signifie toutes les pages), devices (desktop, mobile, tablet, vide signifie tous), position (bottom_right, bottom_left ou center), sample_rate (de 1 à 100 pour cent des visiteurs), thank_you (200 caractères au maximum), starts_on et ends_on (YYYY-MM-DD). Les sondages ne peuvent pas demander d’adresse e-mail et les réponses écrites sont nettoyées des données personnelles. Le forfait Free autorise 1 sondage par espace de travail et un nombre limité de réponses par mois, les forfaits payants sont illimités. Exige la permission content.write. Renvoie le sondage avec id (svy_...). Lisez les réponses avec surveys_get.

Permission : content.write

Exemple
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 Supprimer un sondage avec ses réponses surveys_delete

Supprime définitivement un sondage avec toutes ses réponses. Cette action est irréversible et les résultats sont perdus. Utilisez plutôt surveys_pause si vous voulez seulement arrêter la collecte. L’id provient de surveys_list et le site_id est obligatoire. Exige la permission content.write. Renvoie le sondage supprimé.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les sondages d’un site avec leur nombre de réponses surveys_list

Liste les sondages d’un site, du plus récent au plus ancien, avec leurs réglages et leur nombre de réponses. Filtrez avec status (draft, active, paused ou all, all par défaut). Paginé avec page et per_page (25 par défaut, jusqu’à 100). Chaque sondage contient id (svy_...), name, status, questions, réglages de ciblage, starts_on, ends_on, created_at, updated_at et stats (nombres de responses, completed et this_month). Utilisez surveys_get pour les réponses et les résultats d’un sondage.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/surveys.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/surveys/:id/pause.json Arrêter de recueillir des réponses et conserver celles déjà données surveys_pause

Met un sondage en pause pour qu’il cesse aussitôt d’être proposé aux visiteurs. Les réponses déjà collectées sont conservées et affichées dans surveys_get, et surveys_start le reprend. Utilisez-le plutôt que surveys_delete lorsque vous voulez seulement arrêter la collecte. L’id provient de surveys_list et le site_id est obligatoire. Exige la permission content.write. Renvoie le sondage avec le statut paused.

Permission : content.write

Exemple
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 Résultats d’un sondage sur une période, détaillés par question surveys_get

Renvoie le rapport de résultats d’un sondage sur une période, et pas seulement ses réglages (utilisez surveys_list pour les réglages et les décomptes). Choisissez le préréglage period (30d par défaut) ou period custom avec from et to. La réponse contient survey (ses réglages), period (from et to sous forme d’heures ISO 8601), responses (les personnes qui ont répondu à au moins une question), completed (les personnes qui ont répondu à la dernière question), questions (une entrée par question avec key, kind, prompt et nombre de réponses, plus un détail selon le type) et pages, devices et countries (jusqu’à 10 lignes de value et count chacun). Le détail selon le type est texts (jusqu’aux 100 réponses écrites les plus récentes avec text et at) pour text, choices (value, count, share en pourcentage avec une décimale, offered) pour choice, multi et yes_no, average (null sans réponses), scale et distribution pour rating, et score (NPS de -100 à 100, null sans réponses), promoters (9 et 10), passives (7 et 8), detractors (0 à 6) et distribution pour nps. Utilisez surveys_themes pour résumer les réponses écrites.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/surveys/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/surveys/:id/start.json Commencer à recueillir des réponses surveys_start

Définit un sondage comme active pour qu’il puisse être proposé aux visiteurs. Il n’apparaît que lorsque la date actuelle est comprise entre starts_on et ends_on (lorsqu’ils sont définis), que la page correspond à ses paths et devices, et que le quota mensuel de réponses du forfait n’est pas épuisé. Utilisez-le pour un brouillon ou un sondage en pause. L’id provient de surveys_list et le site_id est obligatoire. Exige la permission content.write. Renvoie le sondage avec le statut active. Arrêtez-le à nouveau avec surveys_pause.

Permission : content.write

Exemple
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 Regrouper par thèmes les réponses libres à une question (forfait Business) surveys_themes

Utilise l’IA pour regrouper en thèmes les réponses écrites à une question à texte libre. Forfait Business uniquement. Choisissez-le après que surveys_get a montré une question de type text avec assez de réponses, et passez question_key (la clé d’une question de type text provenant de surveys_get). Il exige au moins 5 réponses écrites et utilise les 300 plus récentes. Le résultat liste jusqu’à 12 thèmes, chacun avec label, count, sentiment (positive, neutral ou negative) et example (une réponse représentative, peut être null), plus answers (combien de réponses ont été résumées) et generated_at. Chaque nouvelle génération utilise une question du quota mensuel d’IA de l’espace de travail, qui est restituée en cas d’échec. Le résultat est mis en cache par rapport aux réponses : l’appeler à nouveau sans nouvelles réponses ne coûte donc rien. Il échoue avec une erreur de validation lorsque le forfait ne l’inclut pas, que le quota est épuisé, que l’IA n’est pas configurée ou qu’il y a trop peu de réponses.

Permission : analytics.read

Exemple
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 Modifier un sondage surveys_update

Modifie un sondage. Seules les entrées que vous envoyez changent. Les entrées et les limites sont les mêmes que dans surveys_create, avec status draft, active ou paused. Lorsque vous envoyez questions, toute la liste est remplacée : incluez donc chaque question que vous voulez garder et conservez chaque key existante pour garder ses réponses collectées (reformuler un prompt avec la même key ne scinde pas les résultats). Les questions que vous omettez cessent d’apparaître dans les résultats. Les changements de ciblage prennent effet immédiatement pour les visiteurs. L’id provient de surveys_list et le site_id est obligatoire. Exige la permission content.write. Renvoie le sondage mis à jour.

Permission : content.write

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

Sources d’importation des témoignages

POST /sites/:site_id/testimonials/imports/sources.json Ajouter une source d’importation à partir d’un lien et lancer sa première exécution testimonial_import_sources_create

La plateforme est détectée à partir du lien. Ce que l’exécution trouve attend dans l’étape de relecture (testimonial_import_sources_review) et rien n’est stocké avant testimonial_import_sources_keep. Rien de ce qui est importé ne compte dans les témoignages mensuels. L’offre Free permet 1 importation par mois depuis un site d’avis ou une page. Au-delà, la réponse est 402 plan_limit.

Permission : content.write

Exemple
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 Supprimer une source. Les témoignages qu’elle a apportés restent testimonial_import_sources_delete

Supprime la source avec son historique d’exécutions, ce qui attend dans son étape de relecture et son fichier téléversé. Les témoignages déjà conservés depuis elle restent dans le site. Une personne le fait sur la page de la source, donc l’outil n’exécute rien et renvoie cette page.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Écarter les éléments trouvés testimonial_import_sources_discard

Donnez item_ids (ids issus de testimonial_import_sources_review) ou all true pour tout ce qui attend encore, jamais les deux. Un élément écarté quitte l’étape de relecture et ce qui a été lu sur la personne est effacé. Aucun témoignage n’est supprimé. Sinon, le serveur répond par 422 avec le code selection ou unknown_ids.

Permission : content.write

Exemple
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 Trouver des témoignages sur le propre site web du site testimonial_import_sources_find

Lit le domaine du site et les pages vers lesquelles il renvoie qui semblent contenir des témoignages, une fois par site. C’est gratuit : ce n’est pas l’une des importations récupérées de l’offre Free. Ce qu’elle trouve attend dans l’étape de relecture de la source qu’elle renvoie.

Permission : content.write

Exemple
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 Lister les sources d’importation d’un site testimonial_import_sources_list

meta contient fetched_imports (used, limit et resets_on pour le mois, limit null signifie illimité) et sync (la cadence que l’offre permet).

Permission : analytics.read

Exemple
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 Conserver les éléments trouvés comme témoignages testimonial_import_sources_keep

Donnez item_ids (jusqu’à 100) ou all. Chaque élément conservé est enregistré par la même route que tout autre témoignage, donc les doublons ne sont jamais enregistrés deux fois. Rien de ce qui est conservé ne compte dans les témoignages mensuels. meta indique combien ont été conservés.

Permission : content.write

Exemple
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 Lister les plateformes qu’une importation sait lire testimonial_import_platforms_list

Le registre des sources testées. Une plateforme n’est listée qu’une fois son importation éprouvée sur une vraie page. Chaque entrée indique quel lien coller.

Permission : analytics.read

Exemple
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 Lister ce qu’une source a trouvé et qui n’a pas encore été décidé testimonial_import_sources_review

meta contient les compteurs par pastille (new, already_here, likely_duplicate).

Permission : analytics.read

Exemple
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 Relire une source maintenant testimonial_import_sources_run

Une exécution manuelle est une importation récupérée et compte comme l’une de celles du mois sur l’offre Free (402 plan_limit au-delà). Refusée tant qu’une exécution est active (422 in_progress) et après 3 exécutions de la source en 24 heures sur toute offre (422 too_many_runs). Sur une source en erreur, elle remet à zéro le compte des échecs.

Permission : content.write

Exemple
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 Obtenir une source d’importation avec son état et ses compteurs testimonial_import_sources_get

Renvoie la plateforme, le nom, l’adresse lue, la fréquence de relecture, l’état, le nombre d’éléments qui attendent dans l’étape de relecture, le nombre d’éléments conservés, les échecs consécutifs, ainsi que la date de la dernière exécution et de la prochaine.

Permission : analytics.read

Exemple
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 Changer le lien, le nom, la synchronisation ou l’approbation automatique d’une source, ou la mettre en pause testimonial_import_sources_update

Une synchronisation supérieure à l’offre (toute fréquence sur Free, hebdomadaire sur Pro) est refusée avec 402 plan_limit.

Permission : content.write

Exemple
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 '{…}'

Suivi

POST /sites/:site_id/tracking/ingest_key.json Créer ou renouveler la clé des journaux de robots (affichée une seule fois) tracking_ingest_key_rotate

Crée une nouvelle clé secrète des journaux de robots (elle commence par pik_) pour un site et remplace toute clé existante. La clé authentifie l’envoi des journaux d’accès serveur pour le rapport sur les robots d’IA (POST /api/logs). Utilisez-le à la fois pour créer la première clé et pour la renouveler. La nouvelle clé fonctionne aussitôt et l’ancienne cesse aussitôt de fonctionner : déployez donc la nouvelle clé immédiatement pour éviter des 401 sur les envois de journaux. La clé complète n’est renvoyée que dans cette réponse, dans le champ key, stockez-la donc dans un coffre de secrets. Ensuite, seul un court préfixe est conservé et affiché (prefix ici, ingest_key_prefix sur le site). Renvoie site_id, key et prefix. Exige sites.manage. Utilisez tracking_ingest_key_revoke pour retirer la clé sans la remplacer.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Révoquer la clé des journaux de robots tracking_ingest_key_revoke

Retire la clé des journaux de robots d’un site. À partir de là, chaque envoi de journaux fait avec cette clé est rejeté avec 401 jusqu’à ce que vous en créiez une nouvelle avec tracking_ingest_key_rotate. Le suivi par navigateur avec l’id public du site n’est pas affecté. La clé ne peut pas être restaurée. Exige sites.manage. Renvoie l’objet site (voir sites_get), où ingest_key_prefix vaut désormais null.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Vérifier que le traqueur est installé sur le site (balise script, identifiant du site, CSP et politique de référent) tracking_verify

Récupère la page du site et vérifie que le script de suivi Privatus Analytics est correctement installé, puis marque le site comme vérifié lorsque le script avec l’id de ce site est trouvé. Par défaut, il demande la page d’accueil (https://domain/) et url peut nommer une autre page, mais uniquement sur le domaine propre du site, ses domaines supplémentaires ou leurs sous-domaines. Le résultat (sous data) contient url, status (statut HTTP), script_found, site_ids (chaque id data-site trouvé sur la page), installed (true lorsque l’id de ce site en fait partie), csp et csp_ok (si la Content-Security-Policy de la page permet au traceur de se charger et d’envoyer), referrer_policy et referrer_ok (une politique no-referrer signifie que chaque visite apparaît comme directe), et checked_at. Il récupère la page via l’Internet public, lit 2 Mo au maximum et est limité en débit par espace de travail et par hôte : il répond donc 429 lorsqu’il est appelé trop souvent. Si la page est injoignable, il renvoie une erreur de validation. Utilisez sites_setup_get pour voir si des événements sont arrivés. Exige sites.manage.

Permission : sites.manage

Exemple
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 Générer le code de suivi pour les options choisies tracking_snippet

Construit la balise script HTML pour installer le suivi sur un site et la renvoie avec l’id du site dans data.site_id et data.snippet. Choisissez-le plutôt que sites_setup_get lorsque vous devez le personnaliser, et utilisez ensuite tracking_verify pour vérifier la page en ligne. Par défaut, chaque module du traceur est chargé et les pages vues sont automatiques. modules le restreint à un sous-ensemble de engage (temps et défilement), auto (liens sortants, téléchargements, formulaires, pages 404), vitals (Web Vitals), clicks (cartes de clics) et ask (sondages sur le site). manual à true désactive la page vue automatique pour que vous les envoyiez vous-même. spa définit le suivi de navigation des applications monopage sur auto, history, hash ou off. domains limite le suivi à ces noms d’hôte, exclude liste des motifs glob de chemins à ignorer, query_params liste des paramètres de requête supplémentaires à conserver et mask liste des masques de chemin côté client écrits sous la forme /u/*->/u/:id. Rien n’est enregistré, l’extrait est généré à partir des entrées à chaque fois. Exige analytics.read.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/tracking/snippet.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"

Synchronisation entrepôt

POST /workspaces/:workspace_id/warehouses.json Ajouter une destination d’entrepôt warehouse_destinations_create

Ajoute une destination d’entrepôt qui reçoit les événements bruts de chaque jour (forfait Business uniquement). Chaque jour à 02:00 UTC, le jour UTC précédent est téléversé, la première exécution a lieu au prochain 02:00 UTC et une exécution échouée est retentée une heure plus tard. kind doit être fourni et décide des réglages obligatoires. s3 (aussi GCS, R2 et MinIO via endpoint) exige bucket, access_key_id et secret_access_key, avec region, prefix et endpoint facultatifs (https, hôtes publics uniquement). bigquery exige service_account_json, dataset et table, avec project_id facultatif. snowflake exige account, user, private_key (RSA PEM), database, schema et table, avec warehouse et role facultatifs. azure exige sas_url (un lien SAS de conteneur blob en https avec permission d’écriture), avec prefix facultatif. Les secrets (secret_access_key, service_account_json, private_key, sas_url) sont en écriture seule et ne sont jamais renvoyés. site_ids limite les sites (ids pa_...), vide signifie tous les sites, et un membre ou un jeton limité à certains sites doit les nommer. Les propriétés d’événements ne sont envoyées que lorsqu’elles sont marquées comme sûres pour l’export (voir event_properties_list). Exige la permission workspace.manage. Renvoie la destination avec id (whd_...), une cible masquée et configured (les noms des réglages renseignés).

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Supprimer une destination d’entrepôt warehouse_destinations_delete

Supprime une destination d’entrepôt pour que plus rien ne soit envoyé. Les données déjà téléversées restent dans votre bucket ou votre entrepôt, et c’est irréversible, même si vous pouvez ajouter à nouveau la destination (l’historique n’est pas renvoyé automatiquement). Toute synchronisation manuelle encore en file d’attente n’est pas rappelée. L’id provient de warehouse_destinations_list. Exige la permission workspace.manage. Renvoie la destination supprimée.

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les destinations d’entrepôt warehouse_destinations_list

Liste les destinations d’entrepôt d’un espace de travail triées par nom, éventuellement d’un seul type (s3, bigquery, snowflake ou azure). Un membre ou un jeton limité à certains sites ne voit que les destinations dont tous les sites font partie des siens, et les destinations qui envoient tous les sites lui sont masquées. Paginé avec page et per_page (jusqu’à 100). Chaque élément contient les champs décrits dans warehouse_destinations_get. Nécessite le workspace_id de workspaces_list et la permission workspace.manage.

Permission : workspace.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/warehouses.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /warehouses/:id.json Obtenir une destination d’entrepôt (sans secrets) warehouse_destinations_get

Renvoie une destination d’entrepôt sans identifiants. Les champs sont id (whd_...), kind (s3, bigquery, snowflake ou azure), name, target (un résumé masqué comme s3://bucket/prefix), configured (noms des réglages renseignés, les secrets n’apparaissent que par leur nom), site_ids (vide signifie tous les sites), schedule (daily), schema_version (la disposition des lignes envoyées), last_run_at, next_run_at, last_error (null lorsque la dernière exécution a fonctionné) et created_at. L’id provient de warehouse_destinations_list. Vérifiez last_error après warehouse_destinations_sync pour voir comment s’est passée une synchronisation.

Permission : workspace.manage

Exemple
curl https://privatusanalytics.com/warehouses/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /warehouses/:id/sync.json Mettre en file d’attente la synchronisation d’une journée maintenant warehouse_destinations_sync

Met en file d’attente un téléversement immédiat d’un jour UTC d’événements bruts vers une destination, en dehors du calendrier quotidien. Forfait Business uniquement. date (YYYY-MM-DD) doit être antérieure à aujourd’hui en UTC et vaut par défaut hier. Il téléverse ce jour pour chaque site de la destination : évitez donc de synchroniser un jour déjà envoyé, et les synchronisations manuelles sont limitées à 30 par heure et par espace de travail. L’appel renvoie 202 avec la destination aussitôt et le téléversement s’exécute en arrière-plan. Interrogez warehouse_destinations_get et lisez last_run_at et last_error pour voir le résultat. L’id provient de warehouse_destinations_list. Exige la permission workspace.manage.

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Mettre à jour une destination d’entrepôt (les secrets vides sont conservés) warehouse_destinations_update

Modifie une destination d’entrepôt (forfait Business uniquement). Seules les entrées que vous envoyez changent et le kind ne peut pas être modifié. Un secret vide conserve la valeur stockée : vous pouvez donc modifier d’autres réglages sans renvoyer les identifiants. Les réglages sont validés pour le type de la destination comme dans warehouse_destinations_create. Envoyer site_ids remplace la liste de sites. Lorsque la cible change (un autre bucket, dataset, table, base de données ou équivalent), la progression des jours inachevés repart de zéro : ces jours sont donc renvoyés vers le nouvel endroit. L’id provient de warehouse_destinations_list. Exige la permission workspace.manage. Renvoie la destination mise à jour.

Permission : workspace.manage · HTTP uniquement (pas un outil MCP)

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

Tableaux de bord

GET /workspaces/:workspace_id/dashboards/:id/cards/:index.json Données d’une carte d’un tableau de bord personnalisé dashboards_card

Renvoie les données en direct d’une carte d’un tableau de bord personnalisé. Les tableaux de bord sont des listes de cartes (voir dashboards_get pour la liste des cartes) et chaque carte se charge séparément : appelez donc cet outil une fois par carte avec sa position dans index, comptée à partir de 0. Renvoie index, type, title, site_id, site_name, params, status et data. status vaut ok, not_available (la carte n’a rien à afficher, par exemple une carte d’entonnoir sur un site sans entonnoirs ou une carte de disponibilité sans vérifications) ou no_access (la carte appartient à un site que votre jeton ou votre rôle ne peut pas ouvrir, et alors title, params et data sont vides). La forme de data dépend de type. metric donne {metric, value, previous, change, period} comparé à la période précédente. chart donne {metric, interval, period, series: [{date, value}]}. breakdown donne {dimension, label, rows}. goal donne {rows} de complétions d’objectifs. live donne {visitors}. funnel donne {funnel_id, name, overall_conversion_rate, steps}. uptime donne {checks: [{name, status, uptime}]}. vitals donne {scorecard}. subscriptions donne {currency, mrr_minor, previous_mrr_minor (il y a 30 jours), change (pourcentage, null sans MRR il y a 30 jours), active_subscriptions, subscription_churn_rate (30 derniers jours)} et vaut not_available tant que le site n’a aucun fournisseur de paiement connecté. Les params d’une carte valent par défaut period 30d, metric visitors, dimension page et 5 lignes (limit est plafonné à 10). Un index hors de la liste renvoie 404. Utilisez d’abord dashboards_get pour voir combien de cartes il y a.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id/cards/:index.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/dashboards.json Créer un tableau de bord personnalisé dashboards_create

Crée un tableau de bord personnalisé dans un espace de travail. Un tableau de bord personnalisé est une liste nommée et ordonnée d’au plus 40 cartes, et les cartes peuvent provenir de différents sites de l’espace de travail. Passez name (100 caractères au maximum) et cards, une liste d’objets avec type (metric, chart, breakdown, goal, live, funnel, uptime, vitals ou subscriptions), site_id (pa_..., provenant de sites_list) et facultativement title (80 caractères au maximum) et params. Les params utilisés par type sont metric (period, metric), chart (period, metric, interval), breakdown (period, dimension, limit), goal (period, limit), funnel (period, funnel_id), uptime (limit) et vitals (period). live et subscriptions n’en prennent aucun. Les autres params sont ignorés. La période doit être un préréglage comme 30d (pas custom) et metric l’une des valeurs visitors, visits, pageviews, views_per_visit, bounce_rate ou visit_duration. Chaque carte doit pointer vers un site auquel votre jeton a accès, et un jeton limité à certains sites doit inclure au moins une carte. Renvoie le tableau de bord avec id (dash_...), name, cards et horodatages. Lisez-le avec dashboards_get et chargez les chiffres de chaque carte avec dashboards_card. Exige la permission content.write. Le forfait fixe le nombre de tableaux de bord d’un espace de travail : 1 en Free, 3 en Pro, illimité en Business. Un tableau de bord au-delà de ce nombre est refusé avec une erreur de validation.

Permission : content.write

Exemple
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 Supprimer un tableau de bord personnalisé dashboards_delete

Supprime définitivement un tableau de bord personnalisé. Seule la disposition du tableau de bord est supprimée, aucune donnée d’analyse n’est touchée, et il n’y a pas d’annulation possible. Vous devez avoir accès à chaque site qui a une carte sur le tableau de bord, et le tableau de bord doit contenir au moins une carte d’un site auquel vous avez accès. Renvoie le tableau de bord supprimé. Utilisez plutôt dashboards_update pour modifier un tableau de bord. Les ids (dash_...) proviennent de dashboards_list. Exige la permission content.write.

Permission : content.write

Exemple
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 Lister les tableaux de bord personnalisés dashboards_list

Liste les tableaux de bord personnalisés d’un espace de travail, triés par nom. Chaque élément contient id (dash_...), name, cards et horodatages, dans la même forme que dashboards_get. Un jeton limité à certains sites ne voit que les tableaux de bord qui incluent une carte de l’un de ses sites, et les cartes d’autres sites sont vidées en {type, status: no_access}. Paginé avec page et per_page (100 maximum). Utilisez dashboards_card pour charger les données d’une carte et dashboards_create pour ajouter un tableau de bord. Pour un seul site, stats_overview donne le même type de chiffres sans tableau de bord.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/dashboards/:id.json Obtenir un tableau de bord personnalisé et ses cartes dashboards_get

Renvoie un tableau de bord personnalisé : id (dash_...), name, cards ainsi que created_at et updated_at. Chaque carte est {type, site_id, title, params} (type vaut metric, chart, breakdown, goal, live, funnel, uptime, vitals ou subscriptions). Une carte sur un site auquel vous n’avez pas accès est renvoyée sous la forme {type, status: no_access} sans aucun autre champ. Cela ne renvoie que la disposition, pas les chiffres. Chargez les chiffres d’une carte avec dashboards_card, en utilisant la position de la carte comptée à partir de 0. Les ids proviennent de dashboards_list. Un tableau de bord au-delà du nombre prévu par le forfait (1 en Free, 3 en Pro) est conservé et verrouillé : il répond 402 plan_limit jusqu’à ce que l’espace de travail passe à un forfait supérieur ou en supprime un autre.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /workspaces/:workspace_id/dashboards/:id.json Renommer un tableau de bord personnalisé ou remplacer ses cartes dashboards_update

Renomme un tableau de bord personnalisé et/ou remplace toute sa liste de cartes. Seuls les champs que vous envoyez changent, et name est laissé tel quel lorsqu’il est vide. Envoyer cards remplace toutes les cartes : envoyez donc la liste complète dans l’ordre voulu, tirée de dashboards_get puis modifiée. Le format des cartes et les params par type sont les mêmes que dans dashboards_create (40 cartes maximum). Une carte affichée sous la forme {type, status: no_access} appartient à un site que vous ne pouvez pas ouvrir. Renvoyez-la inchangée pour la conserver : elle ne peut pas être modifiée et la dernière carte d’un tel site ne peut pas être retirée. Un jeton limité à certains sites ne peut pas laisser le tableau de bord vide. Renvoie le tableau de bord mis à jour. Exige la permission content.write.

Permission : content.write

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

Traductions de témoignages

POST /sites/:site_id/testimonials/translations.json Traduire des témoignages dans les langues qu’un site propose testimonial_translations_create

Appelez d’abord testimonial_translations_estimate. Cet appel envoie le corps, le titre et l’extrait mis en avant des témoignages choisis à Google Cloud Translation (jamais un nom, un email ou une entreprise), et le membre est prévenu par email qu’un assistant l’a lancé. La traduction se fait en arrière-plan, et une ligne déjà stockée n’est jamais récupérée de nouveau. Au quota mensuel de caractères, le reste est stocké comme en attente et reprend le 1er. Répond par 402 plan_limit en dessous de Business, et par 422 not_configured tant que la traduction n’est pas configurée.

Permission : content.write

Exemple
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 Supprimer une traduction stockée testimonial_translations_delete

Le témoignage s’affiche de nouveau dans ses propres mots partout où cette langue était utilisée. Les caractères déjà dépensés pour elle ne sont pas rendus. Fonctionne sur toutes les offres. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Compter les caractères qu’une exécution de traduction enverrait, avant de l’exécuter testimonial_translations_estimate

Indiquez les témoignages d’une seule façon : testimonial_ids, collection_id ou all_approved. La réponse donne les témoignages, les caractères qui seraient envoyés, les caractères déjà stockés et ce qui reste du mois. Elle indique des caractères, jamais un prix. Rien n’est récupéré.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/translations/estimate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/translations.json Lister les traductions stockées d’un site testimonial_translations_list

Une ligne par témoignage et par langue, la plus récemment modifiée d’abord, 25 par page. Filtrez par langue, état, origine ou testimonial_id. Fonctionne sur toutes les offres, donc les traductions faites avant une rétrogradation peuvent encore être lues.

Permission : analytics.read

Exemple
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 Écrire ou corriger une traduction à la main testimonial_translations_update

La ligne est marquée comme modifiée, et une exécution ultérieure ne l’écrase pas sauf si overwrite_edited est envoyé. Rien n’est récupéré et rien ne compte dans le quota. L’original n’est jamais modifié. Business et plus (402 plan_limit ailleurs).

Permission : content.write

Exemple
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 '{…}'

Témoignages

GET /sites/:site_id/testimonials/overview.json Lire les chiffres d’un site, ce qui demande de l’attention et ce qui s’est passé récemment testimonials_overview

stats contient les cinq chiffres de la page Vue d’ensemble : témoignages approuvés, en attente, nouveaux ce mois-ci, note moyenne et en usage. attention liste ce qui demande une décision avec son compte. activity contient les 10 derniers événements et latest_approved les trois témoignages approuvés le plus récemment.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/overview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/setup.json Obtenir la liste de mise en route d’un site testimonials_setup_get

Renvoie les éléments import, testimonials, approve, ask, widget et teammate, chacun avec done et dismissed. Un élément est terminé d’après ce que le site contient, jamais par un clic. hidden vaut true une fois que chaque élément est terminé ou ignoré, ce qui est le moment où la boîte de réception cesse d’afficher la carte.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/setup.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/setup.json Ignorer un élément de la liste de mise en route, ou toute la carte testimonials_setup_update

dismiss est une clé d’élément (import, testimonials, approve, ask, widget ou teammate) ou all pour toute la carte. Ignorer masque l’élément et ne le marque jamais comme terminé, et il ne peut pas être rétabli par l’API.

Permission : content.write

Exemple
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 Approuver un témoignage pour qu’il puisse être affiché testimonials_approve

Un témoignage qui attend le quota ne peut pas être approuvé : le serveur répond par 422 avec le code waiting_for_allowance. La réponse contient meta.undo_id.

Permission : content.write

Exemple
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 Exécuter une action sur une sélection de témoignages, ou sur tout ce qu’un filtre trouve testimonials_bulk

Envoyez ids (jusqu’à 100, exécutés d’un coup, tout ou rien) ou filters avec confirm_count (le résultat entier). Au-delà de 100, l’exécution se fait en arrière-plan et la réponse a l’état running. Actions : approve, reject, mark_pending, pin, unpin, add_tags, remove_tags, add_to_collection, remove_from_collection, set_property, trash, restore. Chacune répond avec un id d’annulation que testimonials_bulk_undo accepte pendant 7 jours. delete_permanently est la seule action qui ne peut pas être annulée : elle exige sites.manage et sa réponse indique undoable false. Via MCP, les deux actions qui suppriment, trash et delete_permanently, ne sont pas exécutées : l’outil répond par human_only et la page de l’app où une personne le fait, et toute autre action s’exécute. Via l’API, l’action export (avec ids ou filters, et un format facultatif parmi csv, json, ndjson ou xlsx) ne change rien : elle exige analytics.export et répond par 202 avec l’export à télécharger.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Annuler une action groupée dans un délai de 7 jours testimonials_bulk_undo

Remet l’ancienne valeur sur chaque témoignage que l’exécution a changé. Un témoignage modifié de nouveau depuis est laissé tel quel et compté dans left. Via MCP, une annulation qui supprimerait ou placerait dans la corbeille n’est pas exécutée (l’annulation d’une restauration, d’une exécution de traduction et d’une exécution de création d’images) : l’outil répond par human_only et la page de l’app où une personne le fait.

Permission : content.write

Exemple
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 Ajouter un témoignage à la main ou par l’API testimonials_create

Enregistré par l’unique point d’entrée que toutes les routes utilisent. Il compte dans le quota mensuel de nouveaux témoignages de l’offre, et une fois le quota atteint le serveur répond par 422 avec le code allowance_reached (seul l’envoi d’un formulaire par un client est mis en attente à la place). La même personne qui redit les mêmes mots est refusée avec le code duplicate, sauf si allow_duplicate vaut true. Le même external_id renvoyé de nouveau renvoie celui déjà enregistré.

Permission : content.write

Exemple
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 Supprimer définitivement un témoignage, avec son historique, son consentement et ses fichiers testimonials_delete

Cette action est irréversible. Elle fonctionne sur un témoignage dans la corbeille ou non, exige confirm et la permission sites.manage. Via MCP, l’outil ne supprime rien et répond avec la page où une personne le fait.

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Placer un témoignage dans la corbeille pendant 30 jours testimonials_trash

Le témoignage garde son état, ses étiquettes, ses collections et ses fichiers, n’est affiché nulle part et est supprimé définitivement après 30 jours. testimonials_restore le remet exactement comme il était. La réponse contient meta.undo_id. Mettre dans la corbeille un témoignage qui s’y trouve déjà ne change rien. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Compter les témoignages derrière chaque valeur de filtre, pour les mêmes entrées que la liste testimonials_facets

La forme de la bibliothèque sans lire aucun témoignage. Chaque facette compte ses valeurs en laissant de côté son propre choix et en appliquant tous les autres filtres. meta contient le total et le filtre en toutes lettres.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/facets.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/:id/highlight.json Marquer la meilleure phrase d’un témoignage, ou l’effacer testimonials_highlight

highlight doit être une partie exacte des mots du témoignage, sinon le serveur répond par 422. Un highlight vide l’efface. Chaque changement est une version de l’historique.

Permission : content.write

Exemple
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 Lister chaque version des mots, du titre, de la note et de l’extrait mis en avant d’un témoignage testimonials_history

Du plus récent au plus ancien. La version 1 est le témoignage tel qu’il a été reçu et n’a pas d’auteur. Chaque version suivante indique le membre qui l’a faite, quand, la note qu’il a laissée et, pour une restauration, la version qu’elle a remise. Paginé avec page et per_page.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/:id/history.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials.json Lister les témoignages d’un site, filtrés et triés testimonials_list

Trois façons de dire lesquels, qui s’additionnent : les entrées de facettes (status, tag_id, has_video et le reste), q (la zone de recherche avec ses opérateurs, par exemple rating:5 has:video tag:onboarding "saved us") et conditions avec match (des lignes structurées). Envoyez facets à true pour obtenir dans meta.facets le décompte en direct derrière chaque valeur de facette. Rien de ce qui est dans la corbeille n’est listé, sauf si trashed est true, ce qui ne liste que la corbeille.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/:id/pend.json Remettre un témoignage en attente testimonials_pend

Remet un témoignage approuvé ou rejeté en attente, de sorte qu’il n’est affiché nulle part tant qu’il n’a pas été de nouveau décidé. La réponse contient meta.undo_id. Un témoignage dans la corbeille est refusé avec le code in_trash.

Permission : content.write

Exemple
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 Épingler un témoignage pour l’afficher en premier, ou le désépingler testimonials_pin

Un témoignage épinglé est affiché en premier partout où il apparaît. Envoyez pinned false pour le désépingler. La réponse contient meta.undo_id lorsque quelque chose a changé.

Permission : content.write

Exemple
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 Rejeter un témoignage. Il est conservé et affiché nulle part testimonials_reject

Le témoignage garde tout ce qu’il a et n’est affiché nulle part. Rejeter un témoignage déjà rejeté ne change rien. La réponse contient meta.undo_id, que testimonials_bulk_undo accepte pendant 7 jours. Un témoignage dans la corbeille est refusé avec le code in_trash.

Permission : content.write

Exemple
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 Restaurer un témoignage depuis la corbeille, exactement comme il était testimonials_restore

Remet un témoignage de la corbeille dans son état, ses étiquettes, ses collections et les endroits qui l’affichaient. Il ne compte jamais comme un nouveau témoignage. Un témoignage qui n’est pas dans la corbeille est refusé avec le code not_in_trash.

Permission : content.write

Exemple
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 Remettre les mots, le titre, la note et l’extrait mis en avant d’une version antérieure testimonials_restore_version

Rien n’est supprimé de l’historique. La restauration est une nouvelle version qui indique de laquelle elle vient. version 1 remet le témoignage dans les mots tels que reçus. Un numéro de version inconnu donne une erreur 422.

Permission : content.write

Exemple
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 Obtenir un témoignage avec sa personne, ses fichiers, son consentement, ses étiquettes et ses usages testimonials_get

Renvoie un témoignage du site à partir de son id (tm_...), dans la corbeille ou non. person.email est null sauf si l’appelant détient content.write, et has_email indique si un email est enregistré. media liste les fichiers avec leur état de traitement. used_in liste chaque widget, mur et image qui l’affiche.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/showable.json Lister les témoignages que le public peut voir, tels que le public peut les voir testimonials_showable

Les témoignages approuvés les plus récents d’un site qui peuvent être montrés en public, pour un affichage à vous en dehors des widgets et des murs. Chacun ne contient que ce que son consentement permet : une personne dont le nom ne peut pas être montré apparaît comme A customer, et une photo ou un enregistrement est omis s’il n’a pas été autorisé. Un témoignage en attente, rejeté ou dans la corbeille, ou un témoignage qui attend le quota, n’est jamais listé. La réponse ne contient aucun email.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/showable.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/triage.json Obtenir le prochain témoignage d’une file de tri testimonials_triage

Sans filtre, la file est En attente, sans les témoignages qui attendent le quota, du plus ancien reçu au plus récent. Avec les filtres de la boîte de réception, c’est ce résultat dans son tri. Envoyez after avec l’id qui vient d’être traité pour obtenir le suivant. data est null quand la file est terminée. meta contient remaining et total.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/triage.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/:id.json Modifier un témoignage. Les changements des mots, du titre, de la note et de l’extrait mis en avant sont gardés dans son historique testimonials_update

Seules les entrées envoyées changent. Une modification de body, title, rating ou highlight ajoute une version à l’historique avec edit_note, et ne change jamais la marque de vérification. rating null l’efface. highlight doit être une partie exacte des mots, et une valeur vide l’efface. properties ne change que les clés envoyées. add_tags et remove_tags acceptent des noms ou des ids. L’état, l’épinglage et la corbeille ont leurs propres outils. Un témoignage dans la corbeille ne peut pas être modifié.

Permission : content.write

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

Visuels publicitaires

POST /sites/:site_id/experiments/ads/:ad_placement_id/creatives.json Ajouter un visuel à un emplacement publicitaire ad_creatives_create

Ajoute une image aux proportions de l'emplacement (au moins sa taille, le double donne le rendu le plus net) et l'adresse où mène un clic. Envoyez l'image en fichier multipart, ou image_url pour la faire télécharger. Elle est traitée en arrière-plan, interrogez donc ad_creatives_get jusqu'à ce que state soit ready. Une programmation, des appareils et des pages sont réservés à Pro et supérieur. Nécessite content.write.

Permission : content.write

Exemple
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 Supprimer un visuel et son image ad_creatives_delete

Supprime définitivement un visuel et son image. Un visuel qu'une expérience compare ne peut pas être supprimé : désactivez-le plutôt. L'outil MCP ne l'exécute pas et répond avec human_only et la page où une personne le supprime. Nécessite content.write.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Obtenir un visuel avec son état ad_creatives_get

Un visuel est en traitement (processing) jusqu'à la création de son image, puis prêt (ready) ou en échec (failed, avec la raison dans error). Nécessite analytics.read.

Permission : analytics.read

Exemple
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 Modifier un visuel ad_creatives_update

Modifie le lien, le poids, la programmation ou le ciblage, le désactive (active false) ou remplace l'image. Seules les valeurs envoyées changent. Une nouvelle image remplace l'ancienne quand elle est prête. Nécessite content.write.

Permission : content.write

Exemple
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 '{…}'

Vues enregistrées des témoignages

POST /sites/:site_id/testimonials/views.json Enregistrer sous un nom un filtre, un texte de recherche, un tri et une mise en page de la boîte de réception testimonial_saved_views_create

Une vue personnelle n’exige que analytics.read. Une vue partagée exige content.write et est sinon refusée avec le code not_allowed. Une vue épinglée apparaît dans la barre latérale avec son compteur. Ouvrez-la avec testimonials_list et view_id.

Permission : analytics.read

Exemple
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 Supprimer une vue enregistrée. Aucun témoignage n’est touché testimonial_saved_views_destroy

Une vue enregistrée est un filtre stocké, donc seule la vue disparaît. Un widget ou un mur alimenté par la vue garde ses réglages et n’a rien à afficher tant qu’on ne lui donne pas une autre source. Une vue personnelle est supprimée par son propriétaire, et une vue partagée exige content.write. Sinon, l’appel est refusé avec le code not_allowed. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : analytics.read · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les vues enregistrées d’un site que l’appelant peut ouvrir testimonial_saved_views_list

Renvoie les vues de l’appelant et toutes les vues partagées, les vues épinglées d’abord dans leur ordre, puis par nom. scope vaut all (par défaut), mine ou shared. Passez l’id d’une vue comme view_id à testimonials_list pour lire les témoignages qu’elle contient.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/views.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/views/:id.json Renommer une vue enregistrée, changer ce qu’elle stocke, l’épingler ou la partager testimonial_saved_views_update

Seules les entrées envoyées changent : name, la recherche stockée (q), filters, sort, layout, columns, position, pinned et shared. Une vue personnelle est modifiée par son propriétaire. Modifier une vue partagée, et partager ou ne plus partager une vue, exige content.write.

Permission : analytics.read

Exemple
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 Lister les envois d’un webhook webhook_deliveries_list

Liste les envois effectués vers un webhook (le chemin prend webhook_id), du plus récent au plus ancien, avec pagination. Chacun contient id (whd_...), event, status (pending, succeeded pour toute réponse 2xx, ou failed), status_code (null lorsqu’aucune réponse n’est arrivée), error (une courte raison comme un délai dépassé, sinon null), attempt (combien d’essais jusqu’ici), duration_ms, payload (les données JSON envoyées), response_body (les 2000 premiers caractères de la réponse) ainsi que delivered_at et created_at. Filtrez avec status succeeded ou failed. Utilisez-le pour déboguer un point d’accès et webhook_deliveries_redeliver pour en renvoyer un.

Permission : workspace.manage

Exemple
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 Renvoyer un envoi webhook_deliveries_redeliver

Renvoie la charge utile d’un envoi passé comme nouvel envoi vers le même point d’accès (id whd_..., provenant de webhook_deliveries_list). Cela fait une requête HTTP vers l’URL du client : le destinataire peut donc traiter deux fois le même événement. Il est limité en débit par espace de travail (partagé avec webhooks_test). Il est mis en file d’attente : la réponse est donc un nouvel envoi avec le statut pending, lisez webhook_deliveries_list pour voir le résultat.

Permission : workspace.manage

Exemple
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 Ajouter un point d’accès webhook webhooks_create

Ajoute un point d’accès qui reçoit du JSON envoyé en POST pour les événements de l’espace de travail (le chemin prend workspace_id). url doit être une adresse https publique, les adresses privées et internes sont refusées. events est une liste obligatoire choisie parmi 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 et site_audit.completed. enabled vaut true par défaut. Un secret de signature (whsec_...) est généré et renvoyé dans la réponse, et chaque envoi porte un en-tête Privatus-Signature avec un horodatage et un HMAC-SHA256 du corps réalisé avec lui. Les envois échoués sont retentés avec un délai croissant et le point d’accès est désactivé après 20 échecs consécutifs. Utilisez webhooks_test pour envoyer un exemple.

Permission : workspace.manage

Exemple
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 Supprimer un webhook webhooks_delete

Supprime un point d’accès de webhook et tout son journal d’envois. Cette action est irréversible et les nouvelles tentatives en attente s’arrêtent. Pour le mettre en pause à la place, utilisez webhooks_update avec enabled false. L’id (wh_...) provient de webhooks_list. Renvoie le webhook supprimé.

Permission : workspace.manage

Exemple
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 Lister les webhooks webhooks_list

Liste les points d’accès de webhook sortants d’un espace de travail (le chemin prend workspace_id), du plus ancien au plus récent. Chacun contient id (wh_...), url, events (les noms d’événements qu’il reçoit), enabled, status (active, failing après des échecs récents, ou disabled), secret (le secret de signature, à traiter comme sensible), consecutive_failures, last_success_at, last_failure_at et created_at. Exige la permission workspace.manage. Cela sert à envoyer des événements bruts vers votre propre serveur. Pour avertir des personnes, utilisez notification_channels_list. Utilisez webhook_deliveries_list pour ce qui a été envoyé.

Permission : workspace.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /workspaces/:workspace_id/webhooks/:id.json Obtenir un webhook webhooks_get

Renvoie un point d’accès de webhook par id (wh_..., provenant de webhooks_list), y compris son secret de signature (whsec_...), qui sert à vérifier l’en-tête Privatus-Signature de chaque envoi. Les champs sont url, events, enabled, status (active, failing ou disabled), secret, consecutive_failures, last_success_at, last_failure_at et created_at. Exige la permission workspace.manage.

Permission : workspace.manage

Exemple
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /workspaces/:workspace_id/webhooks/:id/test.json Envoyer un envoi de test webhooks_test

Met en file d’attente un envoi webhook.test avec un message d’exemple vers un point d’accès, même lorsqu’il est désactivé, ce qui fait une requête HTTP vers l’URL du client. Il est limité en débit par espace de travail (partagé avec webhook_deliveries_redeliver) et un test n’est pas retenté. L’envoi est effectué en arrière-plan : la réponse renvoie donc l’envoi en file d’attente avec le statut pending. Lisez webhook_deliveries_list un instant plus tard pour voir status_code, error, duration_ms et response_body.

Permission : workspace.manage

Exemple
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 Mettre à jour un webhook (événements, URL, activé, renouvellement du secret) webhooks_update

Modifie un webhook (id provenant de webhooks_list). Seules les entrées que vous envoyez changent. Envoyer events remplace toute la liste. Définir enabled à true sur un point d’accès désactivé remet à zéro son compteur d’échecs, ce qui permet de réactiver un point d’accès désactivé après des échecs répétés. Définissez rotate_secret à true pour générer un nouveau secret de signature, affiché dans la réponse : l’ancien cesse aussitôt de fonctionner et le destinataire doit donc être mis à jour. Les règles d’url sont les mêmes que pour webhooks_create. Renvoie le webhook.

Permission : workspace.manage

Exemple
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 Noter que l’intégration HTML collée d’un widget a été copiée testimonial_widgets_mark_copied

Le HTML collé ne se met pas à jour tout seul. Après cet appel, testimonial_widgets_embed indique combien de fois le widget a changé depuis.

Permission : content.write

Exemple
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 Créer un widget testimonial_widgets_create

Un seul appel porte le widget entier : la mise en page et ses options, ce qui l’alimente, ce que montre chaque carte et son apparence. Tout ce qui est omis part d’une valeur par défaut, et un réglage de style vide hérite du kit de marque. Enchaînez avec testimonial_widgets_embed pour obtenir le code à coller.

Permission : content.write

Exemple
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 Placer un widget dans la corbeille testimonial_widgets_trash

Ses intégrations n’affichent rien et ne prennent pas de place jusqu’à sa restauration. Il est supprimé définitivement après 30 jours. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Copier un widget avec chaque réglage testimonial_widgets_duplicate

Fait une copie avec un nouvel id et un nom se terminant par « copy ». La copie a son propre code d’intégration et n’a été vue en ligne nulle part. L’original n’est pas modifié.

Permission : content.write

Exemple
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 Obtenir le code d’intégration d’un widget et son poids testimonial_widgets_embed

Renvoie l’extrait de script (recommandé), le HTML collé, le code de cadre et l’adresse des données publiques, avec la taille mesurée du script de chargement et de ce widget. Le HTML collé et le cadre sont null pour la fenêtre contextuelle d’angle.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id/embed.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/widgets.json Lister les widgets d’un site testimonial_widgets_list

Les widgets de la corbeille ne sont pas listés. Chaque widget contient ses réglages, le nombre de témoignages qu’il affiche en ce moment, ses vues et ses clics des 30 derniers jours et la première page où il a été vu en ligne.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/widgets.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
GET /sites/:site_id/testimonials/widgets/:id/installs.json Lister les pages où un widget a été vu en ligne testimonial_widgets_installs

Jusqu’à 50 pages, les plus récentes d’abord. Seuls le script et le cadre peuvent être détectés.

Permission : analytics.read

Exemple
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 Restaurer un widget depuis la corbeille testimonial_widgets_restore

Il revient partout où il avait été collé.

Permission : content.write

Exemple
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 Obtenir un widget avec chaque réglage, ce qu’il affiche et où il est en ligne testimonial_widgets_get

Tout ce que le constructeur stocke : la mise en page et ses options, ce qui alimente le widget (une collection, une vue enregistrée, des étiquettes ou une liste choisie à la main), ce que montre chaque carte, le style, la langue et le balisage d’avis, avec les endroits où il a été vu en ligne et le nombre de témoignages qu’il affiche en ce moment. Un widget de la corbeille répond par 404.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/widgets/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/testimonials/widgets/:id.json Changer un widget testimonial_widgets_update

Seules les entrées envoyées changent. Un changement enregistré atteint chaque site où se trouve le widget sans toucher à leur code, parce que ses copies en cache sont vidées.

Permission : content.write

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

Étiquettes de témoignages

POST /sites/:site_id/testimonials/tags/:id/apply_rules.json Exécuter les règles d’une étiquette sur les témoignages déjà stockés testimonial_tags_apply_rules

dry_run true (par défaut) ne change rien et répond avec les compteurs : combien seraient étiquetés, sur combien, et combien ont déjà l’étiquette. dry_run false les étiquette comme une action groupée et répond avec undo_id, que testimonials_bulk_undo accepte pendant 7 jours. Au-delà de 100, l’exécution se fait en arrière-plan et la réponse a l’état running.

Permission : content.write

Exemple
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 Créer une étiquette, avec des règles d’étiquetage automatique si vous les envoyez testimonial_tags_create

Une règle est { match, conditions }. Un témoignage qui satisfait l’une des règles reçoit l’étiquette au moment où il arrive. Les règles ne font qu’ajouter une étiquette. Pour étiqueter ce qui est déjà stocké, appelez ensuite testimonial_tags_apply_rules.

Permission : content.write

Exemple
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 Placer une étiquette dans la corbeille pendant 30 jours testimonial_tags_destroy

Elle disparaît de chaque témoignage, filtre et sélecteur. La restaurer avec testimonial_trash_restore la remet sur chaque témoignage qui l’avait. Une collection intelligente dont les règles la nomment ne correspond à rien d’ici là. Via MCP, l’outil ne change rien et répond avec la page de l’app où une personne le fait.

Permission : content.write · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les étiquettes d’un site avec leurs règles testimonial_tags_list

Chaque étiquette vient avec le nombre de témoignages qui la portent, ses règles d’étiquetage automatique sous forme de conditions structurées et en langage clair, et la date de la dernière application d’une règle. Les étiquettes de la corbeille sont exclues.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/testimonials/tags.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/testimonials/tags/:id/merge.json Fusionner une étiquette dans une autre testimonial_tags_merge

Chaque témoignage qui avait cette étiquette reçoit l’autre, chaque règle passe à l’autre, chaque collection intelligente, vue enregistrée, widget et mur qui nommait cette étiquette nomme l’autre, et cette étiquette va dans la corbeille, vide. Répond avec l’étiquette conservée.

Permission : content.write

Exemple
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 Changer le nom, la couleur ou les règles d’une étiquette testimonial_tags_update

Seul ce qui est envoyé change. Envoyer des règles remplace toutes les règles de l’étiquette, et une liste vide les supprime toutes.

Permission : content.write

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

Événements

GET /sites/:site_id/events/properties.json Lister les clés de propriétés d’événement vues au cours des 30 derniers jours event_properties_list

Liste les clés de propriété portées par les événements personnalisés au cours des 30 derniers jours, avec leurs réglages d’affichage. Renvoie une liste de {key, events, display_name, hidden, export_safe}. events est le nombre d’événements personnalisés qui portaient la clé (0 pour une clé qui a des réglages mais n’a pas été vue récemment), display_name est le nouveau nom (null s’il n’y en a pas), hidden indique que la clé est masquée dans les rapports, et export_safe indique qu’elle est marquée comme ne contenant aucune donnée personnelle. 200 clés au maximum sont renvoyées, les plus utilisées d’abord. Passez event pour ne voir que les clés vues sur un nom d’événement brut. Les valeurs des propriétés ne sont jamais renvoyées ici : utilisez stats_breakdown avec la dimension prop:<key> ou events_get pour les valeurs. Modifiez les réglages avec event_properties_update.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/events/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/events/properties.json Renommer ou masquer une clé de propriété d’événement event_properties_update

Renomme, masque ou marque comme sûre pour l’export une clé de propriété d’événement, pour tout le site. Seules les entrées que vous envoyez changent. key doit être la clé telle qu’elle est stockée (lettres minuscules, chiffres et tirets bas, 64 caractères au maximum, par exemple plan). display_name est un libellé de 64 caractères au maximum (envoyez-le vide pour retirer le nouveau nom). hidden retire la clé des rapports et du tableau croisé du détail d’un événement tout en conservant les données. export_safe déclare que la clé ne contient jamais de données personnelles, ce qui inclut ses valeurs dans les exports bruts et les synchronisations d’entrepôt : ne le définissez donc que lorsque c’est vrai. Les renommages et le masquage s’appliquent à la lecture des rapports et ne réécrivent aucune donnée stockée. Renvoie {key, display_name, hidden, export_safe}. Exige la permission sites.manage. Listez les clés avec event_properties_list.

Permission : sites.manage

Exemple
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 Supprimer un événement et son historique (s’exécute en arrière-plan, confirmez en saisissant le nom) events_delete

Supprime définitivement un événement personnalisé et tout son historique. Cette action est irréversible. Le nom brut de l’événement doit être envoyé deux fois, dans name puis dans confirm, par mesure de sécurité. Renvoie {name, status: queued} avec HTTP 202, car les lignes sont supprimées en arrière-plan par lots : les chiffres continuent donc de changer jusqu’à la fin. L’événement est aussi masqué aussitôt, et la suppression est consignée dans le journal d’audit. Les pages vues ne sont pas affectées. Si vous voulez seulement cesser d’afficher un événement, utilisez events_update avec hidden à true, ce qui conserve les données. Exige la permission sites.manage. Les noms proviennent de events_list (utilisez le champ raw_names si l’événement a été renommé ou fusionné).

Permission : sites.manage · HTTP uniquement (pas un outil MCP)

Exemple
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 Lister les événements avec réalisations, visites, taux de conversion et première/dernière apparition events_list

L’explorateur d’événements : chaque événement personnalisé de la période. Renvoie period, events et hidden. Chaque événement contient name (le nom affiché après renommages et fusions), raw_names (les noms envoyés par le traceur), completions, visits, conversion_rate (pourcentage des visites, de 0 à 100), revenue (unités mineures, centimes), first_seen et last_seen (horodatages ISO 8601 dans la période) et currency (la devise du revenu, null lorsqu’elle n’est pas définie). hidden liste les événements que vous avez masqués sous la forme {name, display_name}. Utilisez search pour ne garder que les événements dont le nom contient un texte. Les pages vues ne sont pas des événements ici. Utilisez events_get pour un événement en détail et stats_breakdown avec la dimension event pour une liste classée et paginée. Accepte les entrées communes period, compare, filters et segment.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/events.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
POST /sites/:site_id/events/merge.json Fusionner plusieurs événements sous un seul nom d’affichage events_merge

Fusionne plusieurs noms d’événements bruts en un seul nom affiché, par exemple signup_click et signup_button en Signup. Les rapports montrent alors un seul événement avec les décomptes combinés. Cela s’applique à la lecture des rapports : les événements stockés ne sont ni modifiés ni supprimés. Passez names (les noms bruts, au moins un) et into (le nom affiché). Renvoie un objet de réglages par nom fusionné, chacun {name, display_name, hidden, currency, updated_at}. Pour annuler, appelez events_update pour un nom avec un display_name vide. Exige la permission sites.manage. Les noms proviennent de events_list (raw_names).

Permission : sites.manage

Exemple
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 événement : graphique, pivot des propriétés, agrégats des propriétés numériques, pages et sources events_get

Détail d’un événement personnalisé. Passez name exactement comme affiché dans events_list (le nom affiché après renommages et fusions). Renvoie period, name, raw_names (les noms stockés qui s’y rattachent), interval, totals, setting, series, property_keys, pivot, numeric, pages, channels et referrers. totals contient completions, visits (les visites qui l’ont déclenché), revenue (unités mineures, centimes) et conversion_rate (pourcentage de toutes les visites de la période). series est le nombre de complétions par intervalle de temps. setting contient display_name, hidden et currency. property_keys liste les clés de propriété vues. Envoyez properties (jusqu’à 3 clés) pour obtenir pivot, des lignes de {values, completions, visits} pour chaque combinaison de valeurs, les 100 premières. numeric donne la somme, la moyenne et d’autres chiffres pour les propriétés qui contiennent des nombres. pages, channels et referrers sont les 10 principaux endroits où l’événement s’est déclenché, sous la forme {value, completions, visits}. Utilisez events_list pour tous les événements, stats_breakdown avec la dimension prop:<key> pour une propriété sur l’ensemble du site, et events_update pour le renommer.

Permission : analytics.read

Exemple
curl https://privatusanalytics.com/sites/:site_id/events/detail.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
PATCH /sites/:site_id/events/settings.json Renommer, masquer ou réafficher un événement, ou définir sa devise events_update

Modifie la façon dont un événement personnalisé est affiché : le renommer avec display_name, le masquer ou le réafficher avec hidden, ou définir la devise du revenu. name est le nom brut de l’événement tel que le traceur l’a envoyé (voir raw_names dans events_list). Seules les entrées que vous envoyez changent. Un display_name vide retire le nouveau nom. hidden retire l’événement des listes et des rapports tout en conservant ses données. currency est un code ISO 4217 à trois lettres comme USD, stocké en majuscules. Cela s’applique à la lecture des rapports et ne réécrit aucun événement stocké. Renvoie {name, display_name, hidden, currency, updated_at}. Pour combiner plusieurs événements, utilisez events_merge, et pour effacer des données, events_delete. Exige la permission sites.manage.

Permission : sites.manage

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