Pular para o conteúdo

API de decide

O /decide avalia todas as feature flags de um projeto para um distinct id e retorna a config de gravação de sessões do projeto. É o que o SDK chama no init e depois de identify()/reset(); você pode chamá-lo diretamente de qualquer lugar que não possa usar o SDK.

POST https://ingest.kilden.io/decide
Content-Type: application/json

Mesmo host do capture — os SDKs precisam de um único apiHost para eventos e flags.

{
"write_key": "YOUR_PUBLIC_WRITE_KEY",
"distinct_id": "user_4821",
"person_properties": { "plan": "enterprise" }
}
Campo Obrigatório Notas
write_key sim Somente keys públicas. Uma key secreta é rejeitada com 403 — ela nunca deve sair do seu backend, e o /decide nunca precisa dela
distinct_id sim O id para o qual avaliar — o mesmo que seus eventos carregam
person_properties não Sobrescreve os traits armazenados da pessoa apenas para esta avaliação. Nada é escrito jamais; o pipeline de eventos continua sendo o único jeito de mutar pessoas

Limite do corpo: 64 KiB. A segmentação por coorte é resolvida no servidor a partir do pertencimento a coortes pré-computado — não há nada a enviar.

{
"flags": {
"new-checkout": true,
"pricing-test": "variant-b",
"sunset-legacy-ui": false
},
"sessionRecording": { "enabled": true, "sampleRate": 0.1 }
}
  • flagstodas as flags do projeto, avaliadas para o distinct_id. Valores: true, false, ou a string da key da variante para flags multivariadas. Flags inativas voltam como false, então um consumidor consegue distinguir “desligada” de “flag desconhecida”.
  • sessionRecording — a config remota de session replay do projeto: o interruptor de ligar, o kill switch e a taxa de amostragem que o SDK obedece. enabled: true sozinho faz o SDK carregar o código de gravação e gravar (a menos que o site tenha feito opt-out local); {"enabled": false, "sampleRate": 0} quando a gravação está desligada.

A avaliação é determinística: a mesma key de flag e o mesmo distinct id sempre produzem o mesmo valor, entre requisições, réplicas e deploys. Veja bucketing determinístico.

Os erros são texto puro, não JSON:

Status Significado
400 invalid JSON body: … (incluindo corpos acima 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 (mesma checagem de origens permitidas do capture)
405 Método diferente 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 ao capture: Access-Control-Allow-Origin: * em toda resposta; preflight OPTIONS204 com Access-Control-Allow-Methods: POST e Access-Control-Max-Age: 86400.

Mudanças na config de flags ficam visíveis em ~10 segundos; traits de pessoa e pertencimento a coortes ficam em cache por ~30 segundos no caminho de avaliação; o pertencimento a coortes em si é materializado a cada ~10 minutos. Se você precisa que um override de propriedade se aplique imediatamente, passe-o em person_properties.