# Statistik

```
GET /v1/publisher/calendars/{calendar_id}/stats
```

Braucht den Scope `publisher:stats`.

```bash
curl https://api.kalender-sync.de/v1/publisher/calendars/$KS_CAL/stats -H "Authorization: Bearer $KS_KEY"
```

```json
{
  "as_of": "2026-11-20T08:00:00.000Z",
  "subscribers": {
    "total": 97,
    "feed": { "total": 97, "by_app": { "google": 51, "apple": 30, "outlook": 12, "other": 4 } },
    "live": { "total": 0, "by_provider": { "google": 0, "microsoft": 0, "icloud": 0 } }
  },
  "direct_feed_clients_7d": null,
  "subscribe_clicks_30d": { "total": 160, "by_app": { "google": 70, "apple": 55, "outlook": 25, "other": 10 } },
  "plan": {
    "plan": "basic",
    "live_calendars": { "used": 1, "limit": 1 },
    "active_subscribers": { "used": 97, "limit": 500 },
    "over_calendar_limit": false,
    "over_subscriber_limit": false
  }
}
```

| Feld | Bedeutung |
|---|---|
| `subscribers.feed.total` | Aktive Abonnenten dieses Kalenders: Kalender-Apps, die den Feed in den letzten **14 Tagen** abgerufen haben. |
| `subscribers.feed.by_app` | Aufgeteilt nach `google`, `apple`, `outlook` (Outlook.com, Microsoft 365 und Outlook Desktop zusammen) und `other`. |
| `subscribers.live` | Für eine spätere Funktion reserviert, derzeit immer `0`. |
| `subscribers.total` | Summe; derzeit gleich `feed.total`. |
| `direct_feed_clients_7d` | Für eine spätere Schätzung reserviert, derzeit immer `null`. |
| `subscribe_clicks_30d` | Jede App-Auswahl auf der Abo-Seite und im Button in den letzten 30 Tagen, egal ob danach abonniert wurde. |
| `plan` | Dein **Konto** im Vergleich zum Tarif (über alle Live-Kalender). `plan.plan` ist `free`, `basic` oder `business` (auf der Website: Professional). |

## Was gezählt wird und was nicht

- Gezählt werden Abos über die **Abo-Seite** und den **Button**. Jedes bekommt einen eigenen Feed-Link, dessen Abrufe wir zählen.
- Nicht gezählt werden Abos über die allgemeine `feed_url` oder die `subscribe_links`, wenn du sie selbst einbaust. Diese funktionieren genauso, lassen sich aber nicht einzeln zählen.
- Wir speichern keine IP-Adressen, keine User-Agents und nichts über die Personen hinter einem Abo.
- Sandbox-Kalender haben eine eigene Statistik, zählen aber nicht für `plan.active_subscribers`.

## Limit erreicht

`over_subscriber_limit: true` heißt: Dein Konto hat mehr aktive Abonnenten, als dein Tarif umfasst. **Es läuft trotzdem alles weiter.** Du bekommst zusätzlich eine E-Mail (höchstens alle 30 Tage). → [Tarife und Limits](https://docs.kalender-sync.de/abo-kalender/tarife/)

`over_calendar_limit: true` heißt: Dein Konto hat mehr Live-Kalender, als der Tarif umfasst, etwa nach einem Downgrade. Feeds laufen weiter, Schreibzugriffe antworten mit [`plan_required`](https://docs.kalender-sync.de/api/errors/plan_required/).