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:
| API | Authentifizierungsmethode | Header | Anwendungsfall |
|---|---|---|---|
| Externe API | API-Schlüssel | X-API-Key: YOUR_API_KEY | Server-seitige Integrationen, Einbettung von Analysen |
| Dashboard-APIs (Gespräche, Einstellungen, Onboarding, Teams, Benutzer) | Bearer JWT | Authorization: Bearer <token> | Dashboard- und interne Dienstvorgänge |
| Widgets | Keine (öffentlich) | N/A | Einbettbare Widgets mit Tracking-Code |
| Echtzeit-Daten | Keine (öffentlich) | N/A | Live-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
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /usage | API-Nutzungsstatistiken |
| GET | /websites | Alle Websites auflisten |
| GET | /websites/:id | Website-Details abrufen |
| GET | /analytics/:websiteId | Vollständige Analysezusammenfassung |
| GET | /analytics/:websiteId/visitors | Besucherdaten |
| GET | /analytics/:websiteId/pages | Seitenstatistiken |
| GET | /analytics/:websiteId/countries | Geografische Daten |
| GET | /analytics/:websiteId/technology | Technologie-Übersicht |
| GET | /heatmaps/:websiteId/pages | Heatmap-Seitendaten |
| GET | /replays/:websiteId/sessions | Session-Replay-Daten |
| GET | /errors/:websiteId/groups | Fehler-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.
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /:trackingCode/realtime | Live-Besucherzahl-Widget |
| GET | /:trackingCode/preview | 24-Stunden-Zeitstrahl-Widget |
| GET | /:trackingCode/recent | Lä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.
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /live/:trackingCode | Aktuelle Live-Besucherzahl |
| GET | /realtime/:websiteId | Echtzeit-Analysedaten |
| GET | /stats/:trackingCode | Besucher-Statistik-Zusammenfassung |
| GET | /:trackingCode/status | Tracking-Status-Überprüfung |
Weitere Informationen finden Sie unter Echtzeit-Daten.
Ratenlimits
API-Ratenlimits variieren je nach Plan:
| Plan | Anfragen pro Minute | Monatliches Limit |
|---|---|---|
| Free | 10 | 1.000 |
| Pro | 30 | 10.000 |
| Scale | 60 | 100.000 |
| Enterprise | 120 | 1.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
| Statuscode | Beschreibung |
|---|---|
| 200 | Erfolg |
| 400 | Ungültige Anfrage |
| 401 | Nicht autorisiert |
| 403 | Verboten |
| 404 | Nicht gefunden |
| 429 | Zu viele Anfragen |
| 500 | Interner Serverfehler |
{
"success": true,
"data": { ... },
"timestamp": "2026-02-07T12:00:00.000Z"
}{
"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 wirdvisitor.high_value- Wenn die Besucherpunktzahl 80+ erreichtevent.tracked- Wenn ein Ereignis nachverfolgt wirdgoal.completed- Wenn ein Ziel erreicht wirdvisitor.converted- Wenn ein Besucher konvertiert wird
Webhook-Payload
{
"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:
| Rolle | Stufe | Kann |
|---|---|---|
| owner | 4 | Vollzugriff einschließlich Abrechnung und Löschung |
| admin | 3 | Einstellungen, Integrationen, Teammitglieder verwalten |
| editor | 2 | Inhalte und grundlegende Einstellungen bearbeiten |
| viewer | 1 | Schreibgeschü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
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /conversations?team_id=:teamId | Gespräche für ein Team auflisten |
| GET | /conversations/:id | Gespräch mit Nachrichten abrufen |
| POST | /conversations | Neues Gespräch erstellen |
| PUT | /conversations/:id | Gespräch aktualisieren |
| DELETE | /conversations/:id | Gespräch löschen |
| POST | /conversations/:id/messages | Nachricht 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
{
"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.
{
"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
{
"title": "New conversation",
"team_id": "uuid"
}title(erforderlich) — nicht leerer Stringteam_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
{
"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.
{
"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
| Methode | Pfad | Min. Rolle | Beschreibung |
|---|---|---|---|
| PUT | /:websiteId/general | editor | Allgemeine Einstellungen aktualisieren |
| GET | /:websiteId/notifications | viewer | Benachrichtigungseinstellungen abrufen |
| PUT | /:websiteId/notifications | editor | Benachrichtigungseinstellungen aktualisieren |
| GET | /:websiteId/exclusions | viewer | IP- und Pfadausschlüsse abrufen |
| POST | /:websiteId/exclusions/ip | editor | IP-Ausschluss hinzufügen |
| DELETE | /:websiteId/exclusions/ip/:exclusionId | editor | IP-Ausschluss entfernen |
| POST | /:websiteId/exclusions/path | editor | Pfadausschluss hinzufügen |
| DELETE | /:websiteId/exclusions/path/:exclusionId | editor | Pfadausschluss entfernen |
| PUT | /:websiteId/revenue | admin | Umsatzeinstellungen aktualisieren |
| GET | /:websiteId/domains | viewer | Domänenkonfiguration abrufen |
| PUT | /:websiteId/domains | admin | Domäneneinstellungen aktualisieren |
| GET | /:websiteId/team-members | viewer | Teammitglieder auflisten |
| POST | /:websiteId/team-members | admin | Teammitglied einladen |
| PUT | /:websiteId/team-members/:memberId | admin | Mitgliederrolle aktualisieren |
| DELETE | /:websiteId/team-members/:memberId | admin | Teammitglied entfernen |
PUT /:websiteId/general
{
"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"]
}{
"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.
{
"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
{
"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
{
"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.
{
"revenue_provider": "stripe",
"revenue_currency": "USD"
}{
"success": true,
"data": {
"id": "uuid",
"revenue_provider": "stripe",
"revenue_currency": "USD",
"updated_at": "2026-02-07T12:00:00Z"
}
}GET /:websiteId/domains
{
"success": true,
"data": {
"primary_domain": "example.com",
"allowed_domains": ["example.com", "www.example.com"],
"verification_status": "verified"
}
}PUT /:websiteId/domains
Erfordert die Rolle admin.
{
"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.
{
"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.
{
"email": "[email protected]",
"role": "editor"
}email(erforderlich) — muss ein registrierter Zenovay-Benutzer seinrole(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.
{
"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
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /onboarding/progress | Onboarding-Fortschritt abrufen |
| POST | /onboarding/progress | Onboarding-Fortschritt speichern |
GET /onboarding/progress
Gibt den Onboarding-Status des Benutzers zurück. Falls kein Datensatz vorhanden ist, werden Standardwerte zurückgegeben.
{
"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.
{
"step": "install_tracking",
"data": { "welcomed": true, "website_added": true },
"completed": false
}step— wird in der Datenbank alscurrent_stepgespeichertdata— beliebiges JSON-Objekt zum Speichern des Schritt-spezifischen Zustandscompleted— wird standardmäßig auffalsegesetzt
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
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /teams/:id/permissions | Berechtigungen und Plan-Kontext abrufen |
| GET | /teams/:id/usage | Nutzungsstatistiken für den aktuellen Abrechnungszeitraum abrufen |
| GET | /teams/:id/members | Teammitglieder mit Profilen auflisten |
GET /teams/:id/permissions
Gibt die Rolle des authentifizierten Benutzers, den Plan des Teams, aktuelle Nutzungszahlen und berechnete Berechtigungsflags zurück.
{
"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).
{
"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.
{
"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
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /users/me | Aktuelles Benutzerprofil abrufen |
| PUT | /users/me | Profil aktualisieren (Name, E-Mail) |
| PUT | /users/me/email | E-Mail mit SSO-Überprüfung aktualisieren |
| DELETE | /users/me | Benutzerkonto löschen |
| GET | /users/me/usage | Nutzungsstatistiken abrufen |
| GET | /users/me/plan-limits | Plan-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.
{
"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.
- Externe API - Server-seitige Analyse mit API-Schlüssel-Authentifizierung
- Widgets - Vorgefertigte einbettbare Widgets
- Echtzeit-Daten - Live-Besucherdaten-Endpunkte
- Authentifizierung - API-Schlüsselverwaltung
- Ratenlimits - Ratenlimits verstehen