---
title: "Decide Tool Approval"
method: POST
path: "/api/comms/{team_key}/tool-approvals/{approval_key}/decision"
tags: ["comms"]
---

# Decide Tool Approval

`POST /api/comms/{team_key}/tool-approvals/{approval_key}/decision`

## Request

- Base URL: `https://api.superit.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.superit.ai/api/comms/{team_key}/tool-approvals/{approval_key}/decision`
- Auth: HTTP bearer

Approve or decline a pending command approval (REST counterpart of WS).

## Path parameters

- `team_key` string, required
- `approval_key` string, required

## Request body

- ToolApprovalDecisionBody: Approve/reject body for the standalone approval page.
  - `approved` boolean, required
  - `reason` string, nullable
  - `skippedStepKeys` string[]

## Response `200`

Successful Response

- ToolApprovalResponse: Tool approval item.
  - `key` string, required
  - `toolName` string, required
  - `toolCallId` string, required
  - `parentToolCallId` string, nullable: The tool cycle the chat renders this under when tool_call_id is an explore sub-agent's call, which is never in the transcript.
  - `command` string, required
  - `title` string, nullable
  - `reason` string, required
  - `risk` string, required
  - `riskLevel` 'low' | 'medium' | 'high', required
  - `status` 'PENDING' | 'APPROVED' | 'DENIED' | 'ABANDONED' | 'CANCELLED' | 'AUTO_APPROVED', required: API approval statuses.
  - `chatKey` string, required
  - `user` ApprovalUser, required: User info for approvals.
    - `id` integer, required
    - `name` string, required
    - `email` string, required
  - `teamName` string, required
  - `createdAt` string, date-time, required
  - `approver` ApprovalUser, required: User info for approvals.
    - `id` integer, required
    - `name` string, required
    - `email` string, required
  - `message` string, nullable, required
  - `operatingSystem` string, nullable, required
  - `elevated` boolean
  - `selfConsentEligible` boolean
  - `cancelable` boolean
  - `targetLabel` string, nullable
  - `targetPlatform` string, nullable: Target device os_platform: windows, linux or darwin.
  - `decidedAt` string, date-time, nullable
  - `approvalSource` 'command_judge', nullable
  - `agentName` string, nullable
  - `approvalReason` string, nullable
  - `commandSegments` CommandSegment[], nullable
    - `text` string, required
    - `verb` string, nullable
    - `stepKey` string, nullable
    - `elevated` boolean
  - `editable` ApprovalEditable: The structured card a PSA write approval renders instead of a command.
    - `lines` string[]
    - `note` EditableNote
      - `text` string, required
      - `internal` boolean, required
      - `visibility` string, required
    - `fields` EditableField[]
      - `key` string, required
      - `label` string, required
      - `before` string, nullable
      - `value` string, nullable
      - `valueName` string, nullable
      - `parent` string, nullable
      - `options` EditOption[]
        - `id` string, required
        - `name` string, required
        - `within` string[]
    - `changes` ProposedChange[]
      - `label` string, required
      - `before` string, nullable
      - `after` string, required
    - `rationale` string, nullable
    - `noteOnly` boolean
    - `ticket` TicketContext: The ticket the card writes to, as it stood when the card went up.
      - `key` string, nullable
      - `number` string, nullable
      - `subject` string, nullable
      - `company` string, nullable
      - `requester` string, nullable
      - `url` string, nullable
      - `updatedAt` string, date-time, nullable
    - `skipped` SkippedOperation[]
      - `kind` string, required
      - `text` string, required
      - `reason` string, nullable
    - `changedFieldCount` integer, nullable
    - `edited` string[]
  - `ticketChangedSinceProposal` boolean: A pending PSA write whose ticket the PSA updated after the card went up; approving it is refused until it is proposed again.
  - `outcome` 'verified' | 'written_unconfirmed' | 'failed', nullable: What an approved PSA write did. Null until the write finishes, and for anything that is not a PSA write.
  - `outcomeDetail` string, nullable: The PSA's displayed ticket number when verified, else the reason.

## Other responses

- `400`: Invalid input
- `401`: Not authenticated
- `403`: Forbidden
- `404`: Not found
- `405`: Method not allowed
- `409`: Conflict
- `422`: Validation Error

---

[API](https://skmtc.dev/superit/apis/super-it-api.md) - [All operations](https://skmtc.dev/superit/apis/super-it-api/llms.txt) - [OpenAPI document](https://skmtc.dev/superit/apis/super-it-api/revisions/4944d556c2bb?raw)
