A valid request URL is required to generate request examples{
"flags": [
{
"key": "new_checkout",
"enabled": true
},
{
"key": "ai_summaries",
"enabled": false
}
],
"version": "1785283200000-2",
"max_age_seconds": 15,
"generated_at": "2026-08-02T12:00:00Z"
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}The feature flag kill switch
Which of an environment’s flags are switched on, for everybody. The half of feature flagging that has to propagate in seconds.
This document can only take a flag away. The per-person answer — the segment it is aimed at, the percentage of that audience it has reached — is decided by POST /v1/boot and arrives with the session. This one carries key and enabled and nothing else, so enabled: false applies over whatever a page booted with, immediately; retargeting waits for the visitor’s next boot. The asymmetry is deliberate: the urgent direction is off.
What is deliberately not here is the rollout percentage, the audience and the bucketing salt. A page fetches this with a publishable key, which sits in HTML — publishing the ramp would publish the tenant’s release plan, and publishing the salt would let anybody compute which bucket they are in and choose an identifier that lands inside it.
Addressed by publishable key and public, in the same family as GET /v1/jwks/{publishable_key} and GET /v1/revocations/{publishable_key}: read it, cache it, poll it — never call it per request. Cache-Control: public, max-age=15, stale-while-revalidate=300, stale-if-error=300. When you cannot fetch it, keep the copy you have. Degrading to “no flags” during our bad minute would roll the product back to its pre-flag state for everybody, which is our outage becoming yours over a feature you turned on last week.
version is an opaque token: compare it for equality to learn that nothing moved, never for order. It changes on every create, edit and archival.
Rate limited to 600 requests per minute per IP — the loosest limit on this surface beside the revocation list, because polling it is the intended use.
A valid request URL is required to generate request examples{
"flags": [
{
"key": "new_checkout",
"enabled": true
},
{
"key": "ai_summaries",
"enabled": false
}
],
"version": "1785283200000-2",
"max_age_seconds": 15,
"generated_at": "2026-08-02T12:00:00Z"
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Path Parameters
uk_pk_live_… or uk_pk_test_…. Flags are per environment, like the key.
Response
The environment's live flags. An archived flag is absent, which reads as off.
The published kill switch: what is on for everybody, and nothing about who.