resolve_identity_finding

Resolve a Clerk drift finding

act entity tenant-private since 2026-10-01

Decides a finding list_identity_findings shows. remove takes the Clerk membership away (a membership Trade HQ did not decide). admit, with a role_template_id, makes the person a member with that role, or gives a member whose Clerk role changed that role, and puts Clerk's role to match: never Owner, never a role carrying more than yours, never a membership a directory manages. ignore closes the finding once and changes nothing. Staff may only remove. The same decision again changes nothing.

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); org.admin (carried by the caller's role template in the org `org_id`); account.owner (account role owner or higher in the account of the org `org_id`); a deactivated caller is refused first
idempotency
natural
emits
identity_finding.resolved
MCP tool
resolve_identity_finding
decision_set
approve, reject, escalate
REST
POST https://api.containertradehq.com/v1/cap/resolve_identity_finding

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
org_idorg_idrequiredtradehq-org-id; 1 to 20 characters
The org the finding is in.
finding_iduuidrequiredUUID
The finding, from list_identity_findings.
decisionone_ofrequiredone of remove, admit, ignore
remove, admit or ignore: one the finding's decisions name.
role_template_idtextoptional1 to 64 characters
For admit: a shipped role template's id or one of the org's own, never owner.

Response

  • org_id · string · The org.
  • finding_id · string · The finding.
  • resolution · string · How it is resolved.
  • admitted_role_template_id · stringnull · The role template an admit gave.
  • command · stringnull · The Clerk command the decision queued, if any.
Full JSON Schema
{
  "type": "object",
  "properties": {
    "org_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20,
      "pattern": "^[A-Za-z0-9_-]{1,20}$",
      "format": "tradehq-org-id",
      "description": "The org.",
      "x-data-class": "operational"
    },
    "finding_id": {
      "type": "string",
      "pattern": "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$",
      "format": "uuid",
      "description": "The finding.",
      "x-data-class": "operational"
    },
    "resolution": {
      "type": "string",
      "enum": [
        "removed",
        "admitted",
        "ignored"
      ],
      "description": "How it is resolved.",
      "x-data-class": "operational"
    },
    "admitted_role_template_id": {
      "type": [
        "string",
        "null"
      ],
      "description": "The role template an admit gave.",
      "x-data-class": "operational"
    },
    "command": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "membership_remove",
        "role_set",
        null
      ],
      "description": "The Clerk command the decision queued, if any.",
      "x-data-class": "operational"
    }
  },
  "required": [
    "org_id",
    "finding_id",
    "resolution",
    "admitted_role_template_id",
    "command"
  ],
  "additionalProperties": false
}

Refusals

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 drift decision
  • Outbound: crosses to no counterparty

Events

Related

approve_grant, create_invite_link, decide_access_review_item, grant_unit_role, import_users, invite_user, set_member_role