Référence de l'API

Accédez à vos données d'analytique par programmation avec l'API REST de Glyphex.

Authentification

Toutes les requêtes de l'API nécessitent un token Bearer. Créez une clé API dans les paramètres de votre site sous API keys.

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

Votre clé API complète n'est affichée qu'une seule fois, lors de sa création. Conservez-la en lieu sûr.

URL de base

https://glyphex.io/api/v1

Limites de débit

Les limites de débit sont appliquées par clé API sur une fenêtre glissante d'une heure.

PlanRequêtes par heure
Starter1 000
Growth2 000
Agency5 000

Chaque réponse inclut des en-têtes de limite de débit : X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset (horodatage Unix).

Format de réponse

Toutes les réponses réussies renvoient du JSON avec cette structure :

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

Les erreurs renvoient une structure similaire avec un objet error :

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

Paramètres de requête

Tous les endpoints acceptent ces paramètres de requête :

ParamètrePar défautDescription
range30dPlage de temps : 24h, 7d, 30d, 90d ou custom
start-Date de début pour une plage personnalisée (ISO 8601)
end-Date de fin pour une plage personnalisée (ISO 8601)
limit10Nombre de résultats (1-100). S'applique à pages, referrers, devices, geo, events, utm
country-Filtrer par code pays (p. ex. US, DE)
device-Filtrer par type d'appareil (desktop, mobile, tablet)
hostname-Filtrer par nom d'hôte
utm_source-Filtrer par source UTM

Exclusions de pays

Si vous avez configuré des pays exclus dans les paramètres de votre site, ces exclusions sont appliquées automatiquement à toutes les réponses de l'API. Vous n'avez pas besoin de passer de paramètres supplémentaires. L'API utilise la même liste d'exclusion que le tableau de bord et les rapports par e-mail.

Endpoints

GET/api/v1/stats/overview

Statistiques agrégées pour la période sélectionnée, avec comparaison à la période précédente.

Les valeurs de change sont des pourcentages. Une valeur de change null signifie que la période précédente était à zéro.

{
  "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

Nombres quotidiens de visiteurs et de pages vues pour la période sélectionnée.

{
  "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

Pages les plus visitées, classées par nombre de vues.

{
  "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

Principales sources de trafic par domaine référent.

{
  "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

Répartition des visiteurs par canal de trafic (direct, organic, social, referral, etc.).

{
  "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

Répartition des visiteurs par type d'appareil.

{
  "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

Répartition des visiteurs par pays.

{
  "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

Nombres d'événements personnalisés et de visiteurs uniques.

{
  "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

Répartition des visiteurs par source UTM.

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

Codes d'erreur

StatusCodeDescription
401unauthorizedEn-tête Authorization manquant ou invalide
401invalid_keyClé API introuvable ou format invalide
401key_disabledLa clé API a été désactivée
401key_expiredLa clé API a dépassé sa date d'expiration
429rate_limit_exceededTrop de requêtes. Vérifiez l'en-tête X-RateLimit-Reset
500internal_errorErreur serveur lors de la récupération des données

CORS

Tous les endpoints autorisent les requêtes cross-origin. Les réponses incluent Access-Control-Allow-Origin: *. Vous pouvez appeler l'API depuis du JavaScript côté navigateur, mais veillez à ne pas exposer votre clé API dans le code côté client.

Exemple : récupérer les principales pages depuis JavaScript

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 }, ...]

Besoin d'aide ?

Si vous avez des questions sur l'API, contactez-nous via