Skip to main content

URL de base

En local (voir Démarrage) :
Toutes les routes documentées dans cette section sont préfixées /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).
Une clé est liée à un 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 vague invalid 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…).

Tous les types d’erreur

Un principe systématique dans le code : une ressource d’un autre scope (projet, sujet) renvoie exactement la même erreur qu’une ressource inexistante. Jamais de fuite indiquant « ça existe, mais pas pour vous ».