API Decide
/decide évalue tous les feature flags d’un projet pour un distinct id, et renvoie la config d’enregistrement de session du projet. C’est ce que le SDK appelle à l’init et après identify()/reset() ; vous pouvez l’appeler directement partout où le SDK n’est pas utilisable.
POST https://ingest.kilden.io/decideContent-Type: application/jsonMême hôte que capture — les SDK n’ont besoin que d’un seul apiHost pour les événements et les flags.
{ "write_key": "YOUR_PUBLIC_WRITE_KEY", "distinct_id": "user_4821", "person_properties": { "plan": "enterprise" }}| Champ | Requis | Notes |
|---|---|---|
write_key |
oui | Clés publiques uniquement. Une clé secrète est rejetée avec 403 — elle ne doit jamais quitter votre backend, et /decide n’en a jamais besoin |
distinct_id |
oui | L’id pour lequel évaluer — le même que celui porté par vos événements |
person_properties |
non | Remplace les traits stockés de la personne pour cette évaluation uniquement. Rien n’est jamais écrit ; le pipeline d’événements reste la seule façon de modifier les personnes |
Limite du corps : 64 KiB. Le ciblage par cohorte est résolu côté serveur à partir de l’appartenance aux cohortes précalculée — il n’y a rien à envoyer.
{ "flags": { "new-checkout": true, "pricing-test": "variant-b", "sunset-legacy-ui": false }, "sessionRecording": { "enabled": true, "sampleRate": 0.1 }}flags— tous les flags du projet, évalués pourdistinct_id. Valeurs :true,false, ou la clé d’une variante (chaîne) pour les flags multivariés. Les flags inactifs reviennent àfalse, ce qui permet à un consommateur de distinguer “désactivé” de “flag inconnu”.sessionRecording— la config distante de session replay du projet : l’interrupteur d’activation, le kill switch et le taux d’échantillonnage que le SDK respecte.enabled: truesuffit à ce que le SDK charge le code d’enregistrement et enregistre (sauf opt-out local du site) ;{"enabled": false, "sampleRate": 0}quand l’enregistrement est désactivé.
L’évaluation est déterministe : la même clé de flag et le même distinct id produisent toujours la même valeur, à travers les requêtes, les répliques et les déploiements. Voir le bucketing déterministe.
Les erreurs sont en texte brut, pas en JSON :
| Statut | Signification |
|---|---|
400 |
invalid JSON body: … (y compris les corps de plus de 64 KiB) ou write_key and distinct_id are required |
401 |
unknown write_key |
403 |
secret keys must never leave your backend; call /decide with the project's public write key — ou origin not allowed (même vérification des origines autorisées que capture) |
405 |
Méthode autre que POST/OPTIONS |
curl -X POST https://ingest.kilden.io/decide \ -H 'Content-Type: application/json' \ -d '{"write_key": "pk_your_public_key", "distinct_id": "user_4821"}'Identique à capture : Access-Control-Allow-Origin: * sur chaque réponse ; preflight OPTIONS → 204 avec Access-Control-Allow-Methods: POST et Access-Control-Max-Age: 86400.
Fraîcheur
Section intitulée « Fraîcheur »Les changements de config des flags sont visibles en ~10 secondes ; les traits de personne et l’appartenance aux cohortes sont mis en cache ~30 secondes dans le chemin d’évaluation ; l’appartenance aux cohortes elle-même est matérialisée environ toutes les 10 minutes. Si un override de propriété doit s’appliquer immédiatement, passez-le dans person_properties.