API de decide
/decide evalúa todos los feature flags de un proyecto para un distinct id, y devuelve la config de grabación de sesiones del proyecto. Es lo que el SDK llama en el init y después de identify()/reset(); puedes llamarlo directamente desde cualquier lugar que no pueda usar el SDK.
POST https://ingest.kilden.io/decideContent-Type: application/jsonMismo host que capture — los SDKs necesitan un único apiHost para eventos y flags.
Solicitud
Sección titulada «Solicitud»{ "write_key": "YOUR_PUBLIC_WRITE_KEY", "distinct_id": "user_4821", "person_properties": { "plan": "enterprise" }}| Campo | Obligatorio | Notas |
|---|---|---|
write_key |
sí | Solo keys públicas. Una secret key se rechaza con 403 — nunca debe salir de tu backend, y /decide jamás la necesita |
distinct_id |
sí | El id a evaluar — el mismo que llevan tus eventos |
person_properties |
no | Sobreescribe los traits guardados de la persona solo para esta evaluación. Nunca se escribe nada; el pipeline de eventos sigue siendo la única forma de mutar personas |
Límite del body: 64 KiB. El targeting basado en cohortes se resuelve del lado del servidor con la pertenencia a cohortes precomputada — no hay nada que enviar.
Respuesta
Sección titulada «Respuesta»{ "flags": { "new-checkout": true, "pricing-test": "variant-b", "sunset-legacy-ui": false }, "sessionRecording": { "enabled": true, "sampleRate": 0.1 }}flags— todos los flags del proyecto, evaluados paradistinct_id. Valores:true,false, o un string con la key de la variante para flags multivariantes. Los flags inactivos vuelven comofalse, para que un consumidor pueda distinguir “apagado” de “flag desconocido”.sessionRecording— la config remota de session replay del proyecto: el interruptor de encendido, el kill switch y el sample rate que el SDK obedece.enabled: truepor sí solo hace que el SDK cargue el código de grabación y grabe (salvo que el sitio haya optado por no grabar localmente);{"enabled": false, "sampleRate": 0}cuando la grabación está apagada.
La evaluación es determinística: la misma key de flag y el mismo distinct id producen siempre el mismo valor, entre requests, réplicas y deploys. Ver bucketing determinístico.
Errores
Sección titulada «Errores»Los errores son texto plano, no JSON:
| Estado | Significado |
|---|---|
400 |
invalid JSON body: … (incluye bodies de más de 64 KiB) o 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 — o origin not allowed (el mismo chequeo de orígenes permitidos que capture) |
405 |
Método distinto de POST/OPTIONS |
Ejemplo
Sección titulada «Ejemplo»curl -X POST https://ingest.kilden.io/decide \ -H 'Content-Type: application/json' \ -d '{"write_key": "pk_your_public_key", "distinct_id": "user_4821"}'Idéntico a capture: Access-Control-Allow-Origin: * en cada respuesta; preflight OPTIONS → 204 con Access-Control-Allow-Methods: POST y Access-Control-Max-Age: 86400.
Frescura
Sección titulada «Frescura»Los cambios de config de flags se ven en ~10 segundos; los traits de persona y la pertenencia a cohortes se cachean por ~30 segundos en el camino de evaluación; la pertenencia a cohortes en sí se materializa aproximadamente cada 10 minutos. Si necesitas que un override de property aplique de inmediato, pásalo en person_properties.