Authorization: BearerWeb, mobile
The client grabs the JWT from the Supabase session (supabase.auth.getSession()) and sends it as Authorization: Bearer <jwt>. Offline HS256 validation, no Supabase round-trip. The workspace is resolved via X-Workspace-Id or app_metadata.active_workspace_id.
curl https://api.freelance-os.fr/v1/me \
-H "Authorization: Bearer $JWT"