Zum Hauptinhalt springen
12 Min. Lesedauer

API-Endpunkte

Zenovay stellt mehrere API-Endpunkt-Gruppen für den programmgesteuerten Zugriff auf Ihre Analysedaten zur Verfügung.

Authentifizierung

Alle API-Anfragen erfordern Authentifizierung. Die Methode hängt davon ab, welche API Sie verwenden:

APIAuthentifizierungsmethodeHeaderAnwendungsfall
Externe APIAPI-SchlüsselX-API-Key: YOUR_API_KEYServer-seitige Integrationen, Einbettung von Analysen
Dashboard-APIs (Gespräche, Einstellungen, Onboarding, Teams, Benutzer)Bearer JWTAuthorization: Bearer <token>Dashboard- und interne Dienstvorgänge
WidgetsKeine (öffentlich)N/AEinbettbare Widgets mit Tracking-Code
Echtzeit-DatenKeine (öffentlich)N/ALive-Besucherzahlen mit Tracking-Code

Halten Sie Ihren API-Schlüssel sicher. Zeigen Sie ihn niemals in Client-Code auf oder speichern Sie ihn in der Versionskontrolle. Erhalten Sie Ihren API-Schlüssel von Settings → Security → API keys im Dashboard.

Weitere Details zur API-Schlüsselverwaltung finden Sie unter Authentifizierung.

Externe API

Basis-URL: https://api.zenovay.com/api/external/v1

Server-seitige API für den Zugriff auf Analysedaten mit API-Schlüssel-Authentifizierung (X-API-Key-Header).

Verfügbare Endpunkte

MethodePfadBeschreibung
GET/usageAPI-Nutzungsstatistiken
GET/websitesAlle Websites auflisten
GET/websites/:idWebsite-Details abrufen
GET/analytics/:websiteIdVollständige Analysezusammenfassung
GET/analytics/:websiteId/visitorsBesucherdaten
GET/analytics/:websiteId/pagesSeitenstatistiken
GET/analytics/:websiteId/countriesGeografische Daten
GET/analytics/:websiteId/technologyTechnologie-Übersicht
GET/heatmaps/:websiteId/pagesHeatmap-Seitendaten
GET/replays/:websiteId/sessionsSession-Replay-Daten
GET/errors/:websiteId/groupsFehler-Tracking-Gruppen

Jeder Endpunkt verfügt über eine dedizierte Referenzseite mit Parametern, Response-Schemata, TypeScript-Schnittstellen und Code-Beispielen in cURL, JavaScript, Python und TypeScript.

Siehe auch Externe-API-Übersicht für eine grundlegende Einführung.

Einbettbare Widgets

Basis-URL: https://api.zenovay.com/widgets

Vorgefertigte Widgets, die keine Authentifizierung erfordern. Verwenden Sie Ihren Tracking-Code zur Identifizierung der Website.

MethodePfadBeschreibung
GET/:trackingCode/realtimeLive-Besucherzahl-Widget
GET/:trackingCode/preview24-Stunden-Zeitstrahl-Widget
GET/:trackingCode/recentLänderverteilungs-Widget

Weitere Informationen finden Sie unter Widgets.

Echtzeit-Daten

Basis-URL: https://api.zenovay.com/e

Öffentliche JSON-Endpunkte für Live-Statistiken. Keine Authentifizierung erforderlich.

MethodePfadBeschreibung
GET/live/:trackingCodeAktuelle Live-Besucherzahl
GET/realtime/:websiteIdEchtzeit-Analysedaten
GET/stats/:trackingCodeBesucher-Statistik-Zusammenfassung
GET/:trackingCode/statusTracking-Status-Überprüfung

Weitere Informationen finden Sie unter Echtzeit-Daten.

Ratenlimits

API-Ratenlimits variieren je nach Plan:

PlanAnfragen pro MinuteMonatliches Limit
Free101.000
Pro3010.000
Scale60100.000
Enterprise1201.000.000

Ratelimit-Header sind in allen Responses enthalten:

X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1642771200

Der Wert X-RateLimit-Limit spiegelt das Limit pro Minute Ihres Plans wider (z. B. 10 für Free, 30 für Pro, 60 für Scale, 120 für Enterprise).

Weitere Informationen finden Sie unter Ratenlimits.

Fehlercodes

StatuscodeBeschreibung
200Erfolg
400Ungültige Anfrage
401Nicht autorisiert
403Verboten
404Nicht gefunden
429Zu viele Anfragen
500Interner Serverfehler
Success Response EnvelopeJSON
{
"success": true,
"data": { ... },
"timestamp": "2026-02-07T12:00:00.000Z"
}
Error Response EnvelopeJSON
{
"success": false,
"error": {
  "message": "The provided API key is missing or invalid",
  "code": "UNAUTHORIZED",
  "timestamp": "2026-02-07T12:00:00.000Z"
}
}

Webhooks

Richten Sie Webhooks ein, um Echtzeit-Benachrichtigungen zu erhalten:

Verfügbare Ereignisse

  • visitor.identified - Wenn ein Besucher identifiziert wird
  • visitor.high_value - Wenn die Besucherpunktzahl 80+ erreicht
  • event.tracked - Wenn ein Ereignis nachverfolgt wird
  • goal.completed - Wenn ein Ziel erreicht wird
  • visitor.converted - Wenn ein Besucher konvertiert wird

Webhook-Payload

Webhook PayloadJSON
{
"event": "visitor.high_value",
"timestamp": "2025-01-20T15:30:00Z",
"data": {
  "visitor_id": "vis_abc123",
  "score": 92,
  "current_page": "/pricing",
  "time_on_site": 420
}
}

Dashboard-API-Übersicht

Die folgenden API-Gruppen unterstützen das Zenovay-Dashboard. Alle Endpunkte erfordern ein Bearer-JWT-Token im Header Authorization. Responses verwenden ein Standardformat:

{ "success": true, "data": { ... }, "timestamp": "..." }

Rollenbasierte Berechtigungen

Website-Settings-Endpunkte erzwingen rollenbasierten Zugriff. Rollen in Reihenfolge der Berechtigungsstufe:

RolleStufeKann
owner4Vollzugriff einschließlich Abrechnung und Löschung
admin3Einstellungen, Integrationen, Teammitglieder verwalten
editor2Inhalte und grundlegende Einstellungen bearbeiten
viewer1Schreibgeschützter Zugriff

Gespräche-API

Basis-URL: https://api.zenovay.com/api/conversations

Auth: Bearer JWT erforderlich. Teamzugehörigkeit wird für alle Anfragen überprüft.

CRUD-Vorgänge für KI-gestützte Gespräche innerhalb von Teams. Der Query-Parameter team_id wird standardmäßig auf die Organisation des authentifizierten Benutzers gesetzt, falls nicht angegeben.

Endpunkte

MethodePfadBeschreibung
GET/conversations?team_id=:teamIdGespräche für ein Team auflisten
GET/conversations/:idGespräch mit Nachrichten abrufen
POST/conversationsNeues Gespräch erstellen
PUT/conversations/:idGespräch aktualisieren
DELETE/conversations/:idGespräch löschen
POST/conversations/:id/messagesNachricht hinzufügen

GET /conversations

Gibt Gespräche ohne Nachrichteninhalte zur Verbesserung der Leistung zurück.

Query-Parameter:

  • team_id (optional) — wird standardmäßig auf die Organisation des Benutzers gesetzt
Response 200JSON
{
"success": true,
"data": [
  {
    "id": "uuid",
    "team_id": "uuid",
    "title": "Analytics Q3 review",
    "created_at": "2026-02-01T10:00:00Z",
    "updated_at": "2026-02-07T14:30:00Z"
  }
]
}

GET /conversations/:id

Gibt das vollständige Gespräch einschließlich des Message-Arrays zurück.

Response 200JSON
{
"success": true,
"data": {
  "id": "uuid",
  "team_id": "uuid",
  "title": "Analytics Q3 review",
  "messages": [
    { "role": "user", "content": "Show top pages", "timestamp": "2026-02-07T14:30:00Z" },
    { "role": "assistant", "content": "Here are your top pages...", "timestamp": "2026-02-07T14:30:01Z" }
  ],
  "created_at": "2026-02-01T10:00:00Z",
  "updated_at": "2026-02-07T14:30:01Z"
}
}

POST /conversations

Request BodyJSON
{
"title": "New conversation",
"team_id": "uuid"
}
  • title (erforderlich) — nicht leerer String
  • team_id (optional) — wird standardmäßig auf die Organisation des Benutzers gesetzt

Response: 201 mit dem erstellten Gespräch (enthält leeres messages: []).

PUT /conversations/:id

Request BodyJSON
{
"title": "Updated title",
"messages": [...]
}

Beide Felder sind optional. Akzeptiert Teilaktualisierungen.

DELETE /conversations/:id

Response: 200 mit { "deleted": true }.

POST /conversations/:id/messages

Fügt eine Nachricht zum Gespräch hinzu. Der Server fügt jedem Nachricht einen timestamp hinzu.

Request BodyJSON
{
"role": "user",
"content": "What were last week's top referrers?"
}
  • role (erforderlich) — Nachrichtenrolle (z. B. "user", "assistant")
  • content (erforderlich) — Nachrichtentext

Response: 201 mit dem vollständig aktualisierten Gespräch einschließlich aller Nachrichten.


Website-Einstellungen-API

Basis-URL: https://api.zenovay.com/api/websites

Auth: Bearer JWT erforderlich. Jeder Endpunkt erzwingt eine Mindestrolle.

Verwalten Sie die Website-Konfiguration einschließlich allgemeiner Einstellungen, Benachrichtigungen, Datenverkehrsausschlüsse, Umsatzverfolgung, Domänen und Teammitglieder. Alle Pfade werden durch :websiteId begrenzt.

Endpunkte

MethodePfadMin. RolleBeschreibung
PUT/:websiteId/generaleditorAllgemeine Einstellungen aktualisieren
GET/:websiteId/notificationsviewerBenachrichtigungseinstellungen abrufen
PUT/:websiteId/notificationseditorBenachrichtigungseinstellungen aktualisieren
GET/:websiteId/exclusionsviewerIP- und Pfadausschlüsse abrufen
POST/:websiteId/exclusions/ipeditorIP-Ausschluss hinzufügen
DELETE/:websiteId/exclusions/ip/:exclusionIdeditorIP-Ausschluss entfernen
POST/:websiteId/exclusions/patheditorPfadausschluss hinzufügen
DELETE/:websiteId/exclusions/path/:exclusionIdeditorPfadausschluss entfernen
PUT/:websiteId/revenueadminUmsatzeinstellungen aktualisieren
GET/:websiteId/domainsviewerDomänenkonfiguration abrufen
PUT/:websiteId/domainsadminDomäneneinstellungen aktualisieren
GET/:websiteId/team-membersviewerTeammitglieder auflisten
POST/:websiteId/team-membersadminTeammitglied einladen
PUT/:websiteId/team-members/:memberIdadminMitgliederrolle aktualisieren
DELETE/:websiteId/team-members/:memberIdadminTeammitglied entfernen

PUT /:websiteId/general

Request Body (all fields optional)JSON
{
"domain": "example.com",
"name": "My Website",
"timezone": "America/New_York",
"primary_color": "#4F46E5",
"kpi_goal": 10000,
"public_dashboard": true,
"allowed_domains": ["example.com", "www.example.com"]
}
Response 200JSON
{
"success": true,
"data": {
  "id": "uuid",
  "domain": "example.com",
  "name": "My Website",
  "timezone": "America/New_York",
  "primary_color": "#4F46E5",
  "kpi_goal": 10000,
  "public_dashboard": true,
  "allowed_domains": ["example.com", "www.example.com"],
  "updated_at": "2026-02-07T12:00:00Z"
}
}

GET /:websiteId/notifications

Gibt Benachrichtigungseinstellungen zurück. Falls keine festgelegt wurden, wird ein Standardobjekt mit nur dem website_id zurückgegeben.

PUT /:websiteId/notifications

Akzeptiert alle Benachrichtigungseinstellungsfelder. Verwendet ein Upsert-Muster: erstellt den Datensatz beim ersten Aufruf, aktualisiert ihn bei nachfolgenden Aufrufen.

GET /:websiteId/exclusions

Gibt sowohl IP- als auch Pfadausschlüsse in einer einzigen Response zurück.

Response 200JSON
{
"success": true,
"data": {
  "ip_exclusions": [
    { "id": "uuid", "website_id": "uuid", "ip_address": "192.168.1.1", "description": "Office IP", "created_at": "..." }
  ],
  "path_exclusions": [
    { "id": "uuid", "website_id": "uuid", "path_pattern": "/admin/*", "description": "Admin pages", "created_at": "..." }
  ]
}
}

POST /:websiteId/exclusions/ip

Request BodyJSON
{
"ip_address": "192.168.1.1",
"description": "Office IP"
}
  • ip_address (erforderlich)
  • description (optional)

Response: 201. Gibt 409 zurück, wenn die IP bereits ausgeschlossen ist.

POST /:websiteId/exclusions/path

Request BodyJSON
{
"path_pattern": "/admin/*",
"description": "Admin pages"
}
  • path_pattern (erforderlich)
  • description (optional)

Response: 201. Gibt 409 zurück, wenn das Pfadmuster bereits ausgeschlossen ist.

PUT /:websiteId/revenue

Erfordert die Rolle admin.

Request Body (both optional)JSON
{
"revenue_provider": "stripe",
"revenue_currency": "USD"
}
Response 200JSON
{
"success": true,
"data": {
  "id": "uuid",
  "revenue_provider": "stripe",
  "revenue_currency": "USD",
  "updated_at": "2026-02-07T12:00:00Z"
}
}

GET /:websiteId/domains

Response 200JSON
{
"success": true,
"data": {
  "primary_domain": "example.com",
  "allowed_domains": ["example.com", "www.example.com"],
  "verification_status": "verified"
}
}

PUT /:websiteId/domains

Erfordert die Rolle admin.

Request Body (both optional)JSON
{
"domain": "example.com",
"allowed_domains": ["example.com", "www.example.com"]
}

allowed_domains muss ein Array sein, falls angegeben.

GET /:websiteId/team-members

Gibt Teammitglieder mit angereicherten Benutzerprofildaten zurück.

Response 200JSON
{
"success": true,
"data": [
  {
    "id": "membership_uuid",
    "user_id": "user_uuid",
    "role": "admin",
    "created_at": "2026-01-15T10:00:00Z",
    "deactivated_at": null,
    "user": {
      "id": "user_uuid",
      "email": "[email protected]",
      "full_name": "Jane Doe",
      "avatar_url": "https://..."
    }
  }
]
}

POST /:websiteId/team-members

Laden Sie einen Benutzer per E-Mail ein. Erfordert die Rolle admin.

Request BodyJSON
{
"email": "[email protected]",
"role": "editor"
}
  • email (erforderlich) — muss ein registrierter Zenovay-Benutzer sein
  • role (optional) — wird standardmäßig auf "viewer" gesetzt. Muss einer der folgenden sein: owner, admin, editor, viewer

Response: 201. Gibt 404 zurück, wenn die E-Mail nicht gefunden wird, 409 falls bereits Mitglied.

PUT /:websiteId/team-members/:memberId

Aktualisieren Sie die Rolle eines Mitglieds. Erfordert die Rolle admin.

Request BodyJSON
{
"role": "admin"
}
  • role (erforderlich) — muss einer der folgenden sein: owner, admin, editor, viewer

DELETE /:websiteId/team-members/:memberId

Entfernt ein Teammitglied (Soft-Delete). Erfordert die Rolle admin.

Response: 200 mit { "deleted": true }.


Onboarding-API

Basis-URL: https://api.zenovay.com/api/onboarding

Auth: Bearer JWT erforderlich. Benutzerbezogen (keine Team- oder Rollenprüfung).

Verfolgen Sie den Fortschritt des Benutzer-Onboardings. Jeder Benutzer hat einen einzigen Onboarding-Datensatz, der über Sitzungen hinweg erhalten bleibt.

Endpunkte

MethodePfadBeschreibung
GET/onboarding/progressOnboarding-Fortschritt abrufen
POST/onboarding/progressOnboarding-Fortschritt speichern

GET /onboarding/progress

Gibt den Onboarding-Status des Benutzers zurück. Falls kein Datensatz vorhanden ist, werden Standardwerte zurückgegeben.

Response 200JSON
{
"success": true,
"data": {
  "user_id": "uuid",
  "current_step": "add_website",
  "completed": false,
  "data": { "welcomed": true },
  "created_at": "2026-02-01T10:00:00Z",
  "updated_at": "2026-02-07T14:00:00Z"
}
}

POST /onboarding/progress

Verwendet ein Upsert-Muster: erstellt den Datensatz beim ersten Aufruf, aktualisiert ihn bei nachfolgenden Aufrufen.

Request Body (all fields optional)JSON
{
"step": "install_tracking",
"data": { "welcomed": true, "website_added": true },
"completed": false
}
  • step — wird in der Datenbank als current_step gespeichert
  • data — beliebiges JSON-Objekt zum Speichern des Schritt-spezifischen Zustands
  • completed — wird standardmäßig auf false gesetzt

Teams-API

Basis-URL: https://api.zenovay.com/api/teams

Auth: Bearer JWT erforderlich. Teamzugehörigkeit wird überprüft (jedes aktive Mitglied kann auf alle zugreifen).

Schreibgeschützte Team-Kontext-Endpunkte für Berechtigungen, Nutzungsstatistiken und Mitgliederlisten. Verwenden Sie für Team-Management-Aktionen (Einladung, Rollenänderungen, Entfernung) die Endpunkte Website-Einstellungen-API für Teammitglieder.

Endpunkte

MethodePfadBeschreibung
GET/teams/:id/permissionsBerechtigungen und Plan-Kontext abrufen
GET/teams/:id/usageNutzungsstatistiken für den aktuellen Abrechnungszeitraum abrufen
GET/teams/:id/membersTeammitglieder mit Profilen auflisten

GET /teams/:id/permissions

Gibt die Rolle des authentifizierten Benutzers, den Plan des Teams, aktuelle Nutzungszahlen und berechnete Berechtigungsflags zurück.

Response 200JSON
{
"success": true,
"data": {
  "team_id": "uuid",
  "role": "admin",
  "plan": "Pro",
  "plan_limits": {
    "maxWebsites": 5,
    "maxTeamMembers": 5,
    "eventsPerMonth": 10000,
    "dataRetentionDays": 730
  },
  "current_usage": {
    "websites": 3,
    "team_members": 5
  },
  "permissions": {
    "can_manage_billing": false,
    "can_manage_team": true,
    "can_edit_settings": true,
    "can_view": true
  }
}
}

GET /teams/:id/usage

Gibt Nutzungsstatistiken für den aktuellen Abrechnungszeitraum zurück (Monat bis heute).

Response 200JSON
{
"success": true,
"data": {
  "team_id": "uuid",
  "plan": "Pro",
  "period": {
    "start": "2026-02-01T00:00:00.000Z",
    "end": "2026-02-07T12:00:00.000Z"
  },
  "usage": {
    "events": 4521,
    "events_limit": 10000,
    "websites": 3,
    "websites_limit": 10,
    "team_members": 5,
    "team_members_limit": 10
  }
}
}

GET /teams/:id/members

Gibt Teammitglieder mit angereicherten Benutzerprofildaten zurück.

Response 200JSON
{
"success": true,
"data": [
  {
    "id": "membership_uuid",
    "user_id": "user_uuid",
    "role": "admin",
    "created_at": "2026-01-15T10:00:00Z",
    "user": {
      "id": "user_uuid",
      "email": "[email protected]",
      "full_name": "Jane Doe",
      "name": "Jane",
      "avatar_url": "https://..."
    }
  }
]
}

Benutzerprofil-API

Basis-URL: https://api.zenovay.com/api/users

Auth: Bearer JWT erforderlich. Benutzerbezogen (nur eigenes Profil).

Verwalten Sie das Profil und die E-Mail-Adresse des authentifizierten Benutzers.

Endpunkte

MethodePfadBeschreibung
GET/users/meAktuelles Benutzerprofil abrufen
PUT/users/meProfil aktualisieren (Name, E-Mail)
PUT/users/me/emailE-Mail mit SSO-Überprüfung aktualisieren
DELETE/users/meBenutzerkonto löschen
GET/users/me/usageNutzungsstatistiken abrufen
GET/users/me/plan-limitsPlan-Limits und Funktionen abrufen

PUT /users/me/email

Dedizierter Endpunkt für E-Mail-Änderungen mit SSO-Provider-Erkennung. Wenn sich der Benutzer über einen OAuth-Provider (Google, GitHub usw.) registriert hat, wird die Anfrage mit einer Nachricht abgelehnt, um die E-Mail stattdessen über diesen Provider zu aktualisieren.

Request BodyJSON
{
"email": "[email protected]"
}
  • email (erforderlich) — muss eine gültige E-Mail sein, die sich von der aktuellen unterscheidet

Response: 200 mit dem aktualisierten Benutzerdatensatz. Gibt 400 zurück, wenn der Benutzer ein SSO-Konto ist oder die E-Mail ungültig/unverändert ist.

Nächste Schritte

Beginnen Sie mit der Integration der Zenovay-API anhand der folgenden Guides.

War diese Seite hilfreich?