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
- turn_off_flag
- decision_set
- approve, reject
- REST
- POST https://api.containertradehq.com/v1/cap/turn_off_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
| name | type | required | validation |
|---|---|---|---|
| flag_key | text | required | 1 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
- MCP: approval required
- Voice: degraded: confirmation
- OneBox: no document originates a flag
- Outbound: staff tooling; crosses to no counterparty
Events
flag.wave_changedaudit_only
Related
None.