---
title: "Consulter les chiffres de fréquentation d’un site"
description: "Vues des pages du site en ligne par les visiteurs, avec le détail des pages, des sources, des pays et des appareils sur une période donnée."
canonical: "https://atelier201.com/docs/fr/api/analytics/get"
updated: "2026-11-06"
---

# Consulter les chiffres de fréquentation d’un site

Nécessite `sites:read`. Les chiffres de fréquentation sont null lorsque le propriétaire a désactivé le comptage des visiteurs. Seul le propriétaire peut modifier ce réglage dans le tableau de bord.

```http
GET https://api.atelier201.com/v1/sites/{site_id}/analytics
```

## Authorizations

- `Authorization` (bearer, in header, required)

## Path parameters

- `site_id` (`string`, required): L’identifiant du site ou son slug (l’adresse avant .atelier201.page).

## Query parameters

- `period` (`enum<string>`, one of: `today, 7d, 30d, 90d, 12m`): today, 7d, 30d, 90d ou 12m. Valeur par défaut : 30d.

## Response

**200**: Consulter les chiffres de fréquentation d’un site

- `data` (`object`, required)
- `data.period` (`enum<string>`, required, one of: `today, 7d, 30d, 90d, 12m`)
- `data.from` (`string`, required): Premier jour UTC couvert.
- `data.to` (`string`, required): Dernier jour UTC couvert : hier lorsque les données en temps réel d’aujourd’hui ne sont pas disponibles.
- `data.visitor_counting` (`boolean`, required): False lorsque le propriétaire a désactivé le comptage des visiteurs : les chiffres de fréquentation sont alors null.
- `data.totals` (`object`, required)
- `data.totals.views` (`number`, required)
- `data.totals.visitors` (`number,null`, required)
- `data.totals.visits` (`number,null`, required)
- `data.totals.bounce_rate` (`number,null`, required): Part des visites avec une seule vue de page, de 0 à 1.
- `data.totals.visit_seconds` (`number,null`, required)
- `data.totals.views_per_visit` (`number,null`, required)
- `data.previous` (`object | null`, required): Même nombre de jours sur la période précédente. Null s’il n’y a alors aucune donnée, ainsi que pour today.
- `data.previous.views` (`number`, required)
- `data.previous.visitors` (`number,null`, required)
- `data.previous.visits` (`number,null`, required)
- `data.previous.bounce_rate` (`number,null`, required): Part des visites avec une seule vue de page, de 0 à 1.
- `data.previous.visit_seconds` (`number,null`, required)
- `data.previous.views_per_visit` (`number,null`, required)
- `data.series` (`object[]`, required)
- `data.series.at` (`string`, required)
- `data.series.views` (`number`, required)
- `data.series.visitors` (`number,null`, required)
- `data.pages` (`object[]`, required)
- `data.pages.key` (`string`, required)
- `data.pages.views` (`number`, required)
- `data.pages.visitors` (`number,null`, required)
- `data.sources` (`object[]`, required): Origine des vues. Les clics effectués sur le site ne sont pas considérés comme des arrivées : leur total est donc inférieur au nombre total de vues.
- `data.sources.key` (`string`, required)
- `data.sources.views` (`number`, required)
- `data.sources.visitors` (`number,null`, required)
- `data.countries` (`object[]`, required)
- `data.countries.key` (`string`, required)
- `data.countries.views` (`number`, required)
- `data.countries.visitors` (`number,null`, required)
- `data.devices` (`object[]`, required)
- `data.devices.key` (`string`, required)
- `data.devices.views` (`number`, required)
- `data.devices.visitors` (`number,null`, required)
- `data.browsers` (`object[]`, required)
- `data.browsers.key` (`string`, required)
- `data.browsers.views` (`number`, required)
- `data.browsers.visitors` (`number,null`, required)
- `data.os` (`object[]`, required)
- `data.os.key` (`string`, required)
- `data.os.views` (`number`, required)
- `data.os.visitors` (`number,null`, required)
- `data.bot_views` (`number`, required): Vues générées par des robots, comptabilisées séparément de tous les chiffres ci-dessus.
- `data.updated_at` (`string,null`, required): Moment où les données de la dernière journée complète ont été agrégées. Null avant la première nuit.
- `request_id` (`string`, required)

```json
{
  "data": {
    "period": "today",
    "from": "<string>",
    "to": "<string>",
    "visitor_counting": true,
    "totals": {
      "views": 123.45,
      "visitors": null,
      "visits": null,
      "bounce_rate": null,
      "visit_seconds": null,
      "views_per_visit": null
    },
    "previous": {
      "views": 123.45,
      "visitors": null,
      "visits": null,
      "bounce_rate": null,
      "visit_seconds": null,
      "views_per_visit": null
    },
    "series": [
      {
        "at": "<string>",
        "views": 123.45,
        "visitors": null
      }
    ],
    "pages": [
      {
        "key": "<string>",
        "views": 123.45,
        "visitors": null
      }
    ],
    "sources": [
      {
        "key": "<string>",
        "views": 123.45,
        "visitors": null
      }
    ],
    "countries": [
      {
        "key": "<string>",
        "views": 123.45,
        "visitors": null
      }
    ],
    "devices": [
      {
        "key": "<string>",
        "views": 123.45,
        "visitors": null
      }
    ],
    "browsers": [
      {
        "key": "<string>",
        "views": 123.45,
        "visitors": null
      }
    ],
    "os": [
      {
        "key": "<string>",
        "views": 123.45,
        "visitors": null
      }
    ],
    "bot_views": 123.45,
    "updated_at": null
  },
  "request_id": "<string>"
}
```

**400**: Codes possibles : invalid_request, unknown_field, invalid_parameter, invalid_cursor

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**401**: Codes possibles : authentication_required, invalid_api_key, api_key_expired, api_key_revoked

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**402**: Codes possibles : insufficient_credits

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**403**: Codes possibles : insufficient_scope, feature_not_available, admin_required

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**404**: Codes possibles : resource_not_found

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**409**: Codes possibles : conflict, result_not_ready, idempotency_key_reused

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**410**: Codes possibles : result_expired

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**413**: Codes possibles : request_too_large

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**422**: Codes possibles : request_too_large_for_plan

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**429**: Codes possibles : rate_limited

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**500**: Codes possibles : internal_error

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**503**: Codes possibles : service_unavailable

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**Example request**

```bash
curl --request GET \
  --url 'https://api.atelier201.com/v1/sites/<site_id>/analytics' \
  --header 'Authorization: <api-key>'
```
