Authentification
Générez une clé API dans Admin → API (format obk_...). Scopez-la (clients:read, checkins:write, cron...). Utilisez le header Authorization: Bearer obk_.... Rate limit : 120 req/min par clé.
Clients
GET /api/v1/clients (liste, pagination, filtres), GET /api/v1/clients/:id, POST /api/v1/clients, PATCH /api/v1/clients/:id. Réponse JSON standardisée avec data, meta.
Bilans
GET /api/v1/clients/:id/checkins, POST /api/v1/clients/:id/checkins. Champs : poids, mensurations (JSON), faim, motivation, sommeil, pas, texte libre. Scope auto par orgId de la clé.
Nutrition
GET/POST /api/v1/clients/:id/nutrition. Structure : protéines, glucides, lipides, légumes, fruits, plaisirs, courses, compléments, méthodes, repas, notes.
Photos
GET/POST /api/v1/clients/:id/photos. Upload via multipart/form-data ou data-URL. Types : FACE, PROFIL, DOS. Vignettes auto-générées. Stockage Supabase bucket privé.
Santé
GET/POST /api/v1/clients/:id/health. Métriques : sleep_hours, sleep_score, hrv, resting_hr, vo2max, steps, weight, body_fat. Sources : manual, apple_health, oura, whoop, garmin.
Webhooks
Admin → Webhooks : URL, événements (client.created, checkin.submitted, badge.earned, nutrition.updated, call.overdue, client.weak_signal...), secret HMAC. Signature dans header x-optibilan-signature. Retry exponentiel (max 5x). Idempotence via externalId.