Referencja

Konwencje i błędy

Zasady wspólne dla każdego endpointu, żebyś musiał nauczyć się ich tylko raz.

Paginacja

Endpointy list przyjmują parametry zapytania page (liczony od 1) i pageSize (1–100, domyślnie 30) i opakowują wyniki w jedną kopertę:

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

Enumy to łańcuchy w camelCase

Wartości enumów są zawsze łańcuchami w camelCase, nigdy liczbami: "pounds", "kilometers", "oneRepMax", "chest", "normal". Nieznane wartości enumów traktuj jako zgodne w przód: nowe mogą pojawić się bez zmiany wersji.

Jednostki

WielkośćJednostka
Ciężar (serie, rekordy)Funty
DystansMetry
Czas trwania serii / rekorduSekundy
Czas trwania treninguMinuty (durationMinutes)
Pomiary ciałaSystem jednostek z pola weightUnit wpisu (cale przy funtach, centymetry przy kilogramach)

Preferowane jednostki wyświetlania użytkownika znajdziesz pod /api/v1/user. Konwertuj na brzegu swojej aplikacji, nie w miejscu przechowywania danych.

Identyfikatory

  • Dane użytkownika (treningi, szablony, splity, pomiary): stałe GUID-y
  • Dane katalogowe (ćwiczenia, sprzęt): stałe liczbowe id, wspólne z aplikacją Gravl
  • Użytkownik: nieprzezroczyste łańcuchowe id, stałe we wszystkich endpointach i tokenach

Daty

Wszystkie znaczniki czasu są w UTC, ISO 8601 (2026-07-12T17:03:00Z). Filtry zakresów dat (startDate, endDate) są włączne.

Limity żądań

PowierzchniaLimitKluczowane po
/api/v1/*100 żądań / 15 minaplikacja + użytkownik
/oauth/*10 żądań / minadres IP

Przekroczenie limitu zwraca 429, a gdy to możliwe także nagłówek Retry-After. Wycofuj się wykładniczo i nie odpytuj w pętli; większość danych osobistych zmienia się w ludzkim tempie.

Błędy

StatusKiedyTreść
401Brakujący, źle sformułowany, wygasły lub unieważniony token; zawieszona aplikacjaPusta (nagłówek WWW-Authenticate)
403Poprawny token, brak scope’aProblem details z nazwą brakującego scope’a
404Zasób nie istnieje lub należy do innego użytkownikaProblem details
429Przekroczony limit żądańPusta; nagłówek Retry-After
400Błąd walidacji (zły rozmiar strony, źle sformułowane parametry)Problem details z błędami pól
Problem details (RFC 7807)
{
  "status": 403,
  "title": "Missing scope",
  "detail": "This authorization is missing the 'measurements:read' scope."
}

Zwróć uwagę na zasadę 404 dla cudzych danych: żądanie treningu innego użytkownika po id zwraca 404, a nie 403. API nigdy nie potwierdza istnienia danych, których nie możesz zobaczyć.