revoke_staff_role

Revoke a staff role

act entity tenant-private since 2026-10-01

Takes one staff role away from a member of Trade HQ's Internal org. The last active holder of staff_ops keeps it: someone else must hold staff_ops first, because staff_ops is what grants staff roles. Revoking a role they do not hold changes nothing. Staff with staff.ops 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
natural
emits
staff_role.revoked
MCP tool
revoke_staff_role
decision_set
approve, reject
REST
POST https://api.containertradehq.com/v1/cap/revoke_staff_role

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

Idempotency: keyed by the contract's own inputs: the same inputs replay the first call's result

Inputs

nametyperequiredvalidation
user_iduser_idrequiredtradehq-user-id; 1 to 20 characters
The staff member.
role_idone_ofrequiredone of staff_read, staff_ops, staff_provision, staff_finance
The staff role to take away.

Response

  • user_id · string · The staff member.
  • role_id · string · The staff role.
  • org_id · string · The Internal org.
  • revoked · boolean · True: they do not hold the role.
Full JSON Schema
{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20,
      "pattern": "^[A-Za-z0-9_-]{1,20}$",
      "format": "tradehq-user-id",
      "description": "The staff member.",
      "x-data-class": "operational"
    },
    "role_id": {
      "type": "string",
      "enum": [
        "staff_read",
        "staff_ops",
        "staff_provision",
        "staff_finance"
      ],
      "description": "The staff role.",
      "x-data-class": "operational"
    },
    "org_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20,
      "pattern": "^[A-Za-z0-9_-]{1,20}$",
      "format": "tradehq-org-id",
      "description": "The Internal org.",
      "x-data-class": "operational"
    },
    "revoked": {
      "type": "boolean",
      "description": "True: they do not hold the role.",
      "x-data-class": "operational"
    }
  },
  "required": [
    "user_id",
    "role_id",
    "org_id",
    "revoked"
  ],
  "additionalProperties": false
}

Refusals

  • last_staff_ops · 422 · the user is the last active holder of staff_ops; grant it to someone else first

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 staff role
  • Outbound: Trade HQ's own staff; crosses to no counterparty

Events

Related

None.