list_flags

List the feature flags

read collection canonical-registry since 2026-10-01

Lists every feature flag in the registry with its state in PostHog: kind, owner, purpose, decide-by date, failure default, the wave it is on (staff, beta, a percentage of customer orgs, everyone, off, absent from PostHog, or a custom rule), the next wave up, its age and a link to it in PostHog, and the drift check's findings. Flags PostHog has that the registry does not are listed too. Staff only.

Contract

shape
collection
authority
read
evidence
none
subscription
false
permission
any one of: staff.read (the staff role staff_read held in the Internal org, tradehq_role.staff_role); a deactivated caller is refused first
idempotency
safe
emits
none
MCP tool
list_flags
REST
POST https://api.containertradehq.com/v1/cap/list_flags

Idempotency: a read: calling again changes nothing

Inputs

No inputs.

Paginated: next next_after · ceiling not_declared

Response

  • items · object[]
  • next_after · stringnull · Pass as `after` for the next page; null on the last one.
Full JSON Schema
{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "The flag's PostHog key.",
            "x-data-class": "operational"
          },
          "registered": {
            "type": "boolean",
            "description": "Whether the registry carries it; false for a flag only PostHog has.",
            "x-data-class": "operational"
          },
          "kind": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "release",
              "experiment",
              "prototype",
              "kill",
              null
            ],
            "description": "release, experiment, prototype or kill; null when unregistered.",
            "x-data-class": "operational"
          },
          "owner": {
            "type": [
              "string",
              "null"
            ],
            "description": "Who owns the flag; null when unregistered.",
            "x-data-class": "operational"
          },
          "purpose": {
            "type": [
              "string",
              "null"
            ],
            "description": "What it is for, in one line; null when unregistered.",
            "x-data-class": "operational"
          },
          "capability": {
            "type": [
              "string",
              "null"
            ],
            "description": "The capability id it gates; null when unregistered.",
            "x-data-class": "operational"
          },
          "decide_by": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
            "format": "date",
            "description": "When the flag is removed or made permanent; null when unregistered.",
            "x-data-class": "operational"
          },
          "failure_default": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "on",
              "off",
              null
            ],
            "description": "What every caller reads when PostHog cannot answer; null when unregistered.",
            "x-data-class": "operational"
          },
          "wave": {
            "type": "string",
            "enum": [
              "absent",
              "off",
              "staff",
              "beta",
              "orgs_10",
              "orgs_25",
              "orgs_50",
              "everyone",
              "custom",
              "unknown"
            ],
            "description": "Where PostHog has it: absent, off, staff, beta, orgs_<n> (n percent of customer orgs), everyone, custom (a rule this page did not write), or unknown when PostHog could not be read.",
            "x-data-class": "operational"
          },
          "percentage": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The percentage of customer orgs on an orgs wave; null on any other.",
            "x-data-class": "operational"
          },
          "beta_lists": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The beta lists it targets, by name; empty below the beta wave.",
            "x-data-class": "operational"
          },
          "next_wave": {
            "type": [
              "string",
              "null"
            ],
            "description": "The wave advancing moves it to; null when it cannot be advanced here (everyone, custom, unknown, unregistered).",
            "x-data-class": "operational"
          },
          "age_days": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Days since PostHog created it; null when PostHog does not have it.",
            "x-data-class": "operational"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When PostHog created it.",
            "x-data-class": "operational"
          },
          "posthog_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "The flag in PostHog; null when PostHog does not have it or could not be read.",
            "x-data-class": "operational"
          },
          "drift": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "TRA-247's drift statuses for it, empty when in sync: in_code_not_registry, in_registry_not_code, in_registry_not_posthog, in_posthog_not_registry, in_code_not_posthog, past_decide_by, everyone. Null when PostHog could not be read.",
            "x-data-class": "operational"
          }
        },
        "required": [
          "key",
          "registered",
          "kind",
          "owner",
          "purpose",
          "capability",
          "decide_by",
          "failure_default",
          "wave",
          "percentage",
          "beta_lists",
          "next_wave",
          "age_days",
          "created_at",
          "posthog_url",
          "drift"
        ],
        "additionalProperties": false
      }
    },
    "next_after": {
      "type": [
        "string",
        "null"
      ],
      "description": "Pass as `after` for the next page; null on the last one."
    }
  },
  "required": [
    "items",
    "next_after"
  ],
  "additionalProperties": false
}

Refusals

not yet declared

The platform refusals apply to every call: version, authentication, authority, validation and rate limits, each in the same envelope.

Surfaces

DesktopF
MobileF
APIF
MCPF
VoiceD4
PushN
OneBoxN
OutboundN
  • Voice: degraded: visualization
  • Push: emits nothing
  • OneBox: no document originates a flag
  • Outbound: staff tooling; crosses to no counterparty

Events

None emitted.

Related

None.