Ir al contenido

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

Mismo host que capture — los SDKs necesitan un único apiHost para eventos y flags.

{
"write_key": "YOUR_PUBLIC_WRITE_KEY",
"distinct_id": "user_4821",
"person_properties": { "plan": "enterprise" }
}
Campo Obligatorio Notas
write_key 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 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.

{
"flags": {
"new-checkout": true,
"pricing-test": "variant-b",
"sunset-legacy-ui": false
},
"sessionRecording": { "enabled": true, "sampleRate": 0.1 }
}
  • flagstodos los flags del proyecto, evaluados para distinct_id. Valores: true, false, o un string con la key de la variante para flags multivariantes. Los flags inactivos vuelven como false, 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: true por 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.

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
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"}'

Idéntico a capture: Access-Control-Allow-Origin: * en cada respuesta; preflight OPTIONS204 con Access-Control-Allow-Methods: POST y Access-Control-Max-Age: 86400.

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.