Quick diagnosis checklist
Before diving into specific symptoms, run through these checks:- Is the SDK initialized? —
await client.initialize()must complete before anyisEnabled()call. - Does the flag exist? — Check the Admin API:
GET /flagswith the flag key. - Is the flag enabled for the environment? —
GET /flags/{id}/environments/{envId}and checkisEnabled. - Is the environment active? — A revoked environment rejects all evaluation requests with
401. - Does the SDK key match the environment? — The key is environment-scoped; a key from staging won’t resolve production flags.
- Is the flag archived? — Archived flags always return
false.
Symptom: isEnabled() throws FLAG_NOT_FOUND
Symptom: Flag returns false when expected true
Symptom: Flag doesn’t update after admin change
If you need near-instant propagation for a specific flag, set
ttlOverrideSeconds on the flag-environment configuration to a low value (e.g. 5 seconds).Symptom: 401 Unauthorized
Symptom: 404 Not Found
Symptom: 409 Conflict
Symptom: SDK key visible in browser devtools
Symptom: Targeting rules don’t match
Symptom: Percentage rollout always returns same result
Symptom: Network errors on startup
Symptom: cacheTtlSeconds not behaving as expected
The config option cacheTtlSeconds is stored as-is and used directly as milliseconds in the cache’s TTL. Despite the name:
- Default
60000= 60 seconds (correct) cacheTtlSeconds: 30= 30 milliseconds, not 30 seconds- Use
60000for 60 seconds,300000for 5 minutes
Still stuck?
- Check the Evaluation API reference for exact request/response shapes
- Check the Admin API reference for endpoint details
- Review audit logs for who changed what and when
- Contact the platform team: Slack
#feature-flags-supportor file an issue in thefeature-flags-platformrepo — include environment name, flag key, and timestamp

