roll_back_flag

Roll a flag back to staff only

act entity canonical-registry since 2026-10-01

Puts one registered feature flag back on the staff list in PostHog, from any wave, so only Trade HQ staff see the feature. Recorded with who did it. Send an Idempotency-Key header. Staff only.

Contract

shape
entity
authority
act
evidence
none
subscription
false
permission
any one of: staff.ops (the staff role staff_ops held in the Internal org, tradehq_role.staff_role); a deactivated caller is refused first
idempotency
keyed
emits
flag.wave_changed
MCP tool
roll_back_flag
decision_set
approve, reject
REST
POST https://api.containertradehq.com/v1/cap/roll_back_flag

Through MCP this call returns an approval request first; see Approvals.

Idempotency: keyed by the caller's Idempotency-Key, which is required: the same key and inputs replay the first result, the same key with other inputs is 409 idempotency_key_reused

Inputs

nametyperequiredvalidation
flag_keytextrequired1 to 100 characters
The flag's key, as the registry has it.

Response

  • action_id · string · This move's audit row.
  • flag_key · string · The flag moved.
  • action · string · advance, roll_back, or set_lists (TRA-1461: the beta lists chosen).
  • from_wave · string · The wave PostHog had it on.
  • to_wave · string · The wave it is on now.
  • acted_by · string · Who moved it: the staff member or agent, never PostHog's key.
  • acted_at · string · When.
  • posthog_url · stringnull · The flag in PostHog; null on a replay.
Full JSON Schema
{
  "type": "object",
  "properties": {
    "action_id": {
      "type": "string",
      "description": "This move's audit row.",
      "x-data-class": "operational"
    },
    "flag_key": {
      "type": "string",
      "description": "The flag moved.",
      "x-data-class": "operational"
    },
    "action": {
      "type": "string",
      "enum": [
        "advance",
        "roll_back",
        "set_lists"
      ],
      "description": "advance, roll_back, or set_lists (TRA-1461: the beta lists chosen).",
      "x-data-class": "operational"
    },
    "from_wave": {
      "type": "string",
      "description": "The wave PostHog had it on.",
      "x-data-class": "operational"
    },
    "to_wave": {
      "type": "string",
      "description": "The wave it is on now.",
      "x-data-class": "operational"
    },
    "acted_by": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20,
      "pattern": "^[A-Za-z0-9_-]{1,20}$",
      "format": "tradehq-user-id",
      "description": "Who moved it: the staff member or agent, never PostHog's key.",
      "x-data-class": "operational"
    },
    "acted_at": {
      "type": "string",
      "format": "date-time",
      "description": "When.",
      "x-data-class": "operational"
    },
    "posthog_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "The flag in PostHog; null on a replay.",
      "x-data-class": "operational"
    }
  },
  "required": [
    "action_id",
    "flag_key",
    "action",
    "from_wave",
    "to_wave",
    "acted_by",
    "acted_at",
    "posthog_url"
  ],
  "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*
VoiceD2
PushF
OneBoxN
OutboundN
  • MCP: approval required
  • Voice: degraded: confirmation
  • OneBox: no document originates a flag
  • Outbound: staff tooling; crosses to no counterparty

Events

Related

None.