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.
Alle Operationen
Senden Sie Authorization: Bearer pat_…. Erstellen Sie Tokens unter Workspace-Einstellungen, API-Tokens. Anleitung zur Authentifizierung.
Hängen Sie .json an jeden Pfad an. Antworten haben die Form { "data": … } und Fehler die Form { "error": { "code", "message" } }. Fehler.
Senden Sie JSON-RPC per POST an https://privatusanalytics.com/mcp mit demselben Token. Jede der folgenden Operationen ist ein Tool. MCP-Anleitung.
openapi.json herunterladen · 285 Operationen
API-Tokens
POST
/workspaces/:workspace_id/api_tokens.json
Ein API-Token erstellen (das Token wird nur einmal zurückgegeben)
api_tokens_create
Berechtigung: 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": "Ein Name, an dem Sie das Token erkennen",
"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": "Berechtigungen (weglassen für alle Ihre eigenen, eine leere Liste wird abgelehnt)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Auf diese Website-IDs beschränken (pa_…). Leer = alle",
"default": []
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Ablaufzeit (ISO 8601). Leer = nie"
},
"allowed_ips": {
"type": "array",
"items": {
"type": "string"
},
"description": "Nur Anfragen von diesen IPs/CIDRs akzeptieren",
"default": []
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"token": {
"anyOf": [
{
"type": "string",
"description": "Das Token selbst: wird nur beim Erstellen zurückgegeben"
},
{
"type": "null"
}
]
},
"token_prefix": {
"type": "string",
"description": "Erste Zeichen, um das Token zu erkennen"
},
"owner": {
"type": "string",
"description": "E-Mail-Adresse des Mitglieds, dem es gehört"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
}
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Auf diese Websites beschränkt (leer = alle)"
},
"allowed_ips": {
"type": "array",
"items": {
"type": "string"
}
},
"oauth_client": {
"anyOf": [
{
"type": "string",
"description": "MCP-Client, der es erhalten hat"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "active, expired oder 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
Ein API-Token widerrufen
api_tokens_delete
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"token": {
"anyOf": [
{
"type": "string",
"description": "Das Token selbst: wird nur beim Erstellen zurückgegeben"
},
{
"type": "null"
}
]
},
"token_prefix": {
"type": "string",
"description": "Erste Zeichen, um das Token zu erkennen"
},
"owner": {
"type": "string",
"description": "E-Mail-Adresse des Mitglieds, dem es gehört"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
}
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Auf diese Websites beschränkt (leer = alle)"
},
"allowed_ips": {
"type": "array",
"items": {
"type": "string"
}
},
"oauth_client": {
"anyOf": [
{
"type": "string",
"description": "MCP-Client, der es erhalten hat"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "active, expired oder 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
API-Tokens auflisten
api_tokens_list
Berechtigung: member
curl https://privatusanalytics.com/workspaces/:workspace_id/api_tokens.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"include_revoked": {
"type": "boolean",
"description": "Auch widerrufene und abgelaufene Tokens auflisten",
"default": false
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"token": {
"anyOf": [
{
"type": "string",
"description": "Das Token selbst: wird nur beim Erstellen zurückgegeben"
},
{
"type": "null"
}
]
},
"token_prefix": {
"type": "string",
"description": "Erste Zeichen, um das Token zu erkennen"
},
"owner": {
"type": "string",
"description": "E-Mail-Adresse des Mitglieds, dem es gehört"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
}
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Auf diese Websites beschränkt (leer = alle)"
},
"allowed_ips": {
"type": "array",
"items": {
"type": "string"
}
},
"oauth_client": {
"anyOf": [
{
"type": "string",
"description": "MCP-Client, der es erhalten hat"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "active, expired oder 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"
}
}
}
}
Abrechnung
POST
/workspaces/:workspace_id/billing/badge.json
Den Badge-Bonus aktivieren oder deaktivieren (kostenloser Tarif)
billing_badge
Berechtigung: 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, um das Badge zu verifizieren und den Bonus zu erhalten"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"enabled",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Ereignisse pro Monat in der kostenpflichtigen Stufe"
},
"allowance": {
"type": "integer",
"description": "Ereignisse pro Monat einschließlich eines Badge-Bonus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month oder year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD pro Abrechnungsintervall"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused oder canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Verlängert sich oder endet am"
},
{
"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 oder agency"
},
"status": {
"type": "string",
"description": "pending, approved (noch nicht im Abonnement), active, rejected oder revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business (null beim kostenlosen Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Kostenlose Ereignisse pro Monat (nur kostenloses Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Name der Organisation, Schule, des Projekts oder der Agentur"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Website"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Link zum Nachweis oder Repository-URL"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "OSI-Lizenz (Open Source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Notiz für die Prüfung"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum der Antrag nicht genehmigt wurde"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beantragt am"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Geprüft am"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Rabatt aktiv seit"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Programm beendet am"
},
{
"type": "null"
}
]
}
},
"description": "Der neueste Antrag für ein Rabattprogramm oder null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business aus einem genehmigten Programm oder null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Badge-Bonus (kostenloser Tarif)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Erster Tag des gemeldeten Monats"
},
"events": {
"type": "integer",
"description": "Abrechenbare Ereignisse (Pageviews und eigene Ereignisse)"
},
"bots": {
"type": "integer",
"description": "Herausgefilterte Bot-Treffer (nicht berechnet)"
},
"allowance": {
"type": "integer",
"description": "Enthaltene Ereignisse, einschließlich eines Badge-Bonus"
},
"percent": {
"type": "number",
"description": "Ereignisse in Prozent des Kontingents"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Prognostizierte Ereignisse zum Monatsende"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Verbleibende Tage im Monat"
},
"status": {
"type": "string",
"description": "ok, warning (80 %+), over (ein vergangener Monat am oder über dem Kontingent), locked oder paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pageviews und eigene Ereignisse in diesem Monat"
},
"share": {
"type": "number",
"description": "Prozent der Workspace-Gesamtsumme"
}
}
},
"description": "Ereignisse nach Website"
},
"history": {
"type": "array",
"description": "Vorherige Monate, neueste zuerst"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Dashboards von Privatus-Analytics-Mitarbeitern gesperrt seit"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True, solange neue Ereignisse verworfen werden (das Monatslimit ist erreicht oder Mitarbeiter haben die Erfassung pausiert)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum die Erfassung pausiert ist: limit (das monatliche Kontingent ist erreicht) oder staff. null, wenn erfasst wird"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann Mitarbeiter die Erfassung pausiert haben"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine Pause wegen des Limits endet: zu Beginn des nächsten Monats (UTC) oder früher bei einem Upgrade. Sonst null"
},
{
"type": "null"
}
]
}
},
"description": "Dieser Monat bisher"
}
}
}
POST
/workspaces/:workspace_id/billing/cancel.json
Zum Ende des Abrechnungszeitraums kündigen
billing_cancel
Berechtigung: 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": "Hauptgrund für die Kündigung (optionale Umfrage)",
"enum": [
"too_expensive",
"missing_features",
"switching_tool",
"not_using",
"temporary",
"other"
]
},
"comment": {
"type": "string",
"description": "Was wir besser machen könnten"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Ereignisse pro Monat in der kostenpflichtigen Stufe"
},
"allowance": {
"type": "integer",
"description": "Ereignisse pro Monat einschließlich eines Badge-Bonus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month oder year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD pro Abrechnungsintervall"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused oder canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Verlängert sich oder endet am"
},
{
"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 oder agency"
},
"status": {
"type": "string",
"description": "pending, approved (noch nicht im Abonnement), active, rejected oder revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business (null beim kostenlosen Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Kostenlose Ereignisse pro Monat (nur kostenloses Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Name der Organisation, Schule, des Projekts oder der Agentur"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Website"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Link zum Nachweis oder Repository-URL"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "OSI-Lizenz (Open Source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Notiz für die Prüfung"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum der Antrag nicht genehmigt wurde"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beantragt am"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Geprüft am"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Rabatt aktiv seit"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Programm beendet am"
},
{
"type": "null"
}
]
}
},
"description": "Der neueste Antrag für ein Rabattprogramm oder null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business aus einem genehmigten Programm oder null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Badge-Bonus (kostenloser Tarif)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Erster Tag des gemeldeten Monats"
},
"events": {
"type": "integer",
"description": "Abrechenbare Ereignisse (Pageviews und eigene Ereignisse)"
},
"bots": {
"type": "integer",
"description": "Herausgefilterte Bot-Treffer (nicht berechnet)"
},
"allowance": {
"type": "integer",
"description": "Enthaltene Ereignisse, einschließlich eines Badge-Bonus"
},
"percent": {
"type": "number",
"description": "Ereignisse in Prozent des Kontingents"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Prognostizierte Ereignisse zum Monatsende"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Verbleibende Tage im Monat"
},
"status": {
"type": "string",
"description": "ok, warning (80 %+), over (ein vergangener Monat am oder über dem Kontingent), locked oder paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pageviews und eigene Ereignisse in diesem Monat"
},
"share": {
"type": "number",
"description": "Prozent der Workspace-Gesamtsumme"
}
}
},
"description": "Ereignisse nach Website"
},
"history": {
"type": "array",
"description": "Vorherige Monate, neueste zuerst"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Dashboards von Privatus-Analytics-Mitarbeitern gesperrt seit"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True, solange neue Ereignisse verworfen werden (das Monatslimit ist erreicht oder Mitarbeiter haben die Erfassung pausiert)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum die Erfassung pausiert ist: limit (das monatliche Kontingent ist erreicht) oder staff. null, wenn erfasst wird"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann Mitarbeiter die Erfassung pausiert haben"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine Pause wegen des Limits endet: zu Beginn des nächsten Monats (UTC) oder früher bei einem Upgrade. Sonst null"
},
{
"type": "null"
}
]
}
},
"description": "Dieser Monat bisher"
}
}
}
POST
/workspaces/:workspace_id/billing/change_plan.json
Tarif, Stufe oder Intervall ändern (anteilig berechnet)
billing_change_plan
Berechtigung: 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": "Tarif, zu dem gewechselt wird: pro oder business",
"enum": [
"pro",
"business"
]
},
"events": {
"type": "integer",
"description": "Ereignisse pro Monat der Stufe, aus GET /plans",
"examples": [
1000000
]
},
"interval": {
"type": "string",
"description": "Abrechnungsintervall. Bei jährlicher Abrechnung sind 2 Monate gratis",
"enum": [
"month",
"year"
],
"default": "month"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"plan",
"events",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Ereignisse pro Monat in der kostenpflichtigen Stufe"
},
"allowance": {
"type": "integer",
"description": "Ereignisse pro Monat einschließlich eines Badge-Bonus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month oder year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD pro Abrechnungsintervall"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused oder canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Verlängert sich oder endet am"
},
{
"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 oder agency"
},
"status": {
"type": "string",
"description": "pending, approved (noch nicht im Abonnement), active, rejected oder revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business (null beim kostenlosen Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Kostenlose Ereignisse pro Monat (nur kostenloses Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Name der Organisation, Schule, des Projekts oder der Agentur"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Website"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Link zum Nachweis oder Repository-URL"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "OSI-Lizenz (Open Source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Notiz für die Prüfung"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum der Antrag nicht genehmigt wurde"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beantragt am"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Geprüft am"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Rabatt aktiv seit"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Programm beendet am"
},
{
"type": "null"
}
]
}
},
"description": "Der neueste Antrag für ein Rabattprogramm oder null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business aus einem genehmigten Programm oder null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Badge-Bonus (kostenloser Tarif)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Erster Tag des gemeldeten Monats"
},
"events": {
"type": "integer",
"description": "Abrechenbare Ereignisse (Pageviews und eigene Ereignisse)"
},
"bots": {
"type": "integer",
"description": "Herausgefilterte Bot-Treffer (nicht berechnet)"
},
"allowance": {
"type": "integer",
"description": "Enthaltene Ereignisse, einschließlich eines Badge-Bonus"
},
"percent": {
"type": "number",
"description": "Ereignisse in Prozent des Kontingents"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Prognostizierte Ereignisse zum Monatsende"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Verbleibende Tage im Monat"
},
"status": {
"type": "string",
"description": "ok, warning (80 %+), over (ein vergangener Monat am oder über dem Kontingent), locked oder paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pageviews und eigene Ereignisse in diesem Monat"
},
"share": {
"type": "number",
"description": "Prozent der Workspace-Gesamtsumme"
}
}
},
"description": "Ereignisse nach Website"
},
"history": {
"type": "array",
"description": "Vorherige Monate, neueste zuerst"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Dashboards von Privatus-Analytics-Mitarbeitern gesperrt seit"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True, solange neue Ereignisse verworfen werden (das Monatslimit ist erreicht oder Mitarbeiter haben die Erfassung pausiert)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum die Erfassung pausiert ist: limit (das monatliche Kontingent ist erreicht) oder staff. null, wenn erfasst wird"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann Mitarbeiter die Erfassung pausiert haben"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine Pause wegen des Limits endet: zu Beginn des nächsten Monats (UTC) oder früher bei einem Upgrade. Sonst null"
},
{
"type": "null"
}
]
}
},
"description": "Dieser Monat bisher"
}
}
}
POST
/workspaces/:workspace_id/billing/checkout.json
Einen Paddle-Checkout für einen kostenpflichtigen Tarif starten
billing_checkout
Berechtigung: 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": "Tarif, zu dem gewechselt wird: pro oder business",
"enum": [
"pro",
"business"
]
},
"events": {
"type": "integer",
"description": "Ereignisse pro Monat der Stufe, aus GET /plans",
"examples": [
1000000
]
},
"interval": {
"type": "string",
"description": "Abrechnungsintervall. Bei jährlicher Abrechnung sind 2 Monate gratis",
"enum": [
"month",
"year"
],
"default": "month"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"plan",
"events",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"transaction_id": {
"type": "string",
"description": "Paddle-Transaktions-ID (txn_...)"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "URL des gehosteten Checkouts"
},
{
"type": "null"
}
]
},
"price_id": {
"type": "string"
},
"plan": {
"type": "string"
},
"events": {
"type": "integer"
},
"interval": {
"type": "string"
},
"amount": {
"type": "integer",
"description": "USD pro Intervall"
},
"client_token": {
"anyOf": [
{
"type": "string",
"description": "Clientseitiges Paddle.js-Token"
},
{
"type": "null"
}
]
},
"environment": {
"type": "string",
"description": "sandbox oder production"
},
"custom_data": {
"type": "object",
"description": "An Paddle übergeben, um das Abonnement zu verknüpfen"
},
"discount_id": {
"anyOf": [
{
"type": "string",
"description": "Paddle-Rabatt-ID eines genehmigten Programms, auf diesen Checkout angewendet"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces/:workspace_id/billing/discount.json
Einen Rabatt für gemeinnützige Organisationen, Bildung oder Open Source beantragen
billing_discount
Berechtigung: 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 % Rabatt), open_source_free (Pro kostenlos bis 1M Ereignisse pro Monat) oder agency (20 % Rabatt auf jeden Workspace, der Ihnen gehört)",
"enum": [
"nonprofit",
"education",
"open_source",
"open_source_free",
"agency"
]
},
"organization_name": {
"type": "string",
"description": "Name der Organisation, Schule, des Projekts oder der Agentur"
},
"website": {
"type": "string",
"description": "Deren Website"
},
"proof_url": {
"type": "string",
"description": "Link zum Nachweis. Bei Open Source die Repository-URL"
},
"license": {
"type": "string",
"description": "OSI-Lizenz des Projekts (nur Open Source)"
},
"note": {
"type": "string",
"description": "Alles, was bei der Prüfung hilft, bis zu 1.000 Zeichen"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"program",
"organization_name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "nonprofit, education, open_source, open_source_free oder agency"
},
"status": {
"type": "string",
"description": "pending, approved (noch nicht im Abonnement), active, rejected oder revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business (null beim kostenlosen Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Kostenlose Ereignisse pro Monat (nur kostenloses Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Name der Organisation, Schule, des Projekts oder der Agentur"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Website"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Link zum Nachweis oder Repository-URL"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "OSI-Lizenz (Open Source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Notiz für die Prüfung"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum der Antrag nicht genehmigt wurde"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beantragt am"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Geprüft am"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Rabatt aktiv seit"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Programm beendet am"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces/:workspace_id/billing/payment_method.json
Einen Link zum Aktualisieren der Zahlungsmethode abrufen
billing_payment_method
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "portal, payment_method oder invoice"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "Kurzlebige Paddle-URL"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces/:workspace_id/billing/portal.json
Einen Link zum Paddle-Kundenportal abrufen
billing_portal
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "portal, payment_method oder invoice"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "Kurzlebige Paddle-URL"
},
{
"type": "null"
}
]
}
}
}
GET
/workspaces/:workspace_id/billing/preview.json
Eine Tarifänderung mit anteiliger Berechnung in der Vorschau anzeigen
billing_preview
Berechtigung: billing.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/preview.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"description": "Tarif, zu dem gewechselt wird: pro oder business",
"enum": [
"pro",
"business"
]
},
"events": {
"type": "integer",
"description": "Ereignisse pro Monat der Stufe, aus GET /plans",
"examples": [
1000000
]
},
"interval": {
"type": "string",
"description": "Abrechnungsintervall. Bei jährlicher Abrechnung sind 2 Monate gratis",
"enum": [
"month",
"year"
],
"default": "month"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. 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": "Neuer Preis in USD pro Intervall"
},
"currency": {
"type": "string"
},
"charge_minor": {
"type": "integer",
"description": "Jetzt berechnet, in der kleinsten Einheit"
},
"credit_minor": {
"type": "integer",
"description": "Gutschrift für nicht genutzte Zeit, kleinste Einheit"
},
"result_action": {
"anyOf": [
{
"type": "string",
"description": "charge oder credit"
},
{
"type": "null"
}
]
},
"result_minor": {
"type": "integer",
"description": "Nettobelastung oder -gutschrift, kleinste Einheit"
},
"next_billed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Nutzung oder Limits, die der neue Tarif nicht abdecken würde"
}
}
}
POST
/workspaces/:workspace_id/billing/resume.json
Eine geplante Kündigung zurücknehmen oder eine Pause beenden
billing_resume
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Ereignisse pro Monat in der kostenpflichtigen Stufe"
},
"allowance": {
"type": "integer",
"description": "Ereignisse pro Monat einschließlich eines Badge-Bonus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month oder year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD pro Abrechnungsintervall"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused oder canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Verlängert sich oder endet am"
},
{
"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 oder agency"
},
"status": {
"type": "string",
"description": "pending, approved (noch nicht im Abonnement), active, rejected oder revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business (null beim kostenlosen Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Kostenlose Ereignisse pro Monat (nur kostenloses Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Name der Organisation, Schule, des Projekts oder der Agentur"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Website"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Link zum Nachweis oder Repository-URL"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "OSI-Lizenz (Open Source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Notiz für die Prüfung"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum der Antrag nicht genehmigt wurde"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beantragt am"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Geprüft am"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Rabatt aktiv seit"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Programm beendet am"
},
{
"type": "null"
}
]
}
},
"description": "Der neueste Antrag für ein Rabattprogramm oder null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business aus einem genehmigten Programm oder null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Badge-Bonus (kostenloser Tarif)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Erster Tag des gemeldeten Monats"
},
"events": {
"type": "integer",
"description": "Abrechenbare Ereignisse (Pageviews und eigene Ereignisse)"
},
"bots": {
"type": "integer",
"description": "Herausgefilterte Bot-Treffer (nicht berechnet)"
},
"allowance": {
"type": "integer",
"description": "Enthaltene Ereignisse, einschließlich eines Badge-Bonus"
},
"percent": {
"type": "number",
"description": "Ereignisse in Prozent des Kontingents"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Prognostizierte Ereignisse zum Monatsende"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Verbleibende Tage im Monat"
},
"status": {
"type": "string",
"description": "ok, warning (80 %+), over (ein vergangener Monat am oder über dem Kontingent), locked oder paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pageviews und eigene Ereignisse in diesem Monat"
},
"share": {
"type": "number",
"description": "Prozent der Workspace-Gesamtsumme"
}
}
},
"description": "Ereignisse nach Website"
},
"history": {
"type": "array",
"description": "Vorherige Monate, neueste zuerst"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Dashboards von Privatus-Analytics-Mitarbeitern gesperrt seit"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True, solange neue Ereignisse verworfen werden (das Monatslimit ist erreicht oder Mitarbeiter haben die Erfassung pausiert)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum die Erfassung pausiert ist: limit (das monatliche Kontingent ist erreicht) oder staff. null, wenn erfasst wird"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann Mitarbeiter die Erfassung pausiert haben"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine Pause wegen des Limits endet: zu Beginn des nächsten Monats (UTC) oder früher bei einem Upgrade. Sonst null"
},
{
"type": "null"
}
]
}
},
"description": "Dieser Monat bisher"
}
}
}
GET
/workspaces/:workspace_id/billing.json
Tarif, Abonnement und Nutzung abrufen
billing_get
Berechtigung: billing.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/billing.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Ereignisse pro Monat in der kostenpflichtigen Stufe"
},
"allowance": {
"type": "integer",
"description": "Ereignisse pro Monat einschließlich eines Badge-Bonus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month oder year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD pro Abrechnungsintervall"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused oder canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Verlängert sich oder endet am"
},
{
"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 oder agency"
},
"status": {
"type": "string",
"description": "pending, approved (noch nicht im Abonnement), active, rejected oder revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business (null beim kostenlosen Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Kostenlose Ereignisse pro Monat (nur kostenloses Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Name der Organisation, Schule, des Projekts oder der Agentur"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Website"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Link zum Nachweis oder Repository-URL"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "OSI-Lizenz (Open Source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Notiz für die Prüfung"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum der Antrag nicht genehmigt wurde"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beantragt am"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Geprüft am"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Rabatt aktiv seit"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Programm beendet am"
},
{
"type": "null"
}
]
}
},
"description": "Der neueste Antrag für ein Rabattprogramm oder null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business aus einem genehmigten Programm oder null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Badge-Bonus (kostenloser Tarif)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Erster Tag des gemeldeten Monats"
},
"events": {
"type": "integer",
"description": "Abrechenbare Ereignisse (Pageviews und eigene Ereignisse)"
},
"bots": {
"type": "integer",
"description": "Herausgefilterte Bot-Treffer (nicht berechnet)"
},
"allowance": {
"type": "integer",
"description": "Enthaltene Ereignisse, einschließlich eines Badge-Bonus"
},
"percent": {
"type": "number",
"description": "Ereignisse in Prozent des Kontingents"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Prognostizierte Ereignisse zum Monatsende"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Verbleibende Tage im Monat"
},
"status": {
"type": "string",
"description": "ok, warning (80 %+), over (ein vergangener Monat am oder über dem Kontingent), locked oder paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pageviews und eigene Ereignisse in diesem Monat"
},
"share": {
"type": "number",
"description": "Prozent der Workspace-Gesamtsumme"
}
}
},
"description": "Ereignisse nach Website"
},
"history": {
"type": "array",
"description": "Vorherige Monate, neueste zuerst"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Dashboards von Privatus-Analytics-Mitarbeitern gesperrt seit"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True, solange neue Ereignisse verworfen werden (das Monatslimit ist erreicht oder Mitarbeiter haben die Erfassung pausiert)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum die Erfassung pausiert ist: limit (das monatliche Kontingent ist erreicht) oder staff. null, wenn erfasst wird"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann Mitarbeiter die Erfassung pausiert haben"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine Pause wegen des Limits endet: zu Beginn des nächsten Monats (UTC) oder früher bei einem Upgrade. Sonst null"
},
{
"type": "null"
}
]
}
},
"description": "Dieser Monat bisher"
}
}
}
PATCH
/workspaces/:workspace_id/billing.json
Abrechnungs-E-Mails, Steuer-ID und automatisches Upgrade aktualisieren
billing_update
Berechtigung: 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": "Zusätzliche Adressen für Rechnungen und Abrechnungshinweise (bis zu 5)"
},
"tax_id": {
"type": "string",
"description": "USt-/GST-/Steuer-ID, die auf Rechnungen angezeigt wird"
},
"auto_upgrade": {
"type": "boolean",
"description": "true, um bei Erreichen des Monatslimits in die nächste Stufe zu wechseln und die Differenz zu berechnen, statt die Erfassung zu pausieren. Standardmäßig aus"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Ereignisse pro Monat in der kostenpflichtigen Stufe"
},
"allowance": {
"type": "integer",
"description": "Ereignisse pro Monat einschließlich eines Badge-Bonus"
},
"billing_interval": {
"anyOf": [
{
"type": "string",
"description": "month oder year"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "integer",
"description": "USD pro Abrechnungsintervall"
},
{
"type": "null"
}
]
},
"subscription_status": {
"type": "string",
"description": "none, trialing, active, past_due, paused oder canceled"
},
"current_period_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Verlängert sich oder endet am"
},
{
"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 oder agency"
},
"status": {
"type": "string",
"description": "pending, approved (noch nicht im Abonnement), active, rejected oder revoked"
},
"percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business (null beim kostenlosen Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"comp_events": {
"anyOf": [
{
"type": "integer",
"description": "Kostenlose Ereignisse pro Monat (nur kostenloses Open-Source-Programm)"
},
{
"type": "null"
}
]
},
"organization_name": {
"type": "string",
"description": "Name der Organisation, Schule, des Projekts oder der Agentur"
},
"website": {
"anyOf": [
{
"type": "string",
"description": "Website"
},
{
"type": "null"
}
]
},
"proof_url": {
"anyOf": [
{
"type": "string",
"description": "Link zum Nachweis oder Repository-URL"
},
{
"type": "null"
}
]
},
"license": {
"anyOf": [
{
"type": "string",
"description": "OSI-Lizenz (Open Source)"
},
{
"type": "null"
}
]
},
"note": {
"anyOf": [
{
"type": "string",
"description": "Notiz für die Prüfung"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum der Antrag nicht genehmigt wurde"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beantragt am"
},
"reviewed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Geprüft am"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Rabatt aktiv seit"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Programm beendet am"
},
{
"type": "null"
}
]
}
},
"description": "Der neueste Antrag für ein Rabattprogramm oder null"
},
{
"type": "null"
}
]
},
"discount_percent": {
"anyOf": [
{
"type": "integer",
"description": "Rabatt in Prozent auf Pro und Business aus einem genehmigten Programm oder null"
},
{
"type": "null"
}
]
},
"billing_emails": {
"type": "array",
"items": {
"type": "string"
}
},
"tax_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"badge": {
"type": "object",
"description": "Badge-Bonus (kostenloser Tarif)"
},
"usage": {
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Erster Tag des gemeldeten Monats"
},
"events": {
"type": "integer",
"description": "Abrechenbare Ereignisse (Pageviews und eigene Ereignisse)"
},
"bots": {
"type": "integer",
"description": "Herausgefilterte Bot-Treffer (nicht berechnet)"
},
"allowance": {
"type": "integer",
"description": "Enthaltene Ereignisse, einschließlich eines Badge-Bonus"
},
"percent": {
"type": "number",
"description": "Ereignisse in Prozent des Kontingents"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Prognostizierte Ereignisse zum Monatsende"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Verbleibende Tage im Monat"
},
"status": {
"type": "string",
"description": "ok, warning (80 %+), over (ein vergangener Monat am oder über dem Kontingent), locked oder paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pageviews und eigene Ereignisse in diesem Monat"
},
"share": {
"type": "number",
"description": "Prozent der Workspace-Gesamtsumme"
}
}
},
"description": "Ereignisse nach Website"
},
"history": {
"type": "array",
"description": "Vorherige Monate, neueste zuerst"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Dashboards von Privatus-Analytics-Mitarbeitern gesperrt seit"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True, solange neue Ereignisse verworfen werden (das Monatslimit ist erreicht oder Mitarbeiter haben die Erfassung pausiert)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum die Erfassung pausiert ist: limit (das monatliche Kontingent ist erreicht) oder staff. null, wenn erfasst wird"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann Mitarbeiter die Erfassung pausiert haben"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine Pause wegen des Limits endet: zu Beginn des nächsten Monats (UTC) oder früher bei einem Upgrade. Sonst null"
},
{
"type": "null"
}
]
}
},
"description": "Dieser Monat bisher"
}
}
}
GET
/workspaces/:workspace_id/billing/usage.json
Nutzung, Prognose und Aufteilung pro Website für diesen Monat abrufen
billing_usage
Berechtigung: 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": "Ein beliebiger Tag im auszuwertenden Monat (Standard ist dieser Monat)",
"examples": [
"2026-09-01"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"month": {
"type": "string",
"format": "date",
"description": "Erster Tag des gemeldeten Monats"
},
"events": {
"type": "integer",
"description": "Abrechenbare Ereignisse (Pageviews und eigene Ereignisse)"
},
"bots": {
"type": "integer",
"description": "Herausgefilterte Bot-Treffer (nicht berechnet)"
},
"allowance": {
"type": "integer",
"description": "Enthaltene Ereignisse, einschließlich eines Badge-Bonus"
},
"percent": {
"type": "number",
"description": "Ereignisse in Prozent des Kontingents"
},
"forecast": {
"anyOf": [
{
"type": "integer",
"description": "Prognostizierte Ereignisse zum Monatsende"
},
{
"type": "null"
}
]
},
"forecast_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"days_left": {
"type": "integer",
"description": "Verbleibende Tage im Monat"
},
"status": {
"type": "string",
"description": "ok, warning (80 %+), over (ein vergangener Monat am oder über dem Kontingent), locked oder paused"
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"name": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Pageviews und eigene Ereignisse in diesem Monat"
},
"share": {
"type": "number",
"description": "Prozent der Workspace-Gesamtsumme"
}
}
},
"description": "Ereignisse nach Website"
},
"history": {
"type": "array",
"description": "Vorherige Monate, neueste zuerst"
},
"access_locked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Dashboards von Privatus-Analytics-Mitarbeitern gesperrt seit"
},
{
"type": "null"
}
]
},
"collection_paused": {
"type": "boolean",
"description": "True, solange neue Ereignisse verworfen werden (das Monatslimit ist erreicht oder Mitarbeiter haben die Erfassung pausiert)"
},
"pause_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum die Erfassung pausiert ist: limit (das monatliche Kontingent ist erreicht) oder staff. null, wenn erfasst wird"
},
{
"type": "null"
}
]
},
"collection_paused_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann Mitarbeiter die Erfassung pausiert haben"
},
{
"type": "null"
}
]
},
"resumes_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine Pause wegen des Limits endet: zu Beginn des nächsten Monats (UTC) oder früher bei einem Upgrade. Sonst null"
},
{
"type": "null"
}
]
}
}
}
GET
/workspaces/:workspace_id/billing/invoices.json
Rechnungen auflisten
billing_invoices_list
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Paddle-Transaktions-ID"
},
"invoice_number": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "paid, completed, payment_failed, ..."
},
"amount_minor": {
"type": "integer",
"description": "Gesamtbetrag in der kleinsten Einheit (Cent)"
},
"currency": {
"type": "string"
},
"billed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
}
}
}
GET
/workspaces/:workspace_id/billing/invoices/:id.json
Den PDF-Link einer Rechnung abrufen
billing_invoices_get
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "portal, payment_method oder invoice"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "Kurzlebige Paddle-URL"
},
{
"type": "null"
}
]
}
}
}
Affiliate-Programm
GET
/account/affiliate/commissions.json
Ihre Affiliate-Provisionen auflisten
affiliate_commissions_list
Provisionen, Rückforderungen wegen Erstattung oder Rückbuchung und Stornierungen, neueste zuerst. Beträge sind in Cent angegeben.
Berechtigung: member
curl https://privatusanalytics.com/account/affiliate/commissions.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Nur Provisionen mit diesem Status",
"enum": [
"pending",
"approved",
"paid",
"void"
]
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Provisions-ID"
},
"kind": {
"type": "string",
"description": "commission, clawback (Erstattung oder Rückbuchung) oder reversal"
},
"status": {
"type": "string",
"description": "pending (zurückgehalten), approved (auszahlbar), paid oder void"
},
"amount_cents": {
"type": "integer",
"description": "Ihr Anteil in Cent (negativ bei einer Rückforderung)"
},
"basis_cents": {
"type": "integer",
"description": "Die Nettozahlung (ohne Steuern), aus der er berechnet wurde, in Cent"
},
"currency": {
"type": "string",
"description": "ISO-Währungscode"
},
"earned_at": {
"type": "string",
"format": "date-time",
"description": "Wann die Zahlung (oder Erstattung) erfolgte"
},
"approved_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann sie auszahlbar wurde"
},
{
"type": "null"
}
]
},
"paid_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann sie ausgezahlt wurde"
},
{
"type": "null"
}
]
}
}
}
}
GET
/account/affiliate/signup-box.json
Den Code Ihrer Affiliate-Anmeldebox und die Ergebnisse abrufen
affiliate_signup_box_get
Der Einbettungscode für Ihre Anmeldebox (ein Skript und ein einfacher Iframe) für das gewählte Design, die Attribute, die das Formular vorausfüllen, die Ereignisse, die das Skript auf Ihrer Seite auslöst, und die Zahlen der Box: Anmeldungen, die noch bestätigt werden müssen, bestätigte Anmeldungen und zahlende Kunden. available ist false, bis Ihr Affiliate-Antrag genehmigt ist.
Berechtigung: member
curl https://privatusanalytics.com/account/affiliate/signup-box.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"theme": {
"type": "string",
"description": "Design der Box: auto (passt sich dem Gerät des Besuchers an), light oder dark",
"enum": [
"auto",
"light",
"dark"
],
"examples": [
"auto"
],
"default": "auto"
}
},
"required": []
}
{
"type": "object",
"properties": {
"available": {
"type": "boolean",
"description": "Ob Sie eine Anmeldebox haben (nur genehmigte Affiliates)"
},
"theme": {
"type": "string",
"description": "Das Design, für das der Code erstellt wurde"
},
"frame_url": {
"anyOf": [
{
"type": "string",
"description": "Die Adresse der Box, für einen einfachen Iframe"
},
{
"type": "null"
}
]
},
"script": {
"anyOf": [
{
"type": "string",
"description": "Der Skript-Einbettungscode: ein Element und das Loader-Skript"
},
{
"type": "null"
}
]
},
"iframe": {
"anyOf": [
{
"type": "string",
"description": "Der Einbettungscode für den einfachen Iframe"
},
{
"type": "null"
}
]
},
"prefill_attributes": {
"type": "array",
"description": "Attribute am Element, die das Formular für angemeldete Besucher vorausfüllen"
},
"events": {
"type": "array",
"description": "DOM-Ereignisse, die das Skript auf dem Element auslöst"
},
"waiting": {
"type": "integer",
"description": "Anmeldungen, deren per E-Mail gesendeter Link noch nicht geöffnet wurde"
},
"signups": {
"type": "integer",
"description": "Bestätigte Anmeldungen, die über die Box kamen"
},
"customers": {
"type": "integer",
"description": "Davon zahlende Kunden gewordene"
}
}
}
GET
/account/affiliate.json
Ihren Affiliate-Status, Empfehlungslink und Ihre Statistiken abrufen
affiliate_get
Der Status Ihrer Affiliate-Bewerbung, Ihr Empfehlungslink, von Ihnen geworbene Registrierungen und zahlende Kunden sowie Salden pro Währung (zurückgehalten, auszahlbar, ausgezahlt). status ist none, wenn Sie sich nicht beworben haben.
Berechtigung: 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 (nicht beworben), pending, approved, rejected oder suspended"
},
"code": {
"anyOf": [
{
"type": "string",
"description": "Ihr Empfehlungscode"
},
{
"type": "null"
}
]
},
"referral_url": {
"anyOf": [
{
"type": "string",
"description": "Der Link zum Teilen (nur für genehmigte Affiliates)"
},
{
"type": "null"
}
]
},
"payout_method": {
"anyOf": [
{
"type": "string",
"description": "wise oder credit"
},
{
"type": "null"
}
]
},
"rejection_reason": {
"anyOf": [
{
"type": "string",
"description": "Warum die letzte Bewerbung abgelehnt wurde"
},
{
"type": "null"
}
]
},
"applied_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann Sie sich beworben haben"
},
{
"type": "null"
}
]
},
"approved_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Bewerbung genehmigt wurde"
},
{
"type": "null"
}
]
},
"credit_blocked": {
"anyOf": [
{
"type": "string",
"description": "Warum das Kontoguthaben wartet: program (der Workspace ist in einem Rabattprogramm), no_subscription oder no_workspace. null, wenn nichts es blockiert"
},
{
"type": "null"
}
]
},
"signups": {
"type": "integer",
"description": "Konten, die über Ihren Link oder Code erstellt wurden"
},
"customers": {
"type": "integer",
"description": "Geworbene Workspaces, die gezahlt haben"
},
"balances": {
"type": "array",
"description": "Pro Währung: pending_cents (zurückgehalten), approved_cents (auszahlbar) und paid_cents"
},
"payouts": {
"type": "array",
"description": "Letzte Auszahlungen mit amount_cents, currency, payout_method, status (applied: Kontoguthaben, das auf Ihre nächste Verlängerung wartet, oder paid), applied_at und paid_at"
},
"terms": {
"type": "object",
"description": "Provisionssatz in Prozent, Monate, Sperrfrist in Tagen und die Auszahlungsschwelle für Wise in Cent"
}
}
}
Alarme
POST
/alerts/:id/acknowledge.json
Den letzten Vorfall bestätigen
alerts_acknowledge
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alarm-ID, z. B. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID (null bei Nutzungsalarmen)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt oder lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "Empfindlichkeit der Anomalieerkennung"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle"
},
"state": {
"type": "string",
"description": "ok oder 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
Einen Alarm erstellen
alerts_create
Berechtigung: 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": "Website-ID (pa_…). Erforderlich, außer bei Nutzungsalarmen"
},
"metric": {
"type": "string",
"description": "threshold/anomaly: visitors, visits, pageviews, bounce_rate oder conversion. vitals: lcp, inp, cls, fcp oder ttfb"
},
"operator": {
"type": "string",
"description": "Vergleich (gt, gte, lt, lte). anomaly: lt nur bei Einbrüchen, gt nur bei Spitzen, leer beides",
"enum": [
"gt",
"gte",
"lt",
"lte"
]
},
"threshold": {
"type": "number",
"description": "threshold: Kennzahlwert, goal: Abschlüsse, no_data: Stunden, usage: Prozent, ssl: Tage, vitals: ms (CLS: Score)"
},
"window_minutes": {
"type": "integer",
"description": "Auswertungsfenster in Minuten (5 bis 10080)"
},
"sensitivity": {
"type": "string",
"description": "anomaly: low, medium oder high",
"enum": [
"low",
"medium",
"high"
]
},
"goal_id": {
"type": "string",
"description": "goal- und conversion-Alarme: Ziel-ID (goal_…)"
},
"uptime_check_id": {
"type": "string",
"description": "uptime/ssl: Prüfungs-ID (Standard: alle Prüfungen der Website)"
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle (nch_…)"
},
"enabled": {
"type": "boolean",
"description": "Diesen Alarm auswerten"
},
"name": {
"type": "string",
"description": "Alarmname",
"examples": [
"Traffic dropped"
]
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals",
"enum": [
"threshold",
"anomaly",
"goal",
"no_data",
"usage",
"uptime",
"ssl",
"vitals"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"kind",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alarm-ID, z. B. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID (null bei Nutzungsalarmen)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt oder lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "Empfindlichkeit der Anomalieerkennung"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle"
},
"state": {
"type": "string",
"description": "ok oder 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
Einen Alarm löschen
alerts_delete
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alarm-ID, z. B. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID (null bei Nutzungsalarmen)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt oder lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "Empfindlichkeit der Anomalieerkennung"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle"
},
"state": {
"type": "string",
"description": "ok oder 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
Vorfallverlauf eines Alarms
alerts_history
Berechtigung: analytics.read
curl https://privatusanalytics.com/alerts/:id/history.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"open": {
"type": "boolean",
"description": "Nur ungelöste Vorfälle",
"default": false
},
"id": {
"type": "string",
"description": "Id der Ressource"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"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": "Beim Auslösen gemessener Wert"
},
{
"type": "null"
}
]
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"acknowledged_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"acknowledged_by": {
"anyOf": [
{
"type": "string",
"description": "Name des Mitglieds, das bestätigt hat"
},
{
"type": "null"
}
]
}
}
}
}
GET
/workspaces/:workspace_id/alerts.json
Alarme auflisten
alerts_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/alerts.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Nur Alarme dieser Website (pa_…)"
},
"state": {
"type": "string",
"description": "Nur Alarme mit ok oder triggered",
"enum": [
"ok",
"triggered"
]
},
"kind": {
"type": "string",
"description": "Nur diese Art",
"enum": [
"threshold",
"anomaly",
"goal",
"no_data",
"usage",
"uptime",
"ssl",
"vitals"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alarm-ID, z. B. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID (null bei Nutzungsalarmen)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt oder lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "Empfindlichkeit der Anomalieerkennung"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle"
},
"state": {
"type": "string",
"description": "ok oder 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
Die Benachrichtigungen eines Alarms stummschalten (oder wieder aktivieren)
alerts_mute
Berechtigung: 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": "So viele Minuten stummschalten (0 hebt die Stummschaltung auf, max. 30 Tage)",
"default": 60
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alarm-ID, z. B. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID (null bei Nutzungsalarmen)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt oder lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "Empfindlichkeit der Anomalieerkennung"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle"
},
"state": {
"type": "string",
"description": "ok oder 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
Einen Alarm abrufen
alerts_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/alerts/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alarm-ID, z. B. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID (null bei Nutzungsalarmen)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt oder lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "Empfindlichkeit der Anomalieerkennung"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle"
},
"state": {
"type": "string",
"description": "ok oder 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
Einen Alarm aktualisieren
alerts_update
Berechtigung: 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": "Website-ID (pa_…). Erforderlich, außer bei Nutzungsalarmen"
},
"metric": {
"type": "string",
"description": "threshold/anomaly: visitors, visits, pageviews, bounce_rate oder conversion. vitals: lcp, inp, cls, fcp oder ttfb"
},
"operator": {
"type": "string",
"description": "Vergleich (gt, gte, lt, lte). anomaly: lt nur bei Einbrüchen, gt nur bei Spitzen, leer beides",
"enum": [
"gt",
"gte",
"lt",
"lte"
]
},
"threshold": {
"type": "number",
"description": "threshold: Kennzahlwert, goal: Abschlüsse, no_data: Stunden, usage: Prozent, ssl: Tage, vitals: ms (CLS: Score)"
},
"window_minutes": {
"type": "integer",
"description": "Auswertungsfenster in Minuten (5 bis 10080)"
},
"sensitivity": {
"type": "string",
"description": "anomaly: low, medium oder high",
"enum": [
"low",
"medium",
"high"
]
},
"goal_id": {
"type": "string",
"description": "goal- und conversion-Alarme: Ziel-ID (goal_…)"
},
"uptime_check_id": {
"type": "string",
"description": "uptime/ssl: Prüfungs-ID (Standard: alle Prüfungen der Website)"
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle (nch_…)"
},
"enabled": {
"type": "boolean",
"description": "Diesen Alarm auswerten"
},
"name": {
"type": "string",
"description": "Alarmname"
},
"kind": {
"type": "string",
"description": "Alarmart",
"enum": [
"threshold",
"anomaly",
"goal",
"no_data",
"usage",
"uptime",
"ssl",
"vitals"
]
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alarm-ID, z. B. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID (null bei Nutzungsalarmen)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt oder lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "Empfindlichkeit der Anomalieerkennung"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle"
},
"state": {
"type": "string",
"description": "ok oder 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
Alarme einer Website auflisten
site_alerts_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/alerts.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "Nur Alarme mit ok oder triggered",
"enum": [
"ok",
"triggered"
]
},
"kind": {
"type": "string",
"description": "Nur diese Art",
"enum": [
"threshold",
"anomaly",
"goal",
"no_data",
"usage",
"uptime",
"ssl",
"vitals"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Alarm-ID, z. B. alr_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID (null bei Nutzungsalarmen)"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "threshold, anomaly, goal, no_data, usage, uptime, ssl oder vitals"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"operator": {
"anyOf": [
{
"type": "string",
"description": "gt, gte, lt oder lte"
},
{
"type": "null"
}
]
},
"threshold": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"window_minutes": {
"type": "integer"
},
"sensitivity": {
"type": "string",
"description": "Empfindlichkeit der Anomalieerkennung"
},
"goal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"channel_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der Benachrichtigungskanäle"
},
"state": {
"type": "string",
"description": "ok oder 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"
}
}
}
}
Analysen
GET
/sites/:site_id/overview.json
Website-Übersicht: Kennzahlen, Diagrammreihen, Top-Panels, Live-Besucher und Notizen
stats_overview
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/overview.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"interval": {
"type": "string",
"description": "Größe der Diagrammintervalle",
"enum": [
"auto",
"minute",
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "auto"
},
"panels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Dimensionen, für die die häufigsten Werte enthalten sein sollen",
"default": [
"channel",
"referrer",
"page",
"entry_page",
"country",
"device",
"browser",
"os",
"utm_campaign",
"event",
"goal"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/experiments.json
Experimentbericht: Conversion-Rate pro Variante, Uplift gegenüber der Kontrolle und Signifikanz (Zwei-Proportionen-z-Test)
experiments_report
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/experiments.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"property": {
"type": "string",
"description": "Ereigniseigenschaft, die die Variante enthält, z. B. variant",
"examples": [
"variant"
]
},
"goal_id": {
"type": "string",
"description": "Als Conversion gezähltes Ziel (goal_…)"
},
"control": {
"type": "string",
"description": "Kontrollvariante (Standard ist \"control\", falls vorhanden, sonst die Variante mit den meisten Besuchen)"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"property",
"goal_id",
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/insights.json
Bemerkenswerte Änderungen gegenüber dem Vorzeitraum in einfacher Sprache (größte Veränderungen, Änderungen der Zielkonversion)
insights_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/insights.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Vollständige Tage bis gestern, verglichen mit der gleichen Anzahl an Tagen davor",
"enum": [
"7d",
"14d",
"28d",
"30d"
],
"default": "7d"
},
"limit": {
"type": "integer",
"description": "Maximale Anzahl an Erkenntnissen (1 bis 20)",
"default": 8
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/journeys.json
Journeys: die 3-Schritt-Top-Pfade nach einer Seite (oder einem beliebigen Einstieg) oder vor einer Seite oder einem Ziel
journeys_explore
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/journeys.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"mode": {
"type": "string",
"description": "forward: Seiten nach der Startseite, reverse: Seiten, die zur Endseite oder zum Ziel führen",
"enum": [
"forward",
"reverse"
],
"default": "forward"
},
"path": {
"type": "string",
"description": "Startseite (forward) oder Endseite (reverse). Leer bedeutet ein beliebiger Einstieg (nur forward)"
},
"goal_id": {
"type": "string",
"description": "Modus reverse: an diesem Ziel (goal_…) statt an einer Seite enden"
},
"limit": {
"type": "integer",
"description": "Angezeigte Seiten pro Schritt (max. 12)",
"default": 6
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/pages/detail.json
Seitendetail: Kennzahlen, vorherige und nächste Seiten, Quellen, Web Vitals, Ereignisse und Klickkarte für einen Pfad
pages_detail
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/pages/detail.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"path": {
"type": "string",
"description": "Seitenpfad, z. B. /pricing",
"examples": [
"/pricing"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"path",
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/stats/aggregate.json
Hauptkennzahlen für einen Zeitraum (mit Vergleich)
stats_aggregate
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/stats/aggregate.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/breakdown/:dimension.json
Häufigste Werte einer Dimension (Seiten, Quellen, Länder…)
stats_breakdown
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/breakdown/:dimension.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"dimension": {
"type": "string",
"description": "Dimension der Ressource"
},
"limit": {
"type": "integer",
"description": "Zeilen pro Seite (max. 1000)",
"default": 10
},
"page": {
"type": "integer",
"description": "Seitennummer",
"default": 1
},
"sort": {
"type": "string",
"description": "Sortierkennzahl",
"enum": [
"visitors",
"visits",
"pageviews",
"revenue"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"dimension",
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/stats/timeseries.json
Kennzahlen pro Zeitintervall für Diagramme
stats_timeseries
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/stats/timeseries.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"interval": {
"type": "string",
"description": "Intervallgröße. auto wählt eine passend zum Bereich",
"enum": [
"auto",
"minute",
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "auto"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
Assistent
POST
/sites/:site_id/ask.json
Eine Frage in einer neuen Unterhaltung stellen (zählt zum monatlichen Limit für KI-Fragen)
assistant_ask
Berechtigung: 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": "Ihre erste Frage in einfacher Sprache",
"examples": [
"How many visitors did we have last week?"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"question",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Unterhaltungs-ID, z. B. ask_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string",
"description": "Die erste Frage, gekürzt"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Zeitpunkt der letzten Nachricht"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Wird nach diesem Zeitpunkt automatisch gelöscht (30 Tage nach der letzten Nachricht)"
},
"messages": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Nachrichten-ID innerhalb der Unterhaltung"
},
"role": {
"type": "string",
"description": "user (die Frage) oder assistant (die Antwort)"
},
"content": {
"type": "string",
"description": "Frage oder die Antwort in Markdown"
},
"queries": {
"type": "array",
"items": {
"type": "object"
},
"description": "So bin ich darauf gekommen: die genauen API-Abfragen hinter der Antwort, als [{tool, input, status, error}]"
},
"chart": {
"anyOf": [
{
"type": "object",
"description": "Diagramm der Antwort: {type: line, labels, series, comparison, metric, format} oder {type: table, columns, rows}"
},
{
"type": "null"
}
]
},
"goal_draft": {
"anyOf": [
{
"type": "object",
"description": "Ein vom Assistenten vorgeschlagenes Ziel, das mit goals_create bestätigt wird"
},
{
"type": "null"
}
]
},
"input_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Verwendete Eingabe-Tokens des Modells"
},
{
"type": "null"
}
]
},
"output_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Verwendete Ausgabe-Tokens des Modells"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
},
"description": "Fragen und Antworten, älteste zuerst"
}
}
}
DELETE
/sites/:site_id/ask/:id.json
Eine Ask-Unterhaltung und ihre Nachrichten löschen
assistant_conversations_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Unterhaltungs-ID, z. B. ask_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string",
"description": "Die erste Frage, gekürzt"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Zeitpunkt der letzten Nachricht"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Wird nach diesem Zeitpunkt automatisch gelöscht (30 Tage nach der letzten Nachricht)"
}
}
}
GET
/sites/:site_id/ask.json
Ihre Ask-Unterhaltungen für eine Website auflisten
assistant_conversations_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/ask.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Unterhaltungs-ID, z. B. ask_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string",
"description": "Die erste Frage, gekürzt"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Zeitpunkt der letzten Nachricht"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Wird nach diesem Zeitpunkt automatisch gelöscht (30 Tage nach der letzten Nachricht)"
}
}
}
}
GET
/sites/:site_id/ask/:id.json
Eine Ask-Unterhaltung: Fragen, Antworten, die zugrunde liegenden Abfragen und Diagramme
assistant_conversations_get
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Unterhaltungs-ID, z. B. ask_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website-ID"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string",
"description": "Die erste Frage, gekürzt"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Zeitpunkt der letzten Nachricht"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Wird nach diesem Zeitpunkt automatisch gelöscht (30 Tage nach der letzten Nachricht)"
},
"messages": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Nachrichten-ID innerhalb der Unterhaltung"
},
"role": {
"type": "string",
"description": "user (die Frage) oder assistant (die Antwort)"
},
"content": {
"type": "string",
"description": "Frage oder die Antwort in Markdown"
},
"queries": {
"type": "array",
"items": {
"type": "object"
},
"description": "So bin ich darauf gekommen: die genauen API-Abfragen hinter der Antwort, als [{tool, input, status, error}]"
},
"chart": {
"anyOf": [
{
"type": "object",
"description": "Diagramm der Antwort: {type: line, labels, series, comparison, metric, format} oder {type: table, columns, rows}"
},
{
"type": "null"
}
]
},
"goal_draft": {
"anyOf": [
{
"type": "object",
"description": "Ein vom Assistenten vorgeschlagenes Ziel, das mit goals_create bestätigt wird"
},
{
"type": "null"
}
]
},
"input_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Verwendete Eingabe-Tokens des Modells"
},
{
"type": "null"
}
]
},
"output_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Verwendete Ausgabe-Tokens des Modells"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
},
"description": "Fragen und Antworten, älteste zuerst"
}
}
}
POST
/sites/:site_id/ask/:ask_conversation_id/messages.json
Eine Folgefrage in einer Unterhaltung stellen (zählt zum monatlichen Limit für KI-Fragen). Gibt die Antwort zurück.
assistant_ask_followup
Berechtigung: 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": "Ihre Frage in einfacher Sprache",
"examples": [
"Which pages had the most visitors last week?"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"ask_conversation_id": {
"type": "string",
"description": "Ask conversation der Ressource"
}
},
"required": [
"question",
"site_id",
"ask_conversation_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Nachrichten-ID innerhalb der Unterhaltung"
},
"role": {
"type": "string",
"description": "user (die Frage) oder assistant (die Antwort)"
},
"content": {
"type": "string",
"description": "Frage oder die Antwort in Markdown"
},
"queries": {
"type": "array",
"items": {
"type": "object"
},
"description": "So bin ich darauf gekommen: die genauen API-Abfragen hinter der Antwort, als [{tool, input, status, error}]"
},
"chart": {
"anyOf": [
{
"type": "object",
"description": "Diagramm der Antwort: {type: line, labels, series, comparison, metric, format} oder {type: table, columns, rows}"
},
{
"type": "null"
}
]
},
"goal_draft": {
"anyOf": [
{
"type": "object",
"description": "Ein vom Assistenten vorgeschlagenes Ziel, das mit goals_create bestätigt wird"
},
{
"type": "null"
}
]
},
"input_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Verwendete Eingabe-Tokens des Modells"
},
{
"type": "null"
}
]
},
"output_tokens": {
"anyOf": [
{
"type": "integer",
"description": "Verwendete Ausgabe-Tokens des Modells"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Audit-Protokoll
GET
/workspaces/:workspace_id/audit_log.json
Einträge des Audit-Protokolls auflisten (.csv anhängen zum Exportieren)
audit_logs_get
Berechtigung: workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/audit_log.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"actor": {
"type": "string",
"description": "Nur Änderungen dieses Mitglieds (E-Mail)"
},
"item_type": {
"type": "string",
"description": "Nur diese Art von Datensatz, z. B. Site"
},
"event": {
"type": "string",
"description": "Nur diese Aktion",
"enum": [
"create",
"update",
"destroy"
]
},
"from": {
"type": "string",
"format": "date",
"description": "Ab Datum (einschließlich)"
},
"to": {
"type": "string",
"format": "date",
"description": "Bis Datum (einschließlich)"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Wann"
},
"event": {
"type": "string",
"description": "create, update oder destroy"
},
"item_type": {
"type": "string",
"description": "Art des Datensatzes, z. B. Site"
},
"item_id": {
"type": "string",
"format": "uuid"
},
"target": {
"type": "string",
"description": "Der Datensatz, nach Name, sofern bekannt"
},
"actor_email": {
"anyOf": [
{
"type": "string",
"description": "Mitglied, das die Änderung vorgenommen hat"
},
{
"type": "null"
}
]
},
"actor_name": {
"type": "string"
},
"token_name": {
"anyOf": [
{
"type": "string",
"description": "Verwendetes API-Token, falls vorhanden"
},
{
"type": "null"
}
]
},
"changes": {
"type": "object",
"description": "Geänderte Felder: { field: [before, after] }"
},
"ip": {
"anyOf": [
{
"type": "string",
"description": "Die IP-Adresse des Mitglieds"
},
{
"type": "null"
}
]
}
}
}
}
Benachrichtigungskanäle
POST
/workspaces/:workspace_id/channels.json
Einen Benachrichtigungskanal hinzufügen
notification_channels_create
Berechtigung: 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": "Webhook-URL (slack, teams, discord, webhook), HTTPS"
},
"secret": {
"type": "string",
"description": "webhook: HMAC-Secret für X-Privatus-Signature"
},
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "email: Empfängeradressen (max. 20)"
},
"routing_key": {
"type": "string",
"description": "pagerduty: Integrationsschlüssel für Events API v2"
},
"api_key": {
"type": "string",
"description": "opsgenie: API-Integrationsschlüssel"
},
"region": {
"type": "string",
"description": "opsgenie: Kontoregion",
"enum": [
"us",
"eu"
]
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie oder push",
"enum": [
"email",
"slack",
"teams",
"discord",
"webhook",
"pagerduty",
"opsgenie",
"push"
]
},
"name": {
"type": "string",
"description": "Anzeigename",
"examples": [
"#alerts"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"kind",
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Kanal-ID, z. B. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie oder push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Maskiertes Ziel"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/channels/:id.json
Einen Benachrichtigungskanal löschen
notification_channels_delete
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Kanal-ID, z. B. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie oder push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Maskiertes Ziel"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/channels.json
Benachrichtigungskanäle auflisten
notification_channels_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/channels.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "Nur Kanäle dieser Art",
"enum": [
"email",
"slack",
"teams",
"discord",
"webhook",
"pagerduty",
"opsgenie",
"push"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Kanal-ID, z. B. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie oder push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Maskiertes Ziel"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/channels/:id/send_test.json
Eine Testnachricht über einen Kanal senden
notification_channels_send_test
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Kanal-ID, z. B. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie oder push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Maskiertes Ziel"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/channels/:id.json
Einen Benachrichtigungskanal abrufen
notification_channels_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/channels/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Kanal-ID, z. B. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie oder push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Maskiertes Ziel"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/channels/:id.json
Einen Benachrichtigungskanal aktualisieren
notification_channels_update
Berechtigung: 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": "Webhook-URL (slack, teams, discord, webhook), HTTPS"
},
"secret": {
"type": "string",
"description": "webhook: HMAC-Secret für X-Privatus-Signature"
},
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "email: Empfängeradressen (max. 20)"
},
"routing_key": {
"type": "string",
"description": "pagerduty: Integrationsschlüssel für Events API v2"
},
"api_key": {
"type": "string",
"description": "opsgenie: API-Integrationsschlüssel"
},
"region": {
"type": "string",
"description": "opsgenie: Kontoregion",
"enum": [
"us",
"eu"
]
},
"name": {
"type": "string",
"description": "Anzeigename"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Kanal-ID, z. B. nch_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "email, slack, teams, discord, webhook, pagerduty, opsgenie oder push"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Maskiertes Ziel"
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/push_subscription.json
Einen Browser für Push-Benachrichtigungen registrieren
push_subscriptions_create
Berechtigung: 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 aus dem Browser"
},
"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": "Host des Push-Dienstes"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/push_subscription.json
Eine Browser-Push-Registrierung entfernen
push_subscriptions_delete
Berechtigung: 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": "Zu entfernender PushSubscription.endpoint"
}
},
"required": [
"endpoint"
]
}
{
"type": "object",
"properties": {
"endpoint_host": {
"type": "string",
"description": "Host des Push-Dienstes"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Crawler
POST
/sites/:site_id/crawlers/connection.json
Treffer von KI-Crawlern aus einer Cloudflare-Zone synchronisieren (erfordert eine Cloudflare-Freigabe im Browser)
crawlers_cloudflare_connect
Berechtigung: 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": "Cloudflare-Zonen-ID aus crawlers_cloudflare_zones",
"examples": [
"023e105f4ecef8ad9ca31a8372d0c353"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"zone_id",
"site_id"
]
}
{
"type": "object",
"properties": {
"zone_id": {
"type": "string",
"description": "Cloudflare-Zonen-ID"
},
"zone_name": {
"type": "string",
"description": "Name der Cloudflare-Zone, z. B. example.com"
},
"status": {
"type": "string",
"description": "active oder error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann zuletzt Crawler-Treffer importiert wurden, oder null vor dem ersten Import"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/crawlers/connection.json
Cloudflare trennen und die importierten Crawler-Treffer löschen
crawlers_cloudflare_disconnect
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"zone_id": {
"type": "string",
"description": "Cloudflare-Zonen-ID"
},
"zone_name": {
"type": "string",
"description": "Name der Cloudflare-Zone, z. B. example.com"
},
"status": {
"type": "string",
"description": "active oder error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann zuletzt Crawler-Treffer importiert wurden, oder null vor dem ersten Import"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/crawlers/sync.json
Crawler-Treffer jetzt aus Cloudflare importieren
crawlers_cloudflare_sync
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"zone_id": {
"type": "string",
"description": "Cloudflare-Zonen-ID"
},
"zone_name": {
"type": "string",
"description": "Name der Cloudflare-Zone, z. B. example.com"
},
"status": {
"type": "string",
"description": "active oder error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann zuletzt Crawler-Treffer importiert wurden, oder null vor dem ersten Import"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/crawlers/zones.json
Die Cloudflare-Zonen auflisten, die Sie verbinden können (erfordert eine Cloudflare-Freigabe im Browser)
crawlers_cloudflare_zones
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/crawlers.json
KI-Crawler-Bericht: Treffer pro Crawler im Zeitverlauf, Top-Pfade pro Crawler, nach Kategorie
crawlers_report
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/crawlers.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"category": {
"type": "string",
"description": "ai, search, seo, other oder all",
"enum": [
"all",
"ai",
"search",
"seo",
"other"
],
"default": "ai"
},
"crawler": {
"type": "string",
"description": "Nur dieser Crawler, z. B. GPTBot"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
Dashboards
GET
/workspaces/:workspace_id/dashboards/:id/cards/:index.json
Daten für eine Karte eines eigenen Dashboards
dashboards_card
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
},
"index": {
"type": "string",
"description": "Index der Ressource"
}
},
"required": [
"workspace_id",
"id",
"index"
]
}
{
"type": "object"
}
POST
/workspaces/:workspace_id/dashboards.json
Ein eigenes Dashboard erstellen
dashboards_create
Berechtigung: 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": "Dashboard-Name",
"examples": [
"Client: Acme"
]
},
"cards": {
"type": "array",
"items": {},
"description": "Karten in Reihenfolge (max. 40): [{\"type\": \"metric|chart|breakdown|goal|live|funnel|uptime|vitals\", \"site_id\": \"pa_…\", \"title\": \"optional\", \"params\": {\"period\": \"30d\", \"metric\": \"visitors\", \"dimension\": \"page\", \"funnel_id\": \"fun_…\"}}]. Parameter, die ein Typ nicht verwendet, werden ignoriert",
"default": []
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dashboard-ID, z. B. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Karten in Reihenfolge: [{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
Ein eigenes Dashboard löschen
dashboards_delete
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dashboard-ID, z. B. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Karten in Reihenfolge: [{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
Eigene Dashboards auflisten
dashboards_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dashboard-ID, z. B. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Karten in Reihenfolge: [{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
Ein eigenes Dashboard und seine Karten abrufen
dashboards_get
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dashboard-ID, z. B. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Karten in Reihenfolge: [{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
Ein eigenes Dashboard umbenennen oder seine Karten ersetzen
dashboards_update
Berechtigung: 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": "Neuer Name (bei leerem Wert unverändert)"
},
"cards": {
"type": "array",
"items": {},
"description": "Ersetzt alle Karten. Karten in Reihenfolge (max. 40): [{\"type\": \"metric|chart|breakdown|goal|live|funnel|uptime|vitals\", \"site_id\": \"pa_…\", \"title\": \"optional\", \"params\": {\"period\": \"30d\", \"metric\": \"visitors\", \"dimension\": \"page\", \"funnel_id\": \"fun_…\"}}]. Parameter, die ein Typ nicht verwendet, werden ignoriert"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dashboard-ID, z. B. dash_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"cards": {
"type": "array",
"items": {
"type": "object"
},
"description": "Karten in Reihenfolge: [{type, site_id, title, params}]"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
Dokumentation
GET
/docs/api.json
Alle API-Operationen und MCP-Tools auflisten
docs_api
Berechtigung: public
curl https://privatusanalytics.com/docs/api.json
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"tool_name": {
"type": "string",
"description": "MCP-Tool-Name und OpenAPI-operationId"
},
"summary": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"group": {
"type": "string"
},
"verb": {
"type": "string",
"description": "HTTP-Methode"
},
"path": {
"type": "string",
"description": "Pfadvorlage. .json für JSON anhängen"
},
"permission": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"input_schema": {
"type": "object",
"description": "JSON-Schema der Eingaben"
},
"response_schema": {
"type": "object",
"description": "JSON-Schema von `data`"
}
}
}
}
GET
/docs.json
Dokumentationsseiten auflisten
docs_list
Berechtigung: public
curl https://privatusanalytics.com/docs.json
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Seitentitel"
},
"description": {
"type": "string",
"description": "Einzeilige Zusammenfassung"
},
"path": {
"type": "string",
"description": "Seitenpfad. .md für Markdown oder .json für JSON anhängen"
},
"section": {
"type": "string",
"description": "Abschnitts-Slug, z. B. tracker"
}
}
}
}
GET
/openapi.json
OpenAPI-3.1-Dokument für die gesamte API
docs_openapi
Berechtigung: public
curl https://privatusanalytics.com/openapi.json
{
"type": "object",
"properties": {},
"required": []
}
{
"type": "object"
}
GET
/docs/search.json
Die Dokumentation durchsuchen
docs_search
Berechtigung: public
curl https://privatusanalytics.com/docs/search.json
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Suchtext. Leer gibt jede Seite zurück.",
"examples": [
"content security policy"
]
},
"limit": {
"type": "integer",
"description": "Maximale Ergebnisse (Standard: 20 mit q, alle ohne)"
}
},
"required": []
}
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Seitentitel"
},
"path": {
"type": "string",
"description": "Seitenpfad"
},
"section": {
"type": "string",
"description": "Abschnittstitel"
},
"headings": {
"type": "array",
"items": {
"type": "object"
},
"description": "Überschriften auf der Seite: { id, text }"
},
"excerpt": {
"type": "string",
"description": "Beschreibung oder erste Sätze"
},
"score": {
"anyOf": [
{
"type": "integer",
"description": "Relevanz (nur bei der Suche mit q)"
},
{
"type": "null"
}
]
}
}
}
GET
/docs/:section/:page.json
Eine Dokumentationsseite lesen (Markdown und HTML)
docs_get
section und page stammen aus dem Seitenpfad /docs/<section>/<page>. Verwenden Sie die Seite "index" für eine Übersicht des Abschnitts.
Berechtigung: public
curl https://privatusanalytics.com/docs/:section/:page.json
{
"type": "object",
"properties": {
"section": {
"type": "string",
"description": "Section der Ressource"
},
"page": {
"type": "string",
"description": "Page der Ressource"
}
},
"required": [
"section",
"page"
]
}
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Seitentitel"
},
"description": {
"type": "string",
"description": "Einzeilige Zusammenfassung"
},
"path": {
"type": "string",
"description": "Seitenpfad. .md für Markdown oder .json für JSON anhängen"
},
"section": {
"type": "string",
"description": "Abschnitts-Slug, z. B. tracker"
},
"headings": {
"type": "array",
"items": {
"type": "object"
},
"description": "Abschnitte auf der Seite (id und text)"
},
"full_markdown": {
"type": "string",
"description": "Die Seite als Markdown (einschließlich Titel)"
},
"html": {
"type": "string",
"description": "Der als HTML gerenderte Seiteninhalt"
}
}
}
E-Mail-Berichte
DELETE
/recipients/:id.json
Einen Empfänger aus einem E-Mail-Bericht entfernen
email_report_recipients_delete
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
}
GET
/reports/:report_id/recipients.json
Die Empfänger eines E-Mail-Berichts mit ihrem Status auflisten
email_report_recipients_list
Status: active (erhält Berichte), pending (eingeladen, noch nicht angenommen), declined oder unsubscribed. Adressen fügen Sie über die Empfängerliste des Berichts hinzu oder entfernen sie dort.
Berechtigung: analytics.read
curl https://privatusanalytics.com/reports/:report_id/recipients.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Nur Empfänger mit diesem Status",
"enum": [
"pending",
"active",
"declined",
"unsubscribed"
]
},
"report_id": {
"type": "string",
"description": "Report der Ressource"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"report_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
}
}
POST
/recipients/:id/resend.json
Eine ausstehende Berichtseinladung erneut senden
email_report_recipients_resend
Sendet die Einladung mit neuen Links erneut. Einmal alle 7 Tage pro Adresse und Bericht erlaubt.
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces/:workspace_id/reports.json
Einen E-Mail-Bericht erstellen
email_reports_create
Berechtigung: 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": "Im Bericht enthaltene Website-IDs (pa_…)"
},
"frequency": {
"type": "string",
"description": "daily, weekly (an einem Wochentag) oder monthly (am 1.)",
"enum": [
"daily",
"weekly",
"monthly"
]
},
"hour": {
"type": "integer",
"description": "Sendestunde (0 bis 23, Zeitzone des Workspaces)"
},
"weekday": {
"type": "integer",
"description": "Wöchentliche Berichte: 0 = Sonntag … 6 = Samstag"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "E-Mail-Adressen (kein Konto nötig). Einträge können durch Kommas oder Zeilenumbrüche getrennt sein. Mitglieder des Workspaces werden sofort hinzugefügt. Alle anderen erhalten eine Einladung und bekommen Berichte erst, nachdem sie diese angenommen haben. Adressen, die sich von Berichten abgemeldet haben, werden abgelehnt"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inhalt: kpis, chart, pages, sources, goals, campaigns, vitals, uptime"
},
"attach_pdf": {
"type": "boolean",
"description": "Eine PDF-Version anhängen"
},
"intro": {
"type": "string",
"description": "Eigener Einleitungstext (max. 2000 Zeichen)"
},
"enabled": {
"type": "boolean",
"description": "Nach Zeitplan senden"
},
"name": {
"type": "string",
"description": "Berichtsname",
"examples": [
"Weekly traffic"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Berichts-ID, z. B. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs im Bericht"
},
"frequency": {
"type": "string",
"description": "daily, weekly oder monthly"
},
"hour": {
"type": "integer",
"description": "Sendestunde (Zeitzone des Workspaces)"
},
"weekday": {
"type": "integer",
"description": "Wöchentlich: 0 = Sonntag … 6 = Samstag"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Jede Adresse im Bericht, unabhängig von ihrem Status"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
},
"description": "Jeder Empfänger mit seinem Opt-in-Status (nur aktive Empfänger erhalten Berichte)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inhaltsblöcke"
},
"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
Zustellprotokoll eines E-Mail-Berichts
email_reports_deliveries
Berechtigung: analytics.read
curl https://privatusanalytics.com/reports/:id/deliveries.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Nur Zustellungen mit diesem Status",
"enum": [
"sent",
"test",
"failed",
"skipped"
]
},
"id": {
"type": "string",
"description": "Id der Ressource"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "sent, test, failed oder skipped"
},
"recipients_count": {
"type": "integer"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sent_at": {
"type": "string",
"format": "date-time"
}
}
}
}
DELETE
/reports/:id.json
Einen E-Mail-Bericht löschen
email_reports_delete
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Berichts-ID, z. B. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs im Bericht"
},
"frequency": {
"type": "string",
"description": "daily, weekly oder monthly"
},
"hour": {
"type": "integer",
"description": "Sendestunde (Zeitzone des Workspaces)"
},
"weekday": {
"type": "integer",
"description": "Wöchentlich: 0 = Sonntag … 6 = Samstag"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Jede Adresse im Bericht, unabhängig von ihrem Status"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
},
"description": "Jeder Empfänger mit seinem Opt-in-Status (nur aktive Empfänger erhalten Berichte)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inhaltsblöcke"
},
"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
E-Mail-Berichte auflisten
email_reports_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/reports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"frequency": {
"type": "string",
"description": "Nur Berichte mit dieser Häufigkeit",
"enum": [
"daily",
"weekly",
"monthly"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Berichts-ID, z. B. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs im Bericht"
},
"frequency": {
"type": "string",
"description": "daily, weekly oder monthly"
},
"hour": {
"type": "integer",
"description": "Sendestunde (Zeitzone des Workspaces)"
},
"weekday": {
"type": "integer",
"description": "Wöchentlich: 0 = Sonntag … 6 = Samstag"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Jede Adresse im Bericht, unabhängig von ihrem Status"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
},
"description": "Jeder Empfänger mit seinem Opt-in-Status (nur aktive Empfänger erhalten Berichte)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inhaltsblöcke"
},
"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
Einen E-Mail-Bericht jetzt als Test senden
email_reports_send_test
Berechtigung: 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": "Den Test hierhin senden (Standard: Ihre E-Mail-Adresse)"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "sent, test, failed oder skipped"
},
"recipients_count": {
"type": "integer"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sent_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/reports/:id.json
Einen E-Mail-Bericht abrufen
email_reports_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/reports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Berichts-ID, z. B. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs im Bericht"
},
"frequency": {
"type": "string",
"description": "daily, weekly oder monthly"
},
"hour": {
"type": "integer",
"description": "Sendestunde (Zeitzone des Workspaces)"
},
"weekday": {
"type": "integer",
"description": "Wöchentlich: 0 = Sonntag … 6 = Samstag"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Jede Adresse im Bericht, unabhängig von ihrem Status"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
},
"description": "Jeder Empfänger mit seinem Opt-in-Status (nur aktive Empfänger erhalten Berichte)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inhaltsblöcke"
},
"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
Einen E-Mail-Bericht aktualisieren
email_reports_update
Berechtigung: 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": "Im Bericht enthaltene Website-IDs (pa_…)"
},
"frequency": {
"type": "string",
"description": "daily, weekly (an einem Wochentag) oder monthly (am 1.)",
"enum": [
"daily",
"weekly",
"monthly"
]
},
"hour": {
"type": "integer",
"description": "Sendestunde (0 bis 23, Zeitzone des Workspaces)"
},
"weekday": {
"type": "integer",
"description": "Wöchentliche Berichte: 0 = Sonntag … 6 = Samstag"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "E-Mail-Adressen (kein Konto nötig). Einträge können durch Kommas oder Zeilenumbrüche getrennt sein. Mitglieder des Workspaces werden sofort hinzugefügt. Alle anderen erhalten eine Einladung und bekommen Berichte erst, nachdem sie diese angenommen haben. Adressen, die sich von Berichten abgemeldet haben, werden abgelehnt"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inhalt: kpis, chart, pages, sources, goals, campaigns, vitals, uptime"
},
"attach_pdf": {
"type": "boolean",
"description": "Eine PDF-Version anhängen"
},
"intro": {
"type": "string",
"description": "Eigener Einleitungstext (max. 2000 Zeichen)"
},
"enabled": {
"type": "boolean",
"description": "Nach Zeitplan senden"
},
"name": {
"type": "string",
"description": "Berichtsname"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Berichts-ID, z. B. rep_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs im Bericht"
},
"frequency": {
"type": "string",
"description": "daily, weekly oder monthly"
},
"hour": {
"type": "integer",
"description": "Sendestunde (Zeitzone des Workspaces)"
},
"weekday": {
"type": "integer",
"description": "Wöchentlich: 0 = Sonntag … 6 = Samstag"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "Jede Adresse im Bericht, unabhängig von ihrem Status"
},
"recipient_details": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
},
"description": "Jeder Empfänger mit seinem Opt-in-Status (nur aktive Empfänger erhalten Berichte)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inhaltsblöcke"
},
"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
Eine Berichtseinladung annehmen
report_invites_accept
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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 der Ressource"
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
}
POST
/reports/invites/:token/decline.json
Eine Berichtseinladung ablehnen
report_invites_decline
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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 der Ressource"
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Empfänger-ID, z. B. rcp_7Q2K9XH3AB"
},
"email": {
"type": "string",
"description": "Die Adresse"
},
"status": {
"type": "string",
"description": "active, pending, declined oder unsubscribed"
},
"invited_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die letzte Einladung gesendet wurde"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann eine ausstehende Einladung abläuft"
},
{
"type": "null"
}
]
},
"confirmed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Adresse aktiv wurde"
},
{
"type": "null"
}
]
}
}
}
POST
/reports/resubscribe/:token.json
Nach einer Abmeldung wieder Berichte erhalten
report_resubscribes_confirm
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/reports/resubscribe/:token.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token der Ressource"
}
},
"required": [
"token"
]
}
{
"type": "object"
}
POST
/reports/unsubscribe/:token/resubscribe.json
Einer Adresse einen Link senden, um wieder Berichte zu erhalten
report_resubscribes_create
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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 der Ressource"
}
},
"required": [
"token"
]
}
{
"type": "object"
}
POST
/reports/unsubscribe/:token.json
Eine Adresse von einem E-Mail-Bericht abmelden
report_unsubscribes_create
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/reports/unsubscribe/:token.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token der Ressource"
}
},
"required": [
"token"
]
}
{
"type": "object"
}
Ereignisse
GET
/sites/:site_id/events/properties.json
Ereigniseigenschaften-Schlüssel der letzten 30 Tage auflisten
event_properties_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/events/properties.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"event": {
"type": "string",
"description": "Nur Schlüssel, die bei diesem rohen Ereignisnamen gesehen wurden"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
PATCH
/sites/:site_id/events/properties.json
Einen Ereigniseigenschaften-Schlüssel umbenennen oder ausblenden
event_properties_update
Berechtigung: 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": "Eigenschaftsschlüssel wie gespeichert, z. B. plan"
},
"display_name": {
"type": "string",
"description": "Stattdessen anzuzeigende Bezeichnung (leer entfernt sie)"
},
"hidden": {
"type": "boolean",
"description": "Diesen Schlüssel in Berichten ausblenden"
},
"export_safe": {
"type": "boolean",
"description": "Der Schlüssel enthält keine personenbezogenen Daten und ist daher in Rohexporten und Warehouse-Synchronisierungen enthalten"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"key",
"site_id"
]
}
{
"type": "object"
}
DELETE
/sites/:site_id/events.json
Ein Ereignis und seinen Verlauf löschen (läuft im Hintergrund, Bestätigung durch Eingabe des Namens)
events_delete
Berechtigung: 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": "Zu löschender roher Ereignisname"
},
"confirm": {
"type": "string",
"description": "Geben Sie zur Bestätigung den Ereignisnamen erneut ein"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"confirm",
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/events.json
Ereignisse mit Abschlüssen, Besuchen, Conversion-Rate und erstem/letztem Auftreten auflisten
events_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/events.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"search": {
"type": "string",
"description": "Nur Ereignisse, deren Name dies enthält"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/sites/:site_id/events/merge.json
Mehrere Ereignisse unter einem Anzeigenamen zusammenführen
events_merge
Berechtigung: 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": "Zusammenzuführende rohe Ereignisnamen"
},
"into": {
"type": "string",
"description": "Anzeigename für das zusammengeführte Ereignis",
"examples": [
"Signup"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"names",
"into",
"site_id"
]
}
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Roher Ereignisname, wie ihn der Tracker sendet"
},
"display_name": {
"anyOf": [
{
"type": "string",
"description": "In Berichten angezeigter Name"
},
{
"type": "null"
}
]
},
"hidden": {
"type": "boolean",
"description": "In Berichten ausgeblendet"
},
"currency": {
"anyOf": [
{
"type": "string",
"description": "Umsatzwährung"
},
{
"type": "null"
}
]
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/events/detail.json
Ein Ereignis: Diagramm, Eigenschaften-Pivot, Aggregate numerischer Eigenschaften, Seiten und Quellen
events_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/events/detail.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"name": {
"type": "string",
"description": "Ereignisname wie angezeigt (nach Umbenennungen)",
"examples": [
"Signup"
]
},
"properties": {
"type": "array",
"items": {
"type": "string"
},
"description": "Bis zu 3 Eigenschaftsschlüssel für den Pivot",
"default": []
},
"interval": {
"type": "string",
"description": "Größe der Diagrammintervalle",
"enum": [
"auto",
"minute",
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "auto"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"site_id"
]
}
{
"type": "object"
}
PATCH
/sites/:site_id/events/settings.json
Ein Ereignis umbenennen, ausblenden oder einblenden oder seine Währung festlegen
events_update
Berechtigung: 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": "Roher Ereignisname, wie ihn der Tracker sendet",
"examples": [
"signup_click"
]
},
"display_name": {
"type": "string",
"description": "Stattdessen anzuzeigender Name (leer entfernt die Umbenennung)"
},
"hidden": {
"type": "boolean",
"description": "In Berichten ausblenden (die Daten bleiben erhalten)"
},
"currency": {
"type": "string",
"description": "Währung für den Umsatz dieses Ereignisses (ISO 4217)"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"site_id"
]
}
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Roher Ereignisname, wie ihn der Tracker sendet"
},
"display_name": {
"anyOf": [
{
"type": "string",
"description": "In Berichten angezeigter Name"
},
{
"type": "null"
}
]
},
"hidden": {
"type": "boolean",
"description": "In Berichten ausgeblendet"
},
"currency": {
"anyOf": [
{
"type": "string",
"description": "Umsatzwährung"
},
{
"type": "null"
}
]
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
Erfassung
POST
/api/logs.json
Server-Zugriffslogs für die Auswertung von KI-Crawlern senden (JSON {lines: [...]} oder Combined-Log-Text, mit dem Ingest-Schlüssel der Website als Bearer-Token)
crawler_logs_create
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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": "Log-Zeilen: [{ts, path, status, user_agent}] (max. 1000)"
}
},
"required": [
"lines"
]
}
{
"type": "object"
}
POST
/api/event.json
Einen Browser-Treffer erfassen (wird von /js/pa.js verwendet)
ingest_event
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/api/event.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"site": {
"type": "string",
"description": "Website-ID (pa_…)"
},
"type": {
"type": "string",
"description": "Treffertyp",
"enum": [
"pageview",
"event",
"engagement",
"vital",
"click"
]
},
"url": {
"type": "string",
"description": "Vollständige Seiten-URL"
},
"referrer": {
"type": "string",
"description": "document.referrer"
},
"name": {
"type": "string",
"description": "Ereignisname (type=event) oder Vital-Name"
},
"props": {
"type": "object",
"additionalProperties": true,
"description": "Ereigniseigenschaften: bis zu 30 String-/Zahlen-/Boolean-Werte",
"default": {}
},
"screen_width": {
"type": "integer",
"description": "Bildschirmbreite in Pixeln"
},
"language": {
"type": "string",
"description": "navigator.language"
},
"engaged_ms": {
"type": "integer",
"description": "Sichtbare Zeit auf der Seite (Engagement)"
},
"scroll_depth": {
"type": "integer",
"description": "Maximale Scrolltiefe in % (Engagement)"
},
"value": {
"type": "number",
"description": "Web-Vital-Wert (type=vital)"
},
"selector": {
"type": "string",
"description": "Selektor des angeklickten Elements (type=click)"
},
"hash_mode": {
"type": "boolean",
"description": "Das #Fragment beibehalten (Websites mit Hash-Routing)",
"default": false
},
"dnt": {
"type": "boolean",
"description": "Do Not Track ist aktiviert",
"default": false
},
"gpc": {
"type": "boolean",
"description": "Global Privacy Control ist aktiviert",
"default": false
},
"interacted": {
"type": "boolean",
"description": "1, sobald eine vertrauenswürdige Eingabe (Zeiger, Taste, Berührung oder Mausrad) auf der Seite erkannt wurde, sonst 0. Keine Koordinaten oder Zeitangaben"
},
"revenue": {
"type": "number",
"description": "Umsatz in Hauptwährungseinheiten, z. B. 49.99"
},
"currency": {
"type": "string",
"description": "ISO-4217-Währung des Umsatzes"
}
},
"required": [
"site",
"type",
"url"
]
}
{
"type": "object"
}
POST
/api/events.json
Serverseitige Ereignisse mit einem Ingest-Schlüssel der Website erfassen
ingest_events
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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": "Bis zu 100 Ereignisse"
}
},
"required": [
"events"
]
}
{
"type": "object"
}
GET
/api/pixel.json
Einen Pageview ohne JavaScript erfassen (1×1-GIF)
ingest_pixel
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl https://privatusanalytics.com/api/pixel.json
{
"type": "object",
"properties": {},
"required": []
}
{
"type": "object"
}
Exporte
POST
/workspaces/:workspace_id/exports.json
Einen Export in die Warteschlange stellen (wird im Hintergrund erstellt)
exports_create
Berechtigung: 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": "Zu exportierende Website (pa_…)",
"examples": [
"pa_7Q2K9XH3AB"
]
},
"kind": {
"type": "string",
"description": "aggregated: Kennzahlen nach Zeitintervall und Dimensionen. pageviews/events/raw: eine Zeile pro Treffer (Pro und höher). imported: importierte Tagesstatistiken. dashboard: ZIP der Übersichtspanels",
"enum": [
"aggregated",
"pageviews",
"events",
"imported",
"raw",
"dashboard"
],
"default": "aggregated"
},
"file_format": {
"type": "string",
"description": "csv, json oder xlsx (aggregated, pageviews, events, imported), csv oder ndjson (raw), zip (dashboard)",
"enum": [
"csv",
"json",
"xlsx",
"ndjson",
"zip"
],
"default": "csv"
},
"from": {
"type": "string",
"format": "date",
"description": "Erster Tag, in der Zeitzone des Exports",
"examples": [
"2026-09-01"
]
},
"to": {
"type": "string",
"format": "date",
"description": "Letzter Tag, einschließlich (max. 400 Tage, raw 93 Tage)",
"examples": [
"2026-09-28"
]
},
"timezone": {
"type": "string",
"description": "Zeitzone für Datumsangaben und Gruppierung, z. B. America/New_York (Standard: die Zeitzone der Website)"
},
"grouping": {
"type": "string",
"description": "Zeitintervall für aggregierte Exporte",
"enum": [
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "day"
},
"dimensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Besuchsdimensionen, nach denen aggregierte Exporte gruppiert werden (bis zu 6), z. B. country, channel, entry_page. Bei importierten Exporten: die einzubeziehenden importierten Dimensionen",
"default": []
},
"metrics": {
"type": "array",
"items": {
"type": "string"
},
"description": "Kennzahlen für aggregierte Exporte (Standard alle): visitors, visits, pageviews, bounce_rate, visit_duration, views_per_visit, revenue",
"default": []
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Spalten für die Exporte pageviews/events/raw (Standard alle außer 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": "Filter im selben Format wie die Statistik-API: [[\"dimension\",\"operator\",\"value\"], …]",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"site_id",
"from",
"to",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Export-ID, z. B. exp_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Exportierte Website (pa_…)"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string",
"description": "aggregated, pageviews, events, imported, raw oder dashboard"
},
"format": {
"type": "string",
"description": "csv, json, xlsx, ndjson oder zip"
},
"status": {
"type": "string",
"description": "queued, running, complete, failed oder expired"
},
"params": {
"type": "object",
"description": "Die Exportdefinition (Datumsangaben, Zeitzone, Gruppierung, Dimensionen, Kennzahlen, Felder, Filter)"
},
"row_count": {
"anyOf": [
{
"type": "integer",
"description": "Geschriebene Zeilen"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Warum der Export fehlgeschlagen ist"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Datei gelöscht wird"
},
{
"type": "null"
}
]
},
"download_url": {
"anyOf": [
{
"type": "string",
"description": "Pfad, der einen kurzlebigen signierten Dateilink zurückgibt (exports_download)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/exports/:id.json
Einen Export und seine Datei löschen
exports_delete
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Export-ID, z. B. exp_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Exportierte Website (pa_…)"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string",
"description": "aggregated, pageviews, events, imported, raw oder dashboard"
},
"format": {
"type": "string",
"description": "csv, json, xlsx, ndjson oder zip"
},
"status": {
"type": "string",
"description": "queued, running, complete, failed oder expired"
},
"params": {
"type": "object",
"description": "Die Exportdefinition (Datumsangaben, Zeitzone, Gruppierung, Dimensionen, Kennzahlen, Felder, Filter)"
},
"row_count": {
"anyOf": [
{
"type": "integer",
"description": "Geschriebene Zeilen"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Warum der Export fehlgeschlagen ist"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Datei gelöscht wird"
},
{
"type": "null"
}
]
},
"download_url": {
"anyOf": [
{
"type": "string",
"description": "Pfad, der einen kurzlebigen signierten Dateilink zurückgibt (exports_download)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/exports/:id/download.json
Einen signierten Link zur Datei abrufen (10 Minuten gültig)
exports_download
Berechtigung: analytics.export
curl https://privatusanalytics.com/exports/:id/download.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object"
}
GET
/workspaces/:workspace_id/exports.json
Exporte auflisten (die Job-Warteschlange)
exports_list
Berechtigung: analytics.export
curl https://privatusanalytics.com/workspaces/:workspace_id/exports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Nur Exporte dieser Website (pa_…)"
},
"status": {
"type": "string",
"description": "Nur Exporte mit diesem Status",
"enum": [
"queued",
"running",
"complete",
"failed",
"expired"
]
},
"kind": {
"type": "string",
"description": "Nur Exporte dieser Art",
"enum": [
"aggregated",
"pageviews",
"events",
"imported",
"raw",
"dashboard"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Export-ID, z. B. exp_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Exportierte Website (pa_…)"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string",
"description": "aggregated, pageviews, events, imported, raw oder dashboard"
},
"format": {
"type": "string",
"description": "csv, json, xlsx, ndjson oder zip"
},
"status": {
"type": "string",
"description": "queued, running, complete, failed oder expired"
},
"params": {
"type": "object",
"description": "Die Exportdefinition (Datumsangaben, Zeitzone, Gruppierung, Dimensionen, Kennzahlen, Felder, Filter)"
},
"row_count": {
"anyOf": [
{
"type": "integer",
"description": "Geschriebene Zeilen"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Warum der Export fehlgeschlagen ist"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Datei gelöscht wird"
},
{
"type": "null"
}
]
},
"download_url": {
"anyOf": [
{
"type": "string",
"description": "Pfad, der einen kurzlebigen signierten Dateilink zurückgibt (exports_download)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/workspaces/:workspace_id/exports/preview.json
Einen Export in der Vorschau anzeigen: die ersten 20 Zeilen und die geschätzte Zeilenanzahl
exports_preview
Berechtigung: 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": "Zu exportierende Website (pa_…)",
"examples": [
"pa_7Q2K9XH3AB"
]
},
"kind": {
"type": "string",
"description": "aggregated: Kennzahlen nach Zeitintervall und Dimensionen. pageviews/events/raw: eine Zeile pro Treffer (Pro und höher). imported: importierte Tagesstatistiken. dashboard: ZIP der Übersichtspanels",
"enum": [
"aggregated",
"pageviews",
"events",
"imported",
"raw",
"dashboard"
],
"default": "aggregated"
},
"file_format": {
"type": "string",
"description": "csv, json oder xlsx (aggregated, pageviews, events, imported), csv oder ndjson (raw), zip (dashboard)",
"enum": [
"csv",
"json",
"xlsx",
"ndjson",
"zip"
],
"default": "csv"
},
"from": {
"type": "string",
"format": "date",
"description": "Erster Tag, in der Zeitzone des Exports",
"examples": [
"2026-09-01"
]
},
"to": {
"type": "string",
"format": "date",
"description": "Letzter Tag, einschließlich (max. 400 Tage, raw 93 Tage)",
"examples": [
"2026-09-28"
]
},
"timezone": {
"type": "string",
"description": "Zeitzone für Datumsangaben und Gruppierung, z. B. America/New_York (Standard: die Zeitzone der Website)"
},
"grouping": {
"type": "string",
"description": "Zeitintervall für aggregierte Exporte",
"enum": [
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "day"
},
"dimensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Besuchsdimensionen, nach denen aggregierte Exporte gruppiert werden (bis zu 6), z. B. country, channel, entry_page. Bei importierten Exporten: die einzubeziehenden importierten Dimensionen",
"default": []
},
"metrics": {
"type": "array",
"items": {
"type": "string"
},
"description": "Kennzahlen für aggregierte Exporte (Standard alle): visitors, visits, pageviews, bounce_rate, visit_duration, views_per_visit, revenue",
"default": []
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Spalten für die Exporte pageviews/events/raw (Standard alle außer 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": "Filter im selben Format wie die Statistik-API: [[\"dimension\",\"operator\",\"value\"], …]",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"site_id",
"from",
"to",
"workspace_id"
]
}
{
"type": "object"
}
GET
/exports/:id.json
Einen Export und seinen Status abrufen
exports_get
Berechtigung: analytics.export
curl https://privatusanalytics.com/exports/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Export-ID, z. B. exp_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Exportierte Website (pa_…)"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string",
"description": "aggregated, pageviews, events, imported, raw oder dashboard"
},
"format": {
"type": "string",
"description": "csv, json, xlsx, ndjson oder zip"
},
"status": {
"type": "string",
"description": "queued, running, complete, failed oder expired"
},
"params": {
"type": "object",
"description": "Die Exportdefinition (Datumsangaben, Zeitzone, Gruppierung, Dimensionen, Kennzahlen, Felder, Filter)"
},
"row_count": {
"anyOf": [
{
"type": "integer",
"description": "Geschriebene Zeilen"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Warum der Export fehlgeschlagen ist"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Wann die Datei gelöscht wird"
},
{
"type": "null"
}
]
},
"download_url": {
"anyOf": [
{
"type": "string",
"description": "Pfad, der einen kurzlebigen signierten Dateilink zurückgibt (exports_download)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Funnels
POST
/sites/:site_id/funnels.json
Einen Funnel erstellen
funnels_create
Berechtigung: 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": "Funnel-Name",
"examples": [
"Signup flow"
]
},
"steps": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Geordnete Schritte (2 bis zum Limit Ihres Tarifs): [{\"type\": \"page|event|goal\", \"value\": \"/pricing | Signup | goal_…\", \"match\": \"exact|prefix|glob|regex\" (Seitenschritte), \"name\": \"optionale Bezeichnung\"}]"
},
"order_mode": {
"type": "string",
"description": "strict: Schritte in dieser Reihenfolge, any: in beliebiger Reihenfolge",
"enum": [
"strict",
"any"
],
"default": "strict"
},
"window": {
"type": "string",
"description": "Conversion-Fenster: visit oder day (innerhalb eines Besuchs gemessen, der nie über einen UTC-Tag hinausgeht)",
"enum": [
"visit",
"day"
],
"default": "visit"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"steps",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Funnel-ID, z. B. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Schritte: {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict oder any"
},
"window": {
"type": "string",
"description": "visit oder day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Besuche, die Schritt 1 erreicht haben"
},
"completed": {
"type": "integer",
"description": "Besuche, die den letzten Schritt erreicht haben"
},
"conversion_rate": {
"type": "number",
"description": "Abgeschlossen ÷ eingestiegen, %"
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/funnels/:id.json
Einen Funnel löschen
funnels_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Funnel-ID, z. B. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Schritte: {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict oder any"
},
"window": {
"type": "string",
"description": "visit oder day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Besuche, die Schritt 1 erreicht haben"
},
"completed": {
"type": "integer",
"description": "Besuche, die den letzten Schritt erreicht haben"
},
"conversion_rate": {
"type": "number",
"description": "Abgeschlossen ÷ eingestiegen, %"
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/funnels.json
Funnels mit Einstiegen, Abschlüssen und Rate auflisten
funnels_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/funnels.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"page": {
"type": "integer",
"description": "Seitennummer",
"default": 1
},
"per_page": {
"type": "integer",
"description": "Funnels pro Seite (max. 100)",
"default": 25
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Funnel-ID, z. B. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Schritte: {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict oder any"
},
"window": {
"type": "string",
"description": "visit oder day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Besuche, die Schritt 1 erreicht haben"
},
"completed": {
"type": "integer",
"description": "Besuche, die den letzten Schritt erreicht haben"
},
"conversion_rate": {
"type": "number",
"description": "Abgeschlossen ÷ eingestiegen, %"
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/sites/:site_id/funnels/:id.json
Funnel-Bericht: Schrittanzahlen, Conversion, Abbrüche, Zeit zwischen den Schritten und wohin die Besuche stattdessen gingen
funnels_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"breakdown": {
"type": "string",
"description": "Schrittanzahlen nach einer Besuchsdimension aufteilen",
"enum": [
"channel",
"device",
"country",
"utm_campaign",
"utm_source",
"browser",
"os"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"period": {
"type": "object",
"description": "from/to des Zeitraums (UTC)"
},
"funnel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Funnel-ID, z. B. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Schritte: {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict oder any"
},
"window": {
"type": "string",
"description": "visit oder day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Besuche, die Schritt 1 erreicht haben"
},
"completed": {
"type": "integer",
"description": "Besuche, die den letzten Schritt erreicht haben"
},
"conversion_rate": {
"type": "number",
"description": "Abgeschlossen ÷ eingestiegen, %"
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"description": "Die Funnel-Definition"
},
"order_mode": {
"type": "string",
"description": "strict oder any"
},
"window": {
"type": "string",
"description": "visit oder day (day wird innerhalb eines Besuchs gemessen)"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Pro Schritt: 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": "Letzter Schritt ÷ erster Schritt, %"
},
"breakdown": {
"anyOf": [
{
"type": "object",
"description": "dimension, label und rows [{value, counts, overall_conversion_rate}]"
},
{
"type": "null"
}
]
},
"comparison": {
"anyOf": [
{
"type": "object",
"description": "period, Anzahlen pro Schritt, overall_conversion_rate und change (%)"
},
{
"type": "null"
}
]
}
}
}
PATCH
/sites/:site_id/funnels/:id.json
Einen Funnel aktualisieren
funnels_update
Berechtigung: 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": "Funnel-Name",
"examples": [
"Signup flow"
]
},
"steps": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Geordnete Schritte (2 bis zum Limit Ihres Tarifs): [{\"type\": \"page|event|goal\", \"value\": \"/pricing | Signup | goal_…\", \"match\": \"exact|prefix|glob|regex\" (Seitenschritte), \"name\": \"optionale Bezeichnung\"}]"
},
"order_mode": {
"type": "string",
"description": "strict: Schritte in dieser Reihenfolge, any: in beliebiger Reihenfolge",
"enum": [
"strict",
"any"
]
},
"window": {
"type": "string",
"description": "Conversion-Fenster: visit oder day (innerhalb eines Besuchs gemessen, der nie über einen UTC-Tag hinausgeht)",
"enum": [
"visit",
"day"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Funnel-ID, z. B. fun_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
},
"description": "Schritte: {type: page|event|goal, value, match, name}"
},
"order_mode": {
"type": "string",
"description": "strict oder any"
},
"window": {
"type": "string",
"description": "visit oder day"
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"entered": {
"type": "integer",
"description": "Besuche, die Schritt 1 erreicht haben"
},
"completed": {
"type": "integer",
"description": "Besuche, die den letzten Schritt erreicht haben"
},
"conversion_rate": {
"type": "number",
"description": "Abgeschlossen ÷ eingestiegen, %"
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
Hilfe und Feedback
POST
/help.json
Eine Frage oder Feedback an das Team von Privatus Analytics senden
support_message_send
Die Nachricht wird zusammen mit den Angaben zu Ihrem Konto, Workspace und Tarif per E-Mail an das Team gesendet. Die Antwort und eine Empfangsbestätigung gehen an die E-Mail-Adresse Ihres Kontos. Bis zu 10 Nachrichten pro Tag.
Berechtigung: 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": "Worum es in der Nachricht geht (bis zu 150 Zeichen)",
"examples": [
"Funnel shows no data"
]
},
"message": {
"type": "string",
"description": "Ihre Frage oder Ihr Feedback (10 bis 5.000 Zeichen)"
}
},
"required": [
"subject",
"message"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Immer true, wenn die Übermittlung akzeptiert wurde"
},
"message": {
"type": "string",
"description": "Was als Nächstes passiert"
}
}
}
Importe
GET
/sites/:site_id/imports/google/properties.json
Google-Analytics-4-Properties zum Import auflisten
imports_google_properties
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/sites/:site_id/imports.json
Einen Import starten (GA4-Property oder CSV-Upload)
imports_create
Berechtigung: 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 (Google-Analytics-4-API) oder das Tool, dessen CSV-Export Sie hochladen",
"enum": [
"ga4",
"universal_analytics",
"fathom",
"simple_analytics",
"plausible",
"matomo",
"umami",
"clicky"
]
},
"property_id": {
"type": "string",
"description": "GA4-Property, z. B. properties/123 (siehe imports_google_properties). Erforderlich für ga4",
"examples": [
"properties/123456789"
]
},
"date_from": {
"type": "string",
"format": "date",
"description": "Erster zu importierender Tag. Erforderlich für ga4. Bei CSV-Dateien ohne Datumsspalte wird jede Zeile mit diesem Tag datiert"
},
"date_to": {
"type": "string",
"format": "date",
"description": "Letzter zu importierender Tag (ga4 verwendet standardmäßig den Tag vor Ihrem ersten erfassten Ereignis oder gestern)"
},
"file": {
"type": "string",
"format": "binary",
"description": "CSV-Export (Multipart-Upload, max. 50 MB). Erforderlich für CSV-Quellen"
},
"dimension": {
"type": "string",
"description": "Wonach die CSV-Zeilen aufgeschlüsselt sind (überschreibt die Erkennung, nötig für Matomo-Exporte mit \"Label\")",
"enum": [
"total",
"page",
"source",
"country",
"device",
"browser",
"os"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"source",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Import-ID"
},
"site_id": {
"type": "string"
},
"source": {
"type": "string",
"description": "ga4, universal_analytics, fathom, simple_analytics, plausible, matomo, umami oder clicky"
},
"status": {
"type": "string",
"description": "queued, running, complete oder failed"
},
"date_from": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Erster importierter Tag"
},
{
"type": "null"
}
]
},
"date_to": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Letzter importierter Tag"
},
{
"type": "null"
}
]
},
"rows_imported": {
"type": "integer",
"description": "Gespeicherte Tageszeilen"
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Warum der Import fehlgeschlagen ist"
},
{
"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
Einen Import und alle importierten Daten löschen
imports_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Import-ID"
},
"site_id": {
"type": "string"
},
"source": {
"type": "string",
"description": "ga4, universal_analytics, fathom, simple_analytics, plausible, matomo, umami oder clicky"
},
"status": {
"type": "string",
"description": "queued, running, complete oder failed"
},
"date_from": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Erster importierter Tag"
},
{
"type": "null"
}
]
},
"date_to": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Letzter importierter Tag"
},
{
"type": "null"
}
]
},
"rows_imported": {
"type": "integer",
"description": "Gespeicherte Tageszeilen"
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Warum der Import fehlgeschlagen ist"
},
{
"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
Importe einer Website auflisten
imports_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/imports.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Nur Importe mit diesem Status",
"enum": [
"queued",
"running",
"complete",
"failed"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Import-ID"
},
"site_id": {
"type": "string"
},
"source": {
"type": "string",
"description": "ga4, universal_analytics, fathom, simple_analytics, plausible, matomo, umami oder clicky"
},
"status": {
"type": "string",
"description": "queued, running, complete oder failed"
},
"date_from": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Erster importierter Tag"
},
{
"type": "null"
}
]
},
"date_to": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Letzter importierter Tag"
},
{
"type": "null"
}
]
},
"rows_imported": {
"type": "integer",
"description": "Gespeicherte Tageszeilen"
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Warum der Import fehlgeschlagen ist"
},
{
"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
Einen Import und seinen Status abrufen
imports_get
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Import-ID"
},
"site_id": {
"type": "string"
},
"source": {
"type": "string",
"description": "ga4, universal_analytics, fathom, simple_analytics, plausible, matomo, umami oder clicky"
},
"status": {
"type": "string",
"description": "queued, running, complete oder failed"
},
"date_from": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Erster importierter Tag"
},
{
"type": "null"
}
]
},
"date_to": {
"anyOf": [
{
"type": "string",
"format": "date",
"description": "Letzter importierter Tag"
},
{
"type": "null"
}
]
},
"rows_imported": {
"type": "integer",
"description": "Gespeicherte Tageszeilen"
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Warum der Import fehlgeschlagen ist"
},
{
"type": "null"
}
]
},
"completed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Kampagnen
POST
/sites/:site_id/campaigns/costs.json
Die Ausgaben für eine Kampagne in einem Monat festlegen
campaign_costs_create
Berechtigung: 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": "utm_campaign-Wert, zu dem die Ausgaben gehören",
"examples": [
"spring_sale"
]
},
"month": {
"type": "string",
"description": "Monat, YYYY-MM",
"examples": [
"2026-09"
]
},
"amount": {
"type": "number",
"description": "Ausgaben in Hauptwährungseinheiten, z. B. 1250.50"
},
"currency": {
"type": "string",
"description": "ISO-4217-Währung (Standard ist die Website-Währung)"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"campaign",
"month",
"amount",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID des Kosteneintrags"
},
"campaign": {
"type": "string",
"description": "utm_campaign-Wert"
},
"month": {
"type": "string",
"description": "Monat, YYYY-MM"
},
"amount_minor": {
"type": "integer",
"description": "Ausgaben in der kleinsten Einheit"
},
"currency": {
"type": "string",
"description": "ISO-4217-Währung des Betrags"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/campaigns/costs/:id.json
Einen Kampagnenkosteneintrag löschen
campaign_costs_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID des Kosteneintrags"
},
"campaign": {
"type": "string",
"description": "utm_campaign-Wert"
},
"month": {
"type": "string",
"description": "Monat, YYYY-MM"
},
"amount_minor": {
"type": "integer",
"description": "Ausgaben in der kleinsten Einheit"
},
"currency": {
"type": "string",
"description": "ISO-4217-Währung des Betrags"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/campaigns/costs/import.json
Kampagnenkosten aus CSV importieren (campaign,month,amount[,currency])
campaign_costs_import
Berechtigung: 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": "CSV-Datei-Upload (Multipart-Formulare)"
},
"csv": {
"type": "string",
"description": "CSV-Text: campaign,month,amount[,currency]"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"imported": {
"type": "integer",
"description": "Gespeicherte Zeilen"
},
"failed": {
"type": "integer",
"description": "Übersprungene Zeilen"
},
"errors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Warum Zeilen übersprungen wurden (die ersten 50)"
}
}
}
GET
/sites/:site_id/campaigns/costs.json
Kampagnenkosteneinträge auflisten
campaign_costs_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/costs.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"campaign": {
"type": "string",
"description": "Nur diese Kampagne"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID des Kosteneintrags"
},
"campaign": {
"type": "string",
"description": "utm_campaign-Wert"
},
"month": {
"type": "string",
"description": "Monat, YYYY-MM"
},
"amount_minor": {
"type": "integer",
"description": "Ausgaben in der kleinsten Einheit"
},
"currency": {
"type": "string",
"description": "ISO-4217-Währung des Betrags"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
PATCH
/sites/:site_id/campaigns/costs/:id.json
Einen Kampagnenkosteneintrag ändern
campaign_costs_update
Berechtigung: 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": "utm_campaign-Wert"
},
"month": {
"type": "string",
"description": "Monat, YYYY-MM"
},
"amount": {
"type": "number",
"description": "Ausgaben in Hauptwährungseinheiten"
},
"currency": {
"type": "string",
"description": "ISO-4217-Währung"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID des Kosteneintrags"
},
"campaign": {
"type": "string",
"description": "utm_campaign-Wert"
},
"month": {
"type": "string",
"description": "Monat, YYYY-MM"
},
"amount_minor": {
"type": "integer",
"description": "Ausgaben in der kleinsten Einheit"
},
"currency": {
"type": "string",
"description": "ISO-4217-Währung des Betrags"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/campaigns/builder.json
Eine URL mit UTM-Tags erstellen und prüfen
campaigns_builder
Berechtigung: 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 der Landingpage (https://…)",
"examples": [
"https://example.com/pricing"
]
},
"preset": {
"type": "string",
"description": "utm_source/utm_medium für einen Kanal ausfüllen, wenn leer",
"enum": [
"newsletter",
"social",
"paid_search",
"paid_social",
"print",
"partner"
]
},
"utm_source": {
"type": "string",
"description": "Woher der Traffic kommt"
},
"utm_medium": {
"type": "string",
"description": "Marketingmedium, z. B. email, cpc"
},
"utm_campaign": {
"type": "string",
"description": "Kampagnenname, z. B. spring_sale"
},
"utm_content": {
"type": "string",
"description": "Variante, z. B. header_button"
},
"utm_term": {
"type": "string",
"description": "Keyword der bezahlten Suche"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"url": {
"anyOf": [
{
"type": "string",
"description": "Getaggte URL (null, solange Fehler vorliegen)"
},
{
"type": "null"
}
]
},
"valid": {
"type": "boolean",
"description": "True, wenn keine Fehler vorliegen"
},
"destination": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"preset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"utm_source": {
"anyOf": [
{
"type": "string",
"description": "Normalisierter utm_source"
},
{
"type": "null"
}
]
},
"utm_medium": {
"anyOf": [
{
"type": "string",
"description": "Normalisierter utm_medium"
},
{
"type": "null"
}
]
},
"utm_campaign": {
"anyOf": [
{
"type": "string",
"description": "Normalisierter utm_campaign"
},
{
"type": "null"
}
]
},
"utm_content": {
"anyOf": [
{
"type": "string",
"description": "Normalisierter utm_content"
},
{
"type": "null"
}
]
},
"utm_term": {
"anyOf": [
{
"type": "string",
"description": "Normalisierter utm_term"
},
{
"type": "null"
}
]
},
"issues": {
"type": "array",
"items": {
"type": "object"
},
"description": "field, level (error oder warning) und message"
},
"presets": {
"type": "object",
"description": "Kanal-Voreinstellungen: utm_source/utm_medium pro Voreinstellung"
}
}
}
GET
/sites/:site_id/campaigns/hygiene.json
UTM-Hygiene: nahezu doppelte Werte, Stilprobleme und unbekannte Quellen
campaigns_hygiene
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/hygiene.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"period": {
"type": "object",
"description": "from/to des Zeitraums (UTC)"
},
"duplicates": {
"type": "array",
"items": {
"type": "object"
},
"description": "Nahezu doppelte Werte: field, suggestion und Varianten [{value, visits}]"
},
"style_issues": {
"type": "array",
"items": {
"type": "object"
},
"description": "Werte, die nicht kleingeschrieben mit Unterstrichen sind: field, value, visits, suggestion"
},
"unknown_sources": {
"type": "array",
"items": {
"type": "object"
},
"description": "utm_source-Werte, die wir nicht erkennen: value, visits"
}
}
}
GET
/sites/:site_id/campaigns.json
Kampagnenübersicht mit Conversions, Umsatz, Kosten, CPA und ROAS
campaigns_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"goal_id": {
"type": "string",
"description": "Ziel (goal_…), dessen Conversions gezählt werden. Standard ist das erste aktive Ziel"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"period": {
"type": "object",
"description": "from/to des Zeitraums (UTC)"
},
"currency": {
"type": "string",
"description": "Website-Währung für Umsatz und Kosten"
},
"goal_id": {
"anyOf": [
{
"type": "string",
"description": "Als Conversion gezähltes Ziel"
},
{
"type": "null"
}
]
},
"goal_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"campaigns": {
"type": "array",
"items": {
"type": "object"
},
"description": "Pro utm_campaign: visitors, visits, conversions, conversion_rate, revenue, cost, cpa (kleinste Einheit), roas (Umsatz ÷ Kosten) und sources [{source, medium, visitors, visits, conversions, conversion_rate, revenue}]"
},
"totals": {
"type": "object",
"description": "Summen über alle aufgelisteten Kampagnen"
}
}
}
POST
/sites/:site_id/campaigns/links.json
Einen Link mit UTM-Tags in der Bibliothek speichern
links_create
Berechtigung: 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": "Linkname",
"examples": [
"Spring newsletter"
]
},
"destination": {
"type": "string",
"description": "URL der Landingpage (https://…)",
"examples": [
"https://example.com/pricing"
]
},
"utm_source": {
"type": "string",
"description": "utm_source-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"utm_medium": {
"type": "string",
"description": "utm_medium-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"utm_campaign": {
"type": "string",
"description": "utm_campaign-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"utm_content": {
"type": "string",
"description": "utm_content-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"utm_term": {
"type": "string",
"description": "utm_term-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags. Durch Komma getrennte Werte werden aufgeteilt",
"default": []
},
"notes": {
"type": "string",
"description": "Freitextnotizen"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"destination",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Link-ID, z. B. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL der Landingpage"
},
"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": "Vollständige getaggte URL zum Teilen"
},
"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
Einen gespeicherten Link löschen
links_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Link-ID, z. B. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL der Landingpage"
},
"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": "Vollständige getaggte URL zum Teilen"
},
"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
Gespeicherte Kampagnenlinks auflisten
links_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/campaigns/links.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Nach Name, Ziel oder Kampagne suchen"
},
"tag": {
"type": "string",
"description": "Nur Links mit diesem Tag"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Link-ID, z. B. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL der Landingpage"
},
"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": "Vollständige getaggte URL zum Teilen"
},
"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) für einen gespeicherten Link
links_qr
Berechtigung: 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": "Modulgröße in Pixeln (2 bis 20)",
"default": 6
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"link_id": {
"type": "string",
"description": "Link-ID"
},
"url": {
"type": "string",
"description": "Die kodierte (getaggte) URL"
},
"svg": {
"type": "string",
"description": "Eigenständiges SVG-Dokument des QR-Codes"
}
}
}
GET
/sites/:site_id/campaigns/links/:id.json
Einen gespeicherten Kampagnenlink abrufen
links_get
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Link-ID, z. B. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL der Landingpage"
},
"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": "Vollständige getaggte URL zum Teilen"
},
"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
Einen gespeicherten Link ändern
links_update
Berechtigung: 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": "Linkname",
"examples": [
"Spring newsletter"
]
},
"destination": {
"type": "string",
"description": "URL der Landingpage (https://…)",
"examples": [
"https://example.com/pricing"
]
},
"utm_source": {
"type": "string",
"description": "utm_source-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"utm_medium": {
"type": "string",
"description": "utm_medium-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"utm_campaign": {
"type": "string",
"description": "utm_campaign-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"utm_content": {
"type": "string",
"description": "utm_content-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"utm_term": {
"type": "string",
"description": "utm_term-Wert (kleingeschrieben, Leerzeichen werden zu Unterstrichen)"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags. Durch Komma getrennte Werte werden aufgeteilt"
},
"notes": {
"type": "string",
"description": "Freitextnotizen"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Link-ID, z. B. lnk_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"destination": {
"type": "string",
"description": "URL der Landingpage"
},
"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": "Vollständige getaggte URL zum Teilen"
},
"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"
}
}
}
Kanalregeln
POST
/sites/:site_id/channel_rules.json
Eine Kanalregel hinzufügen
channel_rules_create
Berechtigung: 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": "Zuzuweisender Kanalname, z. B. Partners"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"operator": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
"description": "Bedingungen, die alle zutreffen müssen: [{\"field\": \"utm_source\", \"operator\": \"is\", \"value\": \"newsletter\"}]. Felder: referrer_host, utm_source, utm_medium, utm_campaign, ref, path. Operatoren: is, contains, starts_with, regex."
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"channel",
"conditions",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"channel": {
"type": "string",
"description": "Zugewiesener Kanal, wenn alle Bedingungen zutreffen"
},
"position": {
"type": "integer",
"description": "Auswertungsreihenfolge (der erste Treffer gewinnt)"
},
"conditions": {
"type": "array",
"description": "Bedingungen: field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/channel_rules/:id.json
Eine Kanalregel löschen
channel_rules_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"channel": {
"type": "string",
"description": "Zugewiesener Kanal, wenn alle Bedingungen zutreffen"
},
"position": {
"type": "integer",
"description": "Auswertungsreihenfolge (der erste Treffer gewinnt)"
},
"conditions": {
"type": "array",
"description": "Bedingungen: field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/channel_rules.json
Kanalregeln in der Reihenfolge auflisten
channel_rules_list
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"channel": {
"type": "string",
"description": "Zugewiesener Kanal, wenn alle Bedingungen zutreffen"
},
"position": {
"type": "integer",
"description": "Auswertungsreihenfolge (der erste Treffer gewinnt)"
},
"conditions": {
"type": "array",
"description": "Bedingungen: field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:site_id/channel_rules/:id/move.json
Eine Kanalregel nach oben oder unten verschieben
channel_rules_move
Berechtigung: 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": "Wohin die Regel verschoben wird",
"enum": [
"up",
"down",
"top",
"bottom"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"direction",
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"channel": {
"type": "string",
"description": "Zugewiesener Kanal, wenn alle Bedingungen zutreffen"
},
"position": {
"type": "integer",
"description": "Auswertungsreihenfolge (der erste Treffer gewinnt)"
},
"conditions": {
"type": "array",
"description": "Bedingungen: field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/channel_rules/preview.json
Den Kanal für einen Beispiel-Referrer und UTM-Tags in der Vorschau anzeigen
channel_rules_preview
Berechtigung: 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": "Referrer-URL oder Hostname"
},
"utm_source": {
"type": "string",
"description": "utm_source-Wert"
},
"utm_medium": {
"type": "string",
"description": "utm_medium-Wert"
},
"utm_campaign": {
"type": "string",
"description": "utm_campaign-Wert"
},
"ref": {
"type": "string",
"description": "ref-/via-/source-Parameter"
},
"path": {
"type": "string",
"description": "Pfad der Landingpage, z. B. /pricing"
},
"paid_click": {
"type": "boolean",
"description": "Die URL hatte eine Klick-ID wie gclid",
"default": false
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
PATCH
/sites/:site_id/channel_rules/:id.json
Eine Kanalregel ändern
channel_rules_update
Berechtigung: 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": "Zuzuweisender Kanalname"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"operator": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
"description": "Bedingungen, die alle zutreffen müssen: [{\"field\": \"utm_source\", \"operator\": \"is\", \"value\": \"newsletter\"}]. Felder: referrer_host, utm_source, utm_medium, utm_campaign, ref, path. Operatoren: is, contains, starts_with, regex."
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"channel": {
"type": "string",
"description": "Zugewiesener Kanal, wenn alle Bedingungen zutreffen"
},
"position": {
"type": "integer",
"description": "Auswertungsreihenfolge (der erste Treffer gewinnt)"
},
"conditions": {
"type": "array",
"description": "Bedingungen: field, operator, value"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Konto
GET
/account.json
Ihr Profil und Ihre Einstellungen abrufen
account_get
Berechtigung: 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": "Neue E-Mail-Adresse, die auf Bestätigung wartet"
},
{
"type": "null"
}
]
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"theme": {
"type": "string"
},
"default_landing": {
"type": "string"
},
"locale": {
"type": "string",
"description": "Sprachcode der App für dieses Konto (standardmäßig en)"
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"shortcuts_enabled": {
"type": "boolean"
},
"reduce_motion": {
"type": "boolean"
},
"product_emails": {
"type": "boolean"
},
"marketing_emails": {
"type": "boolean",
"description": "Ob Marketing-E-Mails (Drip-Kampagnen) gesendet werden dürfen. false nach einer Abmeldung"
},
"newsletter": {
"type": "boolean"
},
"two_factor": {
"type": "boolean"
},
"passkeys": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/account.json
Ihr Profil und Ihre Einstellungen aktualisieren
account_update
Berechtigung: 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": "Ihr Name"
},
"email": {
"type": "string",
"description": "Neue E-Mail-Adresse (wird zuerst per E-Mail bestätigt)"
},
"theme": {
"type": "string",
"description": "Farbschema",
"enum": [
"system",
"light",
"dark"
]
},
"default_landing": {
"type": "string",
"description": "Seite nach der Anmeldung: sites oder last_site",
"enum": [
"sites",
"last_site"
]
},
"locale": {
"type": "string",
"description": "Sprache der App, wenn Sie angemeldet sind, als Sprachcode (en, de, fr und so weiter). Öffentliche Seiten und die API bleiben unverändert",
"enum": [
"en",
"de",
"es",
"fr",
"it",
"nl",
"pt",
"pl",
"sv",
"da",
"no",
"fi",
"ja",
"ko",
"zh-CN",
"zh-TW"
]
},
"timezone": {
"type": "string",
"description": "Ihre Zeitzone (IANA-Name)"
},
"shortcuts_enabled": {
"type": "boolean",
"description": "Tastenkürzel"
},
"reduce_motion": {
"type": "boolean",
"description": "Animationen reduzieren"
},
"product_emails": {
"type": "boolean",
"description": "E-Mails zu Produkt-Updates und Tipps"
},
"marketing_emails": {
"type": "boolean",
"description": "Marketing-E-Mails wie Onboarding-Tipps. Zum erneuten Aktivieren nach einer Abmeldung ist ein angemeldeter Browser nötig"
},
"newsletter": {
"type": "boolean",
"description": "Monatlicher Newsletter"
}
},
"required": []
}
{
"type": "object",
"properties": {
"email": {
"type": "string"
},
"unconfirmed_email": {
"anyOf": [
{
"type": "string",
"description": "Neue E-Mail-Adresse, die auf Bestätigung wartet"
},
{
"type": "null"
}
]
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"theme": {
"type": "string"
},
"default_landing": {
"type": "string"
},
"locale": {
"type": "string",
"description": "Sprachcode der App für dieses Konto (standardmäßig en)"
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"shortcuts_enabled": {
"type": "boolean"
},
"reduce_motion": {
"type": "boolean"
},
"product_emails": {
"type": "boolean"
},
"marketing_emails": {
"type": "boolean",
"description": "Ob Marketing-E-Mails (Drip-Kampagnen) gesendet werden dürfen. false nach einer Abmeldung"
},
"newsletter": {
"type": "boolean"
},
"two_factor": {
"type": "boolean"
},
"passkeys": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Live
GET
/sites/:site_id/live.json
Live-Besucher, Aktivitätsstrom und was gerade beliebt ist (letzte 30 Minuten)
live_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/live.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"feed": {
"type": "string",
"description": "Aktivitätsstrom: alle Treffer, Pageviews oder eigene Ereignisse",
"enum": [
"all",
"pageviews",
"events"
],
"default": "all"
},
"limit": {
"type": "integer",
"description": "Einträge im Aktivitätsstrom (max. 100)",
"default": 50
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/live/wallboard.json
Wallboard-Karten (live und heute) für eine oder mehrere Websites
live_wallboard
Berechtigung: 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": "Website-IDs, zwischen denen gewechselt wird (Standard ist diese Website)",
"default": []
},
"rotate_seconds": {
"type": "integer",
"description": "Sekunden, die jede Website angezeigt wird (5-300)",
"default": 20
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/wallboard/:token.json
Wallboard für ein Wallboard-Token (keine Anmeldung nötig)
live_public_wallboard
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl https://privatusanalytics.com/wallboard/:token.json
{
"type": "object",
"properties": {
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs, zwischen denen gewechselt wird (Standard ist diese Website)",
"default": []
},
"rotate_seconds": {
"type": "integer",
"description": "Sekunden, die jede Website angezeigt wird (5-300)",
"default": 20
},
"token": {
"type": "string",
"description": "Token der Ressource"
}
},
"required": [
"token"
]
}
{
"type": "object"
}
POST
/sites/:site_id/live/wallboard/links.json
Einen Wallboard-Link erstellen (schreibgeschützt, widerrufbar)
wallboard_links_create
Berechtigung: 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": "Bezeichnung, z. B. Büro-TV"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Zusätzliche Websites für den Wechsel (diese Website ist immer enthalten)",
"default": []
},
"rotate_seconds": {
"type": "integer",
"description": "Sekunden pro Website beim Wechsel (5-300)",
"default": 20
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Nach diesem Zeitpunkt nicht mehr funktionsfähig"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Link-ID, z. B. shr_7Q2K9XH3AB"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "Auf einem Fernseher öffnen. Keine Anmeldung nötig"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Angezeigte Websites, im Wechsel"
},
"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
Einen Wallboard-Link widerrufen
wallboard_links_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Link-ID, z. B. shr_7Q2K9XH3AB"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "Auf einem Fernseher öffnen. Keine Anmeldung nötig"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Angezeigte Websites, im Wechsel"
},
"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
Wallboard-Links einer Website auflisten
wallboard_links_list
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Link-ID, z. B. shr_7Q2K9XH3AB"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"description": "Auf einem Fernseher öffnen. Keine Anmeldung nötig"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Angezeigte Websites, im Wechsel"
},
"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"
}
}
}
}
Mitglieder
POST
/workspaces/:workspace_id/invitations.json
Personen per E-Mail einladen
invitations_create
Berechtigung: 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": "Einzuladende E-Mail-Adressen"
},
"role": {
"type": "string",
"description": "Rolle für die neuen Mitglieder (custom benötigt custom_role_id)",
"enum": [
"admin",
"editor",
"analyst",
"viewer",
"billing",
"custom"
],
"default": "viewer"
},
"custom_role_id": {
"type": "string",
"description": "ID der eigenen Rolle (Business)"
},
"all_sites": {
"type": "boolean",
"description": "Zugriff auf alle Websites, auch künftige",
"default": true
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs (pa_…), wenn all_sites false ist",
"default": []
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. 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
Eine ausstehende Einladung widerrufen
invitations_delete
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der 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
Ausstehende Einladungen auflisten
invitations_list
Berechtigung: members.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/invitations.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"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
Ein Mitglied entfernen (oder den Workspace verlassen)
members_delete
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Mitglieds-ID (zum Aktualisieren oder Entfernen des Mitglieds)"
},
"email": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"description": "owner, admin, editor, analyst, viewer, billing oder custom"
},
"custom_role": {
"anyOf": [
{
"type": "string",
"description": "Name der eigenen Rolle"
},
{
"type": "null"
}
]
},
"custom_role_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean",
"description": "Zugriff auf alle Websites"
},
"include_future_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs, wenn all_sites false ist"
},
"two_factor": {
"type": "boolean",
"description": "Hat 2FA oder einen Passkey"
},
"last_active_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beigetreten am"
}
}
}
GET
/workspaces/:workspace_id/members.json
Workspace-Mitglieder auflisten
members_list
Berechtigung: member
curl https://privatusanalytics.com/workspaces/:workspace_id/members.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Nach Name oder E-Mail-Adresse filtern"
},
"role": {
"type": "string",
"description": "Nur Mitglieder mit dieser Rolle",
"enum": [
"owner",
"admin",
"editor",
"analyst",
"viewer",
"billing",
"custom"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Mitglieds-ID (zum Aktualisieren oder Entfernen des Mitglieds)"
},
"email": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"description": "owner, admin, editor, analyst, viewer, billing oder custom"
},
"custom_role": {
"anyOf": [
{
"type": "string",
"description": "Name der eigenen Rolle"
},
{
"type": "null"
}
]
},
"custom_role_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean",
"description": "Zugriff auf alle Websites"
},
"include_future_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs, wenn all_sites false ist"
},
"two_factor": {
"type": "boolean",
"description": "Hat 2FA oder einen Passkey"
},
"last_active_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beigetreten am"
}
}
}
}
PATCH
/workspaces/:workspace_id/members/:id.json
Die Rolle oder den Website-Zugriff eines Mitglieds ändern
members_update
Berechtigung: 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": "Neue Rolle (custom benötigt custom_role_id)",
"enum": [
"admin",
"editor",
"analyst",
"viewer",
"billing",
"custom"
]
},
"custom_role_id": {
"type": "string",
"description": "ID der eigenen Rolle (Business)"
},
"all_sites": {
"type": "boolean",
"description": "Zugriff auf alle Websites, auch künftige"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs (pa_…), wenn all_sites false ist"
},
"include_future_sites": {
"type": "boolean",
"description": "Auch später hinzugefügte Websites freigeben"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Mitglieds-ID (zum Aktualisieren oder Entfernen des Mitglieds)"
},
"email": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"description": "owner, admin, editor, analyst, viewer, billing oder custom"
},
"custom_role": {
"anyOf": [
{
"type": "string",
"description": "Name der eigenen Rolle"
},
{
"type": "null"
}
]
},
"custom_role_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean",
"description": "Zugriff auf alle Websites"
},
"include_future_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs, wenn all_sites false ist"
},
"two_factor": {
"type": "boolean",
"description": "Hat 2FA oder einen Passkey"
},
"last_active_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beigetreten am"
}
}
}
POST
/workspaces/:workspace_id/ownership_transfer.json
Die Workspace-Inhaberschaft an ein anderes Mitglied übertragen (nur Inhaber, Sie werden Admin)
ownership_transfers_create
Berechtigung: 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": "Mitglieds-ID des neuen Inhabers"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"membership_id",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Mitglieds-ID (zum Aktualisieren oder Entfernen des Mitglieds)"
},
"email": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"description": "owner, admin, editor, analyst, viewer, billing oder custom"
},
"custom_role": {
"anyOf": [
{
"type": "string",
"description": "Name der eigenen Rolle"
},
{
"type": "null"
}
]
},
"custom_role_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
},
"all_sites": {
"type": "boolean",
"description": "Zugriff auf alle Websites"
},
"include_future_sites": {
"type": "boolean"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website-IDs, wenn all_sites false ist"
},
"two_factor": {
"type": "boolean",
"description": "Hat 2FA oder einen Passkey"
},
"last_active_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Beigetreten am"
}
}
}
Notizen
POST
/sites/:site_id/notes.json
Eine Notiz zu einer Website hinzufügen (verwenden Sie die Quelle "deploy" für Release-Webhooks)
notes_create
Berechtigung: 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": "Tag der Notiz (Zeitzone der Website). Standard ist heute"
},
"end_date": {
"type": "string",
"format": "date",
"description": "Letzter Tag, für einen Datumsbereich"
},
"title": {
"type": "string",
"description": "Kurzer Titel, der in Diagrammen angezeigt wird",
"examples": [
"Launched new pricing"
]
},
"body": {
"type": "string",
"description": "Details (Markdown)"
},
"url": {
"type": "string",
"description": "Link, z. B. zu einem PR oder Changelog"
},
"color": {
"type": "string",
"description": "Pin-Farbe",
"enum": [
"neutral",
"brand",
"blue",
"amber",
"red",
"violet"
]
},
"source": {
"type": "string",
"description": "manual oder deploy für Release-Webhooks",
"enum": [
"manual",
"deploy",
"system",
"import",
"incident"
],
"default": "manual"
},
"version": {
"type": "string",
"description": "Deployments: Release-Version oder Commit, wird für den Standardtitel verwendet"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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
Eine Notiz löschen
notes_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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
Notizen einer Website auflisten (einschließlich Notizen für den gesamten Workspace)
notes_list
Berechtigung: 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": "Nur Notizen ab diesem Datum"
},
"to": {
"type": "string",
"format": "date",
"description": "Nur Notizen bis zu diesem Datum"
},
"source": {
"type": "string",
"description": "Nur Notizen aus dieser Quelle",
"enum": [
"manual",
"deploy",
"system",
"import",
"incident"
]
},
"query": {
"type": "string",
"description": "Titel, Text und Link durchsuchen"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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
Eine Notiz abrufen
notes_get
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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
Eine Notiz bearbeiten
notes_update
Berechtigung: 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": "Tag der Notiz"
},
"end_date": {
"type": "string",
"format": "date",
"description": "Letzter Tag, für einen Datumsbereich"
},
"title": {
"type": "string",
"description": "Kurzer Titel, der in Diagrammen angezeigt wird"
},
"body": {
"type": "string",
"description": "Details (Markdown)"
},
"url": {
"type": "string",
"description": "Link"
},
"color": {
"type": "string",
"description": "Pin-Farbe",
"enum": [
"neutral",
"brand",
"blue",
"amber",
"red",
"violet"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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
Eine Notiz für den gesamten Workspace hinzufügen (auf jeder Website angezeigt)
workspace_notes_create
Berechtigung: 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": "Tag der Notiz (Zeitzone der Website). Standard ist heute"
},
"end_date": {
"type": "string",
"format": "date",
"description": "Letzter Tag, für einen Datumsbereich"
},
"title": {
"type": "string",
"description": "Kurzer Titel, der in Diagrammen angezeigt wird",
"examples": [
"Launched new pricing"
]
},
"body": {
"type": "string",
"description": "Details (Markdown)"
},
"url": {
"type": "string",
"description": "Link, z. B. zu einem PR oder Changelog"
},
"color": {
"type": "string",
"description": "Pin-Farbe",
"enum": [
"neutral",
"brand",
"blue",
"amber",
"red",
"violet"
]
},
"source": {
"type": "string",
"description": "manual oder deploy für Release-Webhooks",
"enum": [
"manual",
"deploy",
"system",
"import",
"incident"
],
"default": "manual"
},
"version": {
"type": "string",
"description": "Deployments: Release-Version oder Commit, wird für den Standardtitel verwendet"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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
Eine Workspace-Notiz löschen
workspace_notes_delete
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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
Notizen eines Workspaces auflisten
workspace_notes_list
Berechtigung: 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": "Nur Notizen ab diesem Datum"
},
"to": {
"type": "string",
"format": "date",
"description": "Nur Notizen bis zu diesem Datum"
},
"source": {
"type": "string",
"description": "Nur Notizen aus dieser Quelle",
"enum": [
"manual",
"deploy",
"system",
"import",
"incident"
]
},
"query": {
"type": "string",
"description": "Titel, Text und Link durchsuchen"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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
Eine Workspace-Notiz bearbeiten
workspace_notes_update
Berechtigung: 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": "Tag der Notiz"
},
"end_date": {
"type": "string",
"format": "date",
"description": "Letzter Tag, für einen Datumsbereich"
},
"title": {
"type": "string",
"description": "Kurzer Titel, der in Diagrammen angezeigt wird"
},
"body": {
"type": "string",
"description": "Details (Markdown)"
},
"url": {
"type": "string",
"description": "Link"
},
"color": {
"type": "string",
"description": "Pin-Farbe",
"enum": [
"neutral",
"brand",
"blue",
"amber",
"red",
"violet"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Notiz-ID, z. B. note_7Q2K9XH3AB"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, oder null bei Notizen für den gesamten Workspace"
},
{
"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"
}
}
}
Performance
GET
/sites/:site_id/performance.json
Web Vitals: p75-Scorecard, Tagestrend und Aufschlüsselungen nach Seite, Gerät, Browser und Land
performance_report
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/performance.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"metric": {
"type": "string",
"description": "Kennzahl für Trend und Aufschlüsselungen",
"enum": [
"LCP",
"INP",
"CLS",
"FCP",
"TTFB"
],
"default": "LCP"
},
"limit": {
"type": "integer",
"description": "Zeilen pro Aufschlüsselung (max. 100)",
"default": 10
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
Rollen
POST
/workspaces/:workspace_id/roles.json
Eine eigene Rolle erstellen
roles_create
Berechtigung: 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": "Rollenname",
"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": "Durch die Rolle gewährte Berechtigungen"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"permissions",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID der eigenen Rolle (custom_role_id bei Mitgliedern)"
},
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gewährte Berechtigungen"
},
"members": {
"type": "integer",
"description": "Mitglieder mit dieser Rolle"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:workspace_id/roles/:id.json
Eine eigene Rolle löschen (darf nicht verwendet werden)
roles_delete
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID der eigenen Rolle (custom_role_id bei Mitgliedern)"
},
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gewährte Berechtigungen"
},
"members": {
"type": "integer",
"description": "Mitglieder mit dieser Rolle"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/roles.json
Eigene Rollen auflisten
roles_list
Berechtigung: member
curl https://privatusanalytics.com/workspaces/:workspace_id/roles.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID der eigenen Rolle (custom_role_id bei Mitgliedern)"
},
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gewährte Berechtigungen"
},
"members": {
"type": "integer",
"description": "Mitglieder mit dieser Rolle"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
PATCH
/workspaces/:workspace_id/roles/:id.json
Eine eigene Rolle aktualisieren
roles_update
Berechtigung: 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": "Rollenname"
},
"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": "Durch die Rolle gewährte Berechtigungen"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID der eigenen Rolle (custom_role_id bei Mitgliedern)"
},
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gewährte Berechtigungen"
},
"members": {
"type": "integer",
"description": "Mitglieder mit dieser Rolle"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
SCIM
POST
/scim/v2/Users.json
Einen Benutzer bereitstellen
scim_users_create
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/scim/v2/Users.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"userName": {
"type": "string",
"description": "E-Mail-Adresse"
},
"name": {
"type": "object",
"additionalProperties": true,
"description": "givenName, familyName, formatted",
"default": {}
},
"active": {
"type": "boolean",
"description": "Mitglied des Workspaces",
"default": true
}
},
"required": [
"userName"
]
}
{
"type": "object"
}
DELETE
/scim/v2/Users/:id.json
Die Bereitstellung eines Benutzers aufheben
scim_users_delete
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object"
}
GET
/scim/v2/Users.json
Bereitgestellte Benutzer auflisten
scim_users_list
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl https://privatusanalytics.com/scim/v2/Users.json
{
"type": "object",
"properties": {
"scim_filter": {
"type": "string",
"description": "SCIM-Filter (Abfrageparameter `filter`), z. B. userName eq \"[email protected]\""
},
"startIndex": {
"type": "integer",
"description": "1-basierter Index des ersten Ergebnisses",
"default": 1
},
"count": {
"type": "integer",
"description": "Seitengröße (max. 200)",
"default": 100
}
},
"required": []
}
{
"type": "object"
}
GET
/scim/v2/Users/:id.json
Einen bereitgestellten Benutzer abrufen
scim_users_get
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl https://privatusanalytics.com/scim/v2/Users/:id.json
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object"
}
PATCH
/scim/v2/Users/:id.json
Einen Benutzer aktualisieren (PATCH active, name)
scim_users_update
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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": "SCIM-PatchOp-Operationen"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"Operations",
"id"
]
}
{
"type": "object"
}
SSO
POST
/workspaces/:workspace_id/sso/activate.json
Eine getestete SSO-Konfiguration aktivieren
sso_activate
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml oder oidc"
},
"status": {
"type": "string",
"description": "draft, testing, tested oder active"
},
"enforced": {
"type": "boolean",
"description": "SSO ist der einzige Zugang (Inhaber ausgenommen)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Verifizierte E-Mail-Domains"
},
"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
SSO ausschalten (zurück in den Entwurf)
sso_deactivate
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml oder oidc"
},
"status": {
"type": "string",
"description": "draft, testing, tested oder active"
},
"enforced": {
"type": "boolean",
"description": "SSO ist der einzige Zugang (Inhaber ausgenommen)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Verifizierte E-Mail-Domains"
},
"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
Ein neues SCIM-Token erzeugen (nur einmal angezeigt)
sso_scim_token
Berechtigung: workspace.manage
· Nur HTTP (kein MCP-Tool)
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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object"
}
GET
/workspaces/:workspace_id/sso.json
SSO-Einstellungen abrufen
sso_get
Berechtigung: workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/sso.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml oder oidc"
},
"status": {
"type": "string",
"description": "draft, testing, tested oder active"
},
"enforced": {
"type": "boolean",
"description": "SSO ist der einzige Zugang (Inhaber ausgenommen)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Verifizierte E-Mail-Domains"
},
"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
SSO-Einstellungen erstellen oder aktualisieren
sso_update
Berechtigung: 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 oder oidc",
"enum": [
"saml",
"oidc"
]
},
"idp_sso_url": {
"type": "string",
"description": "SAML: Single-Sign-On-URL des IdP"
},
"idp_entity_id": {
"type": "string",
"description": "SAML: Entity-ID des IdP (Aussteller)"
},
"idp_cert": {
"type": "string",
"description": "SAML: X.509-Signaturzertifikat des IdP (PEM)"
},
"oidc_issuer": {
"type": "string",
"description": "OIDC: Aussteller-URL (Discovery)"
},
"oidc_client_id": {
"type": "string",
"description": "OIDC: Client-ID"
},
"oidc_client_secret": {
"type": "string",
"description": "OIDC: Client-Secret (nur schreibbar)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Verifizierte E-Mail-Domains, die dieses SSO verwenden"
},
"default_role": {
"type": "string",
"description": "Rolle für per JIT oder SCIM erstellte Mitglieder",
"enum": [
"admin",
"editor",
"analyst",
"viewer",
"billing"
]
},
"jit_provisioning": {
"type": "boolean",
"description": "Mitglieder bei der ersten SSO-Anmeldung erstellen"
},
"enforced": {
"type": "boolean",
"description": "Nur SSO-Anmeldungen zulassen (benötigt eine aktive Konfiguration)"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"description": "saml oder oidc"
},
"status": {
"type": "string",
"description": "draft, testing, tested oder active"
},
"enforced": {
"type": "boolean",
"description": "SSO ist der einzige Zugang (Inhaber ausgenommen)"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Verifizierte E-Mail-Domains"
},
"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"
}
}
}
Segmente
POST
/sites/:site_id/segments.json
Filter als Segment speichern
segments_create
Berechtigung: 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": "Name des Segments, z. B. „Mobile Besucher aus Anzeigen“",
"examples": [
"Mobile visitors from ads"
]
},
"description": {
"type": "string",
"description": "Optionale Notiz, wofür das Segment gedacht ist (höchstens 300 Zeichen)",
"examples": [
"People who might buy the Pro plan"
]
},
"filters": {
"type": "array",
"items": {},
"description": "Filter, die alle zutreffen müssen. Jedes Element ist eine Bedingung [\"dimension\", \"operator\", \"value\"] oder {\"any\": [conditions]}, wenn eine von mehreren zutreffen darf. Dimensionen: page, entry_page, exit_page, hostname, channel, referrer, referrer_url, ref, utm_source, utm_medium, utm_campaign, utm_content, utm_term, country (ISO-Code, z. B. US), language, device (desktop, mobile, tablet, tv, other), browser, browser_version, os, os_version, screen, goal (Ziel-ID), event (Name des eigenen Ereignisses) und prop:<key> (Eigenschaft eines eigenen Ereignisses). Operatoren: is, is_not, contains, not_contains, starts_with, regex, not_regex, any_of und none_of (der Wert ist eine Liste), gt und lt (eine Zahl), between (eine Liste aus zwei Zahlen). Zeilen aus dem Segmentformular werden ebenfalls akzeptiert: {\"dimension\", \"operator\", \"value\", \"property\" (für die Dimension prop), \"join\": \"and\" oder \"or\" (or verknüpft die Zeile mit der vorherigen)}. Beispiel: [[\"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": "Sichtbar für alle mit Zugriff auf die Website (false: nur für Sie)",
"default": true
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"filters",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Segment-ID, z. B. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "Wofür das Segment gedacht ist, oder null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filter im Format der Statistikfilter: Bedingungen [\"dimension\", \"operator\", \"value\"], die alle zutreffen müssen, und Gruppen {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Die Filter in einfacher Sprache, z. B. „Besucher aus den Vereinigten Staaten auf Mobilgeräten, die /pricing angesehen haben“"
},
"shared": {
"type": "boolean",
"description": "Sichtbar für alle mit Zugriff auf die Website"
},
"mine": {
"type": "boolean",
"description": "Von Ihnen erstellt"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/segments/:id.json
Ein Segment löschen
segments_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Segment-ID, z. B. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "Wofür das Segment gedacht ist, oder null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filter im Format der Statistikfilter: Bedingungen [\"dimension\", \"operator\", \"value\"], die alle zutreffen müssen, und Gruppen {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Die Filter in einfacher Sprache, z. B. „Besucher aus den Vereinigten Staaten auf Mobilgeräten, die /pricing angesehen haben“"
},
"shared": {
"type": "boolean",
"description": "Sichtbar für alle mit Zugriff auf die Website"
},
"mine": {
"type": "boolean",
"description": "Von Ihnen erstellt"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/segments.json
Segmente auflisten, die Sie auf einer Website verwenden können
segments_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/segments.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Segment-ID, z. B. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "Wofür das Segment gedacht ist, oder null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filter im Format der Statistikfilter: Bedingungen [\"dimension\", \"operator\", \"value\"], die alle zutreffen müssen, und Gruppen {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Die Filter in einfacher Sprache, z. B. „Besucher aus den Vereinigten Staaten auf Mobilgeräten, die /pricing angesehen haben“"
},
"shared": {
"type": "boolean",
"description": "Sichtbar für alle mit Zugriff auf die Website"
},
"mine": {
"type": "boolean",
"description": "Von Ihnen erstellt"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
POST
/sites/:site_id/segments/preview.json
Filter in einfacher Sprache beschreiben und die Besucher zählen, auf die sie in den letzten 30 Tagen zutrafen
segments_preview
Berechtigung: 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": "Filter, die alle zutreffen müssen. Jedes Element ist eine Bedingung [\"dimension\", \"operator\", \"value\"] oder {\"any\": [conditions]}, wenn eine von mehreren zutreffen darf. Dimensionen: page, entry_page, exit_page, hostname, channel, referrer, referrer_url, ref, utm_source, utm_medium, utm_campaign, utm_content, utm_term, country (ISO-Code, z. B. US), language, device (desktop, mobile, tablet, tv, other), browser, browser_version, os, os_version, screen, goal (Ziel-ID), event (Name des eigenen Ereignisses) und prop:<key> (Eigenschaft eines eigenen Ereignisses). Operatoren: is, is_not, contains, not_contains, starts_with, regex, not_regex, any_of und none_of (der Wert ist eine Liste), gt und lt (eine Zahl), between (eine Liste aus zwei Zahlen). Zeilen aus dem Segmentformular werden ebenfalls akzeptiert: {\"dimension\", \"operator\", \"value\", \"property\" (für die Dimension prop), \"join\": \"and\" oder \"or\" (or verknüpft die Zeile mit der vorherigen)}. Beispiel: [[\"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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/segments/:id.json
Ein Segment abrufen
segments_get
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Segment-ID, z. B. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "Wofür das Segment gedacht ist, oder null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filter im Format der Statistikfilter: Bedingungen [\"dimension\", \"operator\", \"value\"], die alle zutreffen müssen, und Gruppen {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Die Filter in einfacher Sprache, z. B. „Besucher aus den Vereinigten Staaten auf Mobilgeräten, die /pricing angesehen haben“"
},
"shared": {
"type": "boolean",
"description": "Sichtbar für alle mit Zugriff auf die Website"
},
"mine": {
"type": "boolean",
"description": "Von Ihnen erstellt"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:site_id/segments/:id.json
Ein Segment umbenennen oder seine Filter oder Freigabe ändern
segments_update
Berechtigung: 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": "Segmentname"
},
"description": {
"type": "string",
"description": "Optionale Notiz, wofür das Segment gedacht ist (höchstens 300 Zeichen, leer zum Löschen)"
},
"filters": {
"type": "array",
"items": {},
"description": "Ersatzfilter im selben Format wie beim Erstellen. Filter, die alle zutreffen müssen. Jedes Element ist eine Bedingung [\"dimension\", \"operator\", \"value\"] oder {\"any\": [conditions]}, wenn eine von mehreren zutreffen darf. Dimensionen: page, entry_page, exit_page, hostname, channel, referrer, referrer_url, ref, utm_source, utm_medium, utm_campaign, utm_content, utm_term, country (ISO-Code, z. B. US), language, device (desktop, mobile, tablet, tv, other), browser, browser_version, os, os_version, screen, goal (Ziel-ID), event (Name des eigenen Ereignisses) und prop:<key> (Eigenschaft eines eigenen Ereignisses). Operatoren: is, is_not, contains, not_contains, starts_with, regex, not_regex, any_of und none_of (der Wert ist eine Liste), gt und lt (eine Zahl), between (eine Liste aus zwei Zahlen). Zeilen aus dem Segmentformular werden ebenfalls akzeptiert: {\"dimension\", \"operator\", \"value\", \"property\" (für die Dimension prop), \"join\": \"and\" oder \"or\" (or verknüpft die Zeile mit der vorherigen)}. Beispiel: [[\"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": "Sichtbar für alle auf der Website"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Segment-ID, z. B. seg_7Q2K9XH3AB"
},
"site_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string",
"description": "Wofür das Segment gedacht ist, oder null"
},
{
"type": "null"
}
]
},
"filters": {
"type": "array",
"description": "Filter im Format der Statistikfilter: Bedingungen [\"dimension\", \"operator\", \"value\"], die alle zutreffen müssen, und Gruppen {\"any\": [conditions]}"
},
"summary": {
"type": "string",
"description": "Die Filter in einfacher Sprache, z. B. „Besucher aus den Vereinigten Staaten auf Mobilgeräten, die /pricing angesehen haben“"
},
"shared": {
"type": "boolean",
"description": "Sichtbar für alle mit Zugriff auf die Website"
},
"mine": {
"type": "boolean",
"description": "Von Ihnen erstellt"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
Statusseiten
GET
/status/:slug/confirm/:token.json
Ein Abonnement über den per E-Mail gesendeten Link bestätigen
public_status_pages_confirm
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl https://privatusanalytics.com/status/:slug/confirm/:token.json
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token der Ressource"
},
"slug": {
"type": "string",
"description": "Slug der Ressource"
}
},
"required": [
"token",
"slug"
]
}
{
"type": "object"
}
GET
/status/:slug.json
Öffentliche Statusseite: aktueller Status, 90-Tage-Verfügbarkeitsbalken, Vorfälle und Beiträge
public_status_pages_get
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl https://privatusanalytics.com/status/:slug.json
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Slug der 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 oder outage"
},
"checks": {
"type": "array",
"description": "Jeweils: {name, status, uptime_90d, days: [{date, uptime, downtime_seconds}]}"
},
"posts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Beitrags-ID (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring oder resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"incidents": {
"type": "array",
"description": "Aktuelle Vorfälle: {check, started_at, resolved_at, duration_seconds}"
}
}
}
POST
/status/:slug/subscribers.json
Eine E-Mail-Adresse abonnieren (Double-Opt-in)
public_status_pages_subscribe
Browser-Clients senden ein Cloudflare-Turnstile-Token als `cf-turnstile-response`. Anfragen mit einem API-Token benötigen keines.
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/status/:slug/subscribers.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Zu benachrichtigende E-Mail-Adresse",
"examples": [
"[email protected]"
]
},
"slug": {
"type": "string",
"description": "Slug der Ressource"
}
},
"required": [
"email",
"slug"
]
}
{
"type": "object"
}
POST
/status/:slug/unsubscribe/:token.json
Mit dem per E-Mail gesendeten Token abbestellen
public_status_pages_unsubscribe
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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 der Ressource"
},
"slug": {
"type": "string",
"description": "Slug der Ressource"
}
},
"required": [
"token",
"slug"
]
}
{
"type": "object"
}
POST
/status_pages/:status_page_id/posts.json
Ein Vorfall-Update veröffentlichen (benachrichtigt Abonnenten per E-Mail)
status_page_posts_create
Berechtigung: 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": "Überschrift, z. B. \"Erhöhte Fehlerraten\""
},
"body": {
"type": "string",
"description": "Update-Text (Klartext)"
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring oder resolved",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved"
],
"default": "investigating"
},
"posted_at": {
"type": "string",
"format": "date-time",
"description": "Wann es passiert ist (Standard ist jetzt)"
},
"notify": {
"type": "boolean",
"description": "Bestätigte Abonnenten per E-Mail benachrichtigen",
"default": true
},
"status_page_id": {
"type": "string",
"description": "Status page der Ressource"
}
},
"required": [
"title",
"status_page_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Beitrags-ID (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring oder resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/status_pages/:status_page_id/posts/:id.json
Einen Statusseiten-Beitrag löschen
status_page_posts_delete
Berechtigung: 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 der Ressource"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"status_page_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Beitrags-ID (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring oder resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/status_pages/:status_page_id/posts.json
Beiträge einer Statusseite auflisten
status_page_posts_list
Berechtigung: 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": "Nur Beiträge mit diesem Status",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved"
]
},
"status_page_id": {
"type": "string",
"description": "Status page der Ressource"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"status_page_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Beitrags-ID (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring oder resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
PATCH
/status_pages/:status_page_id/posts/:id.json
Einen Statusseiten-Beitrag bearbeiten
status_page_posts_update
Berechtigung: 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": "Überschrift"
},
"body": {
"type": "string",
"description": "Update-Text (Klartext)"
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring oder resolved",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved"
]
},
"notify": {
"type": "boolean",
"description": "Bestätigte Abonnenten per E-Mail benachrichtigen, wenn sich der Status ändert",
"default": true
},
"status_page_id": {
"type": "string",
"description": "Status page der Ressource"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"status_page_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Beitrags-ID (spp_…)"
},
"title": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "investigating, identified, monitoring oder resolved"
},
"posted_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/status_pages/:status_page_id/subscribers/:id.json
Einen Abonnenten entfernen
status_page_subscribers_delete
Berechtigung: 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 der Ressource"
},
"id": {
"type": "string",
"description": "Id der 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
Abonnenten einer Statusseite auflisten
status_page_subscribers_list
Berechtigung: 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: nur bestätigte, false: nur ausstehende"
},
"status_page_id": {
"type": "string",
"description": "Status page der Ressource"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"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
Eine Statusseite erstellen
status_pages_create
Berechtigung: 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": "Seitentitel, z. B. \"Acme Status\""
},
"slug": {
"type": "string",
"description": "Slug der öffentlichen URL: /status/<slug> (Standard aus dem Namen)"
},
"description": {
"type": "string",
"description": "Einleitungstext unter dem Titel"
},
"logo_url": {
"type": "string",
"description": "HTTPS-URL eines Logobilds"
},
"brand_color": {
"type": "string",
"description": "Akzentfarbe, z. B. #06755b"
},
"custom_domain": {
"type": "string",
"description": "Eigene Domain (CNAME auf unseren Host), z. B. status.example.com. Leer zum Entfernen"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der anzuzeigenden Verfügbarkeitsprüfungen (upc_…)"
},
"published": {
"type": "boolean",
"description": "Öffentlich sichtbar",
"default": true
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"name",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Statusseiten-ID (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Öffentliche URL: /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": "IDs der angezeigten Verfügbarkeitsprüfungen"
},
"subscribers": {
"type": "integer",
"description": "Bestätigte Abonnenten"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/status_pages/:id.json
Eine Statusseite löschen
status_pages_delete
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Statusseiten-ID (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Öffentliche URL: /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": "IDs der angezeigten Verfügbarkeitsprüfungen"
},
"subscribers": {
"type": "integer",
"description": "Bestätigte Abonnenten"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/status_pages.json
Statusseiten auflisten
status_pages_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/status_pages.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Nach Name oder Slug filtern"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Statusseiten-ID (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Öffentliche URL: /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": "IDs der angezeigten Verfügbarkeitsprüfungen"
},
"subscribers": {
"type": "integer",
"description": "Bestätigte Abonnenten"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/status_pages/:id.json
Eine Statusseite abrufen
status_pages_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/status_pages/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Statusseiten-ID (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Öffentliche URL: /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": "IDs der angezeigten Verfügbarkeitsprüfungen"
},
"subscribers": {
"type": "integer",
"description": "Bestätigte Abonnenten"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/status_pages/:id.json
Eine Statusseite ändern
status_pages_update
Berechtigung: 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": "Seitentitel, z. B. \"Acme Status\""
},
"slug": {
"type": "string",
"description": "Slug der öffentlichen URL: /status/<slug> (Standard aus dem Namen)"
},
"description": {
"type": "string",
"description": "Einleitungstext unter dem Titel"
},
"logo_url": {
"type": "string",
"description": "HTTPS-URL eines Logobilds"
},
"brand_color": {
"type": "string",
"description": "Akzentfarbe, z. B. #06755b"
},
"custom_domain": {
"type": "string",
"description": "Eigene Domain (CNAME auf unseren Host), z. B. status.example.com. Leer zum Entfernen"
},
"check_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs der anzuzeigenden Verfügbarkeitsprüfungen (upc_…)"
},
"published": {
"type": "boolean",
"description": "Öffentlich sichtbar"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Statusseiten-ID (sp_…)"
},
"workspace_id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Öffentliche URL: /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": "IDs der angezeigten Verfügbarkeitsprüfungen"
},
"subscribers": {
"type": "integer",
"description": "Bestätigte Abonnenten"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Suche
GET
/sites/:site_id/search.json
Suchbericht: Klicks, Impressionen, CTR, Position, Top-Suchanfragen/-Seiten, Landingpages und Chancen
search_report
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/search.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"provider": {
"type": "string",
"description": "google (Search Console) oder bing",
"enum": [
"google",
"bing"
],
"default": "google"
},
"limit": {
"type": "integer",
"description": "Zeilen pro Tabelle (max. 100)",
"default": 25
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/sites/:site_id/search/connections.json
Eine Search-Console-Property oder eine Bing-Website verbinden
search_connect
Berechtigung: 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 oder bing",
"enum": [
"google",
"bing"
],
"default": "google"
},
"property": {
"type": "string",
"description": "Search-Console-Property (z. B. sc-domain:example.com) oder Bing-Website-URL",
"examples": [
"sc-domain:example.com"
]
},
"bing_api_key": {
"type": "string",
"description": "Ihr eigener API-Schlüssel für die Bing Webmaster Tools (Settings > API access). Erforderlich, wenn provider bing ist. Wird verschlüsselt gespeichert und nie zurückgegeben."
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"property",
"site_id"
]
}
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google oder bing"
},
"property": {
"type": "string",
"description": "Search-Console-Property oder Bing-Website-URL"
},
"status": {
"type": "string",
"description": "active oder 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
Search Console oder Bing trennen und die Daten löschen
search_disconnect
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"provider": {
"type": "string",
"description": "Provider der Ressource"
}
},
"required": [
"site_id",
"provider"
]
}
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google oder bing"
},
"property": {
"type": "string",
"description": "Search-Console-Property oder Bing-Website-URL"
},
"status": {
"type": "string",
"description": "active oder 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
Verbindbare Properties auflisten (Search Console benötigt eine Google-Freigabe im Browser)
search_properties
Berechtigung: 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 oder bing",
"enum": [
"google",
"bing"
],
"default": "google"
},
"bing_api_key": {
"type": "string",
"description": "Ihr eigener API-Schlüssel für die Bing Webmaster Tools (Settings > API access). Erforderlich, wenn provider bing ist. Wird nur verwendet, um die Websites aufzulisten, die er sehen kann."
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/sites/:site_id/search/sync.json
Suchdaten jetzt importieren
search_sync
Berechtigung: 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 oder bing",
"enum": [
"google",
"bing"
],
"default": "google"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "google oder bing"
},
"property": {
"type": "string",
"description": "Search-Console-Property oder Bing-Website-URL"
},
"status": {
"type": "string",
"description": "active oder error"
},
"last_synced_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Tarife
GET
/plans.json
Tarife, Preise und Limits auflisten
plans_list
Berechtigung: public
curl https://privatusanalytics.com/plans.json
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"events": {
"anyOf": [
{
"type": "integer",
"description": "Enthaltene Ereignisse pro Monat (nur kostenloser Tarif)"
},
{
"type": "null"
}
]
},
"badge_bonus": {
"anyOf": [
{
"type": "integer",
"description": "Zusätzliche Ereignisse pro Monat für das Anzeigen des Badges (kostenloser Tarif)"
},
{
"type": "null"
}
]
},
"limits": {
"type": "object",
"description": "Tariflimits. Null bedeutet unbegrenzt"
},
"tiers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"events": {
"type": "integer",
"description": "Enthaltene Ereignisse pro Monat"
},
"monthly": {
"type": "integer",
"description": "USD pro Monat, monatlich abgerechnet"
},
"yearly": {
"type": "integer",
"description": "USD pro Jahr, jährlich abgerechnet (2 Monate gratis)"
},
"monthly_price_id": {
"anyOf": [
{
"type": "string",
"description": "Paddle-Preis-ID (monatlich)"
},
{
"type": "null"
}
]
},
"yearly_price_id": {
"anyOf": [
{
"type": "string",
"description": "Paddle-Preis-ID (jährlich)"
},
{
"type": "null"
}
]
}
}
},
"description": "Preisstaffel nach Ereignissen pro Monat"
},
"contact_sales": {
"type": "boolean",
"description": "Preis nach Vertrag"
}
}
}
}
Teilen
GET
/badge/:site_id.json
Besucherzähler-Badge (SVG) für eine öffentliche Website
badges_get
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl https://privatusanalytics.com/badge/:site_id.json
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
Tracking
POST
/sites/:site_id/tracking/ingest_key.json
Den Server-Ingest-Schlüssel erstellen oder erneuern (nur einmal angezeigt)
tracking_ingest_key_rotate
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website-ID"
},
"key": {
"type": "string",
"description": "Der Ingest-Schlüssel. Wird nur einmal angezeigt: Speichern Sie ihn jetzt. Senden Sie ihn als Bearer-Token an POST /api/events"
},
"prefix": {
"type": "string",
"description": "In den Einstellungen angezeigtes Schlüsselpräfix"
}
}
}
DELETE
/sites/:site_id/tracking/ingest_key.json
Den Server-Ingest-Schlüssel widerrufen
tracking_ingest_key_revoke
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Im Tracking-Snippet verwendete Website-ID"
},
"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": "Anfang des Server-Ingest-Schlüssels"
},
{
"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": "HTML-Tracking-Snippet"
},
"favorite": {
"type": "boolean",
"description": "Von Ihnen mit einem Stern markiert"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/tracking/verify.json
Prüfen, ob der Tracker auf der Website installiert ist (Script-Tag, Website-ID, CSP und Referrer-Policy)
tracking_verify
Berechtigung: 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": "Zu prüfende Seite (Standard ist https://<domain>/)"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/tracking/snippet.json
Den Tracking-Snippet für gewählte Optionen erstellen
tracking_snippet
Berechtigung: 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": "Optionale Module: auto (ausgehende Links, Downloads, Formulare, 404-Fehler), engage (Zeit und Scrollen), vitals (Web Vitals), clicks",
"default": [
"engage"
]
},
"manual": {
"type": "boolean",
"description": "Den automatischen Pageview ausschalten",
"default": false
},
"spa": {
"type": "string",
"description": "Navigations-Tracking für Single-Page-Apps",
"enum": [
"auto",
"history",
"hash",
"off"
],
"default": "auto"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Nur auf diesen Hostnamen erfassen",
"default": []
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "Pfad-Globs, die nicht erfasst werden, z. B. /admin/*",
"default": []
},
"query_params": {
"type": "array",
"items": {
"type": "string"
},
"description": "Zusätzliche beizubehaltende Abfrageparameter, z. B. page",
"default": []
},
"mask": {
"type": "array",
"items": {
"type": "string"
},
"description": "Clientseitige Pfadmasken, z. B. /u/*->/u/:id",
"default": []
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
Traffic-Regeln
POST
/sites/:site_id/traffic_rules.json
Eine Traffic-Regel hinzufügen
traffic_rules_create
Berechtigung: 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 oder events",
"enum": [
"hostnames",
"paths",
"referrers",
"countries",
"ip_ranges",
"user_agents",
"events"
]
},
"pattern": {
"type": "string",
"description": "Zu vergleichender Wert. * ist ein Platzhalter. ip_ranges erwarten eine IP oder CIDR (v4/v6), countries einen ISO-Code",
"examples": [
"/admin/*"
]
},
"label": {
"type": "string",
"description": "Optionale Notiz, z. B. \"Büro\""
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"list",
"pattern",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents oder events"
},
"pattern": {
"type": "string",
"description": "Muster (* Platzhalter, CIDR für ip_ranges)"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"description": "block oder allow (der Modus ihrer Liste)"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/traffic_rules/:id.json
Eine Traffic-Regel löschen
traffic_rules_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents oder events"
},
"pattern": {
"type": "string",
"description": "Muster (* Platzhalter, CIDR für ip_ranges)"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"description": "block oder allow (der Modus ihrer Liste)"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/traffic_rules.json
Traffic-Regeln auflisten
traffic_rules_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/traffic_rules.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"list": {
"type": "string",
"description": "Nur Regeln in dieser Liste",
"enum": [
"hostnames",
"paths",
"referrers",
"countries",
"ip_ranges",
"user_agents",
"events"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents oder events"
},
"pattern": {
"type": "string",
"description": "Muster (* Platzhalter, CIDR für ip_ranges)"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"description": "block oder allow (der Modus ihrer Liste)"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/traffic_rules/test.json
Testen, ob ein Treffer mit den aktuellen Regeln der Website gezählt würde
traffic_rules_test
Berechtigung: 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": "Seiten-URL, z. B. https://example.com/a"
},
"referrer": {
"type": "string",
"description": "Referrer-URL oder Hostname"
},
"country": {
"type": "string",
"description": "ISO-Ländercode, z. B. US"
},
"ip": {
"type": "string",
"description": "IP-Adresse, gegen die ip_ranges getestet wird (wird nicht gespeichert)"
},
"user_agent": {
"type": "string",
"description": "User-Agent-String (wie beim Ingest auf Browser und Hauptversion reduziert)"
},
"event": {
"type": "string",
"description": "Name des eigenen Ereignisses"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
PATCH
/sites/:site_id/traffic_rules/:id.json
Eine Traffic-Regel ändern
traffic_rules_update
Berechtigung: 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": "Neues Muster"
},
"label": {
"type": "string",
"description": "Neues Label"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Regel-ID"
},
"list": {
"type": "string",
"description": "hostnames, paths, referrers, countries, ip_ranges, user_agents oder events"
},
"pattern": {
"type": "string",
"description": "Muster (* Platzhalter, CIDR für ip_ranges)"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"description": "block oder allow (der Modus ihrer Liste)"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Verfügbarkeit
POST
/sites/:site_id/uptime.json
Eine Verfügbarkeitsprüfung für eine Website hinzufügen
uptime_checks_create
Berechtigung: 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": "Anzeigename (Standard ist das Ziel)"
},
"kind": {
"type": "string",
"description": "http (Statuscode), keyword (Body enthält), tcp (host:port) oder dns (Name wird aufgelöst)",
"enum": [
"http",
"keyword",
"tcp",
"dns"
],
"default": "http"
},
"url": {
"type": "string",
"description": "URL für http-/keyword-Prüfungen",
"examples": [
"https://example.com/health"
]
},
"host": {
"type": "string",
"description": "Hostname für tcp-/dns-Prüfungen"
},
"port": {
"type": "integer",
"description": "TCP-Port für tcp-Prüfungen"
},
"keyword": {
"type": "string",
"description": "Text, den der Antwort-Body enthalten muss (keyword)"
},
"expected_status": {
"type": "integer",
"description": "Erwarteter HTTP-Statuscode",
"default": 200
},
"http_method": {
"type": "string",
"description": "HTTP-Methode",
"enum": [
"GET",
"HEAD"
],
"default": "GET"
},
"interval_seconds": {
"type": "integer",
"description": "Sekunden zwischen Prüfungen (das Minimum des Tarifs gilt, Standard 300 oder das Minimum)"
},
"timeout_seconds": {
"type": "integer",
"description": "Sekunden, bis eine Probe ein Timeout hat (1-30)",
"default": 20
},
"public": {
"type": "boolean",
"description": "Darf auf öffentlichen Statusseiten erscheinen",
"default": false
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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
Eine Verfügbarkeitsprüfung und ihren Verlauf löschen
uptime_checks_delete
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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
Die Verfügbarkeitsprüfungen einer Website auflisten
uptime_checks_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/uptime.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Nur Prüfungen in diesem Zustand",
"enum": [
"up",
"down",
"pending",
"paused"
]
},
"query": {
"type": "string",
"description": "Nach Name oder Ziel filtern"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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
Eine Verfügbarkeitsprüfung pausieren
uptime_checks_pause
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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
Eine pausierte Verfügbarkeitsprüfung fortsetzen
uptime_checks_resume
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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
Eine Verfügbarkeitsprüfung abrufen: Verfügbarkeit 24 Std./7 Tage/30 Tage, Antwortzeiten und Vorfälle
uptime_checks_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/uptime/checks/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"range": {
"type": "string",
"description": "Zeitfenster für das Antwortzeit-Diagramm",
"enum": [
"24h",
"7d",
"30d"
],
"default": "24h"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"check": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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": "Verfügbarkeit in % für 24h, 7d und 30d"
},
"range": {
"type": "string",
"description": "Zeitfenster von response_times"
},
"response_times": {
"type": "object",
"description": "Durchschnittliche Antwortzeit in ms pro Intervall: {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": "Bisher, falls noch offen"
},
"cause": {
"anyOf": [
{
"type": "string",
"description": "Häufigster Fehler, z. B. timeout oder status_503"
},
{
"type": "null"
}
]
},
"failed_locations": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
PATCH
/uptime/checks/:id.json
Eine Verfügbarkeitsprüfung ändern
uptime_checks_update
Berechtigung: 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": "Anzeigename (Standard ist das Ziel)"
},
"kind": {
"type": "string",
"description": "http (Statuscode), keyword (Body enthält), tcp (host:port) oder dns (Name wird aufgelöst)",
"enum": [
"http",
"keyword",
"tcp",
"dns"
]
},
"url": {
"type": "string",
"description": "URL für http-/keyword-Prüfungen",
"examples": [
"https://example.com/health"
]
},
"host": {
"type": "string",
"description": "Hostname für tcp-/dns-Prüfungen"
},
"port": {
"type": "integer",
"description": "TCP-Port für tcp-Prüfungen"
},
"keyword": {
"type": "string",
"description": "Text, den der Antwort-Body enthalten muss (keyword)"
},
"expected_status": {
"type": "integer",
"description": "Erwarteter HTTP-Statuscode"
},
"http_method": {
"type": "string",
"description": "HTTP-Methode",
"enum": [
"GET",
"HEAD"
]
},
"interval_seconds": {
"type": "integer",
"description": "Sekunden zwischen Prüfungen (das Minimum des Tarifs gilt, Standard 300 oder das Minimum)"
},
"timeout_seconds": {
"type": "integer",
"description": "Sekunden, bis eine Probe ein Timeout hat (1-30)"
},
"public": {
"type": "boolean",
"description": "Darf auf öffentlichen Statusseiten erscheinen"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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
Probe-Rechenzentrum, User-Agent und ausgehende IP-Bereiche (zum Freigeben unserer Verfügbarkeits-Probes)
uptime_probes_list
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl https://privatusanalytics.com/uptime/probes.json
{
"type": "object",
"properties": {},
"required": []
}
{
"type": "object"
}
POST
/uptime/probes/results.json
Ergebnisse eines externen Probe-Agents übermitteln (Bearer-Uptime-Probe-Token)
uptime_probes_results
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
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": "Probe-Ergebnisse: [{check_id, location, ok, status_code, response_ms, error, checked_at}]"
}
},
"required": [
"results"
]
}
{
"type": "object"
}
POST
/workspaces/:workspace_id/uptime.json
Eine Workspace-Verfügbarkeitsprüfung hinzufügen (nicht an eine Website gebunden)
workspace_uptime_checks_create
Berechtigung: 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": "Anzeigename (Standard ist das Ziel)"
},
"kind": {
"type": "string",
"description": "http (Statuscode), keyword (Body enthält), tcp (host:port) oder dns (Name wird aufgelöst)",
"enum": [
"http",
"keyword",
"tcp",
"dns"
],
"default": "http"
},
"url": {
"type": "string",
"description": "URL für http-/keyword-Prüfungen",
"examples": [
"https://example.com/health"
]
},
"host": {
"type": "string",
"description": "Hostname für tcp-/dns-Prüfungen"
},
"port": {
"type": "integer",
"description": "TCP-Port für tcp-Prüfungen"
},
"keyword": {
"type": "string",
"description": "Text, den der Antwort-Body enthalten muss (keyword)"
},
"expected_status": {
"type": "integer",
"description": "Erwarteter HTTP-Statuscode",
"default": 200
},
"http_method": {
"type": "string",
"description": "HTTP-Methode",
"enum": [
"GET",
"HEAD"
],
"default": "GET"
},
"interval_seconds": {
"type": "integer",
"description": "Sekunden zwischen Prüfungen (das Minimum des Tarifs gilt, Standard 300 oder das Minimum)"
},
"timeout_seconds": {
"type": "integer",
"description": "Sekunden, bis eine Probe ein Timeout hat (1-30)",
"default": 20
},
"public": {
"type": "boolean",
"description": "Darf auf öffentlichen Statusseiten erscheinen",
"default": false
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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
Alle Verfügbarkeitsprüfungen eines Workspaces auflisten
workspace_uptime_checks_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/uptime.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Nur Prüfungen in diesem Zustand",
"enum": [
"up",
"down",
"pending",
"paused"
]
},
"query": {
"type": "string",
"description": "Nach Name oder Ziel filtern"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Prüfungs-ID (upc_…)"
},
"workspace_id": {
"type": "string"
},
"site_id": {
"anyOf": [
{
"type": "string",
"description": "Website, zu der die Prüfung gehört"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "http, keyword, tcp oder 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 oder paused"
},
"enabled": {
"type": "boolean"
},
"public": {
"type": "boolean",
"description": "Darf auf Statusseiten erscheinen"
},
"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"
}
}
}
}
Warehouse-Sync
POST
/workspaces/:workspace_id/warehouses.json
Ein Warehouse-Ziel hinzufügen
warehouse_destinations_create
Berechtigung: 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": "Anzeigename, z. B. Data Lake"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Zu sendende Websites (pa_…). Leer sendet alle Websites"
},
"bucket": {
"type": "string",
"description": "s3: Bucket-Name"
},
"region": {
"type": "string",
"description": "s3: Region, z. B. us-east-1 (auto für R2)"
},
"prefix": {
"type": "string",
"description": "s3/azure: Pfadpräfix, z. B. privatus/events"
},
"endpoint": {
"type": "string",
"description": "s3: https-Endpunkt für S3-kompatiblen Speicher (GCS-Interoperabilität, R2, MinIO)"
},
"access_key_id": {
"type": "string",
"description": "s3: Access-Key-ID"
},
"secret_access_key": {
"type": "string",
"description": "s3: Secret Access Key (nur schreibbar)"
},
"service_account_json": {
"type": "string",
"description": "bigquery: JSON-Schlüssel des Dienstkontos mit BigQuery Data Editor (nur schreibbar)"
},
"project_id": {
"type": "string",
"description": "bigquery: Projekt-ID (Standard: aus dem Schlüssel)"
},
"dataset": {
"type": "string",
"description": "bigquery: Dataset-ID"
},
"table": {
"type": "string",
"description": "bigquery/snowflake: Tabellenname (Spalten: Schema v1)"
},
"account": {
"type": "string",
"description": "snowflake: Kontokennung, z. B. xy12345.us-east-1 oder myorg-myaccount"
},
"user": {
"type": "string",
"description": "snowflake: Benutzer mit Schlüsselpaar-Authentifizierung"
},
"private_key": {
"type": "string",
"description": "snowflake: privater PEM-RSA-Schlüssel (nur schreibbar)"
},
"database": {
"type": "string",
"description": "snowflake: Datenbank"
},
"schema": {
"type": "string",
"description": "snowflake: Schema"
},
"warehouse": {
"type": "string",
"description": "snowflake: virtuelles Warehouse"
},
"role": {
"type": "string",
"description": "snowflake: Rolle (optional)"
},
"sas_url": {
"type": "string",
"description": "azure: SAS-URL des Containers mit Erstellen-/Schreiben-Berechtigung (nur schreibbar)"
},
"kind": {
"type": "string",
"description": "s3 (auch GCS/R2/MinIO), bigquery, snowflake oder azure",
"enum": [
"s3",
"bigquery",
"snowflake",
"azure"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"kind",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake oder azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Wohin die Daten gehen: s3://bucket/prefix, project.dataset.table, account/database.schema.table oder der Azure-Container"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namen der ausgefüllten Einstellungen (Werte werden nie zurückgegeben)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gesendete Websites (pa_…). Leer bedeutet alle Websites"
},
"schedule": {
"type": "string",
"description": "daily: 02:00 UTC, sendet den vorherigen UTC-Tag"
},
"schema_version": {
"type": "string",
"description": "Gesendetes Zeilenschema"
},
"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
Ein Warehouse-Ziel löschen
warehouse_destinations_delete
Berechtigung: 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 der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake oder azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Wohin die Daten gehen: s3://bucket/prefix, project.dataset.table, account/database.schema.table oder der Azure-Container"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namen der ausgefüllten Einstellungen (Werte werden nie zurückgegeben)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gesendete Websites (pa_…). Leer bedeutet alle Websites"
},
"schedule": {
"type": "string",
"description": "daily: 02:00 UTC, sendet den vorherigen UTC-Tag"
},
"schema_version": {
"type": "string",
"description": "Gesendetes Zeilenschema"
},
"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
Warehouse-Ziele auflisten
warehouse_destinations_list
Berechtigung: workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/warehouses.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "Nur Ziele dieser Art",
"enum": [
"s3",
"bigquery",
"snowflake",
"azure"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake oder azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Wohin die Daten gehen: s3://bucket/prefix, project.dataset.table, account/database.schema.table oder der Azure-Container"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namen der ausgefüllten Einstellungen (Werte werden nie zurückgegeben)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gesendete Websites (pa_…). Leer bedeutet alle Websites"
},
"schedule": {
"type": "string",
"description": "daily: 02:00 UTC, sendet den vorherigen UTC-Tag"
},
"schema_version": {
"type": "string",
"description": "Gesendetes Zeilenschema"
},
"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
Ein Warehouse-Ziel abrufen (ohne Geheimnisse)
warehouse_destinations_get
Berechtigung: workspace.manage
curl https://privatusanalytics.com/warehouses/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake oder azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Wohin die Daten gehen: s3://bucket/prefix, project.dataset.table, account/database.schema.table oder der Azure-Container"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namen der ausgefüllten Einstellungen (Werte werden nie zurückgegeben)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gesendete Websites (pa_…). Leer bedeutet alle Websites"
},
"schedule": {
"type": "string",
"description": "daily: 02:00 UTC, sendet den vorherigen UTC-Tag"
},
"schema_version": {
"type": "string",
"description": "Gesendetes Zeilenschema"
},
"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
Die Synchronisierung eines Tages jetzt in die Warteschlange stellen
warehouse_destinations_sync
Berechtigung: 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": "Zu sendender UTC-Tag, z. B. 2026-09-28 (Standard: gestern)"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake oder azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Wohin die Daten gehen: s3://bucket/prefix, project.dataset.table, account/database.schema.table oder der Azure-Container"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namen der ausgefüllten Einstellungen (Werte werden nie zurückgegeben)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gesendete Websites (pa_…). Leer bedeutet alle Websites"
},
"schedule": {
"type": "string",
"description": "daily: 02:00 UTC, sendet den vorherigen UTC-Tag"
},
"schema_version": {
"type": "string",
"description": "Gesendetes Zeilenschema"
},
"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
Ein Warehouse-Ziel aktualisieren (leere Geheimnisse bleiben erhalten)
warehouse_destinations_update
Berechtigung: 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": "Anzeigename, z. B. Data Lake"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Zu sendende Websites (pa_…). Leer sendet alle Websites"
},
"bucket": {
"type": "string",
"description": "s3: Bucket-Name"
},
"region": {
"type": "string",
"description": "s3: Region, z. B. us-east-1 (auto für R2)"
},
"prefix": {
"type": "string",
"description": "s3/azure: Pfadpräfix, z. B. privatus/events"
},
"endpoint": {
"type": "string",
"description": "s3: https-Endpunkt für S3-kompatiblen Speicher (GCS-Interoperabilität, R2, MinIO)"
},
"access_key_id": {
"type": "string",
"description": "s3: Access-Key-ID"
},
"secret_access_key": {
"type": "string",
"description": "s3: Secret Access Key (nur schreibbar)"
},
"service_account_json": {
"type": "string",
"description": "bigquery: JSON-Schlüssel des Dienstkontos mit BigQuery Data Editor (nur schreibbar)"
},
"project_id": {
"type": "string",
"description": "bigquery: Projekt-ID (Standard: aus dem Schlüssel)"
},
"dataset": {
"type": "string",
"description": "bigquery: Dataset-ID"
},
"table": {
"type": "string",
"description": "bigquery/snowflake: Tabellenname (Spalten: Schema v1)"
},
"account": {
"type": "string",
"description": "snowflake: Kontokennung, z. B. xy12345.us-east-1 oder myorg-myaccount"
},
"user": {
"type": "string",
"description": "snowflake: Benutzer mit Schlüsselpaar-Authentifizierung"
},
"private_key": {
"type": "string",
"description": "snowflake: privater PEM-RSA-Schlüssel (nur schreibbar)"
},
"database": {
"type": "string",
"description": "snowflake: Datenbank"
},
"schema": {
"type": "string",
"description": "snowflake: Schema"
},
"warehouse": {
"type": "string",
"description": "snowflake: virtuelles Warehouse"
},
"role": {
"type": "string",
"description": "snowflake: Rolle (optional)"
},
"sas_url": {
"type": "string",
"description": "azure: SAS-URL des Containers mit Erstellen-/Schreiben-Berechtigung (nur schreibbar)"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. whd_7Q2K9XH3AB"
},
"kind": {
"type": "string",
"description": "s3, bigquery, snowflake oder azure"
},
"name": {
"type": "string"
},
"target": {
"type": "string",
"description": "Wohin die Daten gehen: s3://bucket/prefix, project.dataset.table, account/database.schema.table oder der Azure-Container"
},
"configured": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namen der ausgefüllten Einstellungen (Werte werden nie zurückgegeben)"
},
"site_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Gesendete Websites (pa_…). Leer bedeutet alle Websites"
},
"schedule": {
"type": "string",
"description": "daily: 02:00 UTC, sendet den vorherigen UTC-Tag"
},
"schema_version": {
"type": "string",
"description": "Gesendetes Zeilenschema"
},
"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"
}
}
}
Webhooks
GET
/workspaces/:workspace_id/webhooks/:webhook_id/deliveries.json
Zustellungen eines Webhooks auflisten
webhook_deliveries_list
Berechtigung: 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": "Nur erfolgreiche oder fehlgeschlagene Zustellungen",
"enum": [
"succeeded",
"failed"
]
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"webhook_id": {
"type": "string",
"description": "Webhook der Ressource"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id",
"webhook_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Zustellungs-ID, z. B. whd_123"
},
"event": {
"type": "string"
},
"status": {
"type": "string",
"description": "pending, succeeded oder failed"
},
"status_code": {
"anyOf": [
{
"type": "integer",
"description": "HTTP-Status des letzten Versuchs"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Verbindungsfehler des letzten Versuchs"
},
{
"type": "null"
}
]
},
"attempt": {
"type": "integer"
},
"duration_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"payload": {
"type": "object"
},
"response_body": {
"anyOf": [
{
"type": "string",
"description": "Die ersten 2.000 Zeichen"
},
{
"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
Eine Zustellung erneut senden
webhook_deliveries_redeliver
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"webhook_id": {
"type": "string",
"description": "Webhook der Ressource"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"webhook_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Zustellungs-ID, z. B. whd_123"
},
"event": {
"type": "string"
},
"status": {
"type": "string",
"description": "pending, succeeded oder failed"
},
"status_code": {
"anyOf": [
{
"type": "integer",
"description": "HTTP-Status des letzten Versuchs"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Verbindungsfehler des letzten Versuchs"
},
{
"type": "null"
}
]
},
"attempt": {
"type": "integer"
},
"duration_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"payload": {
"type": "object"
},
"response_body": {
"anyOf": [
{
"type": "string",
"description": "Die ersten 2.000 Zeichen"
},
{
"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
Einen Webhook-Endpunkt hinzufügen
webhooks_create
Berechtigung: 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": "HTTPS-Endpunkt, der per POST gesendetes JSON empfängt",
"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": "Zu sendende Ereignisse"
},
"enabled": {
"type": "boolean",
"description": "Zustellungen senden",
"default": true
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"url",
"events",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Webhook-ID, z. B. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing oder disabled"
},
"secret": {
"type": "string",
"description": "Signatur-Secret für 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
Einen Webhook löschen
webhooks_delete
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Webhook-ID, z. B. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing oder disabled"
},
"secret": {
"type": "string",
"description": "Signatur-Secret für 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
Webhooks auflisten
webhooks_list
Berechtigung: workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Webhook-ID, z. B. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing oder disabled"
},
"secret": {
"type": "string",
"description": "Signatur-Secret für 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
Einen Webhook abrufen
webhooks_get
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Webhook-ID, z. B. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing oder disabled"
},
"secret": {
"type": "string",
"description": "Signatur-Secret für 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
Eine Testzustellung senden
webhooks_test
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Zustellungs-ID, z. B. whd_123"
},
"event": {
"type": "string"
},
"status": {
"type": "string",
"description": "pending, succeeded oder failed"
},
"status_code": {
"anyOf": [
{
"type": "integer",
"description": "HTTP-Status des letzten Versuchs"
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string",
"description": "Verbindungsfehler des letzten Versuchs"
},
{
"type": "null"
}
]
},
"attempt": {
"type": "integer"
},
"duration_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"payload": {
"type": "object"
},
"response_body": {
"anyOf": [
{
"type": "string",
"description": "Die ersten 2.000 Zeichen"
},
{
"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
Einen Webhook aktualisieren (Ereignisse, URL, aktiviert, Secret erneuern)
webhooks_update
Berechtigung: 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": "HTTPS-Endpunkt"
},
"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": "Zu sendende Ereignisse"
},
"enabled": {
"type": "boolean",
"description": "Zustellungen senden"
},
"rotate_secret": {
"type": "boolean",
"description": "Das Signatur-Secret ersetzen",
"default": false
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"workspace_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Webhook-ID, z. B. wh_7Q2K9XH3AB"
},
"url": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"description": "active, failing oder disabled"
},
"secret": {
"type": "string",
"description": "Signatur-Secret für 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"
}
}
}
Webseite
GET
/changelog.json
Changelog-Einträge auflisten
changelog_list
Veröffentlichte Produkt-Updates, neueste zuerst. Auch als RSS unter /changelog.rss verfügbar.
Berechtigung: public
curl https://privatusanalytics.com/changelog.json
{
"type": "object",
"properties": {
"area": {
"type": "string",
"description": "Nur Einträge für diesen Produktbereich",
"enum": [
"product",
"dashboard",
"tracker",
"privacy",
"api",
"integrations",
"billing",
"docs"
]
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Eintrags-ID, z. B. chg_7Q2K9XH3AB"
},
"title": {
"type": "string",
"description": "Überschrift"
},
"area": {
"type": "string",
"description": "Produktbereich, z. B. dashboard, tracker, api"
},
"body": {
"type": "string",
"description": "Markdown-Text"
},
"published_at": {
"type": "string",
"format": "date-time",
"description": "Veröffentlichungszeitpunkt"
},
"url": {
"type": "string",
"description": "Permanenter Link"
}
}
}
}
GET
/changelog/:id.json
Einen Changelog-Eintrag abrufen
changelog_get
Berechtigung: public
curl https://privatusanalytics.com/changelog/:id.json
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Eintrags-ID, z. B. chg_7Q2K9XH3AB"
},
"title": {
"type": "string",
"description": "Überschrift"
},
"area": {
"type": "string",
"description": "Produktbereich, z. B. dashboard, tracker, api"
},
"body": {
"type": "string",
"description": "Markdown-Text"
},
"published_at": {
"type": "string",
"format": "date-time",
"description": "Veröffentlichungszeitpunkt"
},
"url": {
"type": "string",
"description": "Permanenter Link"
}
}
}
POST
/contact.json
Eine Nachricht an das Privatus-Analytics-Team senden
contact_create
Browser-Clients senden ein Cloudflare-Turnstile-Token als `cf-turnstile-response`. Anfragen mit einem API-Token benötigen keines.
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/contact.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Ihr Name",
"examples": [
"Ada Lovelace"
]
},
"email": {
"type": "string",
"description": "Wohin wir antworten sollen",
"examples": [
"[email protected]"
]
},
"company": {
"type": "string",
"description": "Unternehmen oder Organisation (optional)"
},
"topic": {
"type": "string",
"description": "Worum es in der Nachricht geht",
"enum": [
"general",
"sales",
"support",
"privacy",
"security",
"partnerships",
"press"
],
"default": "general"
},
"message": {
"type": "string",
"description": "Ihre Nachricht (10 bis 5.000 Zeichen)"
},
"website": {
"type": "string",
"description": "Leer lassen. Spam-Falle für Bots. Ausgefüllte Übermittlungen werden verworfen"
}
},
"required": [
"name",
"email",
"message"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Immer true, wenn die Übermittlung akzeptiert wurde"
},
"message": {
"type": "string",
"description": "Was als Nächstes passiert"
}
}
}
POST
/newsletter/confirm.json
Ein Newsletter-Abonnement bestätigen (signiertes Token)
newsletter_confirm
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/newsletter/confirm.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Signiertes Token aus der Bestätigungs-E-Mail"
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Immer true, wenn die Übermittlung akzeptiert wurde"
},
"message": {
"type": "string",
"description": "Was als Nächstes passiert"
}
}
}
POST
/newsletter.json
Eine E-Mail-Adresse für den Newsletter anmelden
newsletter_subscribe
Browser-Clients senden ein Cloudflare-Turnstile-Token als `cf-turnstile-response`. Anfragen mit einem API-Token benötigen keines.
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/newsletter.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "E-Mail-Adresse für das Abonnement. Ein Bestätigungslink wird an sie gesendet",
"examples": [
"[email protected]"
]
},
"website": {
"type": "string",
"description": "Leer lassen. Spam-Falle für Bots. Ausgefüllte Übermittlungen werden verworfen"
}
},
"required": [
"email"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Immer true, wenn die Übermittlung akzeptiert wurde"
},
"message": {
"type": "string",
"description": "Was als Nächstes passiert"
}
}
}
POST
/newsletter/unsubscribe.json
Mit einem signierten Link-Token abbestellen
newsletter_unsubscribe
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/newsletter/unsubscribe.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Signiertes Token aus dem Abmeldelink"
},
"list": {
"type": "string",
"description": "newsletter (Standard: die Liste, für die der Link galt) oder marketing (alle Marketing-E-Mails)",
"enum": [
"newsletter",
"marketing"
]
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Immer true, wenn die Übermittlung akzeptiert wurde"
},
"message": {
"type": "string",
"description": "Was als Nächstes passiert"
}
}
}
GET
/pricing.json
Tarife, Preise und Tariflimits abrufen
pricing_get
Dieselben Daten wie auf der Preisseite: die Ereignisstaffel, jedes Tariflimit und was als Ereignis zählt. Übergeben Sie events, um die passende Stufe zu erhalten.
Berechtigung: public
curl https://privatusanalytics.com/pricing.json
{
"type": "object",
"properties": {
"events": {
"type": "integer",
"description": "Erwartete Pageviews plus eigene Ereignisse pro Monat. Gibt die passende Stufe als `recommendation` zurück",
"examples": [
750000
]
},
"interval": {
"type": "string",
"description": "Abrechnungsintervall für die angezeigten Preise: month oder year (10x der Monatspreis)",
"enum": [
"month",
"year"
],
"default": "month"
}
},
"required": []
}
{
"type": "object",
"properties": {
"currency": {
"type": "string",
"description": "Währung aller Preise (USD)"
},
"tax_included": {
"type": "boolean",
"description": "Immer true. Die Preise enthalten Mehrwertsteuer oder Sales Tax, der angezeigte Preis ist also der gezahlte Preis"
},
"interval": {
"type": "string",
"description": "month oder year. Die Preise gelten für dieses Intervall"
},
"annual_multiplier": {
"type": "integer",
"description": "Jahrespreis = Monatspreis x dieser Wert (zwei Monate gratis)"
},
"free_events": {
"type": "integer",
"description": "Im Free-Tarif enthaltene Ereignisse pro Monat"
},
"badge_bonus": {
"type": "integer",
"description": "Zusätzliche kostenlose Ereignisse pro Monat, wenn das optionale Badge angezeigt wird"
},
"tiers": {
"type": "array",
"items": {
"type": "object"
},
"description": "Ereignisstaffel: { events, pro, business } Preise für das Intervall (pro ist null, wo nur Business angeboten wird), plus die Monatspreise"
},
"plans": {
"type": "array",
"items": {
"type": "object"
},
"description": "Tarife mit { id, name, from_price, limits }. Limits mit null bedeuten unbegrenzt"
},
"counted": {
"type": "array",
"items": {
"type": "string"
},
"description": "Was als abrechenbares Ereignis zählt"
},
"not_counted": {
"type": "array",
"items": {
"type": "string"
},
"description": "Was nie zur Nutzung zählt"
},
"recommendation": {
"anyOf": [
{
"type": "object",
"description": "{ events, plan, tier_events, price } für die Eingabe `events`, oder null, wenn kein Volumen angegeben wurde"
},
{
"type": "null"
}
]
}
}
}
GET
/status.json
Den aktuellen Systemstatus abrufen
status_get
Zustand von Datenbank, Redis und Hintergrundjobs, höchstens alle 15 Sekunden geprüft.
Berechtigung: public
curl https://privatusanalytics.com/status.json
{
"type": "object",
"properties": {
"fresh": {
"type": "boolean",
"description": "Den 15-Sekunden-Cache überspringen und jetzt erneut prüfen",
"default": false
}
},
"required": []
}
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Gesamt: operational, degraded oder outage"
},
"checked_at": {
"type": "string",
"format": "date-time",
"description": "Wann die Prüfungen liefen (bis zu 15 s zwischengespeichert)"
},
"components": {
"type": "array",
"items": {
"type": "object"
},
"description": "Pro Komponente: { id, name, status, detail, latency_ms }, plus queue_latency_s und queue_depth für Warteschlangen"
}
}
}
GET
/tools/consent-gap.json
Den Traffic schätzen, der von einwilligungsbasierter Analyse verpasst wird
tools_consent_gap
Berechtigung: public
curl https://privatusanalytics.com/tools/consent-gap.json
{
"type": "object",
"properties": {
"monthly_visitors": {
"type": "integer",
"description": "Besucher pro Monat (aus Ihren Server-Logs oder der aktuellen Analyse)",
"examples": [
50000
]
},
"consent_rate": {
"type": "number",
"description": "Prozentsatz der Besucher, die in Ihrem Banner Analyse-Cookies akzeptieren (0-100)",
"examples": [
55
]
},
"adblock_share": {
"type": "number",
"description": "Prozentsatz der Besucher, deren Blocker Analyse-Skripte stoppen (0-100)",
"default": 25.0
}
},
"required": [
"monthly_visitors",
"consent_rate"
]
}
{
"type": "object",
"properties": {
"monthly_visitors": {
"type": "integer",
"description": "Eingabe: Besucher pro Monat"
},
"consent_rate": {
"type": "number",
"description": "Eingabe: Prozent, die Analyse-Cookies akzeptieren"
},
"adblock_share": {
"type": "number",
"description": "Eingabe: Prozent, deren Blocker Skripte stoppen"
},
"measured_with_consent": {
"type": "integer",
"description": "Besucher, die ein einwilligungsbasiertes Tool messen kann"
},
"missed": {
"type": "integer",
"description": "Besucher, die es verpasst"
},
"missed_percent": {
"type": "number",
"description": "Anteil der verpassten Besucher in Prozent"
},
"measured_cookieless": {
"type": "integer",
"description": "Besucher, die ein cookieloses Tool ohne Banner messen kann, wenn es im gleichen Maß blockiert wird"
},
"recovered_by_cookieless": {
"type": "integer",
"description": "Differenz zwischen der cookielosen und der einwilligungsbasierten Schätzung"
}
}
}
GET
/tools/header-checker.json
Die Referrer-Policy und CSP einer Seite für Analysen prüfen
tools_header_check
Berechtigung: public
curl https://privatusanalytics.com/tools/header-checker.json
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Zu prüfende öffentliche Seite (http oder https)",
"examples": [
"https://example.com"
]
}
},
"required": [
"url"
]
}
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Finale URL nach Weiterleitungen"
},
"status": {
"type": "integer",
"description": "HTTP-Status der finalen Antwort"
},
"findings": {
"type": "array",
"items": {
"type": "object"
},
"description": "Prüfungen: { check, value, level (ok, warn, info), note }"
}
}
}
GET
/tools/privacy-policy-generator.json
Einen Absatz für die Datenschutzerklärung zu Privatus Analytics entwerfen
tools_privacy_policy
Berechtigung: public
curl https://privatusanalytics.com/tools/privacy-policy-generator.json
{
"type": "object",
"properties": {
"site_name": {
"type": "string",
"description": "Name Ihrer Website oder Ihres Unternehmens",
"examples": [
"Example Books"
]
},
"contact_email": {
"type": "string",
"description": "Zu nennender Datenschutzkontakt (optional)"
},
"honors_gpc": {
"type": "boolean",
"description": "Ob Do Not Track und Global Privacy Control beachtet werden (Standard)",
"default": true
}
},
"required": [
"site_name"
]
}
{
"type": "object",
"properties": {
"site_name": {
"type": "string",
"description": "Eingabe: Website- oder Firmenname"
},
"paragraphs": {
"type": "array",
"items": {
"type": "string"
},
"description": "Der Text der Erklärung, ein Absatz pro Eintrag"
},
"text": {
"type": "string",
"description": "Die Absätze, durch Leerzeilen verbunden"
}
}
}
GET
/tools/qr-code.json
Einen QR-Code als SVG erzeugen
tools_qr_code
Berechtigung: public
curl https://privatusanalytics.com/tools/qr-code.json
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Zu kodierende URL oder Text (bis zu 1.000 Zeichen)",
"examples": [
"https://example.com/?utm_source=poster"
]
},
"level": {
"type": "string",
"description": "Fehlerkorrektur: l (7 %), m (15 %), q (25 %), h (30 %)",
"enum": [
"l",
"m",
"q",
"h"
],
"default": "m"
}
},
"required": [
"text"
]
}
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Der kodierte Text"
},
"level": {
"type": "string",
"description": "Stufe der Fehlerkorrektur"
},
"size": {
"type": "integer",
"description": "Module pro Seite"
},
"svg": {
"type": "string",
"description": "Eigenständiges SVG-Dokument"
}
}
}
GET
/tools/tracker-scanner.json
Cookies und bekannte Tracker auf einer Seite auflisten
tools_tracker_scan
Berechtigung: public
curl https://privatusanalytics.com/tools/tracker-scanner.json
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Zu scannende öffentliche Seite (http oder https)",
"examples": [
"https://example.com"
]
}
},
"required": [
"url"
]
}
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Finale URL nach Weiterleitungen"
},
"status": {
"type": "integer",
"description": "HTTP-Status der finalen Antwort"
},
"truncated": {
"type": "boolean",
"description": "True, wenn die Seite größer als 1 MB war und nur das erste 1 MB gescannt wurde"
},
"cookies": {
"type": "array",
"items": {
"type": "object"
},
"description": "Von der HTTP-Antwort gesetzte Cookies: { name, domain, path, expires, secure, http_only, same_site }. Werte werden nie zurückgegeben"
},
"trackers": {
"type": "array",
"items": {
"type": "object"
},
"description": "Von der Seite referenzierte bekannte Tools: { name, category, match, evidence }"
},
"third_party_hosts": {
"type": "array",
"items": {
"type": "string"
},
"description": "Weitere Domains, von denen die Seite Ressourcen lädt"
}
}
}
GET
/tools/utm-builder.json
Eine Kampagnen-URL mit UTM-Parametern erstellen
tools_utm_builder
Berechtigung: public
curl https://privatusanalytics.com/tools/utm-builder.json
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL der Landingpage",
"examples": [
"https://example.com/pricing"
]
},
"source": {
"type": "string",
"description": "utm_source: woher der Traffic kommt",
"examples": [
"newsletter"
]
},
"medium": {
"type": "string",
"description": "utm_medium: der Kanal, z. B. email, cpc, social",
"examples": [
"email"
]
},
"campaign": {
"type": "string",
"description": "utm_campaign: der Kampagnenname",
"examples": [
"fall_launch"
]
},
"term": {
"type": "string",
"description": "utm_term: Keyword der bezahlten Suche (optional)"
},
"content": {
"type": "string",
"description": "utm_content: welcher Link oder welches Werbemittel (optional)"
}
},
"required": [
"url",
"source",
"medium",
"campaign"
]
}
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Die URL der Landingpage mit UTM-Parametern"
},
"params": {
"type": "object",
"description": "Die hinzugefügten UTM-Parameter"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Probleme, die sich zu beheben lohnen (Groß-/Kleinschreibung, Leerzeichen, personenbezogene Daten)"
}
}
}
POST
/waitlist.json
Einer Warteliste beitreten (EU-Hosting)
waitlist_join
Browser-Clients senden ein Cloudflare-Turnstile-Token als `cf-turnstile-response`. Anfragen mit einem API-Token benötigen keines.
Berechtigung: public
· Nur HTTP (kein MCP-Tool)
curl -X POST https://privatusanalytics.com/waitlist.json \
-H "Content-Type: application/json" -d '{…}'
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Zu benachrichtigende E-Mail-Adresse",
"examples": [
"[email protected]"
]
},
"list": {
"type": "string",
"description": "Welcher Warteliste beigetreten wird",
"enum": [
"eu_hosting"
],
"default": "eu_hosting"
},
"website": {
"type": "string",
"description": "Leer lassen. Spam-Falle für Bots. Ausgefüllte Übermittlungen werden verworfen"
}
},
"required": [
"email"
]
}
{
"type": "object",
"properties": {
"received": {
"type": "boolean",
"description": "Immer true, wenn die Übermittlung akzeptiert wurde"
},
"message": {
"type": "string",
"description": "Was als Nächstes passiert"
}
}
}
Websites
POST
/sites/:site_id/data_reset.json
Alle Ereignisse und Besuche in einem Datumsbereich löschen (läuft im Hintergrund, kann nicht rückgängig gemacht werden)
sites_reset_data
Berechtigung: 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": "Erster zu löschender Tag (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Letzter zu löschender Tag, einschließlich"
},
"confirm": {
"type": "string",
"description": "Geben Sie zur Bestätigung die Domain ein"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"from",
"to",
"confirm",
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/filter_stats.json
Zusammenfassung des gefilterten Traffics: Bots, Traffic-Regeln oder PII-Schwärzungen nach Grund und Land (nur Zählwerte)
sites_filter_stats
Berechtigung: 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 (gefilterte Bots), rule (Traffic-Regeln) oder redaction (PII-Scrubber)",
"enum": [
"bot",
"rule",
"redaction"
],
"default": "bot"
},
"days": {
"type": "integer",
"description": "Rückblick in Tagen (1-395)",
"default": 30
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
GET
/sites/:site_id/access.json
Mitglieder auflisten und ob sie diese Website sehen können
sites_access_list
Berechtigung: members.manage
curl https://privatusanalytics.com/sites/:site_id/access.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"membership_id": {
"type": "string",
"format": "uuid",
"description": "Mitgliedschafts-ID"
},
"email": {
"type": "string"
},
"name": {
"type": "string"
},
"role": {
"type": "string"
},
"access": {
"type": "boolean",
"description": "Kann diese Website sehen"
},
"locked": {
"type": "boolean",
"description": "Inhaber und Admins haben immer Zugriff"
}
}
}
PATCH
/sites/:site_id/access.json
Den Zugriff eines Mitglieds auf diese Website gewähren oder entfernen
sites_access_update
Berechtigung: 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": "Mitgliedschafts-ID aus sites_access_list"
},
"access": {
"type": "boolean",
"description": "true zum Gewähren des Zugriffs, false zum Entfernen"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"membership_id",
"access",
"site_id"
]
}
{
"type": "object",
"properties": {
"membership_id": {
"type": "string",
"format": "uuid",
"description": "Mitgliedschafts-ID"
},
"email": {
"type": "string"
},
"name": {
"type": "string"
},
"role": {
"type": "string"
},
"access": {
"type": "boolean",
"description": "Kann diese Website sehen"
},
"locked": {
"type": "boolean",
"description": "Inhaber und Admins haben immer Zugriff"
}
}
}
POST
/sites/:site_id/favorite.json
Eine Website mit einem Stern markieren (unter Alle Websites zuerst angeheftet)
sites_favorite
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Im Tracking-Snippet verwendete Website-ID"
},
"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": "Anfang des Server-Ingest-Schlüssels"
},
{
"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": "HTML-Tracking-Snippet"
},
"favorite": {
"type": "boolean",
"description": "Von Ihnen mit einem Stern markiert"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/favorite.json
Den Stern einer Website entfernen
sites_unfavorite
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Im Tracking-Snippet verwendete Website-ID"
},
"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": "Anfang des Server-Ingest-Schlüssels"
},
{
"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": "HTML-Tracking-Snippet"
},
"favorite": {
"type": "boolean",
"description": "Von Ihnen mit einem Stern markiert"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/setup.json
Installationsstatus und Snippet einer Website
sites_setup_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/setup.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object"
}
POST
/transfers/:token/accept.json
Eine Website-Übertragung in einen Ihrer Workspaces annehmen
site_transfers_accept
Berechtigung: 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": "Workspace, in den die Website verschoben wird (ws_…)"
},
"token": {
"type": "string",
"description": "Token der Ressource"
}
},
"required": [
"workspace_id",
"token"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website, die übertragen wird"
},
"site_domain": {
"type": "string"
},
"from_workspace": {
"type": "string",
"description": "Name des aktuellen Workspaces"
},
"to_workspace_id": {
"anyOf": [
{
"type": "string",
"description": "Empfangender Workspace"
},
{
"type": "null"
}
]
},
"to_email": {
"type": "string",
"description": "E-Mail-Adresse des Empfängers"
},
"status": {
"type": "string",
"description": "pending, accepted oder canceled"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/transfer.json
Die Übertragung einer Website an einen anderen Workspace starten (der Empfänger erhält eine E-Mail)
sites_transfer_start
Berechtigung: 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-Adresse der Person, die die Website erhält (sie wählt einen ihrer Workspaces)"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"email",
"site_id"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website, die übertragen wird"
},
"site_domain": {
"type": "string"
},
"from_workspace": {
"type": "string",
"description": "Name des aktuellen Workspaces"
},
"to_workspace_id": {
"anyOf": [
{
"type": "string",
"description": "Empfangender Workspace"
},
{
"type": "null"
}
]
},
"to_email": {
"type": "string",
"description": "E-Mail-Adresse des Empfängers"
},
"status": {
"type": "string",
"description": "pending, accepted oder canceled"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/transfer.json
Eine ausstehende Website-Übertragung abbrechen
sites_transfer_cancel
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website, die übertragen wird"
},
"site_domain": {
"type": "string"
},
"from_workspace": {
"type": "string",
"description": "Name des aktuellen Workspaces"
},
"to_workspace_id": {
"anyOf": [
{
"type": "string",
"description": "Empfangender Workspace"
},
{
"type": "null"
}
]
},
"to_email": {
"type": "string",
"description": "E-Mail-Adresse des Empfängers"
},
"status": {
"type": "string",
"description": "pending, accepted oder canceled"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/transfers/:token.json
Eine ausstehende Übertragung anhand ihres per E-Mail gesendeten Tokens abrufen
site_transfers_get
Berechtigung: public
curl https://privatusanalytics.com/transfers/:token.json
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token der Ressource"
}
},
"required": [
"token"
]
}
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Website, die übertragen wird"
},
"site_domain": {
"type": "string"
},
"from_workspace": {
"type": "string",
"description": "Name des aktuellen Workspaces"
},
"to_workspace_id": {
"anyOf": [
{
"type": "string",
"description": "Empfangender Workspace"
},
{
"type": "null"
}
]
},
"to_email": {
"type": "string",
"description": "E-Mail-Adresse des Empfängers"
},
"status": {
"type": "string",
"description": "pending, accepted oder canceled"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/workspaces/:workspace_id/sites.json
Eine Website hinzufügen
sites_create
Berechtigung: 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": "Primäre Domain, z. B. example.com",
"examples": [
"example.com"
]
},
"name": {
"type": "string",
"description": "Anzeigename (Standard ist die Domain)"
},
"timezone": {
"type": "string",
"description": "Zeitzone für Berichte"
},
"currency": {
"type": "string",
"description": "Währung für den Umsatz (ISO 4217)"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"domain",
"workspace_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Im Tracking-Snippet verwendete Website-ID"
},
"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": "Anfang des Server-Ingest-Schlüssels"
},
{
"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": "HTML-Tracking-Snippet"
},
"favorite": {
"type": "boolean",
"description": "Von Ihnen mit einem Stern markiert"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:id.json
Eine Website löschen (nach 7 Tagen endgültig entfernt)
sites_delete
Berechtigung: 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": "Geben Sie zur Bestätigung die Domain ein"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"confirm",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Im Tracking-Snippet verwendete Website-ID"
},
"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": "Anfang des Server-Ingest-Schlüssels"
},
{
"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": "HTML-Tracking-Snippet"
},
"favorite": {
"type": "boolean",
"description": "Von Ihnen mit einem Stern markiert"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces/:workspace_id/sites.json
Websites eines Workspaces auflisten
sites_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/workspaces/:workspace_id/sites.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Nach Domain oder Name filtern"
},
"label": {
"type": "string",
"description": "Nur Websites mit diesem Label"
},
"sort": {
"type": "string",
"description": "position (Ihre Reihenfolge), name oder visitors der letzten 30 Tage (meiste zuerst)",
"enum": [
"position",
"name",
"visitors"
],
"default": "position"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": [
"workspace_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Im Tracking-Snippet verwendete Website-ID"
},
"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": "Anfang des Server-Ingest-Schlüssels"
},
{
"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": "HTML-Tracking-Snippet"
},
"favorite": {
"type": "boolean",
"description": "Von Ihnen mit einem Stern markiert"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/sites/:id.json
Eine Website und alle ihre Einstellungen abrufen
sites_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Im Tracking-Snippet verwendete Website-ID"
},
"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": "Anfang des Server-Ingest-Schlüssels"
},
{
"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": "HTML-Tracking-Snippet"
},
"favorite": {
"type": "boolean",
"description": "Von Ihnen mit einem Stern markiert"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:id.json
Website-Einstellungen aktualisieren
sites_update
Berechtigung: 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": "Anzeigename"
},
"domain": {
"type": "string",
"description": "Primäre Domain"
},
"extra_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Zusätzliche Hostnamen"
},
"multi_domain_mode": {
"type": "string",
"description": "combined: ein Besucher über mehrere Domains",
"enum": [
"combined",
"separate"
]
},
"timezone": {
"type": "string",
"description": "Zeitzone für Berichte"
},
"currency": {
"type": "string",
"description": "Umsatzwährung (ISO 4217)"
},
"week_start": {
"type": "integer",
"description": "0 = Sonntag, 1 = Montag"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels zum Gruppieren von Websites"
},
"honor_dnt": {
"type": "boolean",
"description": "Besucher überspringen, die DNT senden"
},
"honor_gpc": {
"type": "boolean",
"description": "Besucher überspringen, die GPC senden"
},
"pii_scrubber": {
"type": "boolean",
"description": "E-Mail-Adressen, Tokens und IDs schwärzen"
},
"redaction_rules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"pattern": {
"type": "string"
}
}
},
"description": "Eigene Schwärzungs-Regex"
},
"allowed_params": {
"type": "array",
"items": {
"type": "string"
},
"description": "In Pfaden beizubehaltende Abfrageparameter"
},
"path_masks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"pattern": {
"type": "string"
},
"replacement": {
"type": "string"
}
}
},
"description": "Regeln zur Pfadmaskierung, z. B. /u/* -> /u/:id"
},
"retention_months": {
"type": "integer",
"description": "Daten löschen, die älter sind als dieser Wert"
},
"bot_filtering": {
"type": "boolean",
"description": "Bot-Traffic filtern"
},
"traffic_rule_modes": {
"type": "object",
"additionalProperties": true,
"description": "block oder allow pro Traffic-Regel-Liste"
},
"vitals_sample_rate": {
"type": "integer",
"description": "Stichprobe der Web Vitals in %"
},
"conversion_denominator": {
"type": "string",
"description": "Conversion-Rate bezogen auf Besuche oder Besucher",
"enum": [
"visits",
"visitors"
]
},
"public_dashboard": {
"type": "boolean",
"description": "Jeder mit dem Link kann die Statistiken ansehen"
},
"public_indexable": {
"type": "boolean",
"description": "Suchmaschinen die öffentliche Seite indexieren lassen"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Im Tracking-Snippet verwendete Website-ID"
},
"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": "Anfang des Server-Ingest-Schlüssels"
},
{
"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": "HTML-Tracking-Snippet"
},
"favorite": {
"type": "boolean",
"description": "Von Ihnen mit einem Stern markiert"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Workspaces
GET
/workspaces/:workspace_id/white_label.json
Die White-Label-Marke abrufen
white_label_get
Berechtigung: 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": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"brand_name": {
"anyOf": [
{
"type": "string",
"description": "Anstelle von Privatus Analytics angezeigter Name"
},
{
"type": "null"
}
]
},
"brand_logo_url": {
"anyOf": [
{
"type": "string",
"description": "URL des Logobilds"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string",
"description": "Akzentfarbe"
},
{
"type": "null"
}
]
},
"hide_branding": {
"type": "boolean",
"description": "Das Privatus-Analytics-Branding ist ausgeblendet"
},
"available": {
"type": "boolean",
"description": "Der Tarif enthält White Label"
},
"active": {
"type": "boolean",
"description": "Die Marke wird aktuell angewendet"
}
}
}
PATCH
/workspaces/:workspace_id/white_label.json
Die White-Label-Marke für geteilte Dashboards und E-Mail-Berichte festlegen (Business)
white_label_update
Berechtigung: 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": "Anstelle von Privatus Analytics angezeigter Name (leer entfernt ihn)"
},
"brand_logo_url": {
"type": "string",
"description": "https-URL eines Logobilds (leer entfernt es)"
},
"brand_color": {
"type": "string",
"description": "Akzentfarbe, z. B. #06755b"
},
"hide_branding": {
"type": "boolean",
"description": "\"Privatus Analytics\" in geteilten Dashboards und E-Mail-Berichten ausblenden"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"brand_name": {
"anyOf": [
{
"type": "string",
"description": "Anstelle von Privatus Analytics angezeigter Name"
},
{
"type": "null"
}
]
},
"brand_logo_url": {
"anyOf": [
{
"type": "string",
"description": "URL des Logobilds"
},
{
"type": "null"
}
]
},
"brand_color": {
"anyOf": [
{
"type": "string",
"description": "Akzentfarbe"
},
{
"type": "null"
}
]
},
"hide_branding": {
"type": "boolean",
"description": "Das Privatus-Analytics-Branding ist ausgeblendet"
},
"available": {
"type": "boolean",
"description": "Der Tarif enthält White Label"
},
"active": {
"type": "boolean",
"description": "Die Marke wird aktuell angewendet"
}
}
}
GET
/workspaces/:workspace_id/security.json
Sicherheitseinstellungen des Workspaces abrufen
workspace_security_get
Berechtigung: workspace.manage
curl https://privatusanalytics.com/workspaces/:workspace_id/security.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"enforce_2fa": {
"type": "boolean",
"description": "Mitglieder müssen 2FA einrichten"
},
"login_methods": {
"type": "array",
"items": {
"type": "string"
},
"description": "Erlaubte Anmeldemethoden"
},
"session_ttl_hours": {
"anyOf": [
{
"type": "integer",
"description": "Sitzungsdauer (null = keine)"
},
{
"type": "null"
}
]
},
"app_ip_allowlist": {
"type": "array",
"items": {
"type": "string"
},
"description": "Erlaubte IPs/CIDRs (leer = von überall)"
},
"support_access_until": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Der Privatus-Analytics-Support darf den Workspace einsehen bis"
},
{
"type": "null"
}
]
}
}
}
PATCH
/workspaces/:workspace_id/security.json
Sicherheitseinstellungen des Workspaces aktualisieren (2FA, Anmeldemethoden, Sitzungsdauer, IP-Zulassungsliste, Support-Zugriff)
workspace_security_update
Berechtigung: 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": "Mitglieder zur Einrichtung von 2FA verpflichten"
},
"login_methods": {
"type": "array",
"items": {
"type": "string",
"enum": [
"password",
"magic_link",
"passkey",
"google",
"github",
"sso"
]
},
"description": "Erlaubte Anmeldemethoden"
},
"session_ttl_hours": {
"type": "integer",
"description": "Mitglieder nach dieser Anzahl Stunden abmelden (0 = kein Limit)"
},
"app_ip_allowlist": {
"type": "array",
"items": {
"type": "string"
},
"description": "App- und API-Zugriff nur von diesen IPs/CIDRs zulassen (Business). Leer = von überall"
},
"support_access": {
"type": "boolean",
"description": "Den Privatus-Analytics-Support den Workspace 7 Tage lang einsehen lassen"
},
"workspace_id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
}
},
"required": [
"workspace_id"
]
}
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string"
},
"enforce_2fa": {
"type": "boolean",
"description": "Mitglieder müssen 2FA einrichten"
},
"login_methods": {
"type": "array",
"items": {
"type": "string"
},
"description": "Erlaubte Anmeldemethoden"
},
"session_ttl_hours": {
"anyOf": [
{
"type": "integer",
"description": "Sitzungsdauer (null = keine)"
},
{
"type": "null"
}
]
},
"app_ip_allowlist": {
"type": "array",
"items": {
"type": "string"
},
"description": "Erlaubte IPs/CIDRs (leer = von überall)"
},
"support_access_until": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "Der Privatus-Analytics-Support darf den Workspace einsehen bis"
},
{
"type": "null"
}
]
}
}
}
POST
/workspaces.json
Einen Workspace erstellen (Sie werden Inhaber)
workspaces_create
Berechtigung: member
· Nur HTTP (kein MCP-Tool)
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": "Workspace-Name",
"examples": [
"Acme Inc"
]
},
"timezone": {
"type": "string",
"description": "Standardzeitzone für Berichte (Standard ist die des Benutzers)"
},
"currency": {
"type": "string",
"description": "Standardwährung (ISO 4217)",
"default": "USD"
},
"how_heard": {
"type": "string",
"description": "Wie Sie von uns erfahren haben"
}
},
"required": [
"name"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Standardzeitzone für Berichte"
},
"currency": {
"type": "string",
"description": "Standardwährung"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Im Tarif enthaltene Ereignisse pro Monat"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Ihre Rolle in diesem Workspace"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/workspaces/:id.json
Einen Workspace und alle seine Websites löschen (nur Inhaber, kündigt jedes Abonnement)
workspaces_delete
Berechtigung: 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": "Geben Sie zur Bestätigung den Workspace-Namen ein"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"confirm",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Standardzeitzone für Berichte"
},
"currency": {
"type": "string",
"description": "Standardwährung"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Im Tarif enthaltene Ereignisse pro Monat"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Ihre Rolle in diesem Workspace"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/workspaces.json
Ihre Workspaces auflisten
workspaces_list
Berechtigung: member
curl https://privatusanalytics.com/workspaces.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Seite (ab 1)"
},
"per_page": {
"type": "integer",
"description": "Ergebnisse pro Seite (max. 100)"
}
},
"required": []
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Standardzeitzone für Berichte"
},
"currency": {
"type": "string",
"description": "Standardwährung"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Im Tarif enthaltene Ereignisse pro Monat"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Ihre Rolle in diesem Workspace"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/workspaces/:id.json
Einen Workspace abrufen
workspaces_get
Berechtigung: member
curl https://privatusanalytics.com/workspaces/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Standardzeitzone für Berichte"
},
"currency": {
"type": "string",
"description": "Standardwährung"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Im Tarif enthaltene Ereignisse pro Monat"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Ihre Rolle in diesem Workspace"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/workspaces/:id.json
Workspace-Einstellungen aktualisieren
workspaces_update
Berechtigung: 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": "Workspace-Name"
},
"timezone": {
"type": "string",
"description": "Standardzeitzone für Berichte"
},
"currency": {
"type": "string",
"description": "Standardwährung (ISO 4217)"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"timezone": {
"type": "string",
"description": "Standardzeitzone für Berichte"
},
"currency": {
"type": "string",
"description": "Standardwährung"
},
"plan": {
"type": "string",
"description": "free, pro, business oder enterprise"
},
"plan_events": {
"type": "integer",
"description": "Im Tarif enthaltene Ereignisse pro Monat"
},
"subscription_status": {
"type": "string"
},
"role": {
"type": "string",
"description": "Ihre Rolle in diesem Workspace"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
Ziele
POST
/sites/:site_id/goals/:id/archive.json
Ein Ziel archivieren (in Berichten ausgeblendet)
goals_archive
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound oder download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob oder regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Hostname-Einschränkung (Seitenziele)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bedingungen für Ereigniseigenschaften"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Scrollen in %"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed oder revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Fester Wert in der kleinsten Einheit"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit oder every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Passende Ereignisse, Wiederholungen eingeschlossen"
},
"conversions": {
"type": "integer",
"description": "Besuche mit mindestens einem Abschluss"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ Besuche (oder ÷ Besucher, je nach Website-Einstellung), %"
},
"value": {
"type": "integer",
"description": "Zielwert in der kleinsten Einheit der Website-Währung"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Änderung der Conversions gegenüber dem Vorzeitraum, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/goals.json
Ein Ziel erstellen
goals_create
Berechtigung: 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": "Zielname",
"examples": [
"Signed up"
]
},
"kind": {
"type": "string",
"description": "page (eine Seite besuchen), event (eigenes Ereignis), engagement (Scrollen oder Verweildauer), outbound (Klick auf einen ausgehenden Link) oder download (Dateidownload)",
"enum": [
"page",
"event",
"engagement",
"outbound",
"download"
]
},
"match_type": {
"type": "string",
"description": "Wie pattern zum Pfad (page, engagement), zur Link-Domain (outbound) oder zur Datei (download) passt: exact, prefix, glob (*) oder regex",
"enum": [
"exact",
"prefix",
"glob",
"regex"
],
"default": "exact"
},
"pattern": {
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster, z. B. /pricing, /blog/*, stripe.com oder *.pdf"
},
"hostname": {
"type": "string",
"description": "Nur Seiten dieses Hostnamens zählen (Seitenziele)"
},
"event_name": {
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Bedingungen für Ereigniseigenschaften: [{\"key\": \"plan\", \"operator\": \"is|is_not|contains|gt|lt\", \"value\": \"pro\"}]",
"default": []
},
"scroll_threshold": {
"type": "integer",
"description": "Engagement: zu erreichende Scrolltiefe in %"
},
"time_threshold_seconds": {
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
"value_mode": {
"type": "string",
"description": "none, fixed (fixed_value pro Conversion) oder revenue (der Ereignisumsatz)",
"enum": [
"none",
"fixed",
"revenue"
],
"default": "none"
},
"fixed_value": {
"type": "number",
"description": "Fester Wert pro Conversion in der Website-Währung, z. B. 50.0"
},
"count_mode": {
"type": "string",
"description": "Der Wert zählt once_per_visit oder bei jedem Abschluss",
"enum": [
"once_per_visit",
"every"
],
"default": "once_per_visit"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"name",
"kind",
"site_id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound oder download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob oder regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Hostname-Einschränkung (Seitenziele)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bedingungen für Ereigniseigenschaften"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Scrollen in %"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed oder revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Fester Wert in der kleinsten Einheit"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit oder every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Passende Ereignisse, Wiederholungen eingeschlossen"
},
"conversions": {
"type": "integer",
"description": "Besuche mit mindestens einem Abschluss"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ Besuche (oder ÷ Besucher, je nach Website-Einstellung), %"
},
"value": {
"type": "integer",
"description": "Zielwert in der kleinsten Einheit der Website-Währung"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Änderung der Conversions gegenüber dem Vorzeitraum, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
DELETE
/sites/:site_id/goals/:id.json
Ein Ziel löschen (die Daten bleiben erhalten)
goals_delete
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound oder download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob oder regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Hostname-Einschränkung (Seitenziele)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bedingungen für Ereigniseigenschaften"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Scrollen in %"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed oder revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Fester Wert in der kleinsten Einheit"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit oder every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Passende Ereignisse, Wiederholungen eingeschlossen"
},
"conversions": {
"type": "integer",
"description": "Besuche mit mindestens einem Abschluss"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ Besuche (oder ÷ Besucher, je nach Website-Einstellung), %"
},
"value": {
"type": "integer",
"description": "Zielwert in der kleinsten Einheit der Website-Währung"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Änderung der Conversions gegenüber dem Vorzeitraum, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
POST
/sites/:site_id/goals/:id/duplicate.json
Ein Ziel kopieren
goals_duplicate
Berechtigung: 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": "Name für die Kopie"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound oder download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob oder regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Hostname-Einschränkung (Seitenziele)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bedingungen für Ereigniseigenschaften"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Scrollen in %"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed oder revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Fester Wert in der kleinsten Einheit"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit oder every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Passende Ereignisse, Wiederholungen eingeschlossen"
},
"conversions": {
"type": "integer",
"description": "Besuche mit mindestens einem Abschluss"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ Besuche (oder ÷ Besucher, je nach Website-Einstellung), %"
},
"value": {
"type": "integer",
"description": "Zielwert in der kleinsten Einheit der Website-Währung"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Änderung der Conversions gegenüber dem Vorzeitraum, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
GET
/sites/:site_id/goals.json
Ziele mit Abschlüssen, Conversions, Rate und Wert für einen Zeitraum auflisten
goals_list
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/goals.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"status": {
"type": "string",
"description": "active, archived oder alle Ziele",
"enum": [
"active",
"archived",
"all"
],
"default": "active"
},
"page": {
"type": "integer",
"description": "Seitennummer",
"default": 1
},
"per_page": {
"type": "integer",
"description": "Ziele pro Seite (max. 100)",
"default": 25
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
}
},
"required": [
"site_id"
]
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound oder download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob oder regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Hostname-Einschränkung (Seitenziele)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bedingungen für Ereigniseigenschaften"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Scrollen in %"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed oder revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Fester Wert in der kleinsten Einheit"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit oder every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Passende Ereignisse, Wiederholungen eingeschlossen"
},
"conversions": {
"type": "integer",
"description": "Besuche mit mindestens einem Abschluss"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ Besuche (oder ÷ Besucher, je nach Website-Einstellung), %"
},
"value": {
"type": "integer",
"description": "Zielwert in der kleinsten Einheit der Website-Währung"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Änderung der Conversions gegenüber dem Vorzeitraum, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
}
GET
/sites/:site_id/goals/:id.json
Zielbericht: Kennzahlen, Diagramm, Aufschlüsselungen und der Weg zur Conversion
goals_get
Berechtigung: analytics.read
curl https://privatusanalytics.com/sites/:site_id/goals/:id.json \
-H "Authorization: Bearer $PRIVATUS_TOKEN"
{
"type": "object",
"properties": {
"period": {
"type": "string",
"description": "Voreinstellung für den Datumsbereich. Verwenden Sie custom mit 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": "Beginn des eigenen Bereichs (Zeitzone der Website)"
},
"to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Bereichs, einschließlich"
},
"compare": {
"type": "string",
"description": "Vergleichszeitraum",
"enum": [
"none",
"previous_period",
"previous_year",
"custom"
],
"default": "none"
},
"compare_from": {
"type": "string",
"format": "date",
"description": "Beginn des eigenen Vergleichs"
},
"compare_to": {
"type": "string",
"format": "date",
"description": "Ende des eigenen Vergleichs"
},
"match_weekday": {
"type": "boolean",
"description": "Wochentage des Vergleichs angleichen",
"default": false
},
"filters": {
"type": "array",
"items": {},
"description": "Filter: [[\"dimension\",\"operator\",\"value\"], …]. Operatoren: is, is_not, any_of, none_of, contains, not_contains, starts_with, regex, not_regex, gt, lt, between. Bedingungen in {\"any\": [...]} fassen für ODER.",
"default": []
},
"segment_id": {
"type": "string",
"description": "Ein gespeichertes Segment anwenden (seg_…)"
},
"include_imported": {
"type": "boolean",
"description": "Importierte historische Daten hinzufügen (Daten vor dem ersten nativen Ereignis, wird ignoriert, wenn Filter oder ein Segment angewendet werden)",
"default": false
},
"interval": {
"type": "string",
"description": "Größe der Diagrammintervalle",
"enum": [
"auto",
"minute",
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"default": "auto"
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"period": {
"type": "object",
"description": "from/to des Zeitraums (UTC)"
},
"goal": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound oder download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob oder regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Hostname-Einschränkung (Seitenziele)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bedingungen für Ereigniseigenschaften"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Scrollen in %"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed oder revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Fester Wert in der kleinsten Einheit"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit oder every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Passende Ereignisse, Wiederholungen eingeschlossen"
},
"conversions": {
"type": "integer",
"description": "Besuche mit mindestens einem Abschluss"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ Besuche (oder ÷ Besucher, je nach Website-Einstellung), %"
},
"value": {
"type": "integer",
"description": "Zielwert in der kleinsten Einheit der Website-Währung"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Änderung der Conversions gegenüber dem Vorzeitraum, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"description": "Die Zieldefinition"
},
"metrics": {
"type": "object",
"description": "completions, conversions, conversion_rate (%), value (kleinste Einheit)"
},
"comparison_period": {
"anyOf": [
{
"type": "object",
"description": "Vergleich from/to"
},
{
"type": "null"
}
]
},
"comparison": {
"anyOf": [
{
"type": "object",
"description": "Kennzahlen für den Vergleichszeitraum"
},
{
"type": "null"
}
]
},
"change": {
"anyOf": [
{
"type": "object",
"description": "Änderung gegenüber dem Vergleich, % pro Kennzahl"
},
{
"type": "null"
}
]
},
"interval": {
"type": "string",
"description": "Größe der Diagrammintervalle"
},
"series": {
"type": "array",
"items": {
"type": "object"
},
"description": "Pro Intervall: date, completions, conversions, conversion_rate"
},
"breakdowns": {
"type": "object",
"description": "Häufigste Werte nach Conversions für channel, utm_campaign, entry_page, country und device: value, completions, conversions, conversion_rate"
},
"journey": {
"anyOf": [
{
"type": "object",
"description": "converting_visits, median_seconds_to_convert, median_pages_before und pages_before (Seiten, die früher im Besuch angesehen wurden, nach konvertierenden Besuchen)"
},
{
"type": "null"
}
]
}
}
}
POST
/sites/:site_id/goals/:id/unarchive.json
Ein archiviertes Ziel wiederherstellen
goals_unarchive
Berechtigung: 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": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound oder download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob oder regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Hostname-Einschränkung (Seitenziele)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bedingungen für Ereigniseigenschaften"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Scrollen in %"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed oder revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Fester Wert in der kleinsten Einheit"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit oder every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Passende Ereignisse, Wiederholungen eingeschlossen"
},
"conversions": {
"type": "integer",
"description": "Besuche mit mindestens einem Abschluss"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ Besuche (oder ÷ Besucher, je nach Website-Einstellung), %"
},
"value": {
"type": "integer",
"description": "Zielwert in der kleinsten Einheit der Website-Währung"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Änderung der Conversions gegenüber dem Vorzeitraum, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
PATCH
/sites/:site_id/goals/:id.json
Ein Ziel aktualisieren
goals_update
Berechtigung: 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": "Zielname",
"examples": [
"Signed up"
]
},
"kind": {
"type": "string",
"description": "page (eine Seite besuchen), event (eigenes Ereignis), engagement (Scrollen oder Verweildauer), outbound (Klick auf einen ausgehenden Link) oder download (Dateidownload)",
"enum": [
"page",
"event",
"engagement",
"outbound",
"download"
]
},
"match_type": {
"type": "string",
"description": "Wie pattern zum Pfad (page, engagement), zur Link-Domain (outbound) oder zur Datei (download) passt: exact, prefix, glob (*) oder regex",
"enum": [
"exact",
"prefix",
"glob",
"regex"
]
},
"pattern": {
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster, z. B. /pricing, /blog/*, stripe.com oder *.pdf"
},
"hostname": {
"type": "string",
"description": "Nur Seiten dieses Hostnamens zählen (Seitenziele)"
},
"event_name": {
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Bedingungen für Ereigniseigenschaften: [{\"key\": \"plan\", \"operator\": \"is|is_not|contains|gt|lt\", \"value\": \"pro\"}]"
},
"scroll_threshold": {
"type": "integer",
"description": "Engagement: zu erreichende Scrolltiefe in %"
},
"time_threshold_seconds": {
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
"value_mode": {
"type": "string",
"description": "none, fixed (fixed_value pro Conversion) oder revenue (der Ereignisumsatz)",
"enum": [
"none",
"fixed",
"revenue"
]
},
"fixed_value": {
"type": "number",
"description": "Fester Wert pro Conversion in der Website-Währung, z. B. 50.0"
},
"count_mode": {
"type": "string",
"description": "Der Wert zählt once_per_visit oder bei jedem Abschluss",
"enum": [
"once_per_visit",
"every"
]
},
"site_id": {
"type": "string",
"description": "Website-ID, z. B. pa_7Q2K9XH3AB"
},
"id": {
"type": "string",
"description": "Id der Ressource"
}
},
"required": [
"site_id",
"id"
]
}
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Ziel-ID, z. B. goal_7Q2K9XH3AB"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"description": "page, event, engagement, outbound oder download"
},
"match_type": {
"type": "string",
"description": "exact, prefix, glob oder regex"
},
"pattern": {
"anyOf": [
{
"type": "string",
"description": "Pfad-, Domain- oder Dateimuster"
},
{
"type": "null"
}
]
},
"hostname": {
"anyOf": [
{
"type": "string",
"description": "Hostname-Einschränkung (Seitenziele)"
},
{
"type": "null"
}
]
},
"event_name": {
"anyOf": [
{
"type": "string",
"description": "Name des eigenen Ereignisses (Ereignisziele)"
},
{
"type": "null"
}
]
},
"conditions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bedingungen für Ereigniseigenschaften"
},
"scroll_threshold": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Scrollen in %"
},
{
"type": "null"
}
]
},
"time_threshold_seconds": {
"anyOf": [
{
"type": "integer",
"description": "Engagement: Sekunden auf der Seite"
},
{
"type": "null"
}
]
},
"value_mode": {
"type": "string",
"description": "none, fixed oder revenue"
},
"fixed_value_minor": {
"anyOf": [
{
"type": "integer",
"description": "Fester Wert in der kleinsten Einheit"
},
{
"type": "null"
}
]
},
"count_mode": {
"type": "string",
"description": "once_per_visit oder every"
},
"archived": {
"type": "boolean"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"stats": {
"anyOf": [
{
"type": "object",
"properties": {
"completions": {
"type": "integer",
"description": "Passende Ereignisse, Wiederholungen eingeschlossen"
},
"conversions": {
"type": "integer",
"description": "Besuche mit mindestens einem Abschluss"
},
"conversion_rate": {
"type": "number",
"description": "Conversions ÷ Besuche (oder ÷ Besucher, je nach Website-Einstellung), %"
},
"value": {
"type": "integer",
"description": "Zielwert in der kleinsten Einheit der Website-Währung"
},
"change": {
"anyOf": [
{
"type": "number",
"description": "Änderung der Conversions gegenüber dem Vorzeitraum, %"
},
{
"type": "null"
}
]
}
},
"description": "Statistiken des Zeitraums (nur Liste)"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}