URL de base
En local (voir Démarrage) :/v1/,
sauf la gateway (/gateway/v1/*, voir sa page dédiée)
et /health.
Authentification
string
requis
Bearer hk_.... Obligatoire sur tout endpoint /v1/* (sauf
/v1/keys et /v1/orgs, qui ont leur propre logique d’auth) et sur
/gateway/v1/*, quand HAKI_AUTH_REQUIRED=true (défaut).org_id + un project_id. Toute requête
dont le project_id (dans le corps ou la query) diffère de celui de la
clé est refusée avec 403 forbidden_scope — message générique, sans
jamais révéler l’existence d’autres projets.
HAKI_AUTH_REQUIRED=false = mode dev ouvert (jamais en production, un
avertissement est loggué au démarrage de l’API). Voir
Sécurité pour le modèle complet (Row-Level Security,
Policy Engine, bootstrap de clés).
Format d’erreur
Toutes les erreurs métier partagent la même forme, jamais un vagueinvalid request :
string
requis
Un identifiant stable et machine-readable — voir le tableau ci-dessous.
string
requis
Message lisible par un humain.
string | null
Le champ fautif, si identifiable (
events.0.subject_id, budget_tokens…).
