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.
| Plan | Requêtes par heure |
|---|---|
| Starter | 1 000 |
| Growth | 2 000 |
| Agency | 5 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ètre | Par défaut | Description |
|---|---|---|
range | 30d | Plage 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) |
limit | 10 | Nombre 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
/api/v1/stats/overviewStatistiques 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": "..." }
}/api/v1/stats/timeseriesNombres 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": "..." }
}/api/v1/stats/pagesPages 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": "..." }
}/api/v1/stats/referrersPrincipales 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": "..." }
}/api/v1/stats/channelsRé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": "..." }
}/api/v1/stats/devicesRé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": "..." }
}/api/v1/stats/geoRé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": "..." }
}/api/v1/stats/eventsNombres 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": "..." }
}/api/v1/stats/utmRé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
| Status | Code | Description |
|---|---|---|
| 401 | unauthorized | En-tête Authorization manquant ou invalide |
| 401 | invalid_key | Clé API introuvable ou format invalide |
| 401 | key_disabled | La clé API a été désactivée |
| 401 | key_expired | La clé API a dépassé sa date d'expiration |
| 429 | rate_limit_exceeded | Trop de requêtes. Vérifiez l'en-tête X-RateLimit-Reset |
| 500 | internal_error | Erreur 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