Referenz

Konventionen & Fehler

Die Regeln, die für jeden Endpoint gelten; du musst sie nur einmal lernen.

Pagination

Listen-Endpoints nehmen page (1-basiert) und pageSize (1–100, Standard 30) als Query-Parameter und verpacken Ergebnisse in einem einheitlichen Envelope:

{
  "items": [ … ],
  "pageNumber": 2,
  "totalPages": 9,
  "totalCount": 174,
  "hasPreviousPage": true,
  "hasNextPage": true
}

Enums sind camelCase-Strings

Enum-Werte sind immer Strings in camelCase, niemals Integer: "pounds", "kilometers", "oneRepMax", "chest", "normal". Behandle unbekannte Enum-Werte als vorwärtskompatibel: neue können ohne Versionssprung auftauchen.

Einheiten

MessgrößeEinheit
Gewicht (Sätze, Rekorde)Pfund
DistanzMeter
Satz-/Rekord-DauerSekunden
Workout-DauerMinuten (durationMinutes)
KörpermessungenDas Einheitensystem aus dem weightUnit des Eintrags (Inches bei Pfund, Zentimeter bei Kilogramm)

Die bevorzugten Anzeigeeinheiten des Nutzers stehen auf /api/v1/user. Konvertiere am Rand deiner App, nicht in der Datenhaltung.

Identifikatoren

  • Nutzerdaten (Workouts, Vorlagen, Splits, Messungen): stabile GUIDs
  • Katalogdaten (Übungen, Equipment): stabile Integer-IDs, dieselben wie in der Gravl-App
  • Der Nutzer: eine opake String-ID, stabil über alle Endpoints und Tokens hinweg

Datumsangaben

Alle Zeitstempel sind UTC, ISO 8601 (2026-07-12T17:03:00Z). Datumsbereichsfilter (startDate, endDate) sind inklusiv.

Rate Limits

BereichLimitBezugsgröße
/api/v1/*100 Requests / 15 MinApp + Nutzer
/oauth/*10 Requests / MinIP-Adresse

Beim Überschreiten eines Limits kommt 429 zurück, wenn möglich mit einem Retry-After-Header. Warte exponentiell länger und verzichte auf Polling; die meisten persönlichen Daten ändern sich in menschlichem Tempo.

Fehler

StatusWannBody
401Fehlendes, fehlerhaftes, abgelaufenes oder widerrufenes Token; gesperrte AppLeer (WWW-Authenticate-Challenge)
403Gültiges Token, fehlender ScopeProblem Details mit dem fehlenden Scope benannt
404Ressource existiert nicht oder gehört einem anderen NutzerProblem Details
429Rate Limit erreichtLeer; Retry-After-Header
400Validierungsfehler (falsche Seitengröße, fehlerhafte Parameter)Problem Details mit Feld-Fehlern
Problem Details (RFC 7807)
{
  "status": 403,
  "title": "Missing scope",
  "detail": "This authorization is missing the 'measurements:read' scope."
}

Beachte die 404-Regel für fremde Daten: das Anfragen des Workouts eines anderen Nutzers per ID gibt 404 zurück, nicht 403. Die API bestätigt niemals, dass Daten existieren, die du nicht sehen darfst.