Doku
Die Dokumentation durchsuchen

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.

Als Markdown anzeigen

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.

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

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

Conventions#

Base URL https://privatusanalytics.com
Format JSON. Add .json to the path (or send Accept: application/json)
Auth Authorization: Bearer pat_… (Authentication)
Ids Public ids with a prefix: ws_… workspaces, pa_… sites, 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

Authentifizierung

Senden Sie Authorization: Bearer pat_…. Erstellen Sie Tokens unter Workspace-Einstellungen, API-Tokens. Anleitung zur Authentifizierung.

JSON überall

Hängen Sie .json an jeden Pfad an. Antworten haben die Form { "data": … } und Fehler die Form { "error": { "code", "message" } }. Fehler.

MCP

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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/api_tokens.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/api_tokens/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/api_tokens.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/badge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/cancel.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/change_plan.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/checkout.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/discount.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/payment_method.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/portal.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/billing/resume.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/billing.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/billing.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/usage.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/invoices.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/billing/invoices/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/account/affiliate/commissions.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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": []
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/account/affiliate/signup-box.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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": []
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/account/affiliate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {},
  "required": []
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/alerts/:id/acknowledge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/alerts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/alerts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/alerts/:id/history.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/alerts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/alerts/:id/mute.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/alerts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/alerts/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/alerts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/overview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/experiments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/insights.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/journeys.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/pages/detail.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /sites/:site_id/stats/aggregate.json Hauptkennzahlen für einen Zeitraum (mit Vergleich) stats_aggregate

Berechtigung: analytics.read

Beispiel
curl https://privatusanalytics.com/sites/:site_id/stats/aggregate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /sites/:site_id/breakdown/:dimension.json Häufigste Werte einer Dimension (Seiten, Quellen, Länder…) stats_breakdown

Berechtigung: analytics.read

Beispiel
curl https://privatusanalytics.com/sites/:site_id/breakdown/:dimension.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /sites/:site_id/stats/timeseries.json Kennzahlen pro Zeitintervall für Diagramme stats_timeseries

Berechtigung: analytics.read

Beispiel
curl https://privatusanalytics.com/sites/:site_id/stats/timeseries.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/ask.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/ask/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/ask.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/ask/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
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 '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/audit_log.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/channels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/channels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/channels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/channels/:id/send_test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/channels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/channels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/push_subscription.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/push_subscription.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "endpoint": {
      "type": "string",
      "description": "Zu entfernender PushSubscription.endpoint"
    }
  },
  "required": [
    "endpoint"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/crawlers/connection.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/crawlers/connection.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/crawlers/sync.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/crawlers/zones.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/crawlers.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id/cards/:index.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
POST /workspaces/:workspace_id/dashboards.json Ein eigenes Dashboard erstellen dashboards_create

Berechtigung: content.write

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/dashboards.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/dashboards/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/docs/api.json
Eingaben
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "description": "Seite (ab 1)"
    },
    "per_page": {
      "type": "integer",
      "description": "Ergebnisse pro Seite (max. 100)"
    }
  },
  "required": []
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/docs.json
Eingaben
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "description": "Seite (ab 1)"
    },
    "per_page": {
      "type": "integer",
      "description": "Ergebnisse pro Seite (max. 100)"
    }
  },
  "required": []
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/openapi.json
Eingaben
{
  "type": "object",
  "properties": {},
  "required": []
}
Antwortdaten
{
  "type": "object"
}
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

Beispiel
curl https://privatusanalytics.com/docs/:section/:page.json
Eingaben
{
  "type": "object",
  "properties": {
    "section": {
      "type": "string",
      "description": "Section der Ressource"
    },
    "page": {
      "type": "string",
      "description": "Page der Ressource"
    }
  },
  "required": [
    "section",
    "page"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/recipients/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/reports/:report_id/recipients.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/recipients/:id/resend.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/reports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/reports/:id/deliveries.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/reports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/reports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/reports/:id/send_test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/reports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/reports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/reports/invites/:token/accept.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    }
  },
  "required": [
    "token"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/reports/invites/:token/decline.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    }
  },
  "required": [
    "token"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/reports/resubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    }
  },
  "required": [
    "token"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/reports/unsubscribe/:token/resubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    }
  },
  "required": [
    "token"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/reports/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    }
  },
  "required": [
    "token"
  ]
}
Antwortdaten
{
  "type": "object"
}

Ereignisse

GET /sites/:site_id/events/properties.json Ereigniseigenschaften-Schlüssel der letzten 30 Tage auflisten event_properties_list

Berechtigung: analytics.read

Beispiel
curl https://privatusanalytics.com/sites/:site_id/events/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
PATCH /sites/:site_id/events/properties.json Einen Ereigniseigenschaften-Schlüssel umbenennen oder ausblenden event_properties_update

Berechtigung: sites.manage

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/events/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/events.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/events.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
POST /sites/:site_id/events/merge.json Mehrere Ereignisse unter einem Anzeigenamen zusammenführen events_merge

Berechtigung: sites.manage

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/events/merge.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/events/detail.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/events/settings.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/api/logs.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/api/event.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/api/events.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "Bis zu 100 Ereignisse"
    }
  },
  "required": [
    "events"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /api/pixel.json Einen Pageview ohne JavaScript erfassen (1×1-GIF) ingest_pixel

Berechtigung: public · Nur HTTP (kein MCP-Tool)

Beispiel
curl https://privatusanalytics.com/api/pixel.json
Eingaben
{
  "type": "object",
  "properties": {},
  "required": []
}
Antwortdaten
{
  "type": "object"
}

Exporte

POST /workspaces/:workspace_id/exports.json Einen Export in die Warteschlange stellen (wird im Hintergrund erstellt) exports_create

Berechtigung: analytics.export

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/exports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/exports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/exports/:id/download.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /workspaces/:workspace_id/exports.json Exporte auflisten (die Job-Warteschlange) exports_list

Berechtigung: analytics.export

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/exports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/exports/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /exports/:id.json Einen Export und seinen Status abrufen exports_get

Berechtigung: analytics.export

Beispiel
curl https://privatusanalytics.com/exports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/funnels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/funnels.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/funnels/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/help.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/imports/google/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "type": "object"
}
POST /sites/:site_id/imports.json Einen Import starten (GA4-Property oder CSV-Upload) imports_create

Berechtigung: sites.manage

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/imports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/imports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/imports.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/imports/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/campaigns/costs.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/campaigns/costs/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/campaigns/costs/import.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/campaigns/costs.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/campaigns/costs/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/campaigns/builder.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/campaigns/hygiene.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/campaigns.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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"
    }
  }
}

Kanalregeln

POST /sites/:site_id/channel_rules.json Eine Kanalregel hinzufügen channel_rules_create

Berechtigung: sites.manage

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/channel_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/channel_rules/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/channel_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
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 '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/channel_rules/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
PATCH /sites/:site_id/channel_rules/:id.json Eine Kanalregel ändern channel_rules_update

Berechtigung: sites.manage

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/channel_rules/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/account.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {},
  "required": []
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/account.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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": []
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/live.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/live/wallboard.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl https://privatusanalytics.com/wallboard/:token.json
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}

Mitglieder

POST /workspaces/:workspace_id/invitations.json Personen per E-Mail einladen invitations_create

Berechtigung: members.manage

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/invitations.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/invitations/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/invitations.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/members/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/members.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/members/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/ownership_transfer.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/notes.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/notes/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/performance.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}

Rollen

POST /workspaces/:workspace_id/roles.json Eine eigene Rolle erstellen roles_create

Berechtigung: members.manage

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/roles.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/roles/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/roles.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/roles/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/scim/v2/Users.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
DELETE /scim/v2/Users/:id.json Die Bereitstellung eines Benutzers aufheben scim_users_delete

Berechtigung: public · Nur HTTP (kein MCP-Tool)

Beispiel
curl -X DELETE https://privatusanalytics.com/scim/v2/Users/:id.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /scim/v2/Users.json Bereitgestellte Benutzer auflisten scim_users_list

Berechtigung: public · Nur HTTP (kein MCP-Tool)

Beispiel
curl https://privatusanalytics.com/scim/v2/Users.json
Eingaben
{
  "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": []
}
Antwortdaten
{
  "type": "object"
}
GET /scim/v2/Users/:id.json Einen bereitgestellten Benutzer abrufen scim_users_get

Berechtigung: public · Nur HTTP (kein MCP-Tool)

Beispiel
curl https://privatusanalytics.com/scim/v2/Users/:id.json
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "type": "object"
}
PATCH /scim/v2/Users/:id.json Einen Benutzer aktualisieren (PATCH active, name) scim_users_update

Berechtigung: public · Nur HTTP (kein MCP-Tool)

Beispiel
curl -X PATCH https://privatusanalytics.com/scim/v2/Users/:id.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}

SSO

POST /workspaces/:workspace_id/sso/activate.json Eine getestete SSO-Konfiguration aktivieren sso_activate

Berechtigung: workspace.manage

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/activate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/deactivate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sso/scim_token.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /workspaces/:workspace_id/sso.json SSO-Einstellungen abrufen sso_get

Berechtigung: workspace.manage

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/sso.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/sso.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/segments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/segments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/segments.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/segments/preview.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /sites/:site_id/segments/:id.json Ein Segment abrufen segments_get

Berechtigung: analytics.read

Beispiel
curl https://privatusanalytics.com/sites/:site_id/segments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/segments/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl https://privatusanalytics.com/status/:slug/confirm/:token.json
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    },
    "slug": {
      "type": "string",
      "description": "Slug der Ressource"
    }
  },
  "required": [
    "token",
    "slug"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl https://privatusanalytics.com/status/:slug.json
Eingaben
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Slug der Ressource"
    }
  },
  "required": [
    "slug"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/status/:slug/subscribers.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/status/:slug/unsubscribe/:token.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    },
    "slug": {
      "type": "string",
      "description": "Slug der Ressource"
    }
  },
  "required": [
    "token",
    "slug"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/status_pages/:status_page_id/posts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
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 '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/status_pages/:status_page_id/posts.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
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 '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
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 '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/status_pages/:status_page_id/subscribers.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/status_pages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/status_pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/status_pages.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/status_pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/status_pages/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/search.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
POST /sites/:site_id/search/connections.json Eine Search-Console-Property oder eine Bing-Website verbinden search_connect

Berechtigung: sites.manage

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/search/connections.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/search/connections/:provider.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/search/properties.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
POST /sites/:site_id/search/sync.json Suchdaten jetzt importieren search_sync

Berechtigung: sites.manage

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/search/sync.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/plans.json
Eingaben
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "description": "Seite (ab 1)"
    },
    "per_page": {
      "type": "integer",
      "description": "Ergebnisse pro Seite (max. 100)"
    }
  },
  "required": []
}
Antwortdaten
{
  "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)

Beispiel
curl https://privatusanalytics.com/badge/:site_id.json
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /share/:token/breakdown/:dimension.json Häufigste Werte einer freigegebenen Dimension shares_breakdown

Berechtigung: public

Beispiel
curl https://privatusanalytics.com/share/:token/breakdown/:dimension.json
Eingaben
{
  "type": "object",
  "properties": {
    "dimension": {
      "type": "string",
      "description": "Dimension der Ressource"
    },
    "period": {
      "type": "string",
      "description": "Voreinstellung für den Datumsbereich (wird ignoriert, wenn der Link ihn sperrt)",
      "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"
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Ende des eigenen Bereichs, einschließlich"
    },
    "filters": {
      "type": "array",
      "items": {},
      "description": "Zusätzliche Filter, wenn der Link sie erlaubt",
      "default": []
    },
    "limit": {
      "type": "integer",
      "description": "Zeilen (max. 100)",
      "default": 10
    },
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    }
  },
  "required": [
    "dimension",
    "token"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /share/:token.json Übersicht des freigegebenen Dashboards für ein Freigabe-Token shares_overview

Berechtigung: public

Beispiel
curl https://privatusanalytics.com/share/:token.json
Eingaben
{
  "type": "object",
  "properties": {
    "period": {
      "type": "string",
      "description": "Voreinstellung für den Datumsbereich (wird ignoriert, wenn der Link ihn sperrt)",
      "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"
    },
    "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"
    },
    "filters": {
      "type": "array",
      "items": {},
      "description": "Zusätzliche Filter, wenn der Link sie erlaubt: [[\"dimension\",\"operator\",\"value\"], …]",
      "default": []
    },
    "interval": {
      "type": "string",
      "description": "Größe der Diagrammintervalle",
      "enum": [
        "auto",
        "minute",
        "hour",
        "day",
        "week",
        "month",
        "quarter",
        "year"
      ],
      "default": "auto"
    },
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    }
  },
  "required": [
    "token"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/tracking/ingest_key.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/tracking/ingest_key.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/tracking/verify.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /sites/:site_id/tracking/snippet.json Den Tracking-Snippet für gewählte Optionen erstellen tracking_snippet

Berechtigung: analytics.read

Beispiel
curl https://privatusanalytics.com/sites/:site_id/tracking/snippet.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}

Traffic-Regeln

POST /sites/:site_id/traffic_rules.json Eine Traffic-Regel hinzufügen traffic_rules_create

Berechtigung: sites.manage

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/traffic_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/traffic_rules/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/traffic_rules.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/traffic_rules/test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
PATCH /sites/:site_id/traffic_rules/:id.json Eine Traffic-Regel ändern traffic_rules_update

Berechtigung: sites.manage

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/traffic_rules/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/uptime/checks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/uptime/checks/:id/pause.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/uptime/checks/:id/resume.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/uptime/checks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/uptime/checks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl https://privatusanalytics.com/uptime/probes.json
Eingaben
{
  "type": "object",
  "properties": {},
  "required": []
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/uptime/probes/results.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/uptime.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/warehouses.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/warehouses/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/warehouses.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/warehouses/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/warehouses/:id/sync.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/warehouses/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:webhook_id/deliveries.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
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 '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/webhooks.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id/test.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/webhooks/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/changelog.json
Eingaben
{
  "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": []
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/changelog/:id.json
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/contact.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/newsletter/confirm.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Signiertes Token aus der Bestätigungs-E-Mail"
    }
  },
  "required": [
    "token"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/newsletter.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/newsletter/unsubscribe.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/pricing.json
Eingaben
{
  "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": []
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/status.json
Eingaben
{
  "type": "object",
  "properties": {
    "fresh": {
      "type": "boolean",
      "description": "Den 15-Sekunden-Cache überspringen und jetzt erneut prüfen",
      "default": false
    }
  },
  "required": []
}
Antwortdaten
{
  "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/header-checker.json Die Referrer-Policy und CSP einer Seite für Analysen prüfen tools_header_check

Berechtigung: public

Beispiel
curl https://privatusanalytics.com/tools/header-checker.json
Eingaben
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Zu prüfende öffentliche Seite (http oder https)",
      "examples": [
        "https://example.com"
      ]
    }
  },
  "required": [
    "url"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/tools/privacy-policy-generator.json
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/tools/qr-code.json
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/tools/tracker-scanner.json
Eingaben
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Zu scannende öffentliche Seite (http oder https)",
      "examples": [
        "https://example.com"
      ]
    }
  },
  "required": [
    "url"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/tools/utm-builder.json
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/waitlist.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/data_reset.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/filter_stats.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "type": "object"
}
GET /sites/:site_id/access.json Mitglieder auflisten und ob sie diese Website sehen können sites_access_list

Berechtigung: members.manage

Beispiel
curl https://privatusanalytics.com/sites/:site_id/access.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/access.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/favorite.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/favorite.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/setup.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "type": "object"
}
POST /transfers/:token/accept.json Eine Website-Übertragung in einen Ihrer Workspaces annehmen site_transfers_accept

Berechtigung: public

Beispiel
curl -X POST https://privatusanalytics.com/transfers/:token/accept.json \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/transfer.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/transfer.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "type": "object",
  "properties": {
    "site_id": {
      "type": "string",
      "description": "Website-ID, z. B. pa_7Q2K9XH3AB"
    }
  },
  "required": [
    "site_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/transfers/:token.json
Eingaben
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "Token der Ressource"
    }
  },
  "required": [
    "token"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/workspaces/:workspace_id/sites.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/sites.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/white_label.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/white_label.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:workspace_id/security.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "description": "Workspace-ID, z. B. ws_7Q2K9XH3AB"
    }
  },
  "required": [
    "workspace_id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:workspace_id/security.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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)

Beispiel
curl -X POST https://privatusanalytics.com/workspaces.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/workspaces/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "description": "Seite (ab 1)"
    },
    "per_page": {
      "type": "integer",
      "description": "Ergebnisse pro Seite (max. 100)"
    }
  },
  "required": []
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/workspaces/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id der Ressource"
    }
  },
  "required": [
    "id"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/workspaces/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/archive.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/goals.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X DELETE https://privatusanalytics.com/sites/:site_id/goals/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/duplicate.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/goals.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl https://privatusanalytics.com/sites/:site_id/goals/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN"
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X POST https://privatusanalytics.com/sites/:site_id/goals/:id/unarchive.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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

Beispiel
curl -X PATCH https://privatusanalytics.com/sites/:site_id/goals/:id.json \
  -H "Authorization: Bearer $PRIVATUS_TOKEN" \
  -H "Content-Type: application/json" -d '{…}'
Eingaben
{
  "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"
  ]
}
Antwortdaten
{
  "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"
    }
  }
}