Aller au contenu

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/decide
Content-Type: application/json

Mê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 }
}
  • flagstous les flags du projet, évalués pour distinct_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: true suffit à 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
Terminal window
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 OPTIONS204 avec Access-Control-Allow-Methods: POST et Access-Control-Max-Age: 86400.

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.