Riferimento

Convenzioni ed errori

Le regole valide per ogni endpoint, così le impari una volta sola.

Paginazione

Gli endpoint di elenco accettano page (a partire da 1) e pageSize (1–100, default 30) come parametri query e racchiudono i risultati in un unico envelope:

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

Gli enum sono stringhe camelCase

I valori enum sono sempre stringhe in camelCase, mai interi: "pounds", "kilometers", "oneRepMax", "chest", "normal". Tratta i valori enum sconosciuti come forward-compatible: possono comparirne di nuovi senza un cambio di versione.

Unità

MisuraUnità
Peso (serie, record)Libbre
DistanzaMetri
Durata di serie / recordSecondi
Durata dell'allenamentoMinuti (durationMinutes)
Misurazioni corporeeIl sistema di unità nel weightUnit della voce (pollici con le libbre, centimetri con i chilogrammi)

Le unità di visualizzazione preferite dall'utente sono su /api/v1/user: converti ai bordi della tua app, non nello storage.

Identificatori

  • Dati utente (allenamenti, template, split, misurazioni): GUID stabili
  • Dati di catalogo (esercizi, attrezzatura): id interi stabili condivisi con l'app Gravl
  • L'utente: un id stringa opaco, stabile su tutti gli endpoint e i token

Date

Tutti i timestamp sono UTC, ISO 8601 (2026-07-12T17:03:00Z). I filtri per intervallo di date (startDate, endDate) sono inclusivi.

Rate limit

SuperficieLimiteChiave
/api/v1/*100 richieste / 15 minapp + utente
/oauth/*10 richieste / minindirizzo IP

Superare un limite restituisce 429 con un header Retry-After quando disponibile. Fai backoff esponenziale; non fare polling: la maggior parte dei dati personali cambia a velocità umana.

Errori

StatusQuandoCorpo
401Token mancante, malformato, scaduto o revocato; app sospesaVuoto (challenge WWW-Authenticate)
403Token valido, scope mancanteProblem details con il nome dello scope mancante
404La risorsa non esiste, oppure appartiene a un altro utenteProblem details
429Rate limit superatoVuoto; header Retry-After
400Errore di validazione (page size errata, parametri malformati)Problem details con gli errori per campo
Problem details (RFC 7807)
{
  "status": 403,
  "title": "Missing scope",
  "detail": "This authorization is missing the 'measurements:read' scope."
}

Nota la regola del 404 per i dati altrui: richiedere per id l'allenamento di un altro utente restituisce 404, non 403. L'API non conferma mai l'esistenza di dati che non puoi vedere.