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.
Every page and action in Privatus Analytics is also an API endpoint. There's no
separate /api/v1: add .json to a URL and send an API token.
curl https://privatusanalytics.com/sites/pa_7Q2K9XH3AB/stats/aggregate.json?period=7d \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"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, 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
Sending data in is a different API: see Server-side ingest.
Toutes les opérations
Envoyez Authorization: Bearer pat_…. Créez des jetons dans les paramètres de l’espace de travail, section Jetons d’API. Guide d’authentification.
Ajoutez .json à n’importe quel chemin. Les réponses sont { "data": … } et les erreurs sont { "error": { "code", "message" } }. Erreurs.
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 · 285 opérations
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
curl -X POST https://privatusanalytics.com/help.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"subject": {
"type": "string",
"description": "Sujet du message (150 caractères maximum)",
"examples": [
"Funnel shows no data"
]
},
"message": {
"type": "string",
"description": "Votre question ou votre commentaire (de 10 à 5 000 caractères)"
}
},
"required": [
"subject",
"message"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Toujours true lorsque l’envoi a été accepté"
},
"message": {
"type": "string",
"description": "Ce qui se passe ensuite"
}
}
}
Alertes
POST
/alerts/:id/acknowledge.json
Prendre en compte le dernier incident
alerts_acknowledge
Permission : analytics.read
curl -X POST https://privatusanalytics.com/alerts/:id/acknowledge.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’alerte, par ex. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site (null pour les alertes d’utilisation)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt ou lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "sensibilité de l’anomalie"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification"
},
"state": {
"type": "string",
"description": "ok ou triggered"
},
"enabled": {
"type": "boolean"
},
"muted_until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_triggered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_evaluated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/workspaces/:workspace_id/alerts.json
Créer une alerte
alerts_create
Permission : content.write
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/alerts.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site (pa_…). Obligatoire sauf pour les alertes d’utilisation"
},
"metric": {
"type": "string",
"description": "threshold/anomaly : visitors, visits, pageviews, bounce_rate ou conversion. vitals : lcp, inp, cls, fcp ou ttfb"
},
"operator": {
"type": "string",
"description": "Comparaison (gt, gte, lt, lte). anomaly : lt uniquement les baisses, gt uniquement les pics, vide les deux",
"enum": [
"gt",
"gte",
"lt",
"lte"
]
},
"threshold": {
"type": "number",
"description": "threshold : valeur de la métrique, goal : réalisations, no_data : heures, usage : pourcentage, ssl : jours, vitals : ms (CLS : score)"
},
"window_minutes": {
"type": "integer",
"description": "Fenêtre d’évaluation en minutes (5 à 10080)"
},
"sensitivity": {
"type": "string",
"description": "anomaly : low, medium ou high",
"enum": [
"low",
"medium",
"high"
]
},
"goal_id": {
"type": "string",
"description": "alertes goal et conversion : identifiant de l’objectif (goal_…)"
},
"uptime_check_id": {
"type": "string",
"description": "uptime/ssl : identifiant de la vérification (par défaut : toutes les vérifications du site)"
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification (nch_…)"
},
"enabled": {
"type": "boolean",
"description": "Évaluer cette alerte"
},
"name": {
"type": "string",
"description": "Nom de l’alerte",
"examples": [
"Traffic dropped"
]
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals",
"enum": [
"threshold",
"anomaly",
"goal",
"no_data",
"usage",
"uptime",
"ssl",
"vitals"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"kind",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’alerte, par ex. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site (null pour les alertes d’utilisation)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt ou lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "sensibilité de l’anomalie"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification"
},
"state": {
"type": "string",
"description": "ok ou triggered"
},
"enabled": {
"type": "boolean"
},
"muted_until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_triggered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_evaluated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/alerts/:id.json
Supprimer une alerte
alerts_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/alerts/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’alerte, par ex. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site (null pour les alertes d’utilisation)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt ou lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "sensibilité de l’anomalie"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification"
},
"state": {
"type": "string",
"description": "ok ou triggered"
},
"enabled": {
"type": "boolean"
},
"muted_until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_triggered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_evaluated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/alerts/:id/history.json
Historique des incidents d’une alerte
alerts_history
Permission : analytics.read
curl https://privatusanalytics.com/alerts/:id/history.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"open": {
"type": "boolean",
"description": "Uniquement les incidents non résolus",
"default": false
},
"id": {
"type": "string",
"description": "Id de la ressource"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"triggered_at": {
"type": "string",
"format": "date-time"
},
"resolved_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"value": {
"anyOf": [
{
"type": "number",
"description": "Valeur mesurée au déclenchement"
},
{
"type": "null"
}
]
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"acknowledged_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"acknowledged_by": {
"anyOf": [
{
"type": "string",
"description": "Nom du membre qui a pris en compte l’alerte"
},
{
"type": "null"
}
]
}
}
}
}
GET
/workspaces/:workspace_id/alerts.json
Lister les alertes
alerts_list
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/alerts.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Uniquement les alertes de ce site (pa_…)"
},
"state": {
"type": "string",
"description": "Uniquement les alertes ok ou triggered",
"enum": [
"ok",
"triggered"
]
},
"kind": {
"type": "string",
"description": "Uniquement ce type",
"enum": [
"threshold",
"anomaly",
"goal",
"no_data",
"usage",
"uptime",
"ssl",
"vitals"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’alerte, par ex. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site (null pour les alertes d’utilisation)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt ou lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "sensibilité de l’anomalie"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification"
},
"state": {
"type": "string",
"description": "ok ou triggered"
},
"enabled": {
"type": "boolean"
},
"muted_until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_triggered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_evaluated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/alerts/:id/mute.json
Mettre en sourdine (ou réactiver) les notifications d’une alerte
alerts_mute
Permission : content.write
curl -X POST https://privatusanalytics.com/alerts/:id/mute.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"minutes": {
"type": "integer",
"description": "Mettre en sourdine pendant ce nombre de minutes (0 réactive, 30 jours maximum)",
"default": 60
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’alerte, par ex. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site (null pour les alertes d’utilisation)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt ou lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "sensibilité de l’anomalie"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification"
},
"state": {
"type": "string",
"description": "ok ou triggered"
},
"enabled": {
"type": "boolean"
},
"muted_until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_triggered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_evaluated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/alerts/:id.json
Obtenir une alerte
alerts_get
Permission : analytics.read
curl https://privatusanalytics.com/alerts/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’alerte, par ex. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site (null pour les alertes d’utilisation)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt ou lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "sensibilité de l’anomalie"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification"
},
"state": {
"type": "string",
"description": "ok ou triggered"
},
"enabled": {
"type": "boolean"
},
"muted_until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_triggered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_evaluated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/alerts/:id.json
Mettre à jour une alerte
alerts_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/alerts/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site (pa_…). Obligatoire sauf pour les alertes d’utilisation"
},
"metric": {
"type": "string",
"description": "threshold/anomaly : visitors, visits, pageviews, bounce_rate ou conversion. vitals : lcp, inp, cls, fcp ou ttfb"
},
"operator": {
"type": "string",
"description": "Comparaison (gt, gte, lt, lte). anomaly : lt uniquement les baisses, gt uniquement les pics, vide les deux",
"enum": [
"gt",
"gte",
"lt",
"lte"
]
},
"threshold": {
"type": "number",
"description": "threshold : valeur de la métrique, goal : réalisations, no_data : heures, usage : pourcentage, ssl : jours, vitals : ms (CLS : score)"
},
"window_minutes": {
"type": "integer",
"description": "Fenêtre d’évaluation en minutes (5 à 10080)"
},
"sensitivity": {
"type": "string",
"description": "anomaly : low, medium ou high",
"enum": [
"low",
"medium",
"high"
]
},
"goal_id": {
"type": "string",
"description": "alertes goal et conversion : identifiant de l’objectif (goal_…)"
},
"uptime_check_id": {
"type": "string",
"description": "uptime/ssl : identifiant de la vérification (par défaut : toutes les vérifications du site)"
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification (nch_…)"
},
"enabled": {
"type": "boolean",
"description": "Évaluer cette alerte"
},
"name": {
"type": "string",
"description": "Nom de l’alerte"
},
"kind": {
"type": "string",
"description": "Type d’alerte",
"enum": [
"threshold",
"anomaly",
"goal",
"no_data",
"usage",
"uptime",
"ssl",
"vitals"
]
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’alerte, par ex. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site (null pour les alertes d’utilisation)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt ou lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "sensibilité de l’anomalie"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification"
},
"state": {
"type": "string",
"description": "ok ou triggered"
},
"enabled": {
"type": "boolean"
},
"muted_until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_triggered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_evaluated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/alerts.json
Lister les alertes d’un site
site_alerts_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/alerts.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "Uniquement les alertes ok ou triggered",
"enum": [
"ok",
"triggered"
]
},
"kind": {
"type": "string",
"description": "Uniquement ce type",
"enum": [
"threshold",
"anomaly",
"goal",
"no_data",
"usage",
"uptime",
"ssl",
"vitals"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’alerte, par ex. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site (null pour les alertes d’utilisation)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl ou vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt ou lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "sensibilité de l’anomalie"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des canaux de notification"
},
"state": {
"type": "string",
"description": "ok ou triggered"
},
"enabled": {
"type": "boolean"
},
"muted_until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_triggered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_evaluated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
Analytics
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/overview.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"interval": {
"type": "string",
"description": "Taille de l’intervalle du graphique",
"enum": [
"auto",
"minute",
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "auto"
},
"panels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Dimensions dont inclure les principales valeurs",
"default": [
"channel",
"referrer",
"page",
"entry_page",
"country",
"device",
"browser",
"os",
"utm_campaign",
"event",
"goal"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/experiments.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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/experiments.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"property": {
"type": "string",
"description": "Propriété d’événement contenant la variante, par ex. variant",
"examples": [
"variant"
]
},
"goal_id": {
"type": "string",
"description": "Objectif compté comme conversion (goal_…)"
},
"control": {
"type": "string",
"description": "Variante de contrôle (par défaut \"control\" si présente, sinon la variante avec le plus de visites)"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"property",
"goal_id",
"site_id"
]
}
{
"type": "object"
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/insights.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Jours complets jusqu’à hier, comparés au même nombre de jours précédents",
"enum": [
"7d",
"14d",
"28d",
"30d"
],
"default": "7d"
},
"limit": {
"type": "integer",
"description": "Nombre maximal d’analyses (1 à 20)",
"default": 8
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/journeys.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"mode": {
"type": "string",
"description": "forward : pages après la page de départ, reverse : pages menant à la page de fin ou à l’objectif",
"enum": [
"forward",
"reverse"
],
"default": "forward"
},
"path": {
"type": "string",
"description": "Page de départ (forward) ou page de fin (reverse). Vide signifie n’importe quelle entrée (forward uniquement)"
},
"goal_id": {
"type": "string",
"description": "Mode reverse : terminer à cet objectif (goal_…) plutôt qu’à une page"
},
"limit": {
"type": "integer",
"description": "Pages affichées par étape (12 maximum)",
"default": 6
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/pages/detail.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"path": {
"type": "string",
"description": "Chemin de la page, par ex. /pricing",
"examples": [
"/pricing"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"path",
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/stats/aggregate.json
Métriques principales d’une période (avec comparaison)
stats_aggregate
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/stats/aggregate.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/breakdown/:dimension.json
Principales valeurs d’une dimension (pages, sources, pays…)
stats_breakdown
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/breakdown/:dimension.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"dimension": {
"type": "string",
"description": "Dimension de la ressource"
},
"limit": {
"type": "integer",
"description": "Lignes par page (1000 maximum)",
"default": 10
},
"page": {
"type": "integer",
"description": "Numéro de page",
"default": 1
},
"sort": {
"type": "string",
"description": "Métrique de tri",
"enum": [
"visitors",
"visits",
"pageviews",
"revenue"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"dimension",
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/stats/timeseries.json
Métriques par intervalle de temps pour les graphiques
stats_timeseries
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/stats/timeseries.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"interval": {
"type": "string",
"description": "Taille de l’intervalle. auto en choisit un selon la plage",
"enum": [
"auto",
"minute",
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "auto"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
Assistant
POST
/sites/:site_id/ask.json
Poser une question dans une nouvelle conversation (compte dans la limite mensuelle de questions IA)
assistant_ask
Permission : analytics.read
curl -X POST https://privatusanalytics.com/sites/:site_id/ask.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "Votre première question en langage naturel",
"examples": [
"How many visitors did we have last week?"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"question",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de conversation, par ex. ask_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string",
"description": "La première question, abrégée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Heure du dernier message"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Supprimée automatiquement après cette date (30 jours après le dernier message)"
},
"messages": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du message dans la conversation"
},
"role": {
"type": "string",
"description": "user (la question) ou assistant (la réponse)"
},
"content": {
"type": "string",
"description": "La question, ou la réponse en Markdown"
},
"queries": {
"type": "array",
"items": {
"type": "object"
},
"description": "Comment j’y suis arrivé : les requêtes API exactes derrière la réponse, sous la forme [{tool, input, status, error}]"
},
"chart": {
"anyOf": [
{
"type": "object",
"description": "Graphique de la réponse : {type: line, labels, series, comparison, metric, format} ou {type: table, columns, rows}"
},
{
"type": "null"
}
]
},
"goal_draft": {
"anyOf": [
{
"type": "object",
"description": "Un objectif proposé par l’assistant, à confirmer avec goals_create"
},
{
"type": "null"
}
]
},
"input_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Jetons d’entrée du modèle utilisés"
},
{
"type": "null"
}
]
},
"output_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Jetons de sortie du modèle utilisés"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
},
"description": "Questions et réponses, les plus anciennes en premier"
}
}
}
DELETE
/sites/:site_id/ask/:id.json
Supprimer une conversation Ask et ses messages
assistant_conversations_delete
Permission : analytics.read
curl -X DELETE https://privatusanalytics.com/sites/:site_id/ask/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de conversation, par ex. ask_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string",
"description": "La première question, abrégée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Heure du dernier message"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Supprimée automatiquement après cette date (30 jours après le dernier message)"
}
}
}
GET
/sites/:site_id/ask.json
Lister vos conversations Ask pour un site
assistant_conversations_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/ask.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de conversation, par ex. ask_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string",
"description": "La première question, abrégée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Heure du dernier message"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Supprimée automatiquement après cette date (30 jours après le dernier message)"
}
}
}
}
GET
/sites/:site_id/ask/:id.json
Une conversation Ask : questions, réponses, requêtes sous-jacentes et graphiques
assistant_conversations_get
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/ask/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de conversation, par ex. ask_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant du site"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string",
"description": "La première question, abrégée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Heure du dernier message"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Supprimée automatiquement après cette date (30 jours après le dernier message)"
},
"messages": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du message dans la conversation"
},
"role": {
"type": "string",
"description": "user (la question) ou assistant (la réponse)"
},
"content": {
"type": "string",
"description": "La question, ou la réponse en Markdown"
},
"queries": {
"type": "array",
"items": {
"type": "object"
},
"description": "Comment j’y suis arrivé : les requêtes API exactes derrière la réponse, sous la forme [{tool, input, status, error}]"
},
"chart": {
"anyOf": [
{
"type": "object",
"description": "Graphique de la réponse : {type: line, labels, series, comparison, metric, format} ou {type: table, columns, rows}"
},
{
"type": "null"
}
]
},
"goal_draft": {
"anyOf": [
{
"type": "object",
"description": "Un objectif proposé par l’assistant, à confirmer avec goals_create"
},
{
"type": "null"
}
]
},
"input_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Jetons d’entrée du modèle utilisés"
},
{
"type": "null"
}
]
},
"output_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Jetons de sortie du modèle utilisés"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
},
"description": "Questions et réponses, les plus anciennes en premier"
}
}
}
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
Permission : analytics.read
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 '{…}'
{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "Votre question en langage naturel",
"examples": [
"Which pages had the most visitors last week?"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"ask_conversation_id": {
"type": "string",
"description": "Ask conversation de la ressource"
}
},
"required": [
"question",
"site_id",
"ask_conversation_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du message dans la conversation"
},
"role": {
"type": "string",
"description": "user (la question) ou assistant (la réponse)"
},
"content": {
"type": "string",
"description": "La question, ou la réponse en Markdown"
},
"queries": {
"type": "array",
"items": {
"type": "object"
},
"description": "Comment j’y suis arrivé : les requêtes API exactes derrière la réponse, sous la forme [{tool, input, status, error}]"
},
"chart": {
"anyOf": [
{
"type": "object",
"description": "Graphique de la réponse : {type: line, labels, series, comparison, metric, format} ou {type: table, columns, rows}"
},
{
"type": "null"
}
]
},
"goal_draft": {
"anyOf": [
{
"type": "object",
"description": "Un objectif proposé par l’assistant, à confirmer avec goals_create"
},
{
"type": "null"
}
]
},
"input_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Jetons d’entrée du modèle utilisés"
},
{
"type": "null"
}
]
},
"output_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Jetons de sortie du modèle utilisés"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Campagnes
POST
/sites/:site_id/campaigns/costs.json
Définir les dépenses d’une campagne pour un mois
campaign_costs_create
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/campaigns/costs.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"campaign": {
"type": "string",
"description": "Valeur utm_campaign à laquelle la dépense se rapporte",
"examples": [
"spring_sale"
]
},
"month": {
"type": "string",
"description": "Mois, AAAA-MM",
"examples": [
"2026-09"
]
},
"amount": {
"type": "number",
"description": "Dépense en unités principales, par ex. 1250.50"
},
"currency": {
"type": "string",
"description": "Devise ISO 4217 (par défaut, la devise du site)"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"campaign",
"month",
"amount",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de l’entrée de coût"
},
"campaign": {
"type": "string",
"description": "Valeur utm_campaign"
},
"month": {
"type": "string",
"description": "Mois, AAAA-MM"
},
"amount_minor": {
"type": "integer",
"description": "Dépense en unités mineures"
},
"currency": {
"type": "string",
"description": "Devise ISO 4217 du montant"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/campaigns/costs/:id.json
Supprimer une entrée de coût de campagne
campaign_costs_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/sites/:site_id/campaigns/costs/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de l’entrée de coût"
},
"campaign": {
"type": "string",
"description": "Valeur utm_campaign"
},
"month": {
"type": "string",
"description": "Mois, AAAA-MM"
},
"amount_minor": {
"type": "integer",
"description": "Dépense en unités mineures"
},
"currency": {
"type": "string",
"description": "Devise ISO 4217 du montant"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/campaigns/costs/import.json
Importer des coûts de campagne depuis un CSV (campaign,month,amount[,currency])
campaign_costs_import
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/campaigns/costs/import.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"file": {
"type": "string",
"format": "binary",
"description": "Envoi de fichier CSV (formulaires multipart)"
},
"csv": {
"type": "string",
"description": "Texte CSV : campaign,month,amount[,currency]"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"imported": {
"type": "integer",
"description": "Lignes enregistrées"
},
"failed": {
"type": "integer",
"description": "Lignes ignorées"
},
"errors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Motifs d’omission des lignes (50 premières)"
}
}
}
GET
/sites/:site_id/campaigns/costs.json
Lister les entrées de coût de campagne
campaign_costs_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/costs.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"campaign": {
"type": "string",
"description": "Uniquement cette campagne"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de l’entrée de coût"
},
"campaign": {
"type": "string",
"description": "Valeur utm_campaign"
},
"month": {
"type": "string",
"description": "Mois, AAAA-MM"
},
"amount_minor": {
"type": "integer",
"description": "Dépense en unités mineures"
},
"currency": {
"type": "string",
"description": "Devise ISO 4217 du montant"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
PATCH
/sites/:site_id/campaigns/costs/:id.json
Modifier une entrée de coût de campagne
campaign_costs_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/sites/:site_id/campaigns/costs/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"campaign": {
"type": "string",
"description": "Valeur utm_campaign"
},
"month": {
"type": "string",
"description": "Mois, AAAA-MM"
},
"amount": {
"type": "number",
"description": "Dépense en unités principales"
},
"currency": {
"type": "string",
"description": "Devise ISO 4217"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de l’entrée de coût"
},
"campaign": {
"type": "string",
"description": "Valeur utm_campaign"
},
"month": {
"type": "string",
"description": "Mois, AAAA-MM"
},
"amount_minor": {
"type": "integer",
"description": "Dépense en unités mineures"
},
"currency": {
"type": "string",
"description": "Devise ISO 4217 du montant"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/campaigns/builder.json
Générer et valider une URL avec balises UTM
campaigns_builder
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/builder.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "URL de la page de destination (https://…)",
"examples": [
"https://example.com/pricing"
]
},
"preset": {
"type": "string",
"description": "Renseigner utm_source/utm_medium pour un canal lorsqu’ils sont vides",
"enum": [
"newsletter",
"social",
"paid_search",
"paid_social",
"print",
"partner"
]
},
"utm_source": {
"type": "string",
"description": "Origine du trafic"
},
"utm_medium": {
"type": "string",
"description": "Support marketing, par ex. email, cpc"
},
"utm_campaign": {
"type": "string",
"description": "Nom de la campagne, par ex. spring_sale"
},
"utm_content": {
"type": "string",
"description": "Variante, par ex. header_button"
},
"utm_term": {
"type": "string",
"description": "Mot-clé de recherche payante"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"url": {
"anyOf": [
{
"type": "string",
"description": "URL balisée (null tant qu’il y a des erreurs)"
},
{
"type": "null"
}
]
},
"valid": {
"type": "boolean",
"description": "True lorsqu’il n’y a aucune erreur"
},
"destination": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"preset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_source": {
"anyOf": [
{
"type": "string",
"description": "utm_source normalisé"
},
{
"type": "null"
}
]
},
"utm_medium": {
"anyOf": [
{
"type": "string",
"description": "utm_medium normalisé"
},
{
"type": "null"
}
]
},
"utm_campaign": {
"anyOf": [
{
"type": "string",
"description": "utm_campaign normalisé"
},
{
"type": "null"
}
]
},
"utm_content": {
"anyOf": [
{
"type": "string",
"description": "utm_content normalisé"
},
{
"type": "null"
}
]
},
"utm_term": {
"anyOf": [
{
"type": "string",
"description": "utm_term normalisé"
},
{
"type": "null"
}
]
},
"issues": {
"type": "array",
"items": {
"type": "object"
},
"description": "field, level (error ou warning) et message"
},
"presets": {
"type": "object",
"description": "Préréglages de canal : utm_source/utm_medium par préréglage"
}
}
}
GET
/sites/:site_id/campaigns/hygiene.json
Hygiène UTM : valeurs quasi identiques, problèmes de style et sources inconnues
campaigns_hygiene
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/hygiene.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"period": {
"type": "object",
"description": "from/to de la période (UTC)"
},
"duplicates": {
"type": "array",
"items": {
"type": "object"
},
"description": "Valeurs quasi identiques : champ, suggestion et variantes [{value, visits}]"
},
"style_issues": {
"type": "array",
"items": {
"type": "object"
},
"description": "Valeurs qui ne sont pas en minuscules avec tirets bas : champ, valeur, visites, suggestion"
},
"unknown_sources": {
"type": "array",
"items": {
"type": "object"
},
"description": "Valeurs utm_source que nous ne reconnaissons pas : valeur, visites"
}
}
}
GET
/sites/:site_id/campaigns.json
Synthèse des campagnes avec conversions, revenus, coût, CPA et ROAS
campaigns_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"goal_id": {
"type": "string",
"description": "Objectif (goal_…) dont les conversions sont comptées. Par défaut, le premier objectif actif"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"period": {
"type": "object",
"description": "from/to de la période (UTC)"
},
"currency": {
"type": "string",
"description": "Devise du site pour les revenus et les coûts"
},
"goal_id": {
"anyOf": [
{
"type": "string",
"description": "Objectif compté comme conversion"
},
{
"type": "null"
}
]
},
"goal_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"campaigns": {
"type": "array",
"items": {
"type": "object"
},
"description": "Par utm_campaign : visitors, visits, conversions, conversion_rate, revenue, cost, cpa (unités mineures), roas (revenu ÷ coût) et sources [{source, medium, visitors, visits, conversions, conversion_rate, revenue}]"
},
"totals": {
"type": "object",
"description": "Sommes sur toutes les campagnes listées"
}
}
}
POST
/sites/:site_id/campaigns/links.json
Enregistrer un lien avec balises UTM dans la bibliothèque
links_create
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/campaigns/links.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom du lien",
"examples": [
"Spring newsletter"
]
},
"destination": {
"type": "string",
"description": "URL de la page de destination (https://…)",
"examples": [
"https://example.com/pricing"
]
},
"utm_source": {
"type": "string",
"description": "Valeur utm_source (en minuscules, les espaces deviennent des tirets bas)"
},
"utm_medium": {
"type": "string",
"description": "Valeur utm_medium (en minuscules, les espaces deviennent des tirets bas)"
},
"utm_campaign": {
"type": "string",
"description": "Valeur utm_campaign (en minuscules, les espaces deviennent des tirets bas)"
},
"utm_content": {
"type": "string",
"description": "Valeur utm_content (en minuscules, les espaces deviennent des tirets bas)"
},
"utm_term": {
"type": "string",
"description": "Valeur utm_term (en minuscules, les espaces deviennent des tirets bas)"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Étiquettes. Les valeurs séparées par des virgules sont découpées",
"default": []
},
"notes": {
"type": "string",
"description": "Notes en texte libre"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"destination",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de lien, par ex. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL de la page de destination"
},
"utm_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_medium": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_campaign": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_term": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "URL complète balisée à partager"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/campaigns/links/:id.json
Supprimer un lien enregistré
links_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/sites/:site_id/campaigns/links/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de lien, par ex. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL de la page de destination"
},
"utm_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_medium": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_campaign": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_term": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "URL complète balisée à partager"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/campaigns/links.json
Lister les liens de campagne enregistrés
links_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/links.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Rechercher un nom, une destination ou une campagne"
},
"tag": {
"type": "string",
"description": "Uniquement les liens avec cette étiquette"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de lien, par ex. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL de la page de destination"
},
"utm_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_medium": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_campaign": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_term": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "URL complète balisée à partager"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/sites/:site_id/campaigns/links/:id/qr.json
QR code (SVG) d’un lien enregistré
links_qr
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/links/:id/qr.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"size": {
"type": "integer",
"description": "Taille du module en pixels (2 à 20)",
"default": 6
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"link_id": {
"type": "string",
"description": "Identifiant du lien"
},
"url": {
"type": "string",
"description": "L’URL encodée (balisée)"
},
"svg": {
"type": "string",
"description": "Document SVG autonome du QR code"
}
}
}
GET
/sites/:site_id/campaigns/links/:id.json
Obtenir un lien de campagne enregistré
links_get
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/links/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de lien, par ex. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL de la page de destination"
},
"utm_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_medium": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_campaign": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_term": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "URL complète balisée à partager"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:site_id/campaigns/links/:id.json
Modifier un lien enregistré
links_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/sites/:site_id/campaigns/links/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom du lien",
"examples": [
"Spring newsletter"
]
},
"destination": {
"type": "string",
"description": "URL de la page de destination (https://…)",
"examples": [
"https://example.com/pricing"
]
},
"utm_source": {
"type": "string",
"description": "Valeur utm_source (en minuscules, les espaces deviennent des tirets bas)"
},
"utm_medium": {
"type": "string",
"description": "Valeur utm_medium (en minuscules, les espaces deviennent des tirets bas)"
},
"utm_campaign": {
"type": "string",
"description": "Valeur utm_campaign (en minuscules, les espaces deviennent des tirets bas)"
},
"utm_content": {
"type": "string",
"description": "Valeur utm_content (en minuscules, les espaces deviennent des tirets bas)"
},
"utm_term": {
"type": "string",
"description": "Valeur utm_term (en minuscules, les espaces deviennent des tirets bas)"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Étiquettes. Les valeurs séparées par des virgules sont découpées"
},
"notes": {
"type": "string",
"description": "Notes en texte libre"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de lien, par ex. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL de la page de destination"
},
"utm_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_medium": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_campaign": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_term": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "URL complète balisée à partager"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
Canaux de notification
POST
/workspaces/:workspace_id/channels.json
Ajouter un canal de notification
notification_channels_create
Permission : content.write
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/channels.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL du webhook (slack, teams, discord, webhook), HTTPS"
},
"secret": {
"type": "string",
"description": "webhook : secret HMAC pour X-Privatus-Signature"
},
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "email : adresses des destinataires (20 maximum)"
},
"routing_key": {
"type": "string",
"description": "pagerduty : clé d’intégration Events API v2"
},
"api_key": {
"type": "string",
"description": "opsgenie : clé d’intégration API"
},
"region": {
"type": "string",
"description": "opsgenie : région du compte",
"enum": [
"us",
"eu"
]
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie ou push",
"enum": [
"email",
"slack",
"teams",
"discord",
"webhook",
"pagerduty",
"opsgenie",
"push"
]
},
"name": {
"type": "string",
"description": "Nom d’affichage",
"examples": [
"#alerts"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"kind",
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de canal, par ex. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie ou push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination masquée"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/channels/:id.json
Supprimer un canal de notification
notification_channels_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/channels/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de canal, par ex. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie ou push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination masquée"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/channels.json
Lister les canaux de notification
notification_channels_list
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/channels.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "Uniquement les canaux de ce type",
"enum": [
"email",
"slack",
"teams",
"discord",
"webhook",
"pagerduty",
"opsgenie",
"push"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de canal, par ex. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie ou push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination masquée"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/channels/:id/send_test.json
Envoyer un message de test via un canal
notification_channels_send_test
Permission : content.write
curl -X POST https://privatusanalytics.com/channels/:id/send_test.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de canal, par ex. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie ou push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination masquée"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/channels/:id.json
Obtenir un canal de notification
notification_channels_get
Permission : analytics.read
curl https://privatusanalytics.com/channels/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de canal, par ex. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie ou push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination masquée"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/channels/:id.json
Mettre à jour un canal de notification
notification_channels_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/channels/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL du webhook (slack, teams, discord, webhook), HTTPS"
},
"secret": {
"type": "string",
"description": "webhook : secret HMAC pour X-Privatus-Signature"
},
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "email : adresses des destinataires (20 maximum)"
},
"routing_key": {
"type": "string",
"description": "pagerduty : clé d’intégration Events API v2"
},
"api_key": {
"type": "string",
"description": "opsgenie : clé d’intégration API"
},
"region": {
"type": "string",
"description": "opsgenie : région du compte",
"enum": [
"us",
"eu"
]
},
"name": {
"type": "string",
"description": "Nom d’affichage"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de canal, par ex. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie ou push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination masquée"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/push_subscription.json
Enregistrer un navigateur pour les notifications push
push_subscriptions_create
Permission : member
curl -X POST https://privatusanalytics.com/push_subscription.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"endpoint": {
"type": "string",
"description": "PushSubscription.endpoint du navigateur"
},
"p256dh": {
"type": "string",
"description": "PushSubscription keys.p256dh (base64url)"
},
"auth": {
"type": "string",
"description": "PushSubscription keys.auth (base64url)"
}
},
"required": [
"endpoint",
"p256dh",
"auth"
]
}
{
"type": "object",
"properties": {
"endpoint_host": {
"type": "string",
"description": "Hôte du service push"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/push_subscription.json
Supprimer l’enregistrement push d’un navigateur
push_subscriptions_delete
Permission : member
curl -X DELETE https://privatusanalytics.com/push_subscription.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"endpoint": {
"type": "string",
"description": "PushSubscription.endpoint à supprimer"
}
},
"required": [
"endpoint"
]
}
{
"type": "object",
"properties": {
"endpoint_host": {
"type": "string",
"description": "Hôte du service push"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Collecte
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é d’ingestion du site comme jeton Bearer)
crawler_logs_create
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X POST https://privatusanalytics.com/api/logs.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ts": {
"type": "string"
},
"path": {
"type": "string",
"default": "/"
},
"status": {
"type": "integer"
},
"user_agent": {
"type": "string",
"default": ""
}
}
},
"description": "Lignes de journal : [{ts, path, status, user_agent}] (1000 maximum)"
}
},
"required": [
"lines"
]
}
{
"type": "object"
}
POST
/api/event.json
Collecter un hit du navigateur (utilisé par /js/pa.js)
ingest_event
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X POST https://privatusanalytics.com/api/event.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site": {
"type": "string",
"description": "Identifiant du site (pa_…)"
},
"type": {
"type": "string",
"description": "Type de hit",
"enum": [
"pageview",
"event",
"engagement",
"vital",
"click"
]
},
"url": {
"type": "string",
"description": "URL complète de la page"
},
"referrer": {
"type": "string",
"description": "document.referrer"
},
"name": {
"type": "string",
"description": "Nom de l’événement (type=event) ou nom du vital"
},
"props": {
"type": "object",
"additionalProperties": true,
"description": "Propriétés de l’événement : jusqu’à 30 valeurs chaîne/nombre/booléen",
"default": {}
},
"screen_width": {
"type": "integer",
"description": "Largeur de l’écran en pixels"
},
"language": {
"type": "string",
"description": "navigator.language"
},
"engaged_ms": {
"type": "integer",
"description": "Temps visible sur la page (engagement)"
},
"scroll_depth": {
"type": "integer",
"description": "Profondeur de défilement maximale en % (engagement)"
},
"value": {
"type": "number",
"description": "Valeur du Web Vital (type=vital)"
},
"selector": {
"type": "string",
"description": "Sélecteur de l’élément cliqué (type=click)"
},
"hash_mode": {
"type": "boolean",
"description": "Conserver le",
"default": false
},
"dnt": {
"type": "boolean",
"description": "Do Not Track est activé",
"default": false
},
"gpc": {
"type": "boolean",
"description": "Global Privacy Control est activé",
"default": false
},
"interacted": {
"type": "boolean",
"description": "1 si une saisie fiable (pointeur, touche, toucher ou molette) a été détectée sur la page, 0 sinon. Aucune coordonnée ni mesure de temps"
},
"revenue": {
"type": "number",
"description": "Revenu en unités principales, par ex. 49.99"
},
"currency": {
"type": "string",
"description": "Devise ISO 4217 du revenu"
}
},
"required": [
"site",
"type",
"url"
]
}
{
"type": "object"
}
POST
/api/events.json
Collecter des événements côté serveur avec une clé d’ingestion de site
ingest_events
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X POST https://privatusanalytics.com/api/events.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Jusqu’à 100 événements"
}
},
"required": [
"events"
]
}
{
"type": "object"
}
GET
/api/pixel.json
Collecter une page vue sans JavaScript (GIF 1×1)
ingest_pixel
Permission : public
· HTTP uniquement (pas un outil MCP)
curl https://privatusanalytics.com/api/pixel.json
{
"type": "object",
"properties": {},
"required": []
}
{
"type": "object"
}
Compte
GET
/account.json
Obtenir votre profil et vos préférences
account_get
Permission : member
curl https://privatusanalytics.com/account.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {},
"required": []
}
{
"type": "object",
"properties": {
"email": {
"type": "string"
},
"unconfirmed_email": {
"anyOf": [
{
"type": "string",
"description": "Nouvelle adresse e-mail en attente de confirmation"
},
{
"type": "null"
}
]
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"theme": {
"type": "string"
},
"default_landing": {
"type": "string"
},
"locale": {
"type": "string",
"description": "Code de langue de l’application pour ce compte (en par défaut)"
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"shortcuts_enabled": {
"type": "boolean"
},
"reduce_motion": {
"type": "boolean"
},
"product_emails": {
"type": "boolean"
},
"marketing_emails": {
"type": "boolean",
"description": "Indique si des e-mails marketing (campagnes échelonnées) peuvent être envoyés. false après un désabonnement"
},
"newsletter": {
"type": "boolean"
},
"two_factor": {
"type": "boolean"
},
"passkeys": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/account.json
Mettre à jour votre profil et vos préférences
account_update
Permission : member
curl -X PATCH https://privatusanalytics.com/account.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Votre nom"
},
"email": {
"type": "string",
"description": "Nouvelle adresse e-mail (d’abord confirmée par e-mail)"
},
"theme": {
"type": "string",
"description": "Thème de couleurs",
"enum": [
"system",
"light",
"dark"
]
},
"default_landing": {
"type": "string",
"description": "Page après connexion : sites ou last_site",
"enum": [
"sites",
"last_site"
]
},
"locale": {
"type": "string",
"description": "Langue de l’application lorsque vous êtes connecté, sous forme de code de langue (en, de, fr, etc.). Les pages publiques et l’API restent inchangées",
"enum": [
"en",
"de",
"es",
"fr",
"it",
"nl",
"pt",
"pl",
"sv",
"da",
"no",
"fi",
"ja",
"ko",
"zh-CN",
"zh-TW"
]
},
"timezone": {
"type": "string",
"description": "Votre fuseau horaire (nom IANA)"
},
"shortcuts_enabled": {
"type": "boolean",
"description": "Raccourcis clavier"
},
"reduce_motion": {
"type": "boolean",
"description": "Réduire les animations"
},
"product_emails": {
"type": "boolean",
"description": "E-mails de mises à jour et conseils sur le produit"
},
"marketing_emails": {
"type": "boolean",
"description": "E-mails marketing comme les conseils de prise en main. Les réactiver après un désabonnement nécessite un navigateur connecté"
},
"newsletter": {
"type": "boolean",
"description": "Newsletter mensuelle"
}
},
"required": []
}
{
"type": "object",
"properties": {
"email": {
"type": "string"
},
"unconfirmed_email": {
"anyOf": [
{
"type": "string",
"description": "Nouvelle adresse e-mail en attente de confirmation"
},
{
"type": "null"
}
]
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"theme": {
"type": "string"
},
"default_landing": {
"type": "string"
},
"locale": {
"type": "string",
"description": "Code de langue de l’application pour ce compte (en par défaut)"
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"shortcuts_enabled": {
"type": "boolean"
},
"reduce_motion": {
"type": "boolean"
},
"product_emails": {
"type": "boolean"
},
"marketing_emails": {
"type": "boolean",
"description": "Indique si des e-mails marketing (campagnes échelonnées) peuvent être envoyés. false après un désabonnement"
},
"newsletter": {
"type": "boolean"
},
"two_factor": {
"type": "boolean"
},
"passkeys": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Disponibilité
POST
/sites/:site_id/uptime.json
Ajouter une vérification de disponibilité pour un site
uptime_checks_create
Permission : uptime.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/uptime.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’affichage (par défaut, la cible)"
},
"kind": {
"type": "string",
"description": "http (code de statut), keyword (le corps contient), tcp (hôte:port) ou dns (le nom se résout)",
"enum": [
"http",
"keyword",
"tcp",
"dns"
],
"default": "http"
},
"url": {
"type": "string",
"description": "URL pour les vérifications http/keyword",
"examples": [
"https://example.com/health"
]
},
"host": {
"type": "string",
"description": "Nom d’hôte pour les vérifications tcp/dns"
},
"port": {
"type": "integer",
"description": "Port TCP pour les vérifications tcp"
},
"keyword": {
"type": "string",
"description": "Texte que le corps de la réponse doit contenir (keyword)"
},
"expected_status": {
"type": "integer",
"description": "Code de statut HTTP attendu",
"default": 200
},
"http_method": {
"type": "string",
"description": "Méthode HTTP",
"enum": [
"GET",
"HEAD"
],
"default": "GET"
},
"interval_seconds": {
"type": "integer",
"description": "Secondes entre les vérifications (le minimum du forfait s’applique, 300 par défaut ou le minimum)"
},
"timeout_seconds": {
"type": "integer",
"description": "Secondes avant l’expiration d’une sonde (1-30)",
"default": 20
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état publiques",
"default": false
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/uptime/checks/:id.json
Supprimer une vérification de disponibilité et son historique
uptime_checks_delete
Permission : uptime.manage
curl -X DELETE https://privatusanalytics.com/uptime/checks/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/uptime.json
Lister les vérifications de disponibilité d’un site
uptime_checks_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/uptime.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Uniquement les vérifications dans cet état",
"enum": [
"up",
"down",
"pending",
"paused"
]
},
"query": {
"type": "string",
"description": "Filtrer par nom ou cible"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/uptime/checks/:id/pause.json
Mettre en pause une vérification de disponibilité
uptime_checks_pause
Permission : uptime.manage
curl -X POST https://privatusanalytics.com/uptime/checks/:id/pause.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/uptime/checks/:id/resume.json
Reprendre une vérification de disponibilité en pause
uptime_checks_resume
Permission : uptime.manage
curl -X POST https://privatusanalytics.com/uptime/checks/:id/resume.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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
Permission : analytics.read
curl https://privatusanalytics.com/uptime/checks/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"range": {
"type": "string",
"description": "Fenêtre du graphique des temps de réponse",
"enum": [
"24h",
"7d",
"30d"
],
"default": "24h"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"check": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"uptime": {
"type": "object",
"description": "% de disponibilité sur 24 h, 7 j et 30 j"
},
"range": {
"type": "string",
"description": "Fenêtre de response_times"
},
"response_times": {
"type": "object",
"description": "Temps de réponse moyen en ms par intervalle : {unit, labels, series: {location: [ms…]}}"
},
"incidents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"started_at": {
"type": "string",
"format": "date-time"
},
"resolved_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"duration_seconds": {
"type": "integer",
"description": "Jusqu’ici, s’il est encore ouvert"
},
"cause": {
"anyOf": [
{
"type": "string",
"description": "Erreur la plus fréquente, par ex. timeout ou status_503"
},
{
"type": "null"
}
]
},
"failed_locations": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
PATCH
/uptime/checks/:id.json
Modifier une vérification de disponibilité
uptime_checks_update
Permission : uptime.manage
curl -X PATCH https://privatusanalytics.com/uptime/checks/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’affichage (par défaut, la cible)"
},
"kind": {
"type": "string",
"description": "http (code de statut), keyword (le corps contient), tcp (hôte:port) ou dns (le nom se résout)",
"enum": [
"http",
"keyword",
"tcp",
"dns"
]
},
"url": {
"type": "string",
"description": "URL pour les vérifications http/keyword",
"examples": [
"https://example.com/health"
]
},
"host": {
"type": "string",
"description": "Nom d’hôte pour les vérifications tcp/dns"
},
"port": {
"type": "integer",
"description": "Port TCP pour les vérifications tcp"
},
"keyword": {
"type": "string",
"description": "Texte que le corps de la réponse doit contenir (keyword)"
},
"expected_status": {
"type": "integer",
"description": "Code de statut HTTP attendu"
},
"http_method": {
"type": "string",
"description": "Méthode HTTP",
"enum": [
"GET",
"HEAD"
]
},
"interval_seconds": {
"type": "integer",
"description": "Secondes entre les vérifications (le minimum du forfait s’applique, 300 par défaut ou le minimum)"
},
"timeout_seconds": {
"type": "integer",
"description": "Secondes avant l’expiration d’une sonde (1-30)"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état publiques"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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)
curl https://privatusanalytics.com/uptime/probes.json
{
"type": "object",
"properties": {},
"required": []
}
{
"type": "object"
}
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)
curl -X POST https://privatusanalytics.com/uptime/probes/results.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"check_id": {
"type": "string"
},
"location": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"status_code": {
"type": "integer"
},
"response_ms": {
"type": "integer"
},
"error": {
"type": "string"
},
"checked_at": {
"type": "string",
"format": "date-time"
}
}
},
"description": "Résultats des sondes : [{check_id, location, ok, status_code, response_ms, error, checked_at}]"
}
},
"required": [
"results"
]
}
{
"type": "object"
}
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
Permission : uptime.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/uptime.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’affichage (par défaut, la cible)"
},
"kind": {
"type": "string",
"description": "http (code de statut), keyword (le corps contient), tcp (hôte:port) ou dns (le nom se résout)",
"enum": [
"http",
"keyword",
"tcp",
"dns"
],
"default": "http"
},
"url": {
"type": "string",
"description": "URL pour les vérifications http/keyword",
"examples": [
"https://example.com/health"
]
},
"host": {
"type": "string",
"description": "Nom d’hôte pour les vérifications tcp/dns"
},
"port": {
"type": "integer",
"description": "Port TCP pour les vérifications tcp"
},
"keyword": {
"type": "string",
"description": "Texte que le corps de la réponse doit contenir (keyword)"
},
"expected_status": {
"type": "integer",
"description": "Code de statut HTTP attendu",
"default": 200
},
"http_method": {
"type": "string",
"description": "Méthode HTTP",
"enum": [
"GET",
"HEAD"
],
"default": "GET"
},
"interval_seconds": {
"type": "integer",
"description": "Secondes entre les vérifications (le minimum du forfait s’applique, 300 par défaut ou le minimum)"
},
"timeout_seconds": {
"type": "integer",
"description": "Secondes avant l’expiration d’une sonde (1-30)",
"default": 20
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état publiques",
"default": false
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/uptime.json
Lister toutes les vérifications de disponibilité d’un espace de travail
workspace_uptime_checks_list
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/uptime.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Uniquement les vérifications dans cet état",
"enum": [
"up",
"down",
"pending",
"paused"
]
},
"query": {
"type": "string",
"description": "Filtrer par nom ou cible"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de vérification (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site auquel appartient la vérification"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp ou dns"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"port": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expected_status": {
"type": "integer"
},
"http_method": {
"type": "string"
},
"interval_seconds": {
"type": "integer"
},
"timeout_seconds": {
"type": "integer"
},
"status": {
"type": "string",
"description": "up, down, pending ou paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Peut apparaître sur les pages d’état"
},
"last_checked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_check_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_response_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"ssl_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"ssl_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"domain_expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
Documentation
GET
/docs/api.json
Lister toutes les opérations de l’API et tous les outils MCP
docs_api
Permission : public
curl https://privatusanalytics.com/docs/api.json
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"tool_name": {
"type": "string",
"description": "Nom de l’outil MCP et operationId OpenAPI"
},
"summary": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"group": {
"type": "string"
},
"verb": {
"type": "string",
"description": "Méthode HTTP"
},
"path": {
"type": "string",
"description": "Modèle de chemin. Ajoutez .json pour du JSON"
},
"permission": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"input_schema": {
"type": "object",
"description": "Schéma JSON des entrées"
},
"response_schema": {
"type": "object",
"description": "Schéma JSON de `data`"
}
}
}
}
GET
/docs.json
Lister les pages de documentation
docs_list
Permission : public
curl https://privatusanalytics.com/docs.json
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Titre de la page"
},
"description": {
"type": "string",
"description": "Résumé en une ligne"
},
"path": {
"type": "string",
"description": "Chemin de la page. Ajoutez .md pour Markdown ou .json pour JSON"
},
"section": {
"type": "string",
"description": "Slug de la section, par ex. tracker"
}
}
}
}
GET
/openapi.json
Document OpenAPI 3.1 de toute l’API
docs_openapi
Permission : public
curl https://privatusanalytics.com/openapi.json
{
"type": "object",
"properties": {},
"required": []
}
{
"type": "object"
}
GET
/docs/search.json
Rechercher dans la documentation
docs_search
Permission : public
curl https://privatusanalytics.com/docs/search.json
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Texte de recherche. Vide renvoie toutes les pages.",
"examples": [
"content security policy"
]
},
"limit": {
"type": "integer",
"description": "Nombre maximal de résultats (par défaut : 20 avec q, tous sans)"
}
},
"required": []
}
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Titre de la page"
},
"path": {
"type": "string",
"description": "Chemin de la page"
},
"section": {
"type": "string",
"description": "Titre de la section"
},
"headings": {
"type": "array",
"items": {
"type": "object"
},
"description": "Titres de la page : { id, text }"
},
"excerpt": {
"type": "string",
"description": "Description ou premières phrases"
},
"score": {
"anyOf": [
{
"type": "integer",
"description": "Pertinence (uniquement lors d’une recherche avec q)"
},
{
"type": "null"
}
]
}
}
}
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
curl https://privatusanalytics.com/docs/:section/:page.json
{
"type": "object",
"properties": {
"section": {
"type": "string",
"description": "Section de la ressource"
},
"page": {
"type": "string",
"description": "Page de la ressource"
}
},
"required": [
"section",
"page"
]
}
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Titre de la page"
},
"description": {
"type": "string",
"description": "Résumé en une ligne"
},
"path": {
"type": "string",
"description": "Chemin de la page. Ajoutez .md pour Markdown ou .json pour JSON"
},
"section": {
"type": "string",
"description": "Slug de la section, par ex. tracker"
},
"headings": {
"type": "array",
"items": {
"type": "object"
},
"description": "Sections de la page (id et texte)"
},
"full_markdown": {
"type": "string",
"description": "La page en Markdown (titre inclus)"
},
"html": {
"type": "string",
"description": "Le corps de la page rendu en HTML"
}
}
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/live.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"feed": {
"type": "string",
"description": "Flux d’activité : tous les hits, pages vues ou événements personnalisés",
"enum": [
"all",
"pageviews",
"events"
],
"default": "all"
},
"limit": {
"type": "integer",
"description": "Entrées du flux d’activité (100 maximum)",
"default": 50
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/live/wallboard.json
Cartes d’écran d’affichage (en direct et aujourd’hui) pour un ou plusieurs sites
live_wallboard
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/live/wallboard.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites à faire défiler (par défaut ce site)",
"default": []
},
"rotate_seconds": {
"type": "integer",
"description": "Secondes pendant lesquelles chaque site reste affiché (5-300)",
"default": 20
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
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)
curl https://privatusanalytics.com/wallboard/:token.json
{
"type": "object",
"properties": {
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites à faire défiler (par défaut ce site)",
"default": []
},
"rotate_seconds": {
"type": "integer",
"description": "Secondes pendant lesquelles chaque site reste affiché (5-300)",
"default": 20
},
"token": {
"type": "string",
"description": "Token de la ressource"
}
},
"required": [
"token"
]
}
{
"type": "object"
}
POST
/sites/:site_id/live/wallboard/links.json
Créer un lien d’écran d’affichage (lecture seule, révocable)
wallboard_links_create
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/live/wallboard/links.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Libellé, par ex. TV du bureau"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites supplémentaires à faire défiler (ce site est toujours inclus)",
"default": []
},
"rotate_seconds": {
"type": "integer",
"description": "Secondes par site lors du défilement (5-300)",
"default": 20
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Cesse de fonctionner après cette date"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de lien, par ex. shr_7Q2K9XH3AB"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "Ouvrez-le sur une TV. Aucune connexion requise"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites affichés, en rotation"
},
"rotate_seconds": {
"type": "integer"
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/live/wallboard/links/:id.json
Révoquer un lien d’écran d’affichage
wallboard_links_delete
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/live/wallboard/links/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de lien, par ex. shr_7Q2K9XH3AB"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "Ouvrez-le sur une TV. Aucune connexion requise"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites affichés, en rotation"
},
"rotate_seconds": {
"type": "integer"
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/live/wallboard/links.json
Lister les liens d’écran d’affichage d’un site
wallboard_links_list
Permission : sites.manage
curl https://privatusanalytics.com/sites/:site_id/live/wallboard/links.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de lien, par ex. shr_7Q2K9XH3AB"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "Ouvrez-le sur une TV. Aucune connexion requise"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites affichés, en rotation"
},
"rotate_seconds": {
"type": "integer"
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
Entonnoirs
POST
/sites/:site_id/funnels.json
Créer un entonnoir
funnels_create
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/funnels.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom de l’entonnoir",
"examples": [
"Signup flow"
]
},
"steps": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Étapes ordonnées (2 jusqu’à la limite de votre forfait) : [{\"type\": \"page|event|goal\", \"value\": \"/pricing | Signup | goal_…\", \"match\": \"exact|prefix|glob|regex\" (étapes page), \"name\": \"optional label\"}]"
},
"order_mode": {
"type": "string",
"description": "strict : étapes dans cet ordre, any : dans n’importe quel ordre",
"enum": [
"strict",
"any"
],
"default": "strict"
},
"window": {
"type": "string",
"description": "Fenêtre de conversion : visit, ou day (mesurée au sein d’une visite, qui ne couvre jamais un jour UTC)",
"enum": [
"visit",
"day"
],
"default": "visit"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"steps",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’entonnoir, par ex. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Étapes : {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict ou any"
},
"window": {
"type": "string",
"description": "visit ou day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Visites ayant atteint l’étape 1"
},
"completed": {
"type": "integer",
"description": "Visites ayant atteint la dernière étape"
},
"conversion_rate": {
"type": "number",
"description": "Terminées ÷ entrées, %"
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/funnels/:id.json
Supprimer un entonnoir
funnels_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’entonnoir, par ex. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Étapes : {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict ou any"
},
"window": {
"type": "string",
"description": "visit ou day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Visites ayant atteint l’étape 1"
},
"completed": {
"type": "integer",
"description": "Visites ayant atteint la dernière étape"
},
"conversion_rate": {
"type": "number",
"description": "Terminées ÷ entrées, %"
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/funnels.json
Lister les entonnoirs avec entrées, réalisations et taux
funnels_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/funnels.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"page": {
"type": "integer",
"description": "Numéro de page",
"default": 1
},
"per_page": {
"type": "integer",
"description": "Entonnoirs par page (100 maximum)",
"default": 25
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’entonnoir, par ex. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Étapes : {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict ou any"
},
"window": {
"type": "string",
"description": "visit ou day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Visites ayant atteint l’étape 1"
},
"completed": {
"type": "integer",
"description": "Visites ayant atteint la dernière étape"
},
"conversion_rate": {
"type": "number",
"description": "Terminées ÷ entrées, %"
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"breakdown": {
"type": "string",
"description": "Répartir les effectifs des étapes selon une dimension de visite",
"enum": [
"channel",
"device",
"country",
"utm_campaign",
"utm_source",
"browser",
"os"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"period": {
"type": "object",
"description": "from/to de la période (UTC)"
},
"funnel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’entonnoir, par ex. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Étapes : {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict ou any"
},
"window": {
"type": "string",
"description": "visit ou day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Visites ayant atteint l’étape 1"
},
"completed": {
"type": "integer",
"description": "Visites ayant atteint la dernière étape"
},
"conversion_rate": {
"type": "number",
"description": "Terminées ÷ entrées, %"
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"description": "La définition de l’entonnoir"
},
"order_mode": {
"type": "string",
"description": "strict ou any"
},
"window": {
"type": "string",
"description": "visit ou day (day est mesuré au sein d’une visite)"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Par étape : index, name, type, value, count, step_conversion_rate, overall_conversion_rate, dropoff, dropoff_rate, median_seconds_from_previous, next_pages [{value, count}]"
},
"overall_conversion_rate": {
"type": "number",
"description": "Dernière étape ÷ première étape, %"
},
"breakdown": {
"anyOf": [
{
"type": "object",
"description": "dimension, label et rows [{value, counts, overall_conversion_rate}]"
},
{
"type": "null"
}
]
},
"comparison": {
"anyOf": [
{
"type": "object",
"description": "period, counts par étape, overall_conversion_rate et change (%)"
},
{
"type": "null"
}
]
}
}
}
PATCH
/sites/:site_id/funnels/:id.json
Mettre à jour un entonnoir
funnels_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom de l’entonnoir",
"examples": [
"Signup flow"
]
},
"steps": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Étapes ordonnées (2 jusqu’à la limite de votre forfait) : [{\"type\": \"page|event|goal\", \"value\": \"/pricing | Signup | goal_…\", \"match\": \"exact|prefix|glob|regex\" (étapes page), \"name\": \"optional label\"}]"
},
"order_mode": {
"type": "string",
"description": "strict : étapes dans cet ordre, any : dans n’importe quel ordre",
"enum": [
"strict",
"any"
]
},
"window": {
"type": "string",
"description": "Fenêtre de conversion : visit, ou day (mesurée au sein d’une visite, qui ne couvre jamais un jour UTC)",
"enum": [
"visit",
"day"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’entonnoir, par ex. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Étapes : {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict ou any"
},
"window": {
"type": "string",
"description": "visit ou day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Visites ayant atteint l’étape 1"
},
"completed": {
"type": "integer",
"description": "Visites ayant atteint la dernière étape"
},
"conversion_rate": {
"type": "number",
"description": "Terminées ÷ entrées, %"
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
Espaces de travail
GET
/workspaces/:workspace_id/white_label.json
Obtenir la marque en marque blanche
white_label_get
Permission : workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/white_label.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"brand_name": {
"anyOf": [
{
"type": "string",
"description": "Nom affiché à la place de Privatus Analytics"
},
{
"type": "null"
}
]
},
"brand_logo_url": {
"anyOf": [
{
"type": "string",
"description": "URL de l’image du logo"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string",
"description": "Couleur d’accent"
},
{
"type": "null"
}
]
},
"hide_branding": {
"type": "boolean",
"description": "La marque Privatus Analytics est masquée"
},
"available": {
"type": "boolean",
"description": "Le forfait inclut la marque blanche"
},
"active": {
"type": "boolean",
"description": "La marque est actuellement appliquée"
}
}
}
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
Permission : workspace.manage
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/white_label.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"brand_name": {
"type": "string",
"description": "Nom affiché à la place de Privatus Analytics (vide pour le retirer)"
},
"brand_logo_url": {
"type": "string",
"description": "URL https d’une image de logo (vide pour la retirer)"
},
"brand_color": {
"type": "string",
"description": "Couleur d’accent, par ex. #06755b"
},
"hide_branding": {
"type": "boolean",
"description": "Masquer « Privatus Analytics » sur les tableaux de bord partagés et les rapports par e-mail"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"brand_name": {
"anyOf": [
{
"type": "string",
"description": "Nom affiché à la place de Privatus Analytics"
},
{
"type": "null"
}
]
},
"brand_logo_url": {
"anyOf": [
{
"type": "string",
"description": "URL de l’image du logo"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string",
"description": "Couleur d’accent"
},
{
"type": "null"
}
]
},
"hide_branding": {
"type": "boolean",
"description": "La marque Privatus Analytics est masquée"
},
"available": {
"type": "boolean",
"description": "Le forfait inclut la marque blanche"
},
"active": {
"type": "boolean",
"description": "La marque est actuellement appliquée"
}
}
}
GET
/workspaces/:workspace_id/security.json
Obtenir les paramètres de sécurité de l’espace de travail
workspace_security_get
Permission : workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/security.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"enforce_2fa": {
"type": "boolean",
"description": "Les membres doivent configurer la 2FA"
},
"login_methods": {
"type": "array",
"items": {
"type": "string"
},
"description": "Méthodes de connexion autorisées"
},
"session_ttl_hours": {
"anyOf": [
{
"type": "integer",
"description": "Durée de session (null = aucune)"
},
{
"type": "null"
}
]
},
"app_ip_allowlist": {
"type": "array",
"items": {
"type": "string"
},
"description": "IP/CIDR autorisés (vide = de partout)"
},
"support_access_until": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Le support Privatus Analytics peut consulter l’espace de travail jusqu’au"
},
{
"type": "null"
}
]
}
}
}
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
Permission : workspace.manage
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/security.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"enforce_2fa": {
"type": "boolean",
"description": "Exiger que les membres configurent la 2FA"
},
"login_methods": {
"type": "array",
"items": {
"type": "string",
"enum": [
"password",
"magic_link",
"passkey",
"google",
"github",
"sso"
]
},
"description": "Méthodes de connexion autorisées"
},
"session_ttl_hours": {
"type": "integer",
"description": "Déconnecter les membres après ce nombre d’heures (0 = aucune limite)"
},
"app_ip_allowlist": {
"type": "array",
"items": {
"type": "string"
},
"description": "N’autoriser l’accès à l’application et à l’API que depuis ces IP/CIDR (Business). Vide = de partout"
},
"support_access": {
"type": "boolean",
"description": "Autoriser le support Privatus Analytics à consulter l’espace de travail pendant 7 jours"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"enforce_2fa": {
"type": "boolean",
"description": "Les membres doivent configurer la 2FA"
},
"login_methods": {
"type": "array",
"items": {
"type": "string"
},
"description": "Méthodes de connexion autorisées"
},
"session_ttl_hours": {
"anyOf": [
{
"type": "integer",
"description": "Durée de session (null = aucune)"
},
{
"type": "null"
}
]
},
"app_ip_allowlist": {
"type": "array",
"items": {
"type": "string"
},
"description": "IP/CIDR autorisés (vide = de partout)"
},
"support_access_until": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Le support Privatus Analytics peut consulter l’espace de travail jusqu’au"
},
{
"type": "null"
}
]
}
}
}
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)
curl -X POST https://privatusanalytics.com/workspaces.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom de l’espace de travail",
"examples": [
"Acme Inc"
]
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports par défaut (par défaut, celui de l’utilisateur)"
},
"currency": {
"type": "string",
"description": "Devise par défaut (ISO 4217)",
"default": "USD"
},
"how_heard": {
"type": "string",
"description": "Comment vous avez entendu parler de nous"
}
},
"required": [
"name"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports par défaut"
},
"currency": {
"type": "string",
"description": "Devise par défaut"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements par mois inclus dans le forfait"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Votre rôle dans cet espace de travail"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:id.json
Supprimer un espace de travail et tous ses sites (propriétaire uniquement, résilie tout abonnement)
workspaces_delete
Permission : workspace.manage
curl -X DELETE https://privatusanalytics.com/workspaces/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"confirm": {
"type": "string",
"description": "Saisissez le nom de l’espace de travail pour confirmer"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"confirm",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports par défaut"
},
"currency": {
"type": "string",
"description": "Devise par défaut"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements par mois inclus dans le forfait"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Votre rôle dans cet espace de travail"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces.json
Lister vos espaces de travail
workspaces_list
Permission : member
curl https://privatusanalytics.com/workspaces.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports par défaut"
},
"currency": {
"type": "string",
"description": "Devise par défaut"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements par mois inclus dans le forfait"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Votre rôle dans cet espace de travail"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/workspaces/:id.json
Obtenir un espace de travail
workspaces_get
Permission : member
curl https://privatusanalytics.com/workspaces/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports par défaut"
},
"currency": {
"type": "string",
"description": "Devise par défaut"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements par mois inclus dans le forfait"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Votre rôle dans cet espace de travail"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/workspaces/:id.json
Mettre à jour les paramètres de l’espace de travail
workspaces_update
Permission : workspace.manage
curl -X PATCH https://privatusanalytics.com/workspaces/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom de l’espace de travail"
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports par défaut"
},
"currency": {
"type": "string",
"description": "Devise par défaut (ISO 4217)"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports par défaut"
},
"currency": {
"type": "string",
"description": "Devise par défaut"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements par mois inclus dans le forfait"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Votre rôle dans cet espace de travail"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Exports
POST
/workspaces/:workspace_id/exports.json
Mettre un export en file d’attente (généré en arrière-plan)
exports_create
Permission : analytics.export
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/exports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Site à exporter (pa_…)",
"examples": [
"pa_7Q2K9XH3AB"
]
},
"kind": {
"type": "string",
"description": "aggregated : métriques par intervalle de temps et dimensions. pageviews/events/raw : une ligne par hit (Pro et supérieur). imported : statistiques quotidiennes importées. dashboard : ZIP des panneaux de la vue d’ensemble",
"enum": [
"aggregated",
"pageviews",
"events",
"imported",
"raw",
"dashboard"
],
"default": "aggregated"
},
"file_format": {
"type": "string",
"description": "csv, json ou xlsx (aggregated, pageviews, events, imported), csv ou ndjson (raw), zip (dashboard)",
"enum": [
"csv",
"json",
"xlsx",
"ndjson",
"zip"
],
"default": "csv"
},
"from": {
"type": "string",
"format": "date",
"description": "Premier jour, dans le fuseau horaire de l’export",
"examples": [
"2026-09-01"
]
},
"to": {
"type": "string",
"format": "date",
"description": "Dernier jour, inclus (400 jours maximum, 93 jours pour raw)",
"examples": [
"2026-09-28"
]
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des dates et du regroupement, par ex. America/New_York (par défaut : le fuseau horaire du site)"
},
"grouping": {
"type": "string",
"description": "Intervalle de temps des exports aggregated",
"enum": [
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "day"
},
"dimensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Dimensions de visite pour regrouper les exports aggregated (jusqu’à 6), par ex. country, channel, entry_page. Pour les exports imported : les dimensions importées à inclure",
"default": []
},
"metrics": {
"type": "array",
"items": {
"type": "string"
},
"description": "Métriques des exports aggregated (par défaut toutes) : visitors, visits, pageviews, bounce_rate, visit_duration, views_per_visit, revenue",
"default": []
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Colonnes des exports pageviews/events/raw (par défaut toutes sauf visit_id, vital_value, selector) : occurred_at, kind, name, visit_id, hostname, path, referrer_host, referrer_path, channel, utm_source, utm_medium, utm_campaign, utm_content, utm_term, ref, paid_click, country, language, device, browser, browser_major, os, os_major, screen_bucket, engaged_ms, scroll_depth, revenue_minor, currency, vital_value, selector, props",
"default": []
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres, même format que l’API de statistiques : [[\"dimension\",\"operator\",\"value\"], …]",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"site_id",
"from",
"to",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’export, par ex. exp_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site exporté (pa_…)"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string",
"description": "aggregated, pageviews, events, imported, raw ou dashboard"
},
"format": {
"type": "string",
"description": "csv, json, xlsx, ndjson ou zip"
},
"status": {
"type": "string",
"description": "queued, running, complete, failed ou expired"
},
"params": {
"type": "object",
"description": "La définition de l’export (dates, fuseau horaire, regroupement, dimensions, métriques, champs, filtres)"
},
"row_count": {
"anyOf": [
{
"type": "integer",
"description": "Lignes écrites"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Motif de l’échec de l’export"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de suppression du fichier"
},
{
"type": "null"
}
]
},
"download_url": {
"anyOf": [
{
"type": "string",
"description": "Chemin renvoyant un lien de fichier signé de courte durée (exports_download)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/exports/:id.json
Supprimer un export et son fichier
exports_delete
Permission : analytics.export
curl -X DELETE https://privatusanalytics.com/exports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’export, par ex. exp_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site exporté (pa_…)"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string",
"description": "aggregated, pageviews, events, imported, raw ou dashboard"
},
"format": {
"type": "string",
"description": "csv, json, xlsx, ndjson ou zip"
},
"status": {
"type": "string",
"description": "queued, running, complete, failed ou expired"
},
"params": {
"type": "object",
"description": "La définition de l’export (dates, fuseau horaire, regroupement, dimensions, métriques, champs, filtres)"
},
"row_count": {
"anyOf": [
{
"type": "integer",
"description": "Lignes écrites"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Motif de l’échec de l’export"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de suppression du fichier"
},
{
"type": "null"
}
]
},
"download_url": {
"anyOf": [
{
"type": "string",
"description": "Chemin renvoyant un lien de fichier signé de courte durée (exports_download)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/exports/:id/download.json
Obtenir un lien signé vers le fichier (valable 10 minutes)
exports_download
Permission : analytics.export
curl https://privatusanalytics.com/exports/:id/download.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object"
}
GET
/workspaces/:workspace_id/exports.json
Lister les exports (la file de tâches)
exports_list
Permission : analytics.export
curl https://privatusanalytics.com/workspaces/:workspace_id/exports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Uniquement les exports de ce site (pa_…)"
},
"status": {
"type": "string",
"description": "Uniquement les exports avec ce statut",
"enum": [
"queued",
"running",
"complete",
"failed",
"expired"
]
},
"kind": {
"type": "string",
"description": "Uniquement les exports de ce type",
"enum": [
"aggregated",
"pageviews",
"events",
"imported",
"raw",
"dashboard"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’export, par ex. exp_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site exporté (pa_…)"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string",
"description": "aggregated, pageviews, events, imported, raw ou dashboard"
},
"format": {
"type": "string",
"description": "csv, json, xlsx, ndjson ou zip"
},
"status": {
"type": "string",
"description": "queued, running, complete, failed ou expired"
},
"params": {
"type": "object",
"description": "La définition de l’export (dates, fuseau horaire, regroupement, dimensions, métriques, champs, filtres)"
},
"row_count": {
"anyOf": [
{
"type": "integer",
"description": "Lignes écrites"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Motif de l’échec de l’export"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de suppression du fichier"
},
{
"type": "null"
}
]
},
"download_url": {
"anyOf": [
{
"type": "string",
"description": "Chemin renvoyant un lien de fichier signé de courte durée (exports_download)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/workspaces/:workspace_id/exports/preview.json
Prévisualiser un export : les 20 premières lignes et le nombre de lignes estimé
exports_preview
Permission : analytics.export
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/exports/preview.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Site à exporter (pa_…)",
"examples": [
"pa_7Q2K9XH3AB"
]
},
"kind": {
"type": "string",
"description": "aggregated : métriques par intervalle de temps et dimensions. pageviews/events/raw : une ligne par hit (Pro et supérieur). imported : statistiques quotidiennes importées. dashboard : ZIP des panneaux de la vue d’ensemble",
"enum": [
"aggregated",
"pageviews",
"events",
"imported",
"raw",
"dashboard"
],
"default": "aggregated"
},
"file_format": {
"type": "string",
"description": "csv, json ou xlsx (aggregated, pageviews, events, imported), csv ou ndjson (raw), zip (dashboard)",
"enum": [
"csv",
"json",
"xlsx",
"ndjson",
"zip"
],
"default": "csv"
},
"from": {
"type": "string",
"format": "date",
"description": "Premier jour, dans le fuseau horaire de l’export",
"examples": [
"2026-09-01"
]
},
"to": {
"type": "string",
"format": "date",
"description": "Dernier jour, inclus (400 jours maximum, 93 jours pour raw)",
"examples": [
"2026-09-28"
]
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des dates et du regroupement, par ex. America/New_York (par défaut : le fuseau horaire du site)"
},
"grouping": {
"type": "string",
"description": "Intervalle de temps des exports aggregated",
"enum": [
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "day"
},
"dimensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Dimensions de visite pour regrouper les exports aggregated (jusqu’à 6), par ex. country, channel, entry_page. Pour les exports imported : les dimensions importées à inclure",
"default": []
},
"metrics": {
"type": "array",
"items": {
"type": "string"
},
"description": "Métriques des exports aggregated (par défaut toutes) : visitors, visits, pageviews, bounce_rate, visit_duration, views_per_visit, revenue",
"default": []
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Colonnes des exports pageviews/events/raw (par défaut toutes sauf visit_id, vital_value, selector) : occurred_at, kind, name, visit_id, hostname, path, referrer_host, referrer_path, channel, utm_source, utm_medium, utm_campaign, utm_content, utm_term, ref, paid_click, country, language, device, browser, browser_major, os, os_major, screen_bucket, engaged_ms, scroll_depth, revenue_minor, currency, vital_value, selector, props",
"default": []
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres, même format que l’API de statistiques : [[\"dimension\",\"operator\",\"value\"], …]",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"site_id",
"from",
"to",
"workspace_id"
]
}
{
"type": "object"
}
GET
/exports/:id.json
Obtenir un export et son statut
exports_get
Permission : analytics.export
curl https://privatusanalytics.com/exports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’export, par ex. exp_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site exporté (pa_…)"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string",
"description": "aggregated, pageviews, events, imported, raw ou dashboard"
},
"format": {
"type": "string",
"description": "csv, json, xlsx, ndjson ou zip"
},
"status": {
"type": "string",
"description": "queued, running, complete, failed ou expired"
},
"params": {
"type": "object",
"description": "La définition de l’export (dates, fuseau horaire, regroupement, dimensions, métriques, champs, filtres)"
},
"row_count": {
"anyOf": [
{
"type": "integer",
"description": "Lignes écrites"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Motif de l’échec de l’export"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de suppression du fichier"
},
{
"type": "null"
}
]
},
"download_url": {
"anyOf": [
{
"type": "string",
"description": "Chemin renvoyant un lien de fichier signé de courte durée (exports_download)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Facturation
POST
/workspaces/:workspace_id/billing/badge.json
Activer ou désactiver le bonus du badge (forfait gratuit)
billing_badge
Permission : billing.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/badge.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"description": "true pour vérifier le badge et obtenir le bonus"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"enabled",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements mensuels du palier payant"
},
"allowance": {
"type": "integer",
"description": "Événements mensuels, bonus du badge inclus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month ou year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD par intervalle de facturation"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused ou canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Renouvellement ou fin le"
},
{
"type": "null"
}
]
},
"cancel_at_period_end": {
"type": "boolean"
},
"canceled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"auto_upgrade": {
"type": "boolean"
},
"discount": {
"anyOf": [
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source, open_source_free ou agency"
},
"status": {
"type": "string",
"description": "pending, approved (pas encore appliqué à l’abonnement), active, rejected ou revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business (null pour le programme open source gratuit)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Événements gratuits par mois (programme open source gratuit uniquement)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Nom de l’organisation, de l’établissement, du projet ou de l’agence"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Site web"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Lien justificatif ou URL du dépôt"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "Licence OSI (open source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Note pour l’examen"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Motif pour lequel la candidature n’a pas été approuvée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date de la candidature"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de l’examen"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Remise active depuis"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de fin du programme"
},
{
"type": "null"
}
]
}
},
"description": "La dernière candidature à un programme de remise, ou null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business issu d’un programme approuvé, ou null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Bonus du badge (forfait gratuit)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Premier jour du mois concerné"
},
"events": {
"type": "integer",
"description": "Événements facturables (pages vues et événements personnalisés)"
},
"bots": {
"type": "integer",
"description": "Hits de bots filtrés (non facturés)"
},
"allowance": {
"type": "integer",
"description": "Événements inclus, avec l’éventuel bonus du badge"
},
"percent": {
"type": "number",
"description": "Événements en pourcentage du quota"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Événements prévus en fin de mois"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Jours restants dans le mois"
},
"status": {
"type": "string",
"description": "ok, warning (80 % et plus), over (un mois passé ayant atteint ou dépassé le quota), locked ou paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pages vues et événements personnalisés ce mois-ci"
},
"share": {
"type": "number",
"description": "Pourcentage du total de l’espace de travail"
}
}
},
"description": "Événements par site"
},
"history": {
"type": "array",
"description": "Mois précédents, les plus récents en premier"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Tableaux de bord verrouillés par l’équipe Privatus Analytics depuis"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True tant que les nouveaux événements sont ignorés (la limite mensuelle est atteinte, ou l’équipe a mis la collecte en pause)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Pourquoi la collecte est en pause : limit (le quota mensuel est atteint) ou staff. null lorsque la collecte est active"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’équipe a mis la collecte en pause"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Fin d’une pause due à la limite : le début du mois suivant (UTC), ou plus tôt en cas de passage à un forfait supérieur. null sinon"
},
{
"type": "null"
}
]
}
},
"description": "Ce mois-ci jusqu’à présent"
}
}
}
POST
/workspaces/:workspace_id/billing/cancel.json
Annuler à la fin de la période de facturation
billing_cancel
Permission : billing.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/cancel.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Motif principal de la résiliation (enquête facultative)",
"enum": [
"too_expensive",
"missing_features",
"switching_tool",
"not_using",
"temporary",
"other"
]
},
"comment": {
"type": "string",
"description": "Tout ce que nous pourrions améliorer"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements mensuels du palier payant"
},
"allowance": {
"type": "integer",
"description": "Événements mensuels, bonus du badge inclus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month ou year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD par intervalle de facturation"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused ou canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Renouvellement ou fin le"
},
{
"type": "null"
}
]
},
"cancel_at_period_end": {
"type": "boolean"
},
"canceled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"auto_upgrade": {
"type": "boolean"
},
"discount": {
"anyOf": [
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source, open_source_free ou agency"
},
"status": {
"type": "string",
"description": "pending, approved (pas encore appliqué à l’abonnement), active, rejected ou revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business (null pour le programme open source gratuit)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Événements gratuits par mois (programme open source gratuit uniquement)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Nom de l’organisation, de l’établissement, du projet ou de l’agence"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Site web"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Lien justificatif ou URL du dépôt"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "Licence OSI (open source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Note pour l’examen"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Motif pour lequel la candidature n’a pas été approuvée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date de la candidature"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de l’examen"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Remise active depuis"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de fin du programme"
},
{
"type": "null"
}
]
}
},
"description": "La dernière candidature à un programme de remise, ou null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business issu d’un programme approuvé, ou null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Bonus du badge (forfait gratuit)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Premier jour du mois concerné"
},
"events": {
"type": "integer",
"description": "Événements facturables (pages vues et événements personnalisés)"
},
"bots": {
"type": "integer",
"description": "Hits de bots filtrés (non facturés)"
},
"allowance": {
"type": "integer",
"description": "Événements inclus, avec l’éventuel bonus du badge"
},
"percent": {
"type": "number",
"description": "Événements en pourcentage du quota"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Événements prévus en fin de mois"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Jours restants dans le mois"
},
"status": {
"type": "string",
"description": "ok, warning (80 % et plus), over (un mois passé ayant atteint ou dépassé le quota), locked ou paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pages vues et événements personnalisés ce mois-ci"
},
"share": {
"type": "number",
"description": "Pourcentage du total de l’espace de travail"
}
}
},
"description": "Événements par site"
},
"history": {
"type": "array",
"description": "Mois précédents, les plus récents en premier"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Tableaux de bord verrouillés par l’équipe Privatus Analytics depuis"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True tant que les nouveaux événements sont ignorés (la limite mensuelle est atteinte, ou l’équipe a mis la collecte en pause)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Pourquoi la collecte est en pause : limit (le quota mensuel est atteint) ou staff. null lorsque la collecte est active"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’équipe a mis la collecte en pause"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Fin d’une pause due à la limite : le début du mois suivant (UTC), ou plus tôt en cas de passage à un forfait supérieur. null sinon"
},
{
"type": "null"
}
]
}
},
"description": "Ce mois-ci jusqu’à présent"
}
}
}
POST
/workspaces/:workspace_id/billing/change_plan.json
Changer de forfait, de palier ou d’intervalle (au prorata)
billing_change_plan
Permission : billing.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/change_plan.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"description": "Forfait de destination : pro ou business",
"enum": [
"pro",
"business"
]
},
"events": {
"type": "integer",
"description": "Événements mensuels du palier, depuis GET /plans",
"examples": [
1000000
]
},
"interval": {
"type": "string",
"description": "Intervalle de facturation. L’annuel offre 2 mois",
"enum": [
"month",
"year"
],
"default": "month"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"plan",
"events",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements mensuels du palier payant"
},
"allowance": {
"type": "integer",
"description": "Événements mensuels, bonus du badge inclus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month ou year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD par intervalle de facturation"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused ou canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Renouvellement ou fin le"
},
{
"type": "null"
}
]
},
"cancel_at_period_end": {
"type": "boolean"
},
"canceled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"auto_upgrade": {
"type": "boolean"
},
"discount": {
"anyOf": [
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source, open_source_free ou agency"
},
"status": {
"type": "string",
"description": "pending, approved (pas encore appliqué à l’abonnement), active, rejected ou revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business (null pour le programme open source gratuit)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Événements gratuits par mois (programme open source gratuit uniquement)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Nom de l’organisation, de l’établissement, du projet ou de l’agence"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Site web"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Lien justificatif ou URL du dépôt"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "Licence OSI (open source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Note pour l’examen"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Motif pour lequel la candidature n’a pas été approuvée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date de la candidature"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de l’examen"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Remise active depuis"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de fin du programme"
},
{
"type": "null"
}
]
}
},
"description": "La dernière candidature à un programme de remise, ou null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business issu d’un programme approuvé, ou null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Bonus du badge (forfait gratuit)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Premier jour du mois concerné"
},
"events": {
"type": "integer",
"description": "Événements facturables (pages vues et événements personnalisés)"
},
"bots": {
"type": "integer",
"description": "Hits de bots filtrés (non facturés)"
},
"allowance": {
"type": "integer",
"description": "Événements inclus, avec l’éventuel bonus du badge"
},
"percent": {
"type": "number",
"description": "Événements en pourcentage du quota"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Événements prévus en fin de mois"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Jours restants dans le mois"
},
"status": {
"type": "string",
"description": "ok, warning (80 % et plus), over (un mois passé ayant atteint ou dépassé le quota), locked ou paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pages vues et événements personnalisés ce mois-ci"
},
"share": {
"type": "number",
"description": "Pourcentage du total de l’espace de travail"
}
}
},
"description": "Événements par site"
},
"history": {
"type": "array",
"description": "Mois précédents, les plus récents en premier"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Tableaux de bord verrouillés par l’équipe Privatus Analytics depuis"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True tant que les nouveaux événements sont ignorés (la limite mensuelle est atteinte, ou l’équipe a mis la collecte en pause)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Pourquoi la collecte est en pause : limit (le quota mensuel est atteint) ou staff. null lorsque la collecte est active"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’équipe a mis la collecte en pause"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Fin d’une pause due à la limite : le début du mois suivant (UTC), ou plus tôt en cas de passage à un forfait supérieur. null sinon"
},
{
"type": "null"
}
]
}
},
"description": "Ce mois-ci jusqu’à présent"
}
}
}
POST
/workspaces/:workspace_id/billing/checkout.json
Démarrer un paiement Paddle pour un forfait payant
billing_checkout
Permission : billing.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/checkout.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"description": "Forfait de destination : pro ou business",
"enum": [
"pro",
"business"
]
},
"events": {
"type": "integer",
"description": "Événements mensuels du palier, depuis GET /plans",
"examples": [
1000000
]
},
"interval": {
"type": "string",
"description": "Intervalle de facturation. L’annuel offre 2 mois",
"enum": [
"month",
"year"
],
"default": "month"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"plan",
"events",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"transaction_id": {
"type": "string",
"description": "Identifiant de transaction Paddle (txn_...)"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "URL du paiement hébergé"
},
{
"type": "null"
}
]
},
"price_id": {
"type": "string"
},
"plan": {
"type": "string"
},
"events": {
"type": "integer"
},
"interval": {
"type": "string"
},
"amount": {
"type": "integer",
"description": "USD par intervalle"
},
"client_token": {
"anyOf": [
{
"type": "string",
"description": "Jeton côté client Paddle.js"
},
{
"type": "null"
}
]
},
"environment": {
"type": "string",
"description": "sandbox ou production"
},
"custom_data": {
"type": "object",
"description": "Transmis à Paddle pour lier l’abonnement"
},
"discount_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant de remise Paddle d’un programme approuvé, appliqué à ce paiement"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces/:workspace_id/billing/discount.json
Demander une remise pour association, éducation ou open source
billing_discount
Permission : billing.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/discount.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source (50 % de réduction), open_source_free (Pro gratuit jusqu’à 1M d’événements par mois) ou agency (20 % de réduction sur chaque espace de travail que vous possédez)",
"enum": [
"nonprofit",
"education",
"open_source",
"open_source_free",
"agency"
]
},
"organization_name": {
"type": "string",
"description": "Nom de l’organisation, de l’établissement, du projet ou de l’agence"
},
"website": {
"type": "string",
"description": "Son site web"
},
"proof_url": {
"type": "string",
"description": "Lien justificatif. Pour l’open source, l’URL du dépôt"
},
"license": {
"type": "string",
"description": "Licence OSI du projet (open source uniquement)"
},
"note": {
"type": "string",
"description": "Tout ce qui peut aider l’examen, jusqu’à 1 000 caractères"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"program",
"organization_name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source, open_source_free ou agency"
},
"status": {
"type": "string",
"description": "pending, approved (pas encore appliqué à l’abonnement), active, rejected ou revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business (null pour le programme open source gratuit)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Événements gratuits par mois (programme open source gratuit uniquement)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Nom de l’organisation, de l’établissement, du projet ou de l’agence"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Site web"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Lien justificatif ou URL du dépôt"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "Licence OSI (open source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Note pour l’examen"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Motif pour lequel la candidature n’a pas été approuvée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date de la candidature"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de l’examen"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Remise active depuis"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de fin du programme"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces/:workspace_id/billing/payment_method.json
Obtenir un lien pour mettre à jour le moyen de paiement
billing_payment_method
Permission : billing.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/payment_method.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "portal, payment_method ou invoice"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "URL Paddle de courte durée"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces/:workspace_id/billing/portal.json
Obtenir un lien vers le portail client Paddle
billing_portal
Permission : billing.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/portal.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "portal, payment_method ou invoice"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "URL Paddle de courte durée"
},
{
"type": "null"
}
]
}
}
}
GET
/workspaces/:workspace_id/billing/preview.json
Prévisualiser un changement de forfait avec le prorata
billing_preview
Permission : billing.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/preview.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"description": "Forfait de destination : pro ou business",
"enum": [
"pro",
"business"
]
},
"events": {
"type": "integer",
"description": "Événements mensuels du palier, depuis GET /plans",
"examples": [
1000000
]
},
"interval": {
"type": "string",
"description": "Intervalle de facturation. L’annuel offre 2 mois",
"enum": [
"month",
"year"
],
"default": "month"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"plan",
"events",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"plan": {
"type": "string"
},
"events": {
"type": "integer"
},
"interval": {
"type": "string"
},
"price_id": {
"type": "string"
},
"amount": {
"type": "integer",
"description": "Nouveau prix en USD par intervalle"
},
"currency": {
"type": "string"
},
"charge_minor": {
"type": "integer",
"description": "Facturé maintenant, en unités mineures"
},
"credit_minor": {
"type": "integer",
"description": "Crédit pour le temps non utilisé, en unités mineures"
},
"result_action": {
"anyOf": [
{
"type": "string",
"description": "charge ou credit"
},
{
"type": "null"
}
]
},
"result_minor": {
"type": "integer",
"description": "Débit ou crédit net, en unités mineures"
},
"next_billed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Utilisation ou limites que le nouveau forfait ne couvrirait pas"
}
}
}
POST
/workspaces/:workspace_id/billing/resume.json
Annuler une résiliation programmée ou reprendre une pause
billing_resume
Permission : billing.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/resume.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements mensuels du palier payant"
},
"allowance": {
"type": "integer",
"description": "Événements mensuels, bonus du badge inclus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month ou year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD par intervalle de facturation"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused ou canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Renouvellement ou fin le"
},
{
"type": "null"
}
]
},
"cancel_at_period_end": {
"type": "boolean"
},
"canceled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"auto_upgrade": {
"type": "boolean"
},
"discount": {
"anyOf": [
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source, open_source_free ou agency"
},
"status": {
"type": "string",
"description": "pending, approved (pas encore appliqué à l’abonnement), active, rejected ou revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business (null pour le programme open source gratuit)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Événements gratuits par mois (programme open source gratuit uniquement)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Nom de l’organisation, de l’établissement, du projet ou de l’agence"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Site web"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Lien justificatif ou URL du dépôt"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "Licence OSI (open source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Note pour l’examen"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Motif pour lequel la candidature n’a pas été approuvée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date de la candidature"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de l’examen"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Remise active depuis"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de fin du programme"
},
{
"type": "null"
}
]
}
},
"description": "La dernière candidature à un programme de remise, ou null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business issu d’un programme approuvé, ou null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Bonus du badge (forfait gratuit)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Premier jour du mois concerné"
},
"events": {
"type": "integer",
"description": "Événements facturables (pages vues et événements personnalisés)"
},
"bots": {
"type": "integer",
"description": "Hits de bots filtrés (non facturés)"
},
"allowance": {
"type": "integer",
"description": "Événements inclus, avec l’éventuel bonus du badge"
},
"percent": {
"type": "number",
"description": "Événements en pourcentage du quota"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Événements prévus en fin de mois"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Jours restants dans le mois"
},
"status": {
"type": "string",
"description": "ok, warning (80 % et plus), over (un mois passé ayant atteint ou dépassé le quota), locked ou paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pages vues et événements personnalisés ce mois-ci"
},
"share": {
"type": "number",
"description": "Pourcentage du total de l’espace de travail"
}
}
},
"description": "Événements par site"
},
"history": {
"type": "array",
"description": "Mois précédents, les plus récents en premier"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Tableaux de bord verrouillés par l’équipe Privatus Analytics depuis"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True tant que les nouveaux événements sont ignorés (la limite mensuelle est atteinte, ou l’équipe a mis la collecte en pause)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Pourquoi la collecte est en pause : limit (le quota mensuel est atteint) ou staff. null lorsque la collecte est active"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’équipe a mis la collecte en pause"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Fin d’une pause due à la limite : le début du mois suivant (UTC), ou plus tôt en cas de passage à un forfait supérieur. null sinon"
},
{
"type": "null"
}
]
}
},
"description": "Ce mois-ci jusqu’à présent"
}
}
}
GET
/workspaces/:workspace_id/billing.json
Obtenir le forfait, l’abonnement et l’utilisation
billing_get
Permission : billing.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/billing.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements mensuels du palier payant"
},
"allowance": {
"type": "integer",
"description": "Événements mensuels, bonus du badge inclus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month ou year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD par intervalle de facturation"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused ou canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Renouvellement ou fin le"
},
{
"type": "null"
}
]
},
"cancel_at_period_end": {
"type": "boolean"
},
"canceled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"auto_upgrade": {
"type": "boolean"
},
"discount": {
"anyOf": [
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source, open_source_free ou agency"
},
"status": {
"type": "string",
"description": "pending, approved (pas encore appliqué à l’abonnement), active, rejected ou revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business (null pour le programme open source gratuit)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Événements gratuits par mois (programme open source gratuit uniquement)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Nom de l’organisation, de l’établissement, du projet ou de l’agence"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Site web"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Lien justificatif ou URL du dépôt"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "Licence OSI (open source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Note pour l’examen"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Motif pour lequel la candidature n’a pas été approuvée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date de la candidature"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de l’examen"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Remise active depuis"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de fin du programme"
},
{
"type": "null"
}
]
}
},
"description": "La dernière candidature à un programme de remise, ou null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business issu d’un programme approuvé, ou null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Bonus du badge (forfait gratuit)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Premier jour du mois concerné"
},
"events": {
"type": "integer",
"description": "Événements facturables (pages vues et événements personnalisés)"
},
"bots": {
"type": "integer",
"description": "Hits de bots filtrés (non facturés)"
},
"allowance": {
"type": "integer",
"description": "Événements inclus, avec l’éventuel bonus du badge"
},
"percent": {
"type": "number",
"description": "Événements en pourcentage du quota"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Événements prévus en fin de mois"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Jours restants dans le mois"
},
"status": {
"type": "string",
"description": "ok, warning (80 % et plus), over (un mois passé ayant atteint ou dépassé le quota), locked ou paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pages vues et événements personnalisés ce mois-ci"
},
"share": {
"type": "number",
"description": "Pourcentage du total de l’espace de travail"
}
}
},
"description": "Événements par site"
},
"history": {
"type": "array",
"description": "Mois précédents, les plus récents en premier"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Tableaux de bord verrouillés par l’équipe Privatus Analytics depuis"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True tant que les nouveaux événements sont ignorés (la limite mensuelle est atteinte, ou l’équipe a mis la collecte en pause)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Pourquoi la collecte est en pause : limit (le quota mensuel est atteint) ou staff. null lorsque la collecte est active"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’équipe a mis la collecte en pause"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Fin d’une pause due à la limite : le début du mois suivant (UTC), ou plus tôt en cas de passage à un forfait supérieur. null sinon"
},
{
"type": "null"
}
]
}
},
"description": "Ce mois-ci jusqu’à présent"
}
}
}
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
Permission : billing.manage
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/billing.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"billing_emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "Adresses supplémentaires pour les factures et avis de facturation (jusqu’à 5)"
},
"tax_id": {
"type": "string",
"description": "Numéro de TVA/taxe affiché sur les factures"
},
"auto_upgrade": {
"type": "boolean",
"description": "true pour passer au palier suivant et facturer la différence lorsque la limite mensuelle est atteinte, au lieu de mettre la collecte en pause. Désactivé par défaut"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"plan_events": {
"type": "integer",
"description": "Événements mensuels du palier payant"
},
"allowance": {
"type": "integer",
"description": "Événements mensuels, bonus du badge inclus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month ou year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD par intervalle de facturation"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused ou canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Renouvellement ou fin le"
},
{
"type": "null"
}
]
},
"cancel_at_period_end": {
"type": "boolean"
},
"canceled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"auto_upgrade": {
"type": "boolean"
},
"discount": {
"anyOf": [
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source, open_source_free ou agency"
},
"status": {
"type": "string",
"description": "pending, approved (pas encore appliqué à l’abonnement), active, rejected ou revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business (null pour le programme open source gratuit)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Événements gratuits par mois (programme open source gratuit uniquement)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Nom de l’organisation, de l’établissement, du projet ou de l’agence"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Site web"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Lien justificatif ou URL du dépôt"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "Licence OSI (open source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Note pour l’examen"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Motif pour lequel la candidature n’a pas été approuvée"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date de la candidature"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de l’examen"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Remise active depuis"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de fin du programme"
},
{
"type": "null"
}
]
}
},
"description": "La dernière candidature à un programme de remise, ou null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Pourcentage de réduction sur Pro et Business issu d’un programme approuvé, ou null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Bonus du badge (forfait gratuit)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Premier jour du mois concerné"
},
"events": {
"type": "integer",
"description": "Événements facturables (pages vues et événements personnalisés)"
},
"bots": {
"type": "integer",
"description": "Hits de bots filtrés (non facturés)"
},
"allowance": {
"type": "integer",
"description": "Événements inclus, avec l’éventuel bonus du badge"
},
"percent": {
"type": "number",
"description": "Événements en pourcentage du quota"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Événements prévus en fin de mois"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Jours restants dans le mois"
},
"status": {
"type": "string",
"description": "ok, warning (80 % et plus), over (un mois passé ayant atteint ou dépassé le quota), locked ou paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pages vues et événements personnalisés ce mois-ci"
},
"share": {
"type": "number",
"description": "Pourcentage du total de l’espace de travail"
}
}
},
"description": "Événements par site"
},
"history": {
"type": "array",
"description": "Mois précédents, les plus récents en premier"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Tableaux de bord verrouillés par l’équipe Privatus Analytics depuis"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True tant que les nouveaux événements sont ignorés (la limite mensuelle est atteinte, ou l’équipe a mis la collecte en pause)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Pourquoi la collecte est en pause : limit (le quota mensuel est atteint) ou staff. null lorsque la collecte est active"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’équipe a mis la collecte en pause"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Fin d’une pause due à la limite : le début du mois suivant (UTC), ou plus tôt en cas de passage à un forfait supérieur. null sinon"
},
{
"type": "null"
}
]
}
},
"description": "Ce mois-ci jusqu’à présent"
}
}
}
GET
/workspaces/:workspace_id/billing/usage.json
Obtenir l’utilisation du mois, la prévision et la répartition par site
billing_usage
Permission : billing.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/usage.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "N’importe quel jour du mois à rapporter (par défaut ce mois-ci)",
"examples": [
"2026-09-01"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Premier jour du mois concerné"
},
"events": {
"type": "integer",
"description": "Événements facturables (pages vues et événements personnalisés)"
},
"bots": {
"type": "integer",
"description": "Hits de bots filtrés (non facturés)"
},
"allowance": {
"type": "integer",
"description": "Événements inclus, avec l’éventuel bonus du badge"
},
"percent": {
"type": "number",
"description": "Événements en pourcentage du quota"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Événements prévus en fin de mois"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Jours restants dans le mois"
},
"status": {
"type": "string",
"description": "ok, warning (80 % et plus), over (un mois passé ayant atteint ou dépassé le quota), locked ou paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pages vues et événements personnalisés ce mois-ci"
},
"share": {
"type": "number",
"description": "Pourcentage du total de l’espace de travail"
}
}
},
"description": "Événements par site"
},
"history": {
"type": "array",
"description": "Mois précédents, les plus récents en premier"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Tableaux de bord verrouillés par l’équipe Privatus Analytics depuis"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True tant que les nouveaux événements sont ignorés (la limite mensuelle est atteinte, ou l’équipe a mis la collecte en pause)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Pourquoi la collecte est en pause : limit (le quota mensuel est atteint) ou staff. null lorsque la collecte est active"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’équipe a mis la collecte en pause"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Fin d’une pause due à la limite : le début du mois suivant (UTC), ou plus tôt en cas de passage à un forfait supérieur. null sinon"
},
{
"type": "null"
}
]
}
}
}
GET
/workspaces/:workspace_id/billing/invoices.json
Lister les factures
billing_invoices_list
Permission : billing.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/invoices.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de transaction Paddle"
},
"invoice_number": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "paid, completed, payment_failed, ..."
},
"amount_minor": {
"type": "integer",
"description": "Total en unités mineures (centimes)"
},
"currency": {
"type": "string"
},
"billed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
}
}
}
GET
/workspaces/:workspace_id/billing/invoices/:id.json
Obtenir le lien PDF d’une facture
billing_invoices_get
Permission : billing.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/invoices/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "portal, payment_method ou invoice"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "URL Paddle de courte durée"
},
{
"type": "null"
}
]
}
}
}
Forfaits
GET
/plans.json
Lister les forfaits, prix et limites
plans_list
Permission : public
curl https://privatusanalytics.com/plans.json
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "free, pro, business ou enterprise"
},
"events": {
"anyOf": [
{
"type": "integer",
"description": "Événements mensuels inclus (forfait gratuit uniquement)"
},
{
"type": "null"
}
]
},
"badge_bonus": {
"anyOf": [
{
"type": "integer",
"description": "Événements mensuels supplémentaires pour l’affichage du badge (forfait gratuit)"
},
{
"type": "null"
}
]
},
"limits": {
"type": "object",
"description": "Limites du forfait. Null signifie illimité"
},
"tiers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"events": {
"type": "integer",
"description": "Événements mensuels inclus"
},
"monthly": {
"type": "integer",
"description": "USD par mois, facturé mensuellement"
},
"yearly": {
"type": "integer",
"description": "USD par an, facturé annuellement (2 mois offerts)"
},
"monthly_price_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant de prix Paddle (mensuel)"
},
{
"type": "null"
}
]
},
"yearly_price_id": {
"anyOf": [
{
"type": "string",
"description": "Identifiant de prix Paddle (annuel)"
},
{
"type": "null"
}
]
}
}
},
"description": "Échelle de prix par événements mensuels"
},
"contact_sales": {
"type": "boolean",
"description": "Tarifé par contrat"
}
}
}
}
Imports
GET
/sites/:site_id/imports/google/properties.json
Lister les propriétés Google Analytics 4 à importer
imports_google_properties
Permission : sites.manage
curl https://privatusanalytics.com/sites/:site_id/imports/google/properties.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/sites/:site_id/imports.json
Démarrer un import (propriété GA4 ou envoi de CSV)
imports_create
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/imports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "ga4 (API Google Analytics 4) ou l’outil dont vous envoyez l’export CSV",
"enum": [
"ga4",
"universal_analytics",
"fathom",
"simple_analytics",
"plausible",
"matomo",
"umami",
"clicky"
]
},
"property_id": {
"type": "string",
"description": "Propriété GA4, par ex. properties/123 (voir imports_google_properties). Obligatoire pour ga4",
"examples": [
"properties/123456789"
]
},
"date_from": {
"type": "string",
"format": "date",
"description": "Premier jour à importer. Obligatoire pour ga4. Pour les fichiers CSV sans colonne de date, chaque ligne est datée de ce jour"
},
"date_to": {
"type": "string",
"format": "date",
"description": "Dernier jour à importer (ga4 utilise par défaut la veille de votre premier événement suivi, ou hier)"
},
"file": {
"type": "string",
"format": "binary",
"description": "Export CSV (envoi multipart, 50 Mo maximum). Obligatoire pour les sources CSV"
},
"dimension": {
"type": "string",
"description": "Ce que les lignes du CSV ventilent (remplace la détection, nécessaire pour les exports « Label » de Matomo)",
"enum": [
"total",
"page",
"source",
"country",
"device",
"browser",
"os"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"source",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’import"
},
"site_id": {
"type": "string"
},
"source": {
"type": "string",
"description": "ga4, universal_analytics, fathom, simple_analytics, plausible, matomo, umami ou clicky"
},
"status": {
"type": "string",
"description": "queued, running, complete ou failed"
},
"date_from": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Premier jour importé"
},
{
"type": "null"
}
]
},
"date_to": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Dernier jour importé"
},
{
"type": "null"
}
]
},
"rows_imported": {
"type": "integer",
"description": "Lignes quotidiennes stockées"
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Motif de l’échec de l’import"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/imports/:id.json
Supprimer un import et toutes ses données importées
imports_delete
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/imports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’import"
},
"site_id": {
"type": "string"
},
"source": {
"type": "string",
"description": "ga4, universal_analytics, fathom, simple_analytics, plausible, matomo, umami ou clicky"
},
"status": {
"type": "string",
"description": "queued, running, complete ou failed"
},
"date_from": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Premier jour importé"
},
{
"type": "null"
}
]
},
"date_to": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Dernier jour importé"
},
{
"type": "null"
}
]
},
"rows_imported": {
"type": "integer",
"description": "Lignes quotidiennes stockées"
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Motif de l’échec de l’import"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/imports.json
Lister les imports d’un site
imports_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/imports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Uniquement les imports avec ce statut",
"enum": [
"queued",
"running",
"complete",
"failed"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’import"
},
"site_id": {
"type": "string"
},
"source": {
"type": "string",
"description": "ga4, universal_analytics, fathom, simple_analytics, plausible, matomo, umami ou clicky"
},
"status": {
"type": "string",
"description": "queued, running, complete ou failed"
},
"date_from": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Premier jour importé"
},
{
"type": "null"
}
]
},
"date_to": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Dernier jour importé"
},
{
"type": "null"
}
]
},
"rows_imported": {
"type": "integer",
"description": "Lignes quotidiennes stockées"
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Motif de l’échec de l’import"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/sites/:site_id/imports/:id.json
Obtenir un import et son statut
imports_get
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/imports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’import"
},
"site_id": {
"type": "string"
},
"source": {
"type": "string",
"description": "ga4, universal_analytics, fathom, simple_analytics, plausible, matomo, umami ou clicky"
},
"status": {
"type": "string",
"description": "queued, running, complete ou failed"
},
"date_from": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Premier jour importé"
},
{
"type": "null"
}
]
},
"date_to": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Dernier jour importé"
},
{
"type": "null"
}
]
},
"rows_imported": {
"type": "integer",
"description": "Lignes quotidiennes stockées"
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Motif de l’échec de l’import"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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
Permission : member
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/api_tokens.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Un nom pour reconnaître le jeton",
"examples": [
"CI deploys"
]
},
"permissions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"analytics.read",
"analytics.export",
"content.write",
"sites.manage",
"uptime.manage",
"members.manage",
"tokens.manage",
"billing.manage",
"workspace.manage"
]
},
"description": "Permissions (omettez pour toutes les vôtres, une liste vide est refusée)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restreindre à ces identifiants de site (pa_…). Vide = tous",
"default": []
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Date d’expiration (ISO 8601). Vide = jamais"
},
"allowed_ips": {
"type": "array",
"items": {
"type": "string"
},
"description": "Accepter uniquement les requêtes provenant de ces IP/CIDR",
"default": []
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"token": {
"anyOf": [
{
"type": "string",
"description": "Le jeton lui-même : renvoyé uniquement à la création"
},
{
"type": "null"
}
]
},
"token_prefix": {
"type": "string",
"description": "Premiers caractères, pour reconnaître le jeton"
},
"owner": {
"type": "string",
"description": "E-mail du membre à qui il appartient"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
}
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restreint à ces sites (vide = tous)"
},
"allowed_ips": {
"type": "array",
"items": {
"type": "string"
}
},
"oauth_client": {
"anyOf": [
{
"type": "string",
"description": "Client MCP qui l’a reçu"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "active, expired ou revoked"
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:workspace_id/api_tokens/:id.json
Révoquer un jeton d’API
api_tokens_delete
Permission : member
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/api_tokens/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"token": {
"anyOf": [
{
"type": "string",
"description": "Le jeton lui-même : renvoyé uniquement à la création"
},
{
"type": "null"
}
]
},
"token_prefix": {
"type": "string",
"description": "Premiers caractères, pour reconnaître le jeton"
},
"owner": {
"type": "string",
"description": "E-mail du membre à qui il appartient"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
}
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restreint à ces sites (vide = tous)"
},
"allowed_ips": {
"type": "array",
"items": {
"type": "string"
}
},
"oauth_client": {
"anyOf": [
{
"type": "string",
"description": "Client MCP qui l’a reçu"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "active, expired ou revoked"
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/api_tokens.json
Lister les jetons d’API
api_tokens_list
Permission : member
curl https://privatusanalytics.com/workspaces/:workspace_id/api_tokens.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"include_revoked": {
"type": "boolean",
"description": "Lister aussi les jetons révoqués et expirés",
"default": false
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"token": {
"anyOf": [
{
"type": "string",
"description": "Le jeton lui-même : renvoyé uniquement à la création"
},
{
"type": "null"
}
]
},
"token_prefix": {
"type": "string",
"description": "Premiers caractères, pour reconnaître le jeton"
},
"owner": {
"type": "string",
"description": "E-mail du membre à qui il appartient"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
}
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restreint à ces sites (vide = tous)"
},
"allowed_ips": {
"type": "array",
"items": {
"type": "string"
}
},
"oauth_client": {
"anyOf": [
{
"type": "string",
"description": "Client MCP qui l’a reçu"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "active, expired ou revoked"
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
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
Permission : workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/audit_log.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"actor": {
"type": "string",
"description": "Uniquement les modifications de ce membre (e-mail)"
},
"item_type": {
"type": "string",
"description": "Uniquement ce type d’enregistrement, par ex. Site"
},
"event": {
"type": "string",
"description": "Uniquement cette action",
"enum": [
"create",
"update",
"destroy"
]
},
"from": {
"type": "string",
"format": "date",
"description": "À partir de la date (incluse)"
},
"to": {
"type": "string",
"format": "date",
"description": "Jusqu’à la date (incluse)"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Quand"
},
"event": {
"type": "string",
"description": "create, update ou destroy"
},
"item_type": {
"type": "string",
"description": "Type d’enregistrement, par ex. Site"
},
"item_id": {
"type": "string",
"format": "uuid"
},
"target": {
"type": "string",
"description": "L’enregistrement, par son nom lorsqu’il est connu"
},
"actor_email": {
"anyOf": [
{
"type": "string",
"description": "Membre qui a effectué la modification"
},
{
"type": "null"
}
]
},
"actor_name": {
"type": "string"
},
"token_name": {
"anyOf": [
{
"type": "string",
"description": "Jeton d’API utilisé, le cas échéant"
},
{
"type": "null"
}
]
},
"changes": {
"type": "object",
"description": "Champs modifiés : { field: [avant, après] }"
},
"ip": {
"anyOf": [
{
"type": "string",
"description": "L’adresse IP du membre"
},
{
"type": "null"
}
]
}
}
}
}
Membres
POST
/workspaces/:workspace_id/invitations.json
Inviter des personnes par e-mail
invitations_create
Permission : members.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/invitations.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "Adresses e-mail à inviter"
},
"role": {
"type": "string",
"description": "Rôle des nouveaux membres (custom nécessite custom_role_id)",
"enum": [
"admin",
"editor",
"analyst",
"viewer",
"billing",
"custom"
],
"default": "viewer"
},
"custom_role_id": {
"type": "string",
"description": "Identifiant du rôle personnalisé (Business)"
},
"all_sites": {
"type": "boolean",
"description": "Accès à tous les sites, y compris futurs",
"default": true
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites (pa_…) lorsque all_sites est false",
"default": []
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"emails",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"email": {
"type": "string"
},
"role": {
"type": "string"
},
"custom_role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"invited_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:workspace_id/invitations/:id.json
Révoquer une invitation en attente
invitations_delete
Permission : members.manage
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/invitations/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"email": {
"type": "string"
},
"role": {
"type": "string"
},
"custom_role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"invited_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/invitations.json
Lister les invitations en attente
invitations_list
Permission : members.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/invitations.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"email": {
"type": "string"
},
"role": {
"type": "string"
},
"custom_role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"invited_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
DELETE
/workspaces/:workspace_id/members/:id.json
Retirer un membre (ou quitter l’espace de travail)
members_delete
Permission : member
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/members/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du membre (à utiliser pour le modifier ou le retirer)"
},
"email": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"description": "owner, admin, editor, analyst, viewer, billing ou custom"
},
"custom_role": {
"anyOf": [
{
"type": "string",
"description": "Nom du rôle personnalisé"
},
{
"type": "null"
}
]
},
"custom_role_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean",
"description": "Accès à tous les sites"
},
"include_future_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites lorsque all_sites est false"
},
"two_factor": {
"type": "boolean",
"description": "A la 2FA ou une clé d’accès"
},
"last_active_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date d’arrivée"
}
}
}
GET
/workspaces/:workspace_id/members.json
Lister les membres de l’espace de travail
members_list
Permission : member
curl https://privatusanalytics.com/workspaces/:workspace_id/members.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Filtrer par nom ou e-mail"
},
"role": {
"type": "string",
"description": "Uniquement les membres ayant ce rôle",
"enum": [
"owner",
"admin",
"editor",
"analyst",
"viewer",
"billing",
"custom"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du membre (à utiliser pour le modifier ou le retirer)"
},
"email": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"description": "owner, admin, editor, analyst, viewer, billing ou custom"
},
"custom_role": {
"anyOf": [
{
"type": "string",
"description": "Nom du rôle personnalisé"
},
{
"type": "null"
}
]
},
"custom_role_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean",
"description": "Accès à tous les sites"
},
"include_future_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites lorsque all_sites est false"
},
"two_factor": {
"type": "boolean",
"description": "A la 2FA ou une clé d’accès"
},
"last_active_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date d’arrivée"
}
}
}
}
PATCH
/workspaces/:workspace_id/members/:id.json
Modifier le rôle ou l’accès aux sites d’un membre
members_update
Permission : members.manage
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/members/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"role": {
"type": "string",
"description": "Nouveau rôle (custom nécessite custom_role_id)",
"enum": [
"admin",
"editor",
"analyst",
"viewer",
"billing",
"custom"
]
},
"custom_role_id": {
"type": "string",
"description": "Identifiant du rôle personnalisé (Business)"
},
"all_sites": {
"type": "boolean",
"description": "Accès à tous les sites, y compris futurs"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites (pa_…) lorsque all_sites est false"
},
"include_future_sites": {
"type": "boolean",
"description": "Accorder aussi l’accès aux sites ajoutés plus tard"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du membre (à utiliser pour le modifier ou le retirer)"
},
"email": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"description": "owner, admin, editor, analyst, viewer, billing ou custom"
},
"custom_role": {
"anyOf": [
{
"type": "string",
"description": "Nom du rôle personnalisé"
},
{
"type": "null"
}
]
},
"custom_role_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean",
"description": "Accès à tous les sites"
},
"include_future_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites lorsque all_sites est false"
},
"two_factor": {
"type": "boolean",
"description": "A la 2FA ou une clé d’accès"
},
"last_active_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date d’arrivée"
}
}
}
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
Permission : member
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/ownership_transfer.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"membership_id": {
"type": "string",
"description": "Identifiant du membre qui devient propriétaire"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"membership_id",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du membre (à utiliser pour le modifier ou le retirer)"
},
"email": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"description": "owner, admin, editor, analyst, viewer, billing ou custom"
},
"custom_role": {
"anyOf": [
{
"type": "string",
"description": "Nom du rôle personnalisé"
},
{
"type": "null"
}
]
},
"custom_role_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean",
"description": "Accès à tous les sites"
},
"include_future_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites lorsque all_sites est false"
},
"two_factor": {
"type": "boolean",
"description": "A la 2FA ou une clé d’accès"
},
"last_active_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Date d’arrivée"
}
}
}
Notes
POST
/sites/:site_id/notes.json
Ajouter une note à un site (utilisez la source "deploy" pour les webhooks de version)
notes_create
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/notes.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "Jour de la note (fuseau horaire du site). Par défaut aujourd’hui"
},
"end_date": {
"type": "string",
"format": "date",
"description": "Dernier jour, pour une plage de dates"
},
"title": {
"type": "string",
"description": "Titre court affiché sur les graphiques",
"examples": [
"Launched new pricing"
]
},
"body": {
"type": "string",
"description": "Détails (Markdown)"
},
"url": {
"type": "string",
"description": "Lien, par ex. une PR ou un journal des modifications"
},
"color": {
"type": "string",
"description": "Couleur de l’épingle",
"enum": [
"neutral",
"brand",
"blue",
"amber",
"red",
"violet"
]
},
"source": {
"type": "string",
"description": "manual, ou deploy pour les webhooks de version",
"enum": [
"manual",
"deploy",
"system",
"import",
"incident"
],
"default": "manual"
},
"version": {
"type": "string",
"description": "Déploiements : version ou commit, utilisé pour le titre par défaut"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/notes/:id.json
Supprimer une note
notes_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/sites/:site_id/notes/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/notes.json
Lister les notes d’un site (y compris les notes de l’espace de travail)
notes_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/notes.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"from": {
"type": "string",
"format": "date",
"description": "Uniquement les notes à partir de cette date"
},
"to": {
"type": "string",
"format": "date",
"description": "Uniquement les notes jusqu’à cette date"
},
"source": {
"type": "string",
"description": "Uniquement les notes de cette source",
"enum": [
"manual",
"deploy",
"system",
"import",
"incident"
]
},
"query": {
"type": "string",
"description": "Rechercher dans le titre, le contenu et le lien"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/sites/:site_id/notes/:id.json
Obtenir une note
notes_get
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/notes/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:site_id/notes/:id.json
Modifier une note
notes_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/sites/:site_id/notes/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "Jour de la note"
},
"end_date": {
"type": "string",
"format": "date",
"description": "Dernier jour, pour une plage de dates"
},
"title": {
"type": "string",
"description": "Titre court affiché sur les graphiques"
},
"body": {
"type": "string",
"description": "Détails (Markdown)"
},
"url": {
"type": "string",
"description": "Lien"
},
"color": {
"type": "string",
"description": "Couleur de l’épingle",
"enum": [
"neutral",
"brand",
"blue",
"amber",
"red",
"violet"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/workspaces/:workspace_id/notes.json
Ajouter une note pour tout l’espace de travail (affichée sur chaque site)
workspace_notes_create
Permission : content.write
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/notes.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "Jour de la note (fuseau horaire du site). Par défaut aujourd’hui"
},
"end_date": {
"type": "string",
"format": "date",
"description": "Dernier jour, pour une plage de dates"
},
"title": {
"type": "string",
"description": "Titre court affiché sur les graphiques",
"examples": [
"Launched new pricing"
]
},
"body": {
"type": "string",
"description": "Détails (Markdown)"
},
"url": {
"type": "string",
"description": "Lien, par ex. une PR ou un journal des modifications"
},
"color": {
"type": "string",
"description": "Couleur de l’épingle",
"enum": [
"neutral",
"brand",
"blue",
"amber",
"red",
"violet"
]
},
"source": {
"type": "string",
"description": "manual, ou deploy pour les webhooks de version",
"enum": [
"manual",
"deploy",
"system",
"import",
"incident"
],
"default": "manual"
},
"version": {
"type": "string",
"description": "Déploiements : version ou commit, utilisé pour le titre par défaut"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:workspace_id/notes/:id.json
Supprimer une note de l’espace de travail
workspace_notes_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/notes/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/notes.json
Lister les notes d’un espace de travail
workspace_notes_list
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/notes.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"from": {
"type": "string",
"format": "date",
"description": "Uniquement les notes à partir de cette date"
},
"to": {
"type": "string",
"format": "date",
"description": "Uniquement les notes jusqu’à cette date"
},
"source": {
"type": "string",
"description": "Uniquement les notes de cette source",
"enum": [
"manual",
"deploy",
"system",
"import",
"incident"
]
},
"query": {
"type": "string",
"description": "Rechercher dans le titre, le contenu et le lien"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
PATCH
/workspaces/:workspace_id/notes/:id.json
Modifier une note de l’espace de travail
workspace_notes_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/notes/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "Jour de la note"
},
"end_date": {
"type": "string",
"format": "date",
"description": "Dernier jour, pour une plage de dates"
},
"title": {
"type": "string",
"description": "Titre court affiché sur les graphiques"
},
"body": {
"type": "string",
"description": "Détails (Markdown)"
},
"url": {
"type": "string",
"description": "Lien"
},
"color": {
"type": "string",
"description": "Couleur de l’épingle",
"enum": [
"neutral",
"brand",
"blue",
"amber",
"red",
"violet"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de note, par ex. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Site, ou null pour les notes de l’espace de travail"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string",
"description": "Markdown"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"color": {
"type": "string",
"description": "neutral, brand, blue, amber, red, violet"
},
"source": {
"type": "string",
"description": "manual, deploy, system, import, incident"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Objectifs
POST
/sites/:site_id/goals/:id/archive.json
Archiver un objectif (masqué dans les rapports)
goals_archive
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/archive.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’objectif, par ex. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound ou download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob ou regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Restriction de nom d’hôte (objectifs page)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Conditions sur les propriétés de l’événement"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : % de défilement"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : secondes sur la page"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed ou revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Valeur fixe en unités mineures"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit ou every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Événements correspondants, répétitions comprises"
},
"conversions": {
"type": "integer",
"description": "Visites avec au moins une réalisation"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ visites (ou ÷ visiteurs, selon le paramètre du site), %"
},
"value": {
"type": "integer",
"description": "Valeur de l’objectif en unités mineures de la devise du site"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Variation des conversions par rapport à la période précédente, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/goals.json
Créer un objectif
goals_create
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/goals.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom de l’objectif",
"examples": [
"Signed up"
]
},
"kind": {
"type": "string",
"description": "page (visite d’une page), event (événement personnalisé), engagement (défilement ou temps sur la page), outbound (clic sur un lien sortant) ou download (téléchargement de fichier)",
"enum": [
"page",
"event",
"engagement",
"outbound",
"download"
]
},
"match_type": {
"type": "string",
"description": "Comment pattern correspond au chemin (page, engagement), au domaine du lien (outbound) ou au fichier (download) : exact, prefix, glob (*) ou regex",
"enum": [
"exact",
"prefix",
"glob",
"regex"
],
"default": "exact"
},
"pattern": {
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier, par ex. /pricing, /blog/*, stripe.com ou *.pdf"
},
"hostname": {
"type": "string",
"description": "Ne compter que les pages de ce nom d’hôte (objectifs page)"
},
"event_name": {
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Conditions sur les propriétés de l’événement : [{\"key\": \"plan\", \"operator\": \"is|is_not|contains|gt|lt\", \"value\": \"pro\"}]",
"default": []
},
"scroll_threshold": {
"type": "integer",
"description": "Engagement : % de profondeur de défilement à atteindre"
},
"time_threshold_seconds": {
"type": "integer",
"description": "Engagement : secondes sur la page"
},
"value_mode": {
"type": "string",
"description": "none, fixed (fixed_value par conversion) ou revenue (le revenu de l’événement)",
"enum": [
"none",
"fixed",
"revenue"
],
"default": "none"
},
"fixed_value": {
"type": "number",
"description": "Valeur fixe par conversion dans la devise du site, par ex. 50.0"
},
"count_mode": {
"type": "string",
"description": "La valeur compte once_per_visit ou à chaque réalisation",
"enum": [
"once_per_visit",
"every"
],
"default": "once_per_visit"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"kind",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’objectif, par ex. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound ou download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob ou regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Restriction de nom d’hôte (objectifs page)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Conditions sur les propriétés de l’événement"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : % de défilement"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : secondes sur la page"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed ou revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Valeur fixe en unités mineures"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit ou every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Événements correspondants, répétitions comprises"
},
"conversions": {
"type": "integer",
"description": "Visites avec au moins une réalisation"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ visites (ou ÷ visiteurs, selon le paramètre du site), %"
},
"value": {
"type": "integer",
"description": "Valeur de l’objectif en unités mineures de la devise du site"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Variation des conversions par rapport à la période précédente, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/goals/:id.json
Supprimer un objectif (les données sont conservées)
goals_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/sites/:site_id/goals/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’objectif, par ex. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound ou download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob ou regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Restriction de nom d’hôte (objectifs page)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Conditions sur les propriétés de l’événement"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : % de défilement"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : secondes sur la page"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed ou revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Valeur fixe en unités mineures"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit ou every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Événements correspondants, répétitions comprises"
},
"conversions": {
"type": "integer",
"description": "Visites avec au moins une réalisation"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ visites (ou ÷ visiteurs, selon le paramètre du site), %"
},
"value": {
"type": "integer",
"description": "Valeur de l’objectif en unités mineures de la devise du site"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Variation des conversions par rapport à la période précédente, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/goals/:id/duplicate.json
Copier un objectif
goals_duplicate
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/duplicate.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom de la copie"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’objectif, par ex. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound ou download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob ou regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Restriction de nom d’hôte (objectifs page)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Conditions sur les propriétés de l’événement"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : % de défilement"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : secondes sur la page"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed ou revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Valeur fixe en unités mineures"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit ou every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Événements correspondants, répétitions comprises"
},
"conversions": {
"type": "integer",
"description": "Visites avec au moins une réalisation"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ visites (ou ÷ visiteurs, selon le paramètre du site), %"
},
"value": {
"type": "integer",
"description": "Valeur de l’objectif en unités mineures de la devise du site"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Variation des conversions par rapport à la période précédente, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/goals.json
Lister les objectifs avec réalisations, conversions, taux et valeur pour une période
goals_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/goals.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"status": {
"type": "string",
"description": "Objectifs active, archived ou all",
"enum": [
"active",
"archived",
"all"
],
"default": "active"
},
"page": {
"type": "integer",
"description": "Numéro de page",
"default": 1
},
"per_page": {
"type": "integer",
"description": "Objectifs par page (100 maximum)",
"default": 25
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’objectif, par ex. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound ou download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob ou regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Restriction de nom d’hôte (objectifs page)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Conditions sur les propriétés de l’événement"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : % de défilement"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : secondes sur la page"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed ou revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Valeur fixe en unités mineures"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit ou every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Événements correspondants, répétitions comprises"
},
"conversions": {
"type": "integer",
"description": "Visites avec au moins une réalisation"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ visites (ou ÷ visiteurs, selon le paramètre du site), %"
},
"value": {
"type": "integer",
"description": "Valeur de l’objectif en unités mineures de la devise du site"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Variation des conversions par rapport à la période précédente, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/sites/:site_id/goals/:id.json
Rapport d’objectif : métriques, graphique, ventilations et parcours menant à la conversion
goals_get
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/goals/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"interval": {
"type": "string",
"description": "Taille de l’intervalle du graphique",
"enum": [
"auto",
"minute",
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "auto"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"period": {
"type": "object",
"description": "from/to de la période (UTC)"
},
"goal": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’objectif, par ex. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound ou download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob ou regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Restriction de nom d’hôte (objectifs page)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Conditions sur les propriétés de l’événement"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : % de défilement"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : secondes sur la page"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed ou revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Valeur fixe en unités mineures"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit ou every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Événements correspondants, répétitions comprises"
},
"conversions": {
"type": "integer",
"description": "Visites avec au moins une réalisation"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ visites (ou ÷ visiteurs, selon le paramètre du site), %"
},
"value": {
"type": "integer",
"description": "Valeur de l’objectif en unités mineures de la devise du site"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Variation des conversions par rapport à la période précédente, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"description": "La définition de l’objectif"
},
"metrics": {
"type": "object",
"description": "completions, conversions, conversion_rate (%), value (unités mineures)"
},
"comparison_period": {
"anyOf": [
{
"type": "object",
"description": "from/to de la comparaison"
},
{
"type": "null"
}
]
},
"comparison": {
"anyOf": [
{
"type": "object",
"description": "Métriques de la période de comparaison"
},
{
"type": "null"
}
]
},
"change": {
"anyOf": [
{
"type": "object",
"description": "Variation par rapport à la comparaison, % par métrique"
},
{
"type": "null"
}
]
},
"interval": {
"type": "string",
"description": "Taille de l’intervalle du graphique"
},
"series": {
"type": "array",
"items": {
"type": "object"
},
"description": "Par intervalle : date, completions, conversions, conversion_rate"
},
"breakdowns": {
"type": "object",
"description": "Principales valeurs par conversions pour channel, utm_campaign, entry_page, country et device : value, completions, conversions, conversion_rate"
},
"journey": {
"anyOf": [
{
"type": "object",
"description": "converting_visits, median_seconds_to_convert, median_pages_before et pages_before (pages vues plus tôt dans la visite, par les visites converties)"
},
{
"type": "null"
}
]
}
}
}
POST
/sites/:site_id/goals/:id/unarchive.json
Restaurer un objectif archivé
goals_unarchive
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/unarchive.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’objectif, par ex. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound ou download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob ou regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Restriction de nom d’hôte (objectifs page)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Conditions sur les propriétés de l’événement"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : % de défilement"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : secondes sur la page"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed ou revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Valeur fixe en unités mineures"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit ou every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Événements correspondants, répétitions comprises"
},
"conversions": {
"type": "integer",
"description": "Visites avec au moins une réalisation"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ visites (ou ÷ visiteurs, selon le paramètre du site), %"
},
"value": {
"type": "integer",
"description": "Valeur de l’objectif en unités mineures de la devise du site"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Variation des conversions par rapport à la période précédente, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:site_id/goals/:id.json
Mettre à jour un objectif
goals_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/sites/:site_id/goals/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom de l’objectif",
"examples": [
"Signed up"
]
},
"kind": {
"type": "string",
"description": "page (visite d’une page), event (événement personnalisé), engagement (défilement ou temps sur la page), outbound (clic sur un lien sortant) ou download (téléchargement de fichier)",
"enum": [
"page",
"event",
"engagement",
"outbound",
"download"
]
},
"match_type": {
"type": "string",
"description": "Comment pattern correspond au chemin (page, engagement), au domaine du lien (outbound) ou au fichier (download) : exact, prefix, glob (*) ou regex",
"enum": [
"exact",
"prefix",
"glob",
"regex"
]
},
"pattern": {
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier, par ex. /pricing, /blog/*, stripe.com ou *.pdf"
},
"hostname": {
"type": "string",
"description": "Ne compter que les pages de ce nom d’hôte (objectifs page)"
},
"event_name": {
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Conditions sur les propriétés de l’événement : [{\"key\": \"plan\", \"operator\": \"is|is_not|contains|gt|lt\", \"value\": \"pro\"}]"
},
"scroll_threshold": {
"type": "integer",
"description": "Engagement : % de profondeur de défilement à atteindre"
},
"time_threshold_seconds": {
"type": "integer",
"description": "Engagement : secondes sur la page"
},
"value_mode": {
"type": "string",
"description": "none, fixed (fixed_value par conversion) ou revenue (le revenu de l’événement)",
"enum": [
"none",
"fixed",
"revenue"
]
},
"fixed_value": {
"type": "number",
"description": "Valeur fixe par conversion dans la devise du site, par ex. 50.0"
},
"count_mode": {
"type": "string",
"description": "La valeur compte once_per_visit ou à chaque réalisation",
"enum": [
"once_per_visit",
"every"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’objectif, par ex. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound ou download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob ou regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Motif de chemin, de domaine ou de fichier"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Restriction de nom d’hôte (objectifs page)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Nom de l’événement personnalisé (objectifs event)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Conditions sur les propriétés de l’événement"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : % de défilement"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement : secondes sur la page"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed ou revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Valeur fixe en unités mineures"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit ou every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Événements correspondants, répétitions comprises"
},
"conversions": {
"type": "integer",
"description": "Visites avec au moins une réalisation"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ visites (ou ÷ visiteurs, selon le paramètre du site), %"
},
"value": {
"type": "integer",
"description": "Valeur de l’objectif en unités mineures de la devise du site"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Variation des conversions par rapport à la période précédente, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiques de la période (liste uniquement)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
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)
curl https://privatusanalytics.com/status/:slug/confirm/:token.json
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token de la ressource"
},
"slug": {
"type": "string",
"description": "Slug de la ressource"
}
},
"required": [
"token",
"slug"
]
}
{
"type": "object"
}
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)
curl https://privatusanalytics.com/status/:slug.json
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Slug de la ressource"
}
},
"required": [
"slug"
]
}
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "operational, degraded ou outage"
},
"checks": {
"type": "array",
"description": "Chacune : {name, status, uptime_90d, days: [{date, uptime, downtime_seconds}]}"
},
"posts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de publication (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring ou resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"incidents": {
"type": "array",
"description": "Incidents récents : {check, started_at, resolved_at, duration_seconds}"
}
}
}
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)
curl -X POST https://privatusanalytics.com/status/:slug/subscribers.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Adresse e-mail à prévenir",
"examples": [
"[email protected]"
]
},
"slug": {
"type": "string",
"description": "Slug de la ressource"
}
},
"required": [
"email",
"slug"
]
}
{
"type": "object"
}
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)
curl -X POST https://privatusanalytics.com/status/:slug/unsubscribe/:token.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token de la ressource"
},
"slug": {
"type": "string",
"description": "Slug de la ressource"
}
},
"required": [
"token",
"slug"
]
}
{
"type": "object"
}
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
Permission : uptime.manage
curl -X POST https://privatusanalytics.com/status_pages/:status_page_id/posts.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Titre, par ex. « Taux d’erreur élevés »"
},
"body": {
"type": "string",
"description": "Texte de la mise à jour (texte brut)"
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring ou resolved",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved"
],
"default": "investigating"
},
"posted_at": {
"type": "string",
"format": "date-time",
"description": "Moment des faits (par défaut maintenant)"
},
"notify": {
"type": "boolean",
"description": "Envoyer un e-mail aux abonnés confirmés",
"default": true
},
"status_page_id": {
"type": "string",
"description": "Status page de la ressource"
}
},
"required": [
"title",
"status_page_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de publication (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring ou resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/status_pages/:status_page_id/posts/:id.json
Supprimer une publication de page d’état
status_page_posts_delete
Permission : uptime.manage
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 '{…}'
{
"type": "object",
"properties": {
"status_page_id": {
"type": "string",
"description": "Status page de la ressource"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"status_page_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de publication (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring ou resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/status_pages/:status_page_id/posts.json
Lister les publications d’une page d’état
status_page_posts_list
Permission : analytics.read
curl https://privatusanalytics.com/status_pages/:status_page_id/posts.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Uniquement les publications avec ce statut",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved"
]
},
"status_page_id": {
"type": "string",
"description": "Status page de la ressource"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"status_page_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de publication (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring ou resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
PATCH
/status_pages/:status_page_id/posts/:id.json
Modifier une publication de page d’état
status_page_posts_update
Permission : uptime.manage
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 '{…}'
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Titre"
},
"body": {
"type": "string",
"description": "Texte de la mise à jour (texte brut)"
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring ou resolved",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved"
]
},
"notify": {
"type": "boolean",
"description": "Envoyer un e-mail aux abonnés confirmés si le statut change",
"default": true
},
"status_page_id": {
"type": "string",
"description": "Status page de la ressource"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"status_page_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de publication (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring ou resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/status_pages/:status_page_id/subscribers/:id.json
Retirer un abonné
status_page_subscribers_delete
Permission : uptime.manage
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 '{…}'
{
"type": "object",
"properties": {
"status_page_id": {
"type": "string",
"description": "Status page de la ressource"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"status_page_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"email": {
"type": "string"
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/status_pages/:status_page_id/subscribers.json
Lister les abonnés d’une page d’état
status_page_subscribers_list
Permission : uptime.manage
curl https://privatusanalytics.com/status_pages/:status_page_id/subscribers.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"confirmed": {
"type": "boolean",
"description": "true : confirmés uniquement, false : en attente uniquement"
},
"status_page_id": {
"type": "string",
"description": "Status page de la ressource"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"status_page_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"email": {
"type": "string"
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/workspaces/:workspace_id/status_pages.json
Créer une page d’état
status_pages_create
Permission : uptime.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/status_pages.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Titre de la page, par ex. « Statut Acme »"
},
"slug": {
"type": "string",
"description": "Slug de l’URL publique : /status/<slug> (dérivé du nom par défaut)"
},
"description": {
"type": "string",
"description": "Texte d’introduction sous le titre"
},
"logo_url": {
"type": "string",
"description": "URL HTTPS d’une image de logo"
},
"brand_color": {
"type": "string",
"description": "Couleur d’accent, par ex. #06755b"
},
"custom_domain": {
"type": "string",
"description": "Domaine personnalisé (CNAME vers notre hôte), par ex. status.example.com. Vide pour le supprimer"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des vérifications de disponibilité (upc_…) à afficher"
},
"published": {
"type": "boolean",
"description": "Visible par le public",
"default": true
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de page d’état (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "URL publique : /status/<slug>"
},
"custom_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published": {
"type": "boolean"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des vérifications de disponibilité affichées"
},
"subscribers": {
"type": "integer",
"description": "Abonnés confirmés"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/status_pages/:id.json
Supprimer une page d’état
status_pages_delete
Permission : uptime.manage
curl -X DELETE https://privatusanalytics.com/status_pages/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de page d’état (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "URL publique : /status/<slug>"
},
"custom_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published": {
"type": "boolean"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des vérifications de disponibilité affichées"
},
"subscribers": {
"type": "integer",
"description": "Abonnés confirmés"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/status_pages.json
Lister les pages d’état
status_pages_list
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/status_pages.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Filtrer par nom ou slug"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de page d’état (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "URL publique : /status/<slug>"
},
"custom_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published": {
"type": "boolean"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des vérifications de disponibilité affichées"
},
"subscribers": {
"type": "integer",
"description": "Abonnés confirmés"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/status_pages/:id.json
Obtenir une page d’état
status_pages_get
Permission : analytics.read
curl https://privatusanalytics.com/status_pages/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de page d’état (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "URL publique : /status/<slug>"
},
"custom_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published": {
"type": "boolean"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des vérifications de disponibilité affichées"
},
"subscribers": {
"type": "integer",
"description": "Abonnés confirmés"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/status_pages/:id.json
Modifier une page d’état
status_pages_update
Permission : uptime.manage
curl -X PATCH https://privatusanalytics.com/status_pages/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Titre de la page, par ex. « Statut Acme »"
},
"slug": {
"type": "string",
"description": "Slug de l’URL publique : /status/<slug> (dérivé du nom par défaut)"
},
"description": {
"type": "string",
"description": "Texte d’introduction sous le titre"
},
"logo_url": {
"type": "string",
"description": "URL HTTPS d’une image de logo"
},
"brand_color": {
"type": "string",
"description": "Couleur d’accent, par ex. #06755b"
},
"custom_domain": {
"type": "string",
"description": "Domaine personnalisé (CNAME vers notre hôte), par ex. status.example.com. Vide pour le supprimer"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des vérifications de disponibilité (upc_…) à afficher"
},
"published": {
"type": "boolean",
"description": "Visible par le public"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de page d’état (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "URL publique : /status/<slug>"
},
"custom_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published": {
"type": "boolean"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des vérifications de disponibilité affichées"
},
"subscribers": {
"type": "integer",
"description": "Abonnés confirmés"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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)
curl https://privatusanalytics.com/badge/:site_id.json
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/performance.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"metric": {
"type": "string",
"description": "Métrique pour la tendance et les ventilations",
"enum": [
"LCP",
"INP",
"CLS",
"FCP",
"TTFB"
],
"default": "LCP"
},
"limit": {
"type": "integer",
"description": "Lignes par ventilation (100 maximum)",
"default": 10
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
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
curl https://privatusanalytics.com/account/affiliate/commissions.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Uniquement les commissions ayant ce statut",
"enum": [
"pending",
"approved",
"paid",
"void"
]
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de la commission"
},
"kind": {
"type": "string",
"description": "commission, clawback (remboursement ou rétrofacturation) ou reversal"
},
"status": {
"type": "string",
"description": "pending (en période de blocage), approved (à verser), paid ou void"
},
"amount_cents": {
"type": "integer",
"description": "Votre part en centimes (négative pour une reprise)"
},
"basis_cents": {
"type": "integer",
"description": "Le paiement net (hors taxes) à partir duquel elle a été calculée, en centimes"
},
"currency": {
"type": "string",
"description": "Code de devise ISO"
},
"earned_at": {
"type": "string",
"format": "date-time",
"description": "Date du paiement (ou du remboursement)"
},
"approved_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle elle est devenue payable"
},
{
"type": "null"
}
]
},
"paid_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date du versement"
},
{
"type": "null"
}
]
}
}
}
}
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
curl https://privatusanalytics.com/account/affiliate/signup-box.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"theme": {
"type": "string",
"description": "Thème de l’encart : auto (selon l’appareil du visiteur), light ou dark",
"enum": [
"auto",
"light",
"dark"
],
"examples": [
"auto"
],
"default": "auto"
}
},
"required": []
}
{
"type": "object",
"properties": {
"available": {
"type": "boolean",
"description": "Indique si vous disposez d’un encart d’inscription (affiliés approuvés uniquement)"
},
"theme": {
"type": "string",
"description": "Le thème pour lequel le code a été généré"
},
"frame_url": {
"anyOf": [
{
"type": "string",
"description": "L’adresse de l’encart, pour un iframe simple"
},
{
"type": "null"
}
]
},
"script": {
"anyOf": [
{
"type": "string",
"description": "Le code d’intégration par script : un élément et le script de chargement"
},
{
"type": "null"
}
]
},
"iframe": {
"anyOf": [
{
"type": "string",
"description": "Le code d’intégration par iframe simple"
},
{
"type": "null"
}
]
},
"prefill_attributes": {
"type": "array",
"description": "Attributs de l’élément qui préremplissent le formulaire pour les visiteurs connectés"
},
"events": {
"type": "array",
"description": "Événements DOM que le script déclenche sur l’élément"
},
"waiting": {
"type": "integer",
"description": "Inscriptions dont le lien envoyé par e-mail n’a pas encore été ouvert"
},
"signups": {
"type": "integer",
"description": "Inscriptions confirmées venant de l’encart"
},
"customers": {
"type": "integer",
"description": "Celles devenues clients payants"
}
}
}
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
curl https://privatusanalytics.com/account/affiliate.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {},
"required": []
}
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "none (pas de candidature), pending, approved, rejected ou suspended"
},
"code": {
"anyOf": [
{
"type": "string",
"description": "Votre code de parrainage"
},
{
"type": "null"
}
]
},
"referral_url": {
"anyOf": [
{
"type": "string",
"description": "Le lien à partager (affiliés approuvés uniquement)"
},
{
"type": "null"
}
]
},
"payout_method": {
"anyOf": [
{
"type": "string",
"description": "wise ou credit"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Motif du refus de la dernière candidature"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date de votre candidature"
},
{
"type": "null"
}
]
},
"approved_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’approbation de la candidature"
},
{
"type": "null"
}
]
},
"credit_blocked": {
"anyOf": [
{
"type": "string",
"description": "Pourquoi le crédit sur le compte est en attente : program (l’espace de travail participe à un programme de remise), no_subscription ou no_workspace. null si rien ne le bloque"
},
{
"type": "null"
}
]
},
"signups": {
"type": "integer",
"description": "Comptes créés via votre lien ou votre code"
},
"customers": {
"type": "integer",
"description": "Espaces de travail parrainés qui ont payé"
},
"balances": {
"type": "array",
"description": "Par devise : pending_cents (en période de blocage), approved_cents (à verser) et paid_cents"
},
"payouts": {
"type": "array",
"description": "Versements récents avec amount_cents, currency, payout_method, status (applied : crédit sur le compte en attente de votre prochain renouvellement, ou paid), applied_at et paid_at"
},
"terms": {
"type": "object",
"description": "Pourcentage de commission, nombre de mois, jours de blocage et seuil de versement Wise en centimes"
}
}
}
Rapports par e-mail
DELETE
/recipients/:id.json
Retirer un destinataire d’un rapport par e-mail
email_report_recipients_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/recipients/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
}
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
curl https://privatusanalytics.com/reports/:report_id/recipients.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Uniquement les destinataires ayant ce statut",
"enum": [
"pending",
"active",
"declined",
"unsubscribed"
]
},
"report_id": {
"type": "string",
"description": "Report de la ressource"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"report_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
}
}
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
curl -X POST https://privatusanalytics.com/recipients/:id/resend.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces/:workspace_id/reports.json
Créer un rapport par e-mail
email_reports_create
Permission : content.write
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/reports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites (pa_…) inclus dans le rapport"
},
"frequency": {
"type": "string",
"description": "daily, weekly (un jour de la semaine) ou monthly (le 1er)",
"enum": [
"daily",
"weekly",
"monthly"
]
},
"hour": {
"type": "integer",
"description": "Heure d’envoi (0 à 23, fuseau horaire de l’espace de travail)"
},
"weekday": {
"type": "integer",
"description": "Rapports hebdomadaires : 0 = dimanche … 6 = samedi"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Adresses e-mail (aucun compte nécessaire). Les entrées peuvent être séparées par des virgules ou des retours à la ligne. Les membres de l’espace de travail sont ajoutés immédiatement. Toute autre personne reçoit une invitation et ne reçoit les rapports qu’après l’avoir acceptée. Les adresses désinscrites des rapports sont refusées"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Contenu : kpis, chart, pages, sources, goals, campaigns, vitals, uptime"
},
"attach_pdf": {
"type": "boolean",
"description": "Joindre une version PDF"
},
"intro": {
"type": "string",
"description": "Texte d’introduction personnalisé (2000 caractères maximum)"
},
"enabled": {
"type": "boolean",
"description": "Envoyer selon le calendrier"
},
"name": {
"type": "string",
"description": "Nom du rapport",
"examples": [
"Weekly traffic"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de rapport, par ex. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites du rapport"
},
"frequency": {
"type": "string",
"description": "daily, weekly ou monthly"
},
"hour": {
"type": "integer",
"description": "Heure d’envoi (fuseau horaire de l’espace de travail)"
},
"weekday": {
"type": "integer",
"description": "Hebdomadaire : 0 = dimanche … 6 = samedi"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Toutes les adresses du rapport, quel que soit leur statut"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
},
"description": "Chaque destinataire avec son statut d’acceptation (seuls les destinataires actifs reçoivent les rapports)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Blocs de contenu"
},
"attach_pdf": {
"type": "boolean"
},
"intro": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"last_sent_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/reports/:id/deliveries.json
Journal d’envoi d’un rapport par e-mail
email_reports_deliveries
Permission : analytics.read
curl https://privatusanalytics.com/reports/:id/deliveries.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Uniquement les envois avec ce statut",
"enum": [
"sent",
"test",
"failed",
"skipped"
]
},
"id": {
"type": "string",
"description": "Id de la ressource"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "sent, test, failed ou skipped"
},
"recipients_count": {
"type": "integer"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sent_at": {
"type": "string",
"format": "date-time"
}
}
}
}
DELETE
/reports/:id.json
Supprimer un rapport par e-mail
email_reports_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/reports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de rapport, par ex. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites du rapport"
},
"frequency": {
"type": "string",
"description": "daily, weekly ou monthly"
},
"hour": {
"type": "integer",
"description": "Heure d’envoi (fuseau horaire de l’espace de travail)"
},
"weekday": {
"type": "integer",
"description": "Hebdomadaire : 0 = dimanche … 6 = samedi"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Toutes les adresses du rapport, quel que soit leur statut"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
},
"description": "Chaque destinataire avec son statut d’acceptation (seuls les destinataires actifs reçoivent les rapports)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Blocs de contenu"
},
"attach_pdf": {
"type": "boolean"
},
"intro": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"last_sent_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/reports.json
Lister les rapports par e-mail
email_reports_list
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/reports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"frequency": {
"type": "string",
"description": "Uniquement les rapports de cette fréquence",
"enum": [
"daily",
"weekly",
"monthly"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de rapport, par ex. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites du rapport"
},
"frequency": {
"type": "string",
"description": "daily, weekly ou monthly"
},
"hour": {
"type": "integer",
"description": "Heure d’envoi (fuseau horaire de l’espace de travail)"
},
"weekday": {
"type": "integer",
"description": "Hebdomadaire : 0 = dimanche … 6 = samedi"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Toutes les adresses du rapport, quel que soit leur statut"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
},
"description": "Chaque destinataire avec son statut d’acceptation (seuls les destinataires actifs reçoivent les rapports)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Blocs de contenu"
},
"attach_pdf": {
"type": "boolean"
},
"intro": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"last_sent_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/reports/:id/send_test.json
Envoyer un rapport par e-mail maintenant à titre de test
email_reports_send_test
Permission : content.write
curl -X POST https://privatusanalytics.com/reports/:id/send_test.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"recipient": {
"type": "string",
"description": "Envoyer le test ici (par défaut : votre e-mail)"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "sent, test, failed ou skipped"
},
"recipients_count": {
"type": "integer"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sent_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/reports/:id.json
Obtenir un rapport par e-mail
email_reports_get
Permission : analytics.read
curl https://privatusanalytics.com/reports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de rapport, par ex. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites du rapport"
},
"frequency": {
"type": "string",
"description": "daily, weekly ou monthly"
},
"hour": {
"type": "integer",
"description": "Heure d’envoi (fuseau horaire de l’espace de travail)"
},
"weekday": {
"type": "integer",
"description": "Hebdomadaire : 0 = dimanche … 6 = samedi"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Toutes les adresses du rapport, quel que soit leur statut"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
},
"description": "Chaque destinataire avec son statut d’acceptation (seuls les destinataires actifs reçoivent les rapports)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Blocs de contenu"
},
"attach_pdf": {
"type": "boolean"
},
"intro": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"last_sent_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/reports/:id.json
Mettre à jour un rapport par e-mail
email_reports_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/reports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites (pa_…) inclus dans le rapport"
},
"frequency": {
"type": "string",
"description": "daily, weekly (un jour de la semaine) ou monthly (le 1er)",
"enum": [
"daily",
"weekly",
"monthly"
]
},
"hour": {
"type": "integer",
"description": "Heure d’envoi (0 à 23, fuseau horaire de l’espace de travail)"
},
"weekday": {
"type": "integer",
"description": "Rapports hebdomadaires : 0 = dimanche … 6 = samedi"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Adresses e-mail (aucun compte nécessaire). Les entrées peuvent être séparées par des virgules ou des retours à la ligne. Les membres de l’espace de travail sont ajoutés immédiatement. Toute autre personne reçoit une invitation et ne reçoit les rapports qu’après l’avoir acceptée. Les adresses désinscrites des rapports sont refusées"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Contenu : kpis, chart, pages, sources, goals, campaigns, vitals, uptime"
},
"attach_pdf": {
"type": "boolean",
"description": "Joindre une version PDF"
},
"intro": {
"type": "string",
"description": "Texte d’introduction personnalisé (2000 caractères maximum)"
},
"enabled": {
"type": "boolean",
"description": "Envoyer selon le calendrier"
},
"name": {
"type": "string",
"description": "Nom du rapport"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de rapport, par ex. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identifiants des sites du rapport"
},
"frequency": {
"type": "string",
"description": "daily, weekly ou monthly"
},
"hour": {
"type": "integer",
"description": "Heure d’envoi (fuseau horaire de l’espace de travail)"
},
"weekday": {
"type": "integer",
"description": "Hebdomadaire : 0 = dimanche … 6 = samedi"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Toutes les adresses du rapport, quel que soit leur statut"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
},
"description": "Chaque destinataire avec son statut d’acceptation (seuls les destinataires actifs reçoivent les rapports)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Blocs de contenu"
},
"attach_pdf": {
"type": "boolean"
},
"intro": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"last_sent_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/reports/invites/:token/accept.json
Accepter une invitation à un rapport
report_invites_accept
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X POST https://privatusanalytics.com/reports/invites/:token/accept.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token de la ressource"
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
}
POST
/reports/invites/:token/decline.json
Refuser une invitation à un rapport
report_invites_decline
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X POST https://privatusanalytics.com/reports/invites/:token/decline.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token de la ressource"
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du destinataire, par exemple rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "L’adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined ou unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’envoi de la dernière invitation"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date d’expiration d’une invitation en attente"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date à laquelle l’adresse est devenue active"
},
{
"type": "null"
}
]
}
}
}
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)
curl -X POST https://privatusanalytics.com/reports/resubscribe/:token.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token de la ressource"
}
},
"required": [
"token"
]
}
{
"type": "object"
}
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)
curl -X POST https://privatusanalytics.com/reports/unsubscribe/:token/resubscribe.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token de la ressource"
}
},
"required": [
"token"
]
}
{
"type": "object"
}
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)
curl -X POST https://privatusanalytics.com/reports/unsubscribe/:token.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token de la ressource"
}
},
"required": [
"token"
]
}
{
"type": "object"
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/search.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"provider": {
"type": "string",
"description": "google (Search Console) ou bing",
"enum": [
"google",
"bing"
],
"default": "google"
},
"limit": {
"type": "integer",
"description": "Lignes par tableau (100 maximum)",
"default": 25
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/sites/:site_id/search/connections.json
Connecter une propriété Search Console ou un site Bing
search_connect
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/search/connections.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google ou bing",
"enum": [
"google",
"bing"
],
"default": "google"
},
"property": {
"type": "string",
"description": "Propriété Search Console (par ex. sc-domain:example.com) ou URL du site Bing",
"examples": [
"sc-domain:example.com"
]
},
"bing_api_key": {
"type": "string",
"description": "Votre propre clé d’API Bing Webmaster Tools (Settings > API access). Obligatoire lorsque provider vaut bing. Stockée chiffrée et jamais renvoyée."
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"property",
"site_id"
]
}
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google ou bing"
},
"property": {
"type": "string",
"description": "Propriété Search Console ou URL du site Bing"
},
"status": {
"type": "string",
"description": "active ou error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/search/connections/:provider.json
Déconnecter Search Console ou Bing et supprimer ses données
search_disconnect
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/search/connections/:provider.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"provider": {
"type": "string",
"description": "Provider de la ressource"
}
},
"required": [
"site_id",
"provider"
]
}
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google ou bing"
},
"property": {
"type": "string",
"description": "Propriété Search Console ou URL du site Bing"
},
"status": {
"type": "string",
"description": "active ou error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/search/properties.json
Lister les propriétés que vous pouvez connecter (Search Console nécessite une autorisation Google depuis le navigateur)
search_properties
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/search/properties.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google ou bing",
"enum": [
"google",
"bing"
],
"default": "google"
},
"bing_api_key": {
"type": "string",
"description": "Votre propre clé d’API Bing Webmaster Tools (Settings > API access). Obligatoire lorsque provider vaut bing. Utilisée uniquement pour lister les sites auxquels elle donne accès."
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/sites/:site_id/search/sync.json
Importer les données de recherche maintenant
search_sync
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/search/sync.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google ou bing",
"enum": [
"google",
"bing"
],
"default": "google"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google ou bing"
},
"property": {
"type": "string",
"description": "Propriété Search Console ou URL du site Bing"
},
"status": {
"type": "string",
"description": "active ou error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Robots d’exploration
POST
/sites/:site_id/crawlers/connection.json
Synchroniser les visites des robots d’IA depuis une zone Cloudflare (nécessite une autorisation Cloudflare depuis le navigateur)
crawlers_cloudflare_connect
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/crawlers/connection.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"zone_id": {
"type": "string",
"description": "Identifiant de la zone Cloudflare, issu de crawlers_cloudflare_zones",
"examples": [
"023e105f4ecef8ad9ca31a8372d0c353"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"zone_id",
"site_id"
]
}
{
"type": "object",
"properties": {
"zone_id": {
"type": "string",
"description": "Identifiant de la zone Cloudflare"
},
"zone_name": {
"type": "string",
"description": "Nom de la zone Cloudflare, par exemple example.com"
},
"status": {
"type": "string",
"description": "active ou error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date du dernier import des visites de robots, ou null avant le premier import"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/crawlers/connection.json
Déconnecter Cloudflare et supprimer les visites de robots qu’il a importées
crawlers_cloudflare_disconnect
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/crawlers/connection.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"zone_id": {
"type": "string",
"description": "Identifiant de la zone Cloudflare"
},
"zone_name": {
"type": "string",
"description": "Nom de la zone Cloudflare, par exemple example.com"
},
"status": {
"type": "string",
"description": "active ou error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date du dernier import des visites de robots, ou null avant le premier import"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/crawlers/sync.json
Importer maintenant les visites de robots depuis Cloudflare
crawlers_cloudflare_sync
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/crawlers/sync.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"zone_id": {
"type": "string",
"description": "Identifiant de la zone Cloudflare"
},
"zone_name": {
"type": "string",
"description": "Nom de la zone Cloudflare, par exemple example.com"
},
"status": {
"type": "string",
"description": "active ou error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Date du dernier import des visites de robots, ou null avant le premier import"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/crawlers/zones.json
Lister les zones Cloudflare que vous pouvez connecter (nécessite une autorisation Cloudflare depuis le navigateur)
crawlers_cloudflare_zones
Permission : sites.manage
curl https://privatusanalytics.com/sites/:site_id/crawlers/zones.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/crawlers.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"category": {
"type": "string",
"description": "ai, search, seo, other ou all",
"enum": [
"all",
"ai",
"search",
"seo",
"other"
],
"default": "ai"
},
"crawler": {
"type": "string",
"description": "Uniquement ce robot, par ex. GPTBot"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
Règles de canaux
POST
/sites/:site_id/channel_rules.json
Ajouter une règle de canal
channel_rules_create
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/channel_rules.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"channel": {
"type": "string",
"description": "Nom du canal à attribuer, par ex. Partenaires"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"operator": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
"description": "Conditions qui doivent toutes correspondre : [{\"field\": \"utm_source\", \"operator\": \"is\", \"value\": \"newsletter\"}]. Champs : referrer_host, utm_source, utm_medium, utm_campaign, ref, path. Opérateurs : is, contains, starts_with, regex."
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"channel",
"conditions",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"channel": {
"type": "string",
"description": "Canal attribué lorsque toutes les conditions correspondent"
},
"position": {
"type": "integer",
"description": "Ordre d’évaluation (la première correspondance l’emporte)"
},
"conditions": {
"type": "array",
"description": "Conditions : field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/channel_rules/:id.json
Supprimer une règle de canal
channel_rules_delete
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/channel_rules/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"channel": {
"type": "string",
"description": "Canal attribué lorsque toutes les conditions correspondent"
},
"position": {
"type": "integer",
"description": "Ordre d’évaluation (la première correspondance l’emporte)"
},
"conditions": {
"type": "array",
"description": "Conditions : field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/channel_rules.json
Lister les règles de canal dans l’ordre
channel_rules_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/channel_rules.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"channel": {
"type": "string",
"description": "Canal attribué lorsque toutes les conditions correspondent"
},
"position": {
"type": "integer",
"description": "Ordre d’évaluation (la première correspondance l’emporte)"
},
"conditions": {
"type": "array",
"description": "Conditions : field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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
Permission : sites.manage
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 '{…}'
{
"type": "object",
"properties": {
"direction": {
"type": "string",
"description": "Où déplacer la règle",
"enum": [
"up",
"down",
"top",
"bottom"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"direction",
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"channel": {
"type": "string",
"description": "Canal attribué lorsque toutes les conditions correspondent"
},
"position": {
"type": "integer",
"description": "Ordre d’évaluation (la première correspondance l’emporte)"
},
"conditions": {
"type": "array",
"description": "Conditions : field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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
Permission : analytics.read
curl -X POST https://privatusanalytics.com/sites/:site_id/channel_rules/preview.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"referrer": {
"type": "string",
"description": "URL ou nom d’hôte du référent"
},
"utm_source": {
"type": "string",
"description": "Valeur utm_source"
},
"utm_medium": {
"type": "string",
"description": "Valeur utm_medium"
},
"utm_campaign": {
"type": "string",
"description": "Valeur utm_campaign"
},
"ref": {
"type": "string",
"description": "Paramètre ref / via / source"
},
"path": {
"type": "string",
"description": "Chemin de la page de destination, par ex. /pricing"
},
"paid_click": {
"type": "boolean",
"description": "L’URL contenait un identifiant de clic tel que gclid",
"default": false
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
PATCH
/sites/:site_id/channel_rules/:id.json
Modifier une règle de canal
channel_rules_update
Permission : sites.manage
curl -X PATCH https://privatusanalytics.com/sites/:site_id/channel_rules/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"channel": {
"type": "string",
"description": "Nom du canal à attribuer"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"operator": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
"description": "Conditions qui doivent toutes correspondre : [{\"field\": \"utm_source\", \"operator\": \"is\", \"value\": \"newsletter\"}]. Champs : referrer_host, utm_source, utm_medium, utm_campaign, ref, path. Opérateurs : is, contains, starts_with, regex."
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"channel": {
"type": "string",
"description": "Canal attribué lorsque toutes les conditions correspondent"
},
"position": {
"type": "integer",
"description": "Ordre d’évaluation (la première correspondance l’emporte)"
},
"conditions": {
"type": "array",
"description": "Conditions : field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Règles de trafic
POST
/sites/:site_id/traffic_rules.json
Ajouter une règle de trafic
traffic_rules_create
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/traffic_rules.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents ou events",
"enum": [
"hostnames",
"paths",
"referrers",
"countries",
"ip_ranges",
"user_agents",
"events"
]
},
"pattern": {
"type": "string",
"description": "Valeur à faire correspondre. * est un joker. ip_ranges acceptent une IP ou un CIDR (v4/v6), countries un code ISO",
"examples": [
"/admin/*"
]
},
"label": {
"type": "string",
"description": "Note facultative, par ex. « Bureau »"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"list",
"pattern",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents ou events"
},
"pattern": {
"type": "string",
"description": "Motif (jokers *, CIDR pour ip_ranges)"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"description": "block ou allow (le mode de sa liste)"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/traffic_rules/:id.json
Supprimer une règle de trafic
traffic_rules_delete
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/traffic_rules/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents ou events"
},
"pattern": {
"type": "string",
"description": "Motif (jokers *, CIDR pour ip_ranges)"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"description": "block ou allow (le mode de sa liste)"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/traffic_rules.json
Lister les règles de trafic
traffic_rules_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/traffic_rules.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"list": {
"type": "string",
"description": "Uniquement les règles de cette liste",
"enum": [
"hostnames",
"paths",
"referrers",
"countries",
"ip_ranges",
"user_agents",
"events"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents ou events"
},
"pattern": {
"type": "string",
"description": "Motif (jokers *, CIDR pour ip_ranges)"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"description": "block ou allow (le mode de sa liste)"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/traffic_rules/test.json
Tester si un hit serait compté avec les règles actuelles du site
traffic_rules_test
Permission : analytics.read
curl -X POST https://privatusanalytics.com/sites/:site_id/traffic_rules/test.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL de la page, par ex. https://example.com/a"
},
"referrer": {
"type": "string",
"description": "URL ou nom d’hôte du référent"
},
"country": {
"type": "string",
"description": "Code pays ISO, par ex. US"
},
"ip": {
"type": "string",
"description": "Adresse IP à tester par rapport à ip_ranges (non stockée)"
},
"user_agent": {
"type": "string",
"description": "Chaîne User-Agent (réduite au navigateur et à la version majeure, comme à l’ingestion)"
},
"event": {
"type": "string",
"description": "Nom de l’événement personnalisé"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
PATCH
/sites/:site_id/traffic_rules/:id.json
Modifier une règle de trafic
traffic_rules_update
Permission : sites.manage
curl -X PATCH https://privatusanalytics.com/sites/:site_id/traffic_rules/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"pattern": {
"type": "string",
"description": "Nouveau motif"
},
"label": {
"type": "string",
"description": "Nouveau libellé"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de règle"
},
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents ou events"
},
"pattern": {
"type": "string",
"description": "Motif (jokers *, CIDR pour ip_ranges)"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"description": "block ou allow (le mode de sa liste)"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Rôles
POST
/workspaces/:workspace_id/roles.json
Créer un rôle personnalisé
roles_create
Permission : members.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/roles.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom du rôle",
"examples": [
"Client reviewer"
]
},
"permissions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"analytics.read",
"analytics.export",
"content.write",
"sites.manage",
"uptime.manage",
"members.manage",
"tokens.manage",
"billing.manage",
"workspace.manage"
]
},
"description": "Permissions accordées par le rôle"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"permissions",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de rôle personnalisé (custom_role_id sur les membres)"
},
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Permissions accordées"
},
"members": {
"type": "integer",
"description": "Membres ayant ce rôle"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:workspace_id/roles/:id.json
Supprimer un rôle personnalisé (doit être inutilisé)
roles_delete
Permission : members.manage
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/roles/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de rôle personnalisé (custom_role_id sur les membres)"
},
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Permissions accordées"
},
"members": {
"type": "integer",
"description": "Membres ayant ce rôle"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/roles.json
Lister les rôles personnalisés
roles_list
Permission : member
curl https://privatusanalytics.com/workspaces/:workspace_id/roles.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de rôle personnalisé (custom_role_id sur les membres)"
},
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Permissions accordées"
},
"members": {
"type": "integer",
"description": "Membres ayant ce rôle"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
PATCH
/workspaces/:workspace_id/roles/:id.json
Mettre à jour un rôle personnalisé
roles_update
Permission : members.manage
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/roles/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom du rôle"
},
"permissions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"analytics.read",
"analytics.export",
"content.write",
"sites.manage",
"uptime.manage",
"members.manage",
"tokens.manage",
"billing.manage",
"workspace.manage"
]
},
"description": "Permissions accordées par le rôle"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant de rôle personnalisé (custom_role_id sur les membres)"
},
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Permissions accordées"
},
"members": {
"type": "integer",
"description": "Membres ayant ce rôle"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
SCIM
POST
/scim/v2/Users.json
Provisionner un utilisateur
scim_users_create
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X POST https://privatusanalytics.com/scim/v2/Users.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"userName": {
"type": "string",
"description": "Adresse e-mail"
},
"name": {
"type": "object",
"additionalProperties": true,
"description": "givenName, familyName, formatted",
"default": {}
},
"active": {
"type": "boolean",
"description": "Membre de l’espace de travail",
"default": true
}
},
"required": [
"userName"
]
}
{
"type": "object"
}
DELETE
/scim/v2/Users/:id.json
Déprovisionner un utilisateur
scim_users_delete
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X DELETE https://privatusanalytics.com/scim/v2/Users/:id.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object"
}
GET
/scim/v2/Users.json
Lister les utilisateurs provisionnés
scim_users_list
Permission : public
· HTTP uniquement (pas un outil MCP)
curl https://privatusanalytics.com/scim/v2/Users.json
{
"type": "object",
"properties": {
"scim_filter": {
"type": "string",
"description": "Filtre SCIM (paramètre de requête `filter`), par ex. userName eq \"[email protected]\""
},
"startIndex": {
"type": "integer",
"description": "Index du premier résultat, à partir de 1",
"default": 1
},
"count": {
"type": "integer",
"description": "Taille de page (200 maximum)",
"default": 100
}
},
"required": []
}
{
"type": "object"
}
GET
/scim/v2/Users/:id.json
Obtenir un utilisateur provisionné
scim_users_get
Permission : public
· HTTP uniquement (pas un outil MCP)
curl https://privatusanalytics.com/scim/v2/Users/:id.json
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object"
}
PATCH
/scim/v2/Users/:id.json
Mettre à jour un utilisateur (PATCH active, name)
scim_users_update
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X PATCH https://privatusanalytics.com/scim/v2/Users/:id.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"Operations": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Opérations SCIM PatchOp"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"Operations",
"id"
]
}
{
"type": "object"
}
SSO
POST
/workspaces/:workspace_id/sso/activate.json
Activer une configuration SSO testée
sso_activate
Permission : workspace.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/activate.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml ou oidc"
},
"status": {
"type": "string",
"description": "draft, testing, tested ou active"
},
"enforced": {
"type": "boolean",
"description": "Le SSO est la seule voie d’accès (propriétaire excepté)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Domaines e-mail vérifiés"
},
"idp_sso_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"idp_entity_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"idp_cert_present": {
"type": "boolean"
},
"oidc_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oidc_client_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oidc_client_secret_present": {
"type": "boolean"
},
"default_role": {
"type": "string"
},
"jit_provisioning": {
"type": "boolean"
},
"scim_enabled": {
"type": "boolean"
}
}
}
POST
/workspaces/:workspace_id/sso/deactivate.json
Désactiver le SSO (retour au brouillon)
sso_deactivate
Permission : workspace.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/deactivate.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml ou oidc"
},
"status": {
"type": "string",
"description": "draft, testing, tested ou active"
},
"enforced": {
"type": "boolean",
"description": "Le SSO est la seule voie d’accès (propriétaire excepté)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Domaines e-mail vérifiés"
},
"idp_sso_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"idp_entity_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"idp_cert_present": {
"type": "boolean"
},
"oidc_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oidc_client_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oidc_client_secret_present": {
"type": "boolean"
},
"default_role": {
"type": "string"
},
"jit_provisioning": {
"type": "boolean"
},
"scim_enabled": {
"type": "boolean"
}
}
}
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)
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/scim_token.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object"
}
GET
/workspaces/:workspace_id/sso.json
Obtenir les paramètres SSO
sso_get
Permission : workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/sso.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml ou oidc"
},
"status": {
"type": "string",
"description": "draft, testing, tested ou active"
},
"enforced": {
"type": "boolean",
"description": "Le SSO est la seule voie d’accès (propriétaire excepté)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Domaines e-mail vérifiés"
},
"idp_sso_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"idp_entity_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"idp_cert_present": {
"type": "boolean"
},
"oidc_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oidc_client_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oidc_client_secret_present": {
"type": "boolean"
},
"default_role": {
"type": "string"
},
"jit_provisioning": {
"type": "boolean"
},
"scim_enabled": {
"type": "boolean"
}
}
}
PATCH
/workspaces/:workspace_id/sso.json
Créer ou mettre à jour les paramètres SSO
sso_update
Permission : workspace.manage
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/sso.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml ou oidc",
"enum": [
"saml",
"oidc"
]
},
"idp_sso_url": {
"type": "string",
"description": "SAML : URL d’authentification unique de l’IdP"
},
"idp_entity_id": {
"type": "string",
"description": "SAML : identifiant d’entité de l’IdP (émetteur)"
},
"idp_cert": {
"type": "string",
"description": "SAML : certificat de signature X.509 de l’IdP (PEM)"
},
"oidc_issuer": {
"type": "string",
"description": "OIDC : URL de l’émetteur (découverte)"
},
"oidc_client_id": {
"type": "string",
"description": "OIDC : identifiant client"
},
"oidc_client_secret": {
"type": "string",
"description": "OIDC : secret client (écriture seule)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Domaines e-mail vérifiés qui utilisent ce SSO"
},
"default_role": {
"type": "string",
"description": "Rôle des membres créés par JIT ou SCIM",
"enum": [
"admin",
"editor",
"analyst",
"viewer",
"billing"
]
},
"jit_provisioning": {
"type": "boolean",
"description": "Créer les membres à la première connexion SSO"
},
"enforced": {
"type": "boolean",
"description": "N’autoriser que les connexions SSO (nécessite une configuration active)"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml ou oidc"
},
"status": {
"type": "string",
"description": "draft, testing, tested ou active"
},
"enforced": {
"type": "boolean",
"description": "Le SSO est la seule voie d’accès (propriétaire excepté)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Domaines e-mail vérifiés"
},
"idp_sso_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"idp_entity_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"idp_cert_present": {
"type": "boolean"
},
"oidc_issuer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oidc_client_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oidc_client_secret_present": {
"type": "boolean"
},
"default_role": {
"type": "string"
},
"jit_provisioning": {
"type": "boolean"
},
"scim_enabled": {
"type": "boolean"
}
}
}
Segments
POST
/sites/:site_id/segments.json
Enregistrer des filtres comme segment
segments_create
Permission : content.write
curl -X POST https://privatusanalytics.com/sites/:site_id/segments.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom du segment, par exemple « Visiteurs mobiles venant des publicités »",
"examples": [
"Mobile visitors from ads"
]
},
"description": {
"type": "string",
"description": "Note facultative sur l’utilité du segment (300 caractères au plus)",
"examples": [
"People who might buy the Pro plan"
]
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres, qui doivent tous correspondre. Chaque élément est une condition [\"dimension\", \"operator\", \"value\"], ou {\"any\": [conditions]} lorsqu’une seule condition parmi plusieurs suffit. Dimensions : page, entry_page, exit_page, hostname, channel, referrer, referrer_url, ref, utm_source, utm_medium, utm_campaign, utm_content, utm_term, country (code ISO, par exemple US), language, device (desktop, mobile, tablet, tv, other), browser, browser_version, os, os_version, screen, goal (identifiant d’objectif), event (nom d’événement personnalisé) et prop:<key> (propriété d’événement personnalisé). Opérateurs : is, is_not, contains, not_contains, starts_with, regex, not_regex, any_of et none_of (la valeur est une liste), gt et lt (un nombre), between (une liste de deux nombres). Les lignes du formulaire de segment sont aussi acceptées : {\"dimension\", \"operator\", \"value\", \"property\" (pour la dimension prop), \"join\": \"and\" ou \"or\" (or combine la ligne avec la précédente)}. Exemple : [[\"country\", \"is\", \"US\"], [\"device\", \"is\", \"mobile\"], {\"any\": [[\"page\", \"starts_with\", \"/pricing\"], [\"goal\", \"is\", \"goal_7Q2K9XH3AB\"]]}]",
"examples": [
[
[
"country",
"is",
"US"
],
[
"device",
"is",
"mobile"
],
{
"any": [
[
"page",
"starts_with",
"/pricing"
],
[
"goal",
"is",
"goal_7Q2K9XH3AB"
]
]
}
]
]
},
"shared": {
"type": "boolean",
"description": "Visible par toute personne ayant accès au site (false : vous seul)",
"default": true
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"filters",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de segment, par ex. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "L’utilité du segment, ou null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filtres au format des filtres de statistiques : des conditions [\"dimension\", \"operator\", \"value\"] qui doivent toutes correspondre, et des groupes {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Les filtres en langage naturel, par exemple « Visiteurs des États-Unis sur mobile ayant vu /pricing »"
},
"shared": {
"type": "boolean",
"description": "Visible par toute personne ayant accès au site"
},
"mine": {
"type": "boolean",
"description": "Créé par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/segments/:id.json
Supprimer un segment
segments_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/sites/:site_id/segments/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de segment, par ex. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "L’utilité du segment, ou null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filtres au format des filtres de statistiques : des conditions [\"dimension\", \"operator\", \"value\"] qui doivent toutes correspondre, et des groupes {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Les filtres en langage naturel, par exemple « Visiteurs des États-Unis sur mobile ayant vu /pricing »"
},
"shared": {
"type": "boolean",
"description": "Visible par toute personne ayant accès au site"
},
"mine": {
"type": "boolean",
"description": "Créé par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/segments.json
Lister les segments utilisables sur un site
segments_list
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/segments.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de segment, par ex. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "L’utilité du segment, ou null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filtres au format des filtres de statistiques : des conditions [\"dimension\", \"operator\", \"value\"] qui doivent toutes correspondre, et des groupes {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Les filtres en langage naturel, par exemple « Visiteurs des États-Unis sur mobile ayant vu /pricing »"
},
"shared": {
"type": "boolean",
"description": "Visible par toute personne ayant accès au site"
},
"mine": {
"type": "boolean",
"description": "Créé par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
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
Permission : analytics.read
curl -X POST https://privatusanalytics.com/sites/:site_id/segments/preview.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"filters": {
"type": "array",
"items": {},
"description": "Filtres, qui doivent tous correspondre. Chaque élément est une condition [\"dimension\", \"operator\", \"value\"], ou {\"any\": [conditions]} lorsqu’une seule condition parmi plusieurs suffit. Dimensions : page, entry_page, exit_page, hostname, channel, referrer, referrer_url, ref, utm_source, utm_medium, utm_campaign, utm_content, utm_term, country (code ISO, par exemple US), language, device (desktop, mobile, tablet, tv, other), browser, browser_version, os, os_version, screen, goal (identifiant d’objectif), event (nom d’événement personnalisé) et prop:<key> (propriété d’événement personnalisé). Opérateurs : is, is_not, contains, not_contains, starts_with, regex, not_regex, any_of et none_of (la valeur est une liste), gt et lt (un nombre), between (une liste de deux nombres). Les lignes du formulaire de segment sont aussi acceptées : {\"dimension\", \"operator\", \"value\", \"property\" (pour la dimension prop), \"join\": \"and\" ou \"or\" (or combine la ligne avec la précédente)}. Exemple : [[\"country\", \"is\", \"US\"], [\"device\", \"is\", \"mobile\"], {\"any\": [[\"page\", \"starts_with\", \"/pricing\"], [\"goal\", \"is\", \"goal_7Q2K9XH3AB\"]]}]",
"examples": [
[
[
"country",
"is",
"US"
],
[
"device",
"is",
"mobile"
],
{
"any": [
[
"page",
"starts_with",
"/pricing"
],
[
"goal",
"is",
"goal_7Q2K9XH3AB"
]
]
}
]
],
"default": []
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/segments/:id.json
Obtenir un segment
segments_get
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/segments/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de segment, par ex. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "L’utilité du segment, ou null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filtres au format des filtres de statistiques : des conditions [\"dimension\", \"operator\", \"value\"] qui doivent toutes correspondre, et des groupes {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Les filtres en langage naturel, par exemple « Visiteurs des États-Unis sur mobile ayant vu /pricing »"
},
"shared": {
"type": "boolean",
"description": "Visible par toute personne ayant accès au site"
},
"mine": {
"type": "boolean",
"description": "Créé par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:site_id/segments/:id.json
Renommer un segment ou modifier ses filtres ou son partage
segments_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/sites/:site_id/segments/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom du segment"
},
"description": {
"type": "string",
"description": "Note facultative sur l’utilité du segment (300 caractères au plus, vide pour l’effacer)"
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres de remplacement, au même format qu’à la création. Filtres, qui doivent tous correspondre. Chaque élément est une condition [\"dimension\", \"operator\", \"value\"], ou {\"any\": [conditions]} lorsqu’une seule condition parmi plusieurs suffit. Dimensions : page, entry_page, exit_page, hostname, channel, referrer, referrer_url, ref, utm_source, utm_medium, utm_campaign, utm_content, utm_term, country (code ISO, par exemple US), language, device (desktop, mobile, tablet, tv, other), browser, browser_version, os, os_version, screen, goal (identifiant d’objectif), event (nom d’événement personnalisé) et prop:<key> (propriété d’événement personnalisé). Opérateurs : is, is_not, contains, not_contains, starts_with, regex, not_regex, any_of et none_of (la valeur est une liste), gt et lt (un nombre), between (une liste de deux nombres). Les lignes du formulaire de segment sont aussi acceptées : {\"dimension\", \"operator\", \"value\", \"property\" (pour la dimension prop), \"join\": \"and\" ou \"or\" (or combine la ligne avec la précédente)}. Exemple : [[\"country\", \"is\", \"US\"], [\"device\", \"is\", \"mobile\"], {\"any\": [[\"page\", \"starts_with\", \"/pricing\"], [\"goal\", \"is\", \"goal_7Q2K9XH3AB\"]]}]",
"examples": [
[
[
"country",
"is",
"US"
],
[
"device",
"is",
"mobile"
],
{
"any": [
[
"page",
"starts_with",
"/pricing"
],
[
"goal",
"is",
"goal_7Q2K9XH3AB"
]
]
}
]
]
},
"shared": {
"type": "boolean",
"description": "Visible par tous ceux qui ont accès au site"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de segment, par ex. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "L’utilité du segment, ou null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filtres au format des filtres de statistiques : des conditions [\"dimension\", \"operator\", \"value\"] qui doivent toutes correspondre, et des groupes {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Les filtres en langage naturel, par exemple « Visiteurs des États-Unis sur mobile ayant vu /pricing »"
},
"shared": {
"type": "boolean",
"description": "Visible par toute personne ayant accès au site"
},
"mine": {
"type": "boolean",
"description": "Créé par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
Site web
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
curl https://privatusanalytics.com/changelog.json
{
"type": "object",
"properties": {
"area": {
"type": "string",
"description": "Uniquement les entrées de ce domaine du produit",
"enum": [
"product",
"dashboard",
"tracker",
"privacy",
"api",
"integrations",
"billing",
"docs"
]
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’entrée, par ex. chg_7Q2K9XH3AB"
},
"title": {
"type": "string",
"description": "Titre"
},
"area": {
"type": "string",
"description": "Domaine du produit, par ex. dashboard, tracker, api"
},
"body": {
"type": "string",
"description": "Corps en Markdown"
},
"published_at": {
"type": "string",
"format": "date-time",
"description": "Date de publication"
},
"url": {
"type": "string",
"description": "Lien permanent"
}
}
}
}
GET
/changelog/:id.json
Obtenir une entrée du journal des modifications
changelog_get
Permission : public
curl https://privatusanalytics.com/changelog/:id.json
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’entrée, par ex. chg_7Q2K9XH3AB"
},
"title": {
"type": "string",
"description": "Titre"
},
"area": {
"type": "string",
"description": "Domaine du produit, par ex. dashboard, tracker, api"
},
"body": {
"type": "string",
"description": "Corps en Markdown"
},
"published_at": {
"type": "string",
"format": "date-time",
"description": "Date de publication"
},
"url": {
"type": "string",
"description": "Lien permanent"
}
}
}
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)
curl -X POST https://privatusanalytics.com/contact.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Votre nom",
"examples": [
"Ada Lovelace"
]
},
"email": {
"type": "string",
"description": "Adresse où nous devons répondre",
"examples": [
"[email protected]"
]
},
"company": {
"type": "string",
"description": "Société ou organisation (facultatif)"
},
"topic": {
"type": "string",
"description": "Sujet du message",
"enum": [
"general",
"sales",
"support",
"privacy",
"security",
"partnerships",
"press"
],
"default": "general"
},
"message": {
"type": "string",
"description": "Votre message (10 à 5 000 caractères)"
},
"website": {
"type": "string",
"description": "Laissez vide. Piège à spam pour les bots. Les envois remplis sont ignorés"
}
},
"required": [
"name",
"email",
"message"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Toujours true lorsque l’envoi a été accepté"
},
"message": {
"type": "string",
"description": "Ce qui se passe ensuite"
}
}
}
POST
/newsletter/confirm.json
Confirmer un abonnement à la newsletter (jeton signé)
newsletter_confirm
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X POST https://privatusanalytics.com/newsletter/confirm.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Jeton signé de l’e-mail de confirmation"
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Toujours true lorsque l’envoi a été accepté"
},
"message": {
"type": "string",
"description": "Ce qui se passe ensuite"
}
}
}
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)
curl -X POST https://privatusanalytics.com/newsletter.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Adresse e-mail à abonner. Un lien de confirmation lui est envoyé",
"examples": [
"[email protected]"
]
},
"website": {
"type": "string",
"description": "Laissez vide. Piège à spam pour les bots. Les envois remplis sont ignorés"
}
},
"required": [
"email"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Toujours true lorsque l’envoi a été accepté"
},
"message": {
"type": "string",
"description": "Ce qui se passe ensuite"
}
}
}
POST
/newsletter/unsubscribe.json
Se désabonner avec un jeton de lien signé
newsletter_unsubscribe
Permission : public
· HTTP uniquement (pas un outil MCP)
curl -X POST https://privatusanalytics.com/newsletter/unsubscribe.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Jeton signé du lien de désabonnement"
},
"list": {
"type": "string",
"description": "newsletter (par défaut : la liste concernée par le lien) ou marketing (tous les e-mails marketing)",
"enum": [
"newsletter",
"marketing"
]
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Toujours true lorsque l’envoi a été accepté"
},
"message": {
"type": "string",
"description": "Ce qui se passe ensuite"
}
}
}
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
curl https://privatusanalytics.com/pricing.json
{
"type": "object",
"properties": {
"events": {
"type": "integer",
"description": "Pages vues et événements personnalisés attendus par mois. Renvoie le palier correspondant dans `recommendation`",
"examples": [
750000
]
},
"interval": {
"type": "string",
"description": "Intervalle de facturation des prix affichés : month, ou year (10 fois le prix mensuel)",
"enum": [
"month",
"year"
],
"default": "month"
}
},
"required": []
}
{
"type": "object",
"properties": {
"currency": {
"type": "string",
"description": "Devise de chaque prix (USD)"
},
"tax_included": {
"type": "boolean",
"description": "Toujours true. Les prix incluent la TVA ou la taxe de vente, le prix affiché est donc le prix payé"
},
"interval": {
"type": "string",
"description": "month ou year. Les prix sont pour cet intervalle"
},
"annual_multiplier": {
"type": "integer",
"description": "Prix annuel = prix mensuel x ce facteur (deux mois offerts)"
},
"free_events": {
"type": "integer",
"description": "Événements mensuels inclus dans le forfait Free"
},
"badge_bonus": {
"type": "integer",
"description": "Événements gratuits supplémentaires par mois lorsque le badge facultatif est affiché"
},
"tiers": {
"type": "array",
"items": {
"type": "object"
},
"description": "Échelle d’événements : prix { events, pro, business } pour l’intervalle (pro vaut null lorsque seul Business est proposé), plus les prix mensuels"
},
"plans": {
"type": "array",
"items": {
"type": "object"
},
"description": "Forfaits avec { id, name, from_price, limits }. Des limites à null signifient illimité"
},
"counted": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ce qui compte comme un événement facturable"
},
"not_counted": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ce qui ne compte jamais dans l’utilisation"
},
"recommendation": {
"anyOf": [
{
"type": "object",
"description": "{ events, plan, tier_events, price } pour l’entrée `events`, ou null lorsqu’aucun volume n’a été donné"
},
{
"type": "null"
}
]
}
}
}
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
curl https://privatusanalytics.com/status.json
{
"type": "object",
"properties": {
"fresh": {
"type": "boolean",
"description": "Ignorer le cache de 15 secondes et vérifier à nouveau maintenant",
"default": false
}
},
"required": []
}
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Global : operational, degraded ou outage"
},
"checked_at": {
"type": "string",
"format": "date-time",
"description": "Moment d’exécution des vérifications (en cache jusqu’à 15 s)"
},
"components": {
"type": "array",
"items": {
"type": "object"
},
"description": "Par composant : { id, name, status, detail, latency_ms }, plus queue_latency_s et queue_depth pour les files"
}
}
}
GET
/tools/consent-gap.json
Estimer le trafic manqué par les outils d’analytics basés sur le consentement
tools_consent_gap
Permission : public
curl https://privatusanalytics.com/tools/consent-gap.json
{
"type": "object",
"properties": {
"monthly_visitors": {
"type": "integer",
"description": "Visiteurs par mois (d’après vos journaux serveur ou votre analytics actuel)",
"examples": [
50000
]
},
"consent_rate": {
"type": "number",
"description": "Pourcentage de visiteurs qui acceptent les cookies d’analytics dans votre bandeau (0-100)",
"examples": [
55
]
},
"adblock_share": {
"type": "number",
"description": "Pourcentage de visiteurs dont les bloqueurs empêchent les scripts d’analytics (0-100)",
"default": 25.0
}
},
"required": [
"monthly_visitors",
"consent_rate"
]
}
{
"type": "object",
"properties": {
"monthly_visitors": {
"type": "integer",
"description": "Entrée : visiteurs par mois"
},
"consent_rate": {
"type": "number",
"description": "Entrée : pourcentage qui accepte les cookies d’analytics"
},
"adblock_share": {
"type": "number",
"description": "Entrée : pourcentage dont les bloqueurs arrêtent les scripts"
},
"measured_with_consent": {
"type": "integer",
"description": "Visiteurs qu’un outil basé sur le consentement peut mesurer"
},
"missed": {
"type": "integer",
"description": "Visiteurs qu’il manque"
},
"missed_percent": {
"type": "number",
"description": "Part des visiteurs manqués, en pourcentage"
},
"measured_cookieless": {
"type": "integer",
"description": "Visiteurs qu’un outil sans cookies et sans bandeau peut mesurer, s’il est bloqué dans la même proportion"
},
"recovered_by_cookieless": {
"type": "integer",
"description": "Différence entre les estimations sans cookies et basée sur le consentement"
}
}
}
GET
/tools/header-checker.json
Vérifier le Referrer-Policy et la CSP d’une page pour l’analytics
tools_header_check
Permission : public
curl https://privatusanalytics.com/tools/header-checker.json
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Page publique à vérifier (http ou https)",
"examples": [
"https://example.com"
]
}
},
"required": [
"url"
]
}
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL finale après redirections"
},
"status": {
"type": "integer",
"description": "Statut HTTP de la réponse finale"
},
"findings": {
"type": "array",
"items": {
"type": "object"
},
"description": "Vérifications : { check, value, level (ok, warn, info), note }"
}
}
}
GET
/tools/privacy-policy-generator.json
Rédiger un paragraphe de politique de confidentialité pour Privatus Analytics
tools_privacy_policy
Permission : public
curl https://privatusanalytics.com/tools/privacy-policy-generator.json
{
"type": "object",
"properties": {
"site_name": {
"type": "string",
"description": "Le nom de votre site web ou de votre société",
"examples": [
"Example Books"
]
},
"contact_email": {
"type": "string",
"description": "Contact confidentialité à mentionner (facultatif)"
},
"honors_gpc": {
"type": "boolean",
"description": "Indique si Do Not Track et Global Privacy Control sont respectés (par défaut)",
"default": true
}
},
"required": [
"site_name"
]
}
{
"type": "object",
"properties": {
"site_name": {
"type": "string",
"description": "Entrée : nom du site ou de la société"
},
"paragraphs": {
"type": "array",
"items": {
"type": "string"
},
"description": "Le texte de la politique, un paragraphe par élément"
},
"text": {
"type": "string",
"description": "Les paragraphes joints par des lignes vides"
}
}
}
GET
/tools/qr-code.json
Générer un QR code au format SVG
tools_qr_code
Permission : public
curl https://privatusanalytics.com/tools/qr-code.json
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "URL ou texte à encoder (jusqu’à 1 000 caractères)",
"examples": [
"https://example.com/?utm_source=poster"
]
},
"level": {
"type": "string",
"description": "Correction d’erreur : l (7 %), m (15 %), q (25 %), h (30 %)",
"enum": [
"l",
"m",
"q",
"h"
],
"default": "m"
}
},
"required": [
"text"
]
}
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Le texte encodé"
},
"level": {
"type": "string",
"description": "Niveau de correction d’erreur"
},
"size": {
"type": "integer",
"description": "Modules par côté"
},
"svg": {
"type": "string",
"description": "Document SVG autonome"
}
}
}
GET
/tools/tracker-scanner.json
Lister les cookies et traqueurs connus d’une page
tools_tracker_scan
Permission : public
curl https://privatusanalytics.com/tools/tracker-scanner.json
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Page publique à analyser (http ou https)",
"examples": [
"https://example.com"
]
}
},
"required": [
"url"
]
}
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL finale après redirections"
},
"status": {
"type": "integer",
"description": "Statut HTTP de la réponse finale"
},
"truncated": {
"type": "boolean",
"description": "True lorsque la page dépassait 1 Mo et que seul le premier Mo a été analysé"
},
"cookies": {
"type": "array",
"items": {
"type": "object"
},
"description": "Cookies définis par la réponse HTTP : { name, domain, path, expires, secure, http_only, same_site }. Les valeurs ne sont jamais renvoyées"
},
"trackers": {
"type": "array",
"items": {
"type": "object"
},
"description": "Outils connus référencés par la page : { name, category, match, evidence }"
},
"third_party_hosts": {
"type": "array",
"items": {
"type": "string"
},
"description": "Autres domaines depuis lesquels la page charge des ressources"
}
}
}
GET
/tools/utm-builder.json
Générer une URL de campagne avec paramètres UTM
tools_utm_builder
Permission : public
curl https://privatusanalytics.com/tools/utm-builder.json
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL de la page de destination",
"examples": [
"https://example.com/pricing"
]
},
"source": {
"type": "string",
"description": "utm_source : origine du trafic",
"examples": [
"newsletter"
]
},
"medium": {
"type": "string",
"description": "utm_medium : le canal, par ex. email, cpc, social",
"examples": [
"email"
]
},
"campaign": {
"type": "string",
"description": "utm_campaign : le nom de la campagne",
"examples": [
"fall_launch"
]
},
"term": {
"type": "string",
"description": "utm_term : mot-clé de recherche payante (facultatif)"
},
"content": {
"type": "string",
"description": "utm_content : quel lien ou quelle création (facultatif)"
}
},
"required": [
"url",
"source",
"medium",
"campaign"
]
}
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "L’URL de la page de destination avec les paramètres UTM"
},
"params": {
"type": "object",
"description": "Les paramètres UTM ajoutés"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Problèmes à corriger (casse, espaces, données personnelles)"
}
}
}
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)
curl -X POST https://privatusanalytics.com/waitlist.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Adresse e-mail à prévenir",
"examples": [
"[email protected]"
]
},
"list": {
"type": "string",
"description": "Liste d’attente à rejoindre",
"enum": [
"eu_hosting"
],
"default": "eu_hosting"
},
"website": {
"type": "string",
"description": "Laissez vide. Piège à spam pour les bots. Les envois remplis sont ignorés"
}
},
"required": [
"email"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Toujours true lorsque l’envoi a été accepté"
},
"message": {
"type": "string",
"description": "Ce qui se passe ensuite"
}
}
}
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
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/data_reset.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"from": {
"type": "string",
"format": "date",
"description": "Premier jour à supprimer (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Dernier jour à supprimer, inclus"
},
"confirm": {
"type": "string",
"description": "Saisissez le domaine pour confirmer"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"from",
"to",
"confirm",
"site_id"
]
}
{
"type": "object"
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/filter_stats.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "bot (bots filtrés), rule (règles de trafic) ou redaction (masquage des données personnelles)",
"enum": [
"bot",
"rule",
"redaction"
],
"default": "bot"
},
"days": {
"type": "integer",
"description": "Nombre de jours à remonter (1-395)",
"default": 30
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/access.json
Lister les membres et indiquer s’ils peuvent voir ce site
sites_access_list
Permission : members.manage
curl https://privatusanalytics.com/sites/:site_id/access.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"membership_id": {
"type": "string",
"format": "uuid",
"description": "Identifiant d’appartenance"
},
"email": {
"type": "string"
},
"name": {
"type": "string"
},
"role": {
"type": "string"
},
"access": {
"type": "boolean",
"description": "Peut voir ce site"
},
"locked": {
"type": "boolean",
"description": "Les propriétaires et administrateurs ont toujours accès"
}
}
}
PATCH
/sites/:site_id/access.json
Accorder ou retirer l’accès d’un membre à ce site
sites_access_update
Permission : members.manage
curl -X PATCH https://privatusanalytics.com/sites/:site_id/access.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"membership_id": {
"type": "string",
"description": "Identifiant d’appartenance issu de sites_access_list"
},
"access": {
"type": "boolean",
"description": "true pour accorder l’accès, false pour le retirer"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"membership_id",
"access",
"site_id"
]
}
{
"type": "object",
"properties": {
"membership_id": {
"type": "string",
"format": "uuid",
"description": "Identifiant d’appartenance"
},
"email": {
"type": "string"
},
"name": {
"type": "string"
},
"role": {
"type": "string"
},
"access": {
"type": "boolean",
"description": "Peut voir ce site"
},
"locked": {
"type": "boolean",
"description": "Les propriétaires et administrateurs ont toujours accès"
}
}
}
POST
/sites/:site_id/favorite.json
Mettre un site en favori (épinglé en premier dans Tous les sites)
sites_favorite
Permission : analytics.read
curl -X POST https://privatusanalytics.com/sites/:site_id/favorite.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du site utilisé dans le code de suivi"
},
"workspace_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
}
},
"multi_domain_mode": {
"type": "string"
},
"timezone": {
"type": "string"
},
"currency": {
"type": "string"
},
"week_start": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"honor_dnt": {
"type": "boolean"
},
"honor_gpc": {
"type": "boolean"
},
"pii_scrubber": {
"type": "boolean"
},
"redaction_rules": {
"type": "array"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
}
},
"path_masks": {
"type": "array"
},
"retention_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bot_filtering": {
"type": "boolean"
},
"traffic_rule_modes": {
"type": "object"
},
"vitals_sample_rate": {
"type": "integer"
},
"conversion_denominator": {
"type": "string"
},
"public_dashboard": {
"type": "boolean"
},
"public_indexable": {
"type": "boolean"
},
"ingest_key_prefix": {
"anyOf": [
{
"type": "string",
"description": "Début de la clé d’ingestion serveur"
},
{
"type": "null"
}
]
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"first_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string",
"description": "Code de suivi HTML"
},
"favorite": {
"type": "boolean",
"description": "Mis en favori par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/favorite.json
Retirer un site des favoris
sites_unfavorite
Permission : analytics.read
curl -X DELETE https://privatusanalytics.com/sites/:site_id/favorite.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du site utilisé dans le code de suivi"
},
"workspace_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
}
},
"multi_domain_mode": {
"type": "string"
},
"timezone": {
"type": "string"
},
"currency": {
"type": "string"
},
"week_start": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"honor_dnt": {
"type": "boolean"
},
"honor_gpc": {
"type": "boolean"
},
"pii_scrubber": {
"type": "boolean"
},
"redaction_rules": {
"type": "array"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
}
},
"path_masks": {
"type": "array"
},
"retention_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bot_filtering": {
"type": "boolean"
},
"traffic_rule_modes": {
"type": "object"
},
"vitals_sample_rate": {
"type": "integer"
},
"conversion_denominator": {
"type": "string"
},
"public_dashboard": {
"type": "boolean"
},
"public_indexable": {
"type": "boolean"
},
"ingest_key_prefix": {
"anyOf": [
{
"type": "string",
"description": "Début de la clé d’ingestion serveur"
},
{
"type": "null"
}
]
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"first_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string",
"description": "Code de suivi HTML"
},
"favorite": {
"type": "boolean",
"description": "Mis en favori par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/setup.json
État de l’installation et code d’intégration d’un site
sites_setup_get
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/setup.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/transfers/:token/accept.json
Accepter le transfert d’un site vers l’un de vos espaces de travail
site_transfers_accept
Permission : public
curl -X POST https://privatusanalytics.com/transfers/:token/accept.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Espace de travail dans lequel déplacer le site (ws_…)"
},
"token": {
"type": "string",
"description": "Token de la ressource"
}
},
"required": [
"workspace_id",
"token"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Site en cours de transfert"
},
"site_domain": {
"type": "string"
},
"from_workspace": {
"type": "string",
"description": "Nom de l’espace de travail actuel"
},
"to_workspace_id": {
"anyOf": [
{
"type": "string",
"description": "Espace de travail destinataire"
},
{
"type": "null"
}
]
},
"to_email": {
"type": "string",
"description": "E-mail du destinataire"
},
"status": {
"type": "string",
"description": "pending, accepted ou canceled"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/transfer.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "E-mail de la personne qui recevra le site (elle choisit l’un de ses espaces de travail)"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"email",
"site_id"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Site en cours de transfert"
},
"site_domain": {
"type": "string"
},
"from_workspace": {
"type": "string",
"description": "Nom de l’espace de travail actuel"
},
"to_workspace_id": {
"anyOf": [
{
"type": "string",
"description": "Espace de travail destinataire"
},
{
"type": "null"
}
]
},
"to_email": {
"type": "string",
"description": "E-mail du destinataire"
},
"status": {
"type": "string",
"description": "pending, accepted ou canceled"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/transfer.json
Annuler un transfert de site en attente
sites_transfer_cancel
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/transfer.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Site en cours de transfert"
},
"site_domain": {
"type": "string"
},
"from_workspace": {
"type": "string",
"description": "Nom de l’espace de travail actuel"
},
"to_workspace_id": {
"anyOf": [
{
"type": "string",
"description": "Espace de travail destinataire"
},
{
"type": "null"
}
]
},
"to_email": {
"type": "string",
"description": "E-mail du destinataire"
},
"status": {
"type": "string",
"description": "pending, accepted ou canceled"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/transfers/:token.json
Obtenir un transfert en attente à partir du jeton reçu par e-mail
site_transfers_get
Permission : public
curl https://privatusanalytics.com/transfers/:token.json
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token de la ressource"
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Site en cours de transfert"
},
"site_domain": {
"type": "string"
},
"from_workspace": {
"type": "string",
"description": "Nom de l’espace de travail actuel"
},
"to_workspace_id": {
"anyOf": [
{
"type": "string",
"description": "Espace de travail destinataire"
},
{
"type": "null"
}
]
},
"to_email": {
"type": "string",
"description": "E-mail du destinataire"
},
"status": {
"type": "string",
"description": "pending, accepted ou canceled"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/workspaces/:workspace_id/sites.json
Ajouter un site
sites_create
Permission : sites.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sites.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domaine principal, par ex. example.com",
"examples": [
"example.com"
]
},
"name": {
"type": "string",
"description": "Nom d’affichage (par défaut, le domaine)"
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports"
},
"currency": {
"type": "string",
"description": "Devise des revenus (ISO 4217)"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"domain",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du site utilisé dans le code de suivi"
},
"workspace_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
}
},
"multi_domain_mode": {
"type": "string"
},
"timezone": {
"type": "string"
},
"currency": {
"type": "string"
},
"week_start": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"honor_dnt": {
"type": "boolean"
},
"honor_gpc": {
"type": "boolean"
},
"pii_scrubber": {
"type": "boolean"
},
"redaction_rules": {
"type": "array"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
}
},
"path_masks": {
"type": "array"
},
"retention_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bot_filtering": {
"type": "boolean"
},
"traffic_rule_modes": {
"type": "object"
},
"vitals_sample_rate": {
"type": "integer"
},
"conversion_denominator": {
"type": "string"
},
"public_dashboard": {
"type": "boolean"
},
"public_indexable": {
"type": "boolean"
},
"ingest_key_prefix": {
"anyOf": [
{
"type": "string",
"description": "Début de la clé d’ingestion serveur"
},
{
"type": "null"
}
]
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"first_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string",
"description": "Code de suivi HTML"
},
"favorite": {
"type": "boolean",
"description": "Mis en favori par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:id.json
Supprimer un site (purgé après 7 jours)
sites_delete
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"confirm": {
"type": "string",
"description": "Saisissez le domaine pour confirmer"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"confirm",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du site utilisé dans le code de suivi"
},
"workspace_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
}
},
"multi_domain_mode": {
"type": "string"
},
"timezone": {
"type": "string"
},
"currency": {
"type": "string"
},
"week_start": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"honor_dnt": {
"type": "boolean"
},
"honor_gpc": {
"type": "boolean"
},
"pii_scrubber": {
"type": "boolean"
},
"redaction_rules": {
"type": "array"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
}
},
"path_masks": {
"type": "array"
},
"retention_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bot_filtering": {
"type": "boolean"
},
"traffic_rule_modes": {
"type": "object"
},
"vitals_sample_rate": {
"type": "integer"
},
"conversion_denominator": {
"type": "string"
},
"public_dashboard": {
"type": "boolean"
},
"public_indexable": {
"type": "boolean"
},
"ingest_key_prefix": {
"anyOf": [
{
"type": "string",
"description": "Début de la clé d’ingestion serveur"
},
{
"type": "null"
}
]
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"first_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string",
"description": "Code de suivi HTML"
},
"favorite": {
"type": "boolean",
"description": "Mis en favori par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/sites.json
Lister les sites d’un espace de travail
sites_list
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/sites.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Filtrer par domaine ou nom"
},
"label": {
"type": "string",
"description": "Uniquement les sites avec cette étiquette"
},
"sort": {
"type": "string",
"description": "position (votre ordre), name, ou visitors sur les 30 derniers jours (les plus élevés en premier)",
"enum": [
"position",
"name",
"visitors"
],
"default": "position"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du site utilisé dans le code de suivi"
},
"workspace_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
}
},
"multi_domain_mode": {
"type": "string"
},
"timezone": {
"type": "string"
},
"currency": {
"type": "string"
},
"week_start": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"honor_dnt": {
"type": "boolean"
},
"honor_gpc": {
"type": "boolean"
},
"pii_scrubber": {
"type": "boolean"
},
"redaction_rules": {
"type": "array"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
}
},
"path_masks": {
"type": "array"
},
"retention_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bot_filtering": {
"type": "boolean"
},
"traffic_rule_modes": {
"type": "object"
},
"vitals_sample_rate": {
"type": "integer"
},
"conversion_denominator": {
"type": "string"
},
"public_dashboard": {
"type": "boolean"
},
"public_indexable": {
"type": "boolean"
},
"ingest_key_prefix": {
"anyOf": [
{
"type": "string",
"description": "Début de la clé d’ingestion serveur"
},
{
"type": "null"
}
]
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"first_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string",
"description": "Code de suivi HTML"
},
"favorite": {
"type": "boolean",
"description": "Mis en favori par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/sites/:id.json
Obtenir un site et tous ses paramètres
sites_get
Permission : analytics.read
curl https://privatusanalytics.com/sites/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du site utilisé dans le code de suivi"
},
"workspace_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
}
},
"multi_domain_mode": {
"type": "string"
},
"timezone": {
"type": "string"
},
"currency": {
"type": "string"
},
"week_start": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"honor_dnt": {
"type": "boolean"
},
"honor_gpc": {
"type": "boolean"
},
"pii_scrubber": {
"type": "boolean"
},
"redaction_rules": {
"type": "array"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
}
},
"path_masks": {
"type": "array"
},
"retention_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bot_filtering": {
"type": "boolean"
},
"traffic_rule_modes": {
"type": "object"
},
"vitals_sample_rate": {
"type": "integer"
},
"conversion_denominator": {
"type": "string"
},
"public_dashboard": {
"type": "boolean"
},
"public_indexable": {
"type": "boolean"
},
"ingest_key_prefix": {
"anyOf": [
{
"type": "string",
"description": "Début de la clé d’ingestion serveur"
},
{
"type": "null"
}
]
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"first_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string",
"description": "Code de suivi HTML"
},
"favorite": {
"type": "boolean",
"description": "Mis en favori par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:id.json
Mettre à jour les paramètres d’un site
sites_update
Permission : sites.manage
curl -X PATCH https://privatusanalytics.com/sites/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’affichage"
},
"domain": {
"type": "string",
"description": "Domaine principal"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms d’hôte supplémentaires"
},
"multi_domain_mode": {
"type": "string",
"description": "combined : un même visiteur sur tous les domaines",
"enum": [
"combined",
"separate"
]
},
"timezone": {
"type": "string",
"description": "Fuseau horaire des rapports"
},
"currency": {
"type": "string",
"description": "Devise des revenus (ISO 4217)"
},
"week_start": {
"type": "integer",
"description": "0 = dimanche, 1 = lundi"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Étiquettes pour regrouper les sites"
},
"honor_dnt": {
"type": "boolean",
"description": "Ignorer les visiteurs qui envoient DNT"
},
"honor_gpc": {
"type": "boolean",
"description": "Ignorer les visiteurs qui envoient GPC"
},
"pii_scrubber": {
"type": "boolean",
"description": "Masquer les e-mails, jetons, identifiants"
},
"redaction_rules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"pattern": {
"type": "string"
}
}
},
"description": "Expressions régulières de masquage personnalisées"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
},
"description": "Paramètres de requête à conserver dans les chemins"
},
"path_masks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"pattern": {
"type": "string"
},
"replacement": {
"type": "string"
}
}
},
"description": "Règles de masquage de chemin, par ex. /u/* -> /u/:id"
},
"retention_months": {
"type": "integer",
"description": "Supprimer les données plus anciennes que cette durée"
},
"bot_filtering": {
"type": "boolean",
"description": "Filtrer le trafic des bots"
},
"traffic_rule_modes": {
"type": "object",
"additionalProperties": true,
"description": "block ou allow pour chaque liste de règles de trafic"
},
"vitals_sample_rate": {
"type": "integer",
"description": "% d’échantillonnage des Web Vitals"
},
"conversion_denominator": {
"type": "string",
"description": "Taux de conversion sur les visites ou les visiteurs",
"enum": [
"visits",
"visitors"
]
},
"public_dashboard": {
"type": "boolean",
"description": "Toute personne disposant du lien peut voir les statistiques"
},
"public_indexable": {
"type": "boolean",
"description": "Autoriser les moteurs de recherche à indexer la page publique"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du site utilisé dans le code de suivi"
},
"workspace_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
}
},
"multi_domain_mode": {
"type": "string"
},
"timezone": {
"type": "string"
},
"currency": {
"type": "string"
},
"week_start": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"honor_dnt": {
"type": "boolean"
},
"honor_gpc": {
"type": "boolean"
},
"pii_scrubber": {
"type": "boolean"
},
"redaction_rules": {
"type": "array"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
}
},
"path_masks": {
"type": "array"
},
"retention_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bot_filtering": {
"type": "boolean"
},
"traffic_rule_modes": {
"type": "object"
},
"vitals_sample_rate": {
"type": "integer"
},
"conversion_denominator": {
"type": "string"
},
"public_dashboard": {
"type": "boolean"
},
"public_indexable": {
"type": "boolean"
},
"ingest_key_prefix": {
"anyOf": [
{
"type": "string",
"description": "Début de la clé d’ingestion serveur"
},
{
"type": "null"
}
]
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"first_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string",
"description": "Code de suivi HTML"
},
"favorite": {
"type": "boolean",
"description": "Mis en favori par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Suivi
POST
/sites/:site_id/tracking/ingest_key.json
Créer ou renouveler la clé d’ingestion serveur (affichée une seule fois)
tracking_ingest_key_rotate
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/tracking/ingest_key.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site"
},
"key": {
"type": "string",
"description": "La clé d’ingestion. Affichée une seule fois : conservez-la maintenant. Envoyez-la comme jeton Bearer à POST /api/events"
},
"prefix": {
"type": "string",
"description": "Préfixe de la clé affiché dans les paramètres"
}
}
}
DELETE
/sites/:site_id/tracking/ingest_key.json
Révoquer la clé d’ingestion serveur
tracking_ingest_key_revoke
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/tracking/ingest_key.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du site utilisé dans le code de suivi"
},
"workspace_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
}
},
"multi_domain_mode": {
"type": "string"
},
"timezone": {
"type": "string"
},
"currency": {
"type": "string"
},
"week_start": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"honor_dnt": {
"type": "boolean"
},
"honor_gpc": {
"type": "boolean"
},
"pii_scrubber": {
"type": "boolean"
},
"redaction_rules": {
"type": "array"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
}
},
"path_masks": {
"type": "array"
},
"retention_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bot_filtering": {
"type": "boolean"
},
"traffic_rule_modes": {
"type": "object"
},
"vitals_sample_rate": {
"type": "integer"
},
"conversion_denominator": {
"type": "string"
},
"public_dashboard": {
"type": "boolean"
},
"public_indexable": {
"type": "boolean"
},
"ingest_key_prefix": {
"anyOf": [
{
"type": "string",
"description": "Début de la clé d’ingestion serveur"
},
{
"type": "null"
}
]
},
"verified_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"first_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_event_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"snippet": {
"type": "string",
"description": "Code de suivi HTML"
},
"favorite": {
"type": "boolean",
"description": "Mis en favori par vous"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/tracking/verify.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Page à vérifier (par défaut https://<domaine>/)"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/tracking/snippet.json
Générer le code de suivi pour les options choisies
tracking_snippet
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/tracking/snippet.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"modules": {
"type": "array",
"items": {
"type": "string"
},
"description": "Modules facultatifs : auto (liens sortants, téléchargements, formulaires, 404), engage (temps et défilement), vitals (Web Vitals), clicks",
"default": [
"engage"
]
},
"manual": {
"type": "boolean",
"description": "Désactiver la page vue automatique",
"default": false
},
"spa": {
"type": "string",
"description": "Suivi de la navigation des applications monopage",
"enum": [
"auto",
"history",
"hash",
"off"
],
"default": "auto"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ne suivre que ces noms d’hôte",
"default": []
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "Motifs glob de chemins à ne pas suivre, par ex. /admin/*",
"default": []
},
"query_params": {
"type": "array",
"items": {
"type": "string"
},
"description": "Paramètres de requête supplémentaires à conserver, par ex. page",
"default": []
},
"mask": {
"type": "array",
"items": {
"type": "string"
},
"description": "Masques de chemin côté client, par ex. /u/*->/u/:id",
"default": []
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
Synchronisation entrepôt
POST
/workspaces/:workspace_id/warehouses.json
Ajouter une destination d’entrepôt
warehouse_destinations_create
Permission : workspace.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/warehouses.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’affichage, par ex. Data lake"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites à envoyer (pa_…). Vide envoie tous les sites"
},
"bucket": {
"type": "string",
"description": "s3 : nom du bucket"
},
"region": {
"type": "string",
"description": "s3 : région, par ex. us-east-1 (auto pour R2)"
},
"prefix": {
"type": "string",
"description": "s3/azure : préfixe de chemin, par ex. privatus/events"
},
"endpoint": {
"type": "string",
"description": "s3 : point d’accès https pour un stockage compatible S3 (interopérabilité GCS, R2, MinIO)"
},
"access_key_id": {
"type": "string",
"description": "s3 : identifiant de clé d’accès"
},
"secret_access_key": {
"type": "string",
"description": "s3 : clé d’accès secrète (écriture seule)"
},
"service_account_json": {
"type": "string",
"description": "bigquery : clé JSON de compte de service avec BigQuery Data Editor (écriture seule)"
},
"project_id": {
"type": "string",
"description": "bigquery : identifiant du projet (par défaut : celui de la clé)"
},
"dataset": {
"type": "string",
"description": "bigquery : identifiant du jeu de données"
},
"table": {
"type": "string",
"description": "bigquery/snowflake : nom de la table (colonnes : schéma v1)"
},
"account": {
"type": "string",
"description": "snowflake : identifiant du compte, par ex. xy12345.us-east-1 ou myorg-myaccount"
},
"user": {
"type": "string",
"description": "snowflake : utilisateur avec authentification par paire de clés"
},
"private_key": {
"type": "string",
"description": "snowflake : clé privée RSA PEM (écriture seule)"
},
"database": {
"type": "string",
"description": "snowflake : base de données"
},
"schema": {
"type": "string",
"description": "snowflake : schéma"
},
"warehouse": {
"type": "string",
"description": "snowflake : entrepôt virtuel"
},
"role": {
"type": "string",
"description": "snowflake : rôle (facultatif)"
},
"sas_url": {
"type": "string",
"description": "azure : URL SAS du conteneur avec permission de création/écriture (écriture seule)"
},
"kind": {
"type": "string",
"description": "s3 (aussi GCS/R2/MinIO), bigquery, snowflake ou azure",
"enum": [
"s3",
"bigquery",
"snowflake",
"azure"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"kind",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de destination, par ex. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake ou azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination des données : s3://bucket/prefix, project.dataset.table, account/database.schema.table ou le conteneur Azure"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms des paramètres renseignés (les valeurs ne sont jamais renvoyées)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites envoyés (pa_…). Vide signifie tous les sites"
},
"schedule": {
"type": "string",
"description": "daily : 02:00 UTC, envoie le jour UTC précédent"
},
"schema_version": {
"type": "string",
"description": "Schéma de ligne envoyé"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/warehouses/:id.json
Supprimer une destination d’entrepôt
warehouse_destinations_delete
Permission : workspace.manage
curl -X DELETE https://privatusanalytics.com/warehouses/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de destination, par ex. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake ou azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination des données : s3://bucket/prefix, project.dataset.table, account/database.schema.table ou le conteneur Azure"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms des paramètres renseignés (les valeurs ne sont jamais renvoyées)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites envoyés (pa_…). Vide signifie tous les sites"
},
"schedule": {
"type": "string",
"description": "daily : 02:00 UTC, envoie le jour UTC précédent"
},
"schema_version": {
"type": "string",
"description": "Schéma de ligne envoyé"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/warehouses.json
Lister les destinations d’entrepôt
warehouse_destinations_list
Permission : workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/warehouses.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "Uniquement les destinations de ce type",
"enum": [
"s3",
"bigquery",
"snowflake",
"azure"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de destination, par ex. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake ou azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination des données : s3://bucket/prefix, project.dataset.table, account/database.schema.table ou le conteneur Azure"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms des paramètres renseignés (les valeurs ne sont jamais renvoyées)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites envoyés (pa_…). Vide signifie tous les sites"
},
"schedule": {
"type": "string",
"description": "daily : 02:00 UTC, envoie le jour UTC précédent"
},
"schema_version": {
"type": "string",
"description": "Schéma de ligne envoyé"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/warehouses/:id.json
Obtenir une destination d’entrepôt (sans secrets)
warehouse_destinations_get
Permission : workspace.manage
curl https://privatusanalytics.com/warehouses/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de destination, par ex. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake ou azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination des données : s3://bucket/prefix, project.dataset.table, account/database.schema.table ou le conteneur Azure"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms des paramètres renseignés (les valeurs ne sont jamais renvoyées)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites envoyés (pa_…). Vide signifie tous les sites"
},
"schedule": {
"type": "string",
"description": "daily : 02:00 UTC, envoie le jour UTC précédent"
},
"schema_version": {
"type": "string",
"description": "Schéma de ligne envoyé"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/warehouses/:id/sync.json
Mettre en file d’attente la synchronisation d’une journée maintenant
warehouse_destinations_sync
Permission : workspace.manage
curl -X POST https://privatusanalytics.com/warehouses/:id/sync.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "Jour UTC à envoyer, par ex. 2026-09-28 (par défaut : hier)"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de destination, par ex. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake ou azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination des données : s3://bucket/prefix, project.dataset.table, account/database.schema.table ou le conteneur Azure"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms des paramètres renseignés (les valeurs ne sont jamais renvoyées)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites envoyés (pa_…). Vide signifie tous les sites"
},
"schedule": {
"type": "string",
"description": "daily : 02:00 UTC, envoie le jour UTC précédent"
},
"schema_version": {
"type": "string",
"description": "Schéma de ligne envoyé"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/warehouses/:id.json
Mettre à jour une destination d’entrepôt (les secrets vides sont conservés)
warehouse_destinations_update
Permission : workspace.manage
curl -X PATCH https://privatusanalytics.com/warehouses/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’affichage, par ex. Data lake"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites à envoyer (pa_…). Vide envoie tous les sites"
},
"bucket": {
"type": "string",
"description": "s3 : nom du bucket"
},
"region": {
"type": "string",
"description": "s3 : région, par ex. us-east-1 (auto pour R2)"
},
"prefix": {
"type": "string",
"description": "s3/azure : préfixe de chemin, par ex. privatus/events"
},
"endpoint": {
"type": "string",
"description": "s3 : point d’accès https pour un stockage compatible S3 (interopérabilité GCS, R2, MinIO)"
},
"access_key_id": {
"type": "string",
"description": "s3 : identifiant de clé d’accès"
},
"secret_access_key": {
"type": "string",
"description": "s3 : clé d’accès secrète (écriture seule)"
},
"service_account_json": {
"type": "string",
"description": "bigquery : clé JSON de compte de service avec BigQuery Data Editor (écriture seule)"
},
"project_id": {
"type": "string",
"description": "bigquery : identifiant du projet (par défaut : celui de la clé)"
},
"dataset": {
"type": "string",
"description": "bigquery : identifiant du jeu de données"
},
"table": {
"type": "string",
"description": "bigquery/snowflake : nom de la table (colonnes : schéma v1)"
},
"account": {
"type": "string",
"description": "snowflake : identifiant du compte, par ex. xy12345.us-east-1 ou myorg-myaccount"
},
"user": {
"type": "string",
"description": "snowflake : utilisateur avec authentification par paire de clés"
},
"private_key": {
"type": "string",
"description": "snowflake : clé privée RSA PEM (écriture seule)"
},
"database": {
"type": "string",
"description": "snowflake : base de données"
},
"schema": {
"type": "string",
"description": "snowflake : schéma"
},
"warehouse": {
"type": "string",
"description": "snowflake : entrepôt virtuel"
},
"role": {
"type": "string",
"description": "snowflake : rôle (facultatif)"
},
"sas_url": {
"type": "string",
"description": "azure : URL SAS du conteneur avec permission de création/écriture (écriture seule)"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de destination, par ex. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake ou azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Destination des données : s3://bucket/prefix, project.dataset.table, account/database.schema.table ou le conteneur Azure"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms des paramètres renseignés (les valeurs ne sont jamais renvoyées)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sites envoyés (pa_…). Vide signifie tous les sites"
},
"schedule": {
"type": "string",
"description": "daily : 02:00 UTC, envoie le jour UTC précédent"
},
"schema_version": {
"type": "string",
"description": "Schéma de ligne envoyé"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"next_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
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
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id/cards/:index.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
},
"index": {
"type": "string",
"description": "Index de la ressource"
}
},
"required": [
"workspace_id",
"id",
"index"
]
}
{
"type": "object"
}
POST
/workspaces/:workspace_id/dashboards.json
Créer un tableau de bord personnalisé
dashboards_create
Permission : content.write
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/dashboards.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom du tableau de bord",
"examples": [
"Client: Acme"
]
},
"cards": {
"type": "array",
"items": {},
"description": "Cartes dans l’ordre (40 maximum) : [{\"type\": \"metric|chart|breakdown|goal|live|funnel|uptime|vitals\", \"site_id\": \"pa_…\", \"title\": \"optional\", \"params\": {\"period\": \"30d\", \"metric\": \"visitors\", \"dimension\": \"page\", \"funnel_id\": \"fun_…\"}}]. Les paramètres inutilisés par un type sont ignorés",
"default": []
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de tableau de bord, par ex. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Cartes dans l’ordre : [{type, site_id, title, params}]"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:workspace_id/dashboards/:id.json
Supprimer un tableau de bord personnalisé
dashboards_delete
Permission : content.write
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de tableau de bord, par ex. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Cartes dans l’ordre : [{type, site_id, title, params}]"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/dashboards.json
Lister les tableaux de bord personnalisés
dashboards_list
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de tableau de bord, par ex. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Cartes dans l’ordre : [{type, site_id, title, params}]"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/workspaces/:workspace_id/dashboards/:id.json
Obtenir un tableau de bord personnalisé et ses cartes
dashboards_get
Permission : analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de tableau de bord, par ex. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Cartes dans l’ordre : [{type, site_id, title, params}]"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/workspaces/:workspace_id/dashboards/:id.json
Renommer un tableau de bord personnalisé ou remplacer ses cartes
dashboards_update
Permission : content.write
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nouveau nom (inchangé si vide)"
},
"cards": {
"type": "array",
"items": {},
"description": "Remplace toutes les cartes. Cartes dans l’ordre (40 maximum) : [{\"type\": \"metric|chart|breakdown|goal|live|funnel|uptime|vitals\", \"site_id\": \"pa_…\", \"title\": \"optional\", \"params\": {\"period\": \"30d\", \"metric\": \"visitors\", \"dimension\": \"page\", \"funnel_id\": \"fun_…\"}}]. Les paramètres inutilisés par un type sont ignorés"
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de tableau de bord, par ex. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Cartes dans l’ordre : [{type, site_id, title, params}]"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
Webhooks
GET
/workspaces/:workspace_id/webhooks/:webhook_id/deliveries.json
Lister les envois d’un webhook
webhook_deliveries_list
Permission : workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:webhook_id/deliveries.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Uniquement les envois réussis ou échoués",
"enum": [
"succeeded",
"failed"
]
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"webhook_id": {
"type": "string",
"description": "Webhook de la ressource"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id",
"webhook_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’envoi, par ex. whd_123"
},
"event": {
"type": "string"
},
"status": {
"type": "string",
"description": "pending, succeeded ou failed"
},
"status_code": {
"anyOf": [
{
"type": "integer",
"description": "Statut HTTP de la dernière tentative"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Erreur de connexion de la dernière tentative"
},
{
"type": "null"
}
]
},
"attempt": {
"type": "integer"
},
"duration_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"payload": {
"type": "object"
},
"response_body": {
"anyOf": [
{
"type": "string",
"description": "2 000 premiers caractères"
},
{
"type": "null"
}
]
},
"delivered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/workspaces/:workspace_id/webhooks/:webhook_id/deliveries/:id/redeliver.json
Renvoyer un envoi
webhook_deliveries_redeliver
Permission : workspace.manage
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 '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"webhook_id": {
"type": "string",
"description": "Webhook de la ressource"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"webhook_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’envoi, par ex. whd_123"
},
"event": {
"type": "string"
},
"status": {
"type": "string",
"description": "pending, succeeded ou failed"
},
"status_code": {
"anyOf": [
{
"type": "integer",
"description": "Statut HTTP de la dernière tentative"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Erreur de connexion de la dernière tentative"
},
{
"type": "null"
}
]
},
"attempt": {
"type": "integer"
},
"duration_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"payload": {
"type": "object"
},
"response_body": {
"anyOf": [
{
"type": "string",
"description": "2 000 premiers caractères"
},
{
"type": "null"
}
]
},
"delivered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/workspaces/:workspace_id/webhooks.json
Ajouter un point d’accès webhook
webhooks_create
Permission : workspace.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/webhooks.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Point d’accès HTTPS qui reçoit le JSON envoyé en POST",
"examples": [
"https://example.com/hooks/privatus"
]
},
"events": {
"type": "array",
"items": {
"type": "string",
"enum": [
"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"
]
},
"description": "Événements à envoyer"
},
"enabled": {
"type": "boolean",
"description": "Envoyer les livraisons",
"default": true
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
}
},
"required": [
"url",
"events",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de webhook, par ex. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing ou disabled"
},
"secret": {
"type": "string",
"description": "Secret de signature pour Privatus-Signature"
},
"consecutive_failures": {
"type": "integer"
},
"last_success_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_failure_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:workspace_id/webhooks/:id.json
Supprimer un webhook
webhooks_delete
Permission : workspace.manage
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de webhook, par ex. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing ou disabled"
},
"secret": {
"type": "string",
"description": "Secret de signature pour Privatus-Signature"
},
"consecutive_failures": {
"type": "integer"
},
"last_success_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_failure_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/webhooks.json
Lister les webhooks
webhooks_list
Permission : workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Page (à partir de 1)"
},
"per_page": {
"type": "integer",
"description": "Résultats par page (100 maximum)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de webhook, par ex. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing ou disabled"
},
"secret": {
"type": "string",
"description": "Secret de signature pour Privatus-Signature"
},
"consecutive_failures": {
"type": "integer"
},
"last_success_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_failure_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/workspaces/:workspace_id/webhooks/:id.json
Obtenir un webhook
webhooks_get
Permission : workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de webhook, par ex. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing ou disabled"
},
"secret": {
"type": "string",
"description": "Secret de signature pour Privatus-Signature"
},
"consecutive_failures": {
"type": "integer"
},
"last_success_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_failure_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/workspaces/:workspace_id/webhooks/:id/test.json
Envoyer un envoi de test
webhooks_test
Permission : workspace.manage
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id/test.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant d’envoi, par ex. whd_123"
},
"event": {
"type": "string"
},
"status": {
"type": "string",
"description": "pending, succeeded ou failed"
},
"status_code": {
"anyOf": [
{
"type": "integer",
"description": "Statut HTTP de la dernière tentative"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Erreur de connexion de la dernière tentative"
},
{
"type": "null"
}
]
},
"attempt": {
"type": "integer"
},
"duration_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"payload": {
"type": "object"
},
"response_body": {
"anyOf": [
{
"type": "string",
"description": "2 000 premiers caractères"
},
{
"type": "null"
}
]
},
"delivered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/workspaces/:workspace_id/webhooks/:id.json
Mettre à jour un webhook (événements, URL, activé, renouvellement du secret)
webhooks_update
Permission : workspace.manage
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Point d’accès HTTPS"
},
"events": {
"type": "array",
"items": {
"type": "string",
"enum": [
"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"
]
},
"description": "Événements à envoyer"
},
"enabled": {
"type": "boolean",
"description": "Envoyer les livraisons"
},
"rotate_secret": {
"type": "boolean",
"description": "Remplacer le secret de signature",
"default": false
},
"workspace_id": {
"type": "string",
"description": "Identifiant de l’espace de travail, par ex. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id de la ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant de webhook, par ex. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing ou disabled"
},
"secret": {
"type": "string",
"description": "Secret de signature pour Privatus-Signature"
},
"consecutive_failures": {
"type": "integer"
},
"last_success_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_failure_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
É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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/events/properties.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"event": {
"type": "string",
"description": "Uniquement les clés vues sur ce nom d’événement brut"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
PATCH
/sites/:site_id/events/properties.json
Renommer ou masquer une clé de propriété d’événement
event_properties_update
Permission : sites.manage
curl -X PATCH https://privatusanalytics.com/sites/:site_id/events/properties.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Clé de propriété telle que stockée, par ex. plan"
},
"display_name": {
"type": "string",
"description": "Libellé à afficher à la place (vide pour le retirer)"
},
"hidden": {
"type": "boolean",
"description": "Masquer cette clé dans les rapports"
},
"export_safe": {
"type": "boolean",
"description": "La clé ne contient aucune donnée personnelle, elle est donc incluse dans les exports bruts et les synchronisations d’entrepôt"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"key",
"site_id"
]
}
{
"type": "object"
}
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
Permission : sites.manage
curl -X DELETE https://privatusanalytics.com/sites/:site_id/events.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’événement brut à supprimer"
},
"confirm": {
"type": "string",
"description": "Saisissez à nouveau le nom de l’événement pour confirmer"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"confirm",
"site_id"
]
}
{
"type": "object"
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/events.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"search": {
"type": "string",
"description": "Uniquement les événements dont le nom contient ceci"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/sites/:site_id/events/merge.json
Fusionner plusieurs événements sous un seul nom d’affichage
events_merge
Permission : sites.manage
curl -X POST https://privatusanalytics.com/sites/:site_id/events/merge.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Noms d’événements bruts à fusionner"
},
"into": {
"type": "string",
"description": "Nom d’affichage de l’événement fusionné",
"examples": [
"Signup"
]
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"names",
"into",
"site_id"
]
}
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’événement brut tel qu’envoyé par le traqueur"
},
"display_name": {
"anyOf": [
{
"type": "string",
"description": "Nom affiché dans les rapports"
},
{
"type": "null"
}
]
},
"hidden": {
"type": "boolean",
"description": "Masqué dans les rapports"
},
"currency": {
"anyOf": [
{
"type": "string",
"description": "Devise des revenus"
},
{
"type": "null"
}
]
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
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
Permission : analytics.read
curl https://privatusanalytics.com/sites/:site_id/events/detail.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Préréglage de plage de dates. Utilisez custom avec from/to",
"enum": [
"today",
"yesterday",
"24h",
"7d",
"14d",
"28d",
"30d",
"90d",
"mtd",
"last_month",
"qtd",
"last_quarter",
"ytd",
"12mo",
"last_year",
"all",
"custom"
],
"default": "30d"
},
"from": {
"type": "string",
"format": "date",
"description": "Début de la plage personnalisée (fuseau horaire du site)"
},
"to": {
"type": "string",
"format": "date",
"description": "Fin de la plage personnalisée, incluse"
},
"compare": {
"type": "string",
"description": "Période de comparaison",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Début de la comparaison personnalisée"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Fin de la comparaison personnalisée"
},
"match_weekday": {
"type": "boolean",
"description": "Aligner les jours de la semaine de la comparaison",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filtres : [[\"dimension\",\"operator\",\"value\"], …]. Opérateurs : is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Encadrez les conditions dans {\"any\": [...]} pour un OU.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Appliquer un segment enregistré (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Ajouter les données historiques importées (dates antérieures au premier événement natif, ignorées lorsque des filtres ou un segment sont appliqués)",
"default": false
},
"name": {
"type": "string",
"description": "Nom de l’événement tel qu’affiché (après renommages)",
"examples": [
"Signup"
]
},
"properties": {
"type": "array",
"items": {
"type": "string"
},
"description": "Jusqu’à 3 clés de propriété pour le pivot",
"default": []
},
"interval": {
"type": "string",
"description": "Taille de l’intervalle du graphique",
"enum": [
"auto",
"minute",
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "auto"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"site_id"
]
}
{
"type": "object"
}
PATCH
/sites/:site_id/events/settings.json
Renommer, masquer ou réafficher un événement, ou définir sa devise
events_update
Permission : sites.manage
curl -X PATCH https://privatusanalytics.com/sites/:site_id/events/settings.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN" \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’événement brut tel qu’envoyé par le traqueur",
"examples": [
"signup_click"
]
},
"display_name": {
"type": "string",
"description": "Nom à afficher à la place (vide annule le renommage)"
},
"hidden": {
"type": "boolean",
"description": "Masquer dans les rapports (les données sont conservées)"
},
"currency": {
"type": "string",
"description": "Devise des revenus de cet événement (ISO 4217)"
},
"site_id": {
"type": "string",
"description": "Identifiant du site, par ex. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"site_id"
]
}
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Nom d’événement brut tel qu’envoyé par le traqueur"
},
"display_name": {
"anyOf": [
{
"type": "string",
"description": "Nom affiché dans les rapports"
},
{
"type": "null"
}
]
},
"hidden": {
"type": "boolean",
"description": "Masqué dans les rapports"
},
"currency": {
"anyOf": [
{
"type": "string",
"description": "Devise des revenus"
},
{
"type": "null"
}
]
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}