Erste Schritte

Integrationen

Sprache

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.

Fragen oder Ideen?

Die Entwicklerplattform ist jung und wird von dem geprägt, was Leute damit bauen. Für die Registrierung von OAuth-Apps, Fragen oder Feature-Wünsche schreib an developers@gravl.ai.