API-Referenz

Greifen Sie mit der Glyphex-REST-API programmatisch auf Ihre Analytics-Daten zu.

Authentifizierung

Alle API-Anfragen erfordern ein Bearer-Token. Erstellen Sie in Ihren Website-Einstellungen unter API keys einen API-Key.

curl https://glyphex.io/api/v1/stats/overview?range=30d \
  -H "Authorization: Bearer glx_your_api_key_here"

Ihr vollständiger API-Key wird nur einmal bei der Erstellung angezeigt. Bewahren Sie ihn sicher auf.

Base-URL

https://glyphex.io/api/v1

Rate-Limits

Rate-Limits gelten pro API-Key in einem gleitenden 1-Stunden-Fenster.

PlanAnfragen pro Stunde
Starter1.000
Growth2.000
Agency5.000

Jede Antwort enthält Rate-Limit-Header: X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset (Unix-Zeitstempel).

Antwortformat

Alle erfolgreichen Antworten liefern JSON mit dieser Struktur:

{
  "data": { ... },
  "meta": {
    "site_id": "your-site-id",
    "range": "30d",
    "generated_at": "2026-02-18T12:00:00.000Z"
  }
}

Fehler liefern eine ähnliche Struktur mit einem error-Objekt:

{
  "error": {
    "code": "unauthorized",
    "message": "Missing or invalid Authorization header. Use: Bearer glx_..."
  }
}

Query-Parameter

Alle Endpoints akzeptieren diese Query-Parameter:

ParameterStandardBeschreibung
range30dZeitraum: 24h, 7d, 30d, 90d oder custom
start-Startdatum für benutzerdefinierten Zeitraum (ISO 8601)
end-Enddatum für benutzerdefinierten Zeitraum (ISO 8601)
limit10Anzahl der Ergebnisse (1-100). Gilt für pages, referrers, devices, geo, events, utm
country-Nach Ländercode filtern (z. B. US, DE)
device-Nach Gerätetyp filtern (desktop, mobile, tablet)
hostname-Nach Hostname filtern
utm_source-Nach UTM-Quelle filtern

Länderausschlüsse

Wenn Sie in Ihren Website-Einstellungen ausgeschlossene Länder konfiguriert haben, werden diese Ausschlüsse automatisch auf alle API-Antworten angewendet. Sie müssen keine zusätzlichen Parameter übergeben. Die API nutzt dieselbe Ausschlussliste wie das Dashboard und die E-Mail-Berichte.

Endpoints

GET/api/v1/stats/overview

Aggregierte Statistiken für den ausgewählten Zeitraum mit Vergleich zum vorherigen Zeitraum.

Änderungswerte sind Prozentwerte. Ein null-Änderungswert bedeutet, dass der vorherige Zeitraum null war.

{
  "data": {
    "current": {
      "visitors": 1240,
      "pageviews": 3891,
      "sessions": 1580,
      "bounce_rate": 42,
      "avg_duration": 127
    },
    "previous": {
      "visitors": 1100,
      "pageviews": 3200,
      "sessions": 1400,
      "bounce_rate": 45,
      "avg_duration": 115
    },
    "change": {
      "visitors": 13,
      "pageviews": 22,
      "sessions": 13,
      "bounce_rate": -7,
      "avg_duration": 10
    }
  },
  "meta": { "site_id": "...", "range": "30d", "generated_at": "..." }
}
GET/api/v1/stats/timeseries

Tägliche Besucher- und Seitenaufrufzahlen für den ausgewählten Zeitraum.

{
  "data": [
    { "date": "2026-02-01", "visitors": 42, "pageviews": 128 },
    { "date": "2026-02-02", "visitors": 38, "pageviews": 104 }
  ],
  "meta": { "site_id": "...", "range": "30d", "generated_at": "..." }
}
GET/api/v1/stats/pages

Meistbesuchte Seiten, sortiert nach Aufrufen.

{
  "data": [
    { "pathname": "/", "title": "Home", "views": 520, "visitors": 380 },
    { "pathname": "/pricing", "title": "Pricing", "views": 210, "visitors": 180 }
  ],
  "meta": { "site_id": "...", "range": "30d", "limit": 10, "generated_at": "..." }
}
GET/api/v1/stats/referrers

Wichtigste Traffic-Quellen nach Referrer-Domain.

{
  "data": [
    { "referrer": "google.com", "views": 320, "visitors": 280 },
    { "referrer": "twitter.com", "views": 85, "visitors": 72 }
  ],
  "meta": { "site_id": "...", "range": "30d", "limit": 10, "generated_at": "..." }
}
GET/api/v1/stats/channels

Besucheraufschlüsselung nach Traffic-Kanal (direct, organic, social, referral usw.).

{
  "data": [
    { "channel": "Organic", "visitors": 580, "percentage": 47 },
    { "channel": "Direct", "visitors": 340, "percentage": 27 },
    { "channel": "Social", "visitors": 200, "percentage": 16 }
  ],
  "meta": { "site_id": "...", "range": "30d", "generated_at": "..." }
}
GET/api/v1/stats/devices

Besucheraufschlüsselung nach Gerätetyp.

{
  "data": [
    { "name": "Desktop", "visitors": 820 },
    { "name": "Mobile", "visitors": 350 },
    { "name": "Tablet", "visitors": 70 }
  ],
  "meta": { "site_id": "...", "range": "30d", "limit": 10, "generated_at": "..." }
}
GET/api/v1/stats/geo

Besucheraufschlüsselung nach Land.

{
  "data": [
    { "name": "United States", "visitors": 480 },
    { "name": "Germany", "visitors": 220 },
    { "name": "United Kingdom", "visitors": 180 }
  ],
  "meta": { "site_id": "...", "range": "30d", "limit": 10, "generated_at": "..." }
}
GET/api/v1/stats/events

Zählungen benutzerdefinierter Events und eindeutiger Besucher.

{
  "data": [
    { "name": "signup_click", "count": 142, "visitors": 130 },
    { "name": "download_pdf", "count": 87, "visitors": 65 }
  ],
  "meta": { "site_id": "...", "range": "30d", "limit": 10, "generated_at": "..." }
}
GET/api/v1/stats/utm

Besucheraufschlüsselung nach UTM-Quelle.

{
  "data": [
    { "name": "google", "visitors": 320 },
    { "name": "newsletter", "visitors": 85 }
  ],
  "meta": { "site_id": "...", "range": "30d", "limit": 10, "generated_at": "..." }
}

Fehlercodes

StatusCodeBeschreibung
401unauthorizedFehlender oder ungültiger Authorization-Header
401invalid_keyAPI-Key nicht gefunden oder ungültiges Format
401key_disabledAPI-Key wurde deaktiviert
401key_expiredAPI-Key hat sein Ablaufdatum überschritten
429rate_limit_exceededZu viele Anfragen. Prüfen Sie den X-RateLimit-Reset-Header
500internal_errorServerfehler beim Abrufen der Daten

CORS

Alle Endpoints erlauben Cross-Origin-Anfragen. Antworten enthalten Access-Control-Allow-Origin: *. Sie können die API aus browserseitigem JavaScript aufrufen, achten Sie aber darauf, Ihren API-Key nicht im Client-Code offenzulegen.

Beispiel: Top-Seiten aus JavaScript abrufen

const response = await fetch(
  "https://glyphex.io/api/v1/stats/pages?range=7d&limit=5",
  {
    headers: {
      "Authorization": "Bearer glx_your_api_key_here"
    }
  }
);

const { data, meta } = await response.json();

// data = [{ pathname: "/", title: "Home", views: 520, visitors: 380 }, ...]

Brauchen Sie Hilfe?

Wenn Sie Fragen zur API haben, kontaktieren Sie uns über