> ## Documentation Index
> Fetch the complete documentation index at: https://docs.truthlocks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Approve agent approval

> Records one approval from an active human with tenant:governance:approve in this workspace. Requesters and previous reviewers cannot vote. Status remains pending until the distinct-reviewer quorum is met. API keys cannot review.

Records one approval from an active human with tenant:governance:approve in this workspace. Requesters and previous reviewers cannot vote. Status remains pending until the distinct-reviewer quorum is met. API keys cannot review.

See [independent agent reviews](/guides/agent-approvals) for the authorization and execution boundaries.


## OpenAPI

````yaml maip-openapi.yaml POST /v1/approvals/{approvalID}/approve
openapi: 3.0.3
info:
  title: Truthlocks MAIP receipts and approvals
  version: 2.0.0
servers:
  - url: https://api.truthlocks.com
    description: Production
  - url: https://sandbox-api.truthlocks.com
    description: Sandbox
security:
  - apiKey: []
  - bearerAuth: []
paths:
  /v1/approvals/{approvalID}/approve:
    post:
      tags:
        - Agent approvals
      summary: Approve agent approval
      description: >-
        Records one approval from an active human with tenant:governance:approve
        in this workspace. Requesters and previous reviewers cannot vote. Status
        remains pending until the distinct-reviewer quorum is met. API keys
        cannot review.
      operationId: maipApprovalsApprove
      parameters:
        - name: approvalID
          in: path
          required: true
          description: UUID returned when the approval request was created.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - reason
              properties:
                reason:
                  type: string
                  minLength: 1
                  description: >-
                    Reason for the decision; nonblank and at most 2000 UTF-8
                    bytes.
      responses:
        '200':
          description: Recorded result
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/AgentApproval'
                  - type: object
                    properties:
                      approval_id:
                        type: string
                        format: uuid
                        description: Alias of id for compatibility.
        '400':
          description: Invalid identifier, request fields, or decision reason
        '401':
          description: Authentication required
        '403':
          description: >-
            Wrong workspace realm, missing current reviewer permission,
            self-review, or unauthorized cancellation
        '404':
          description: Request or active agent absent from this workspace environment
        '409':
          description: Already decided, duplicate reviewer, or expired request
      security:
        - bearerAuth: []
components:
  schemas:
    AgentApproval:
      type: object
      required:
        - id
        - agent_id
        - status
        - requested_by
        - required_approvals
        - current_approvals
        - expires_at
        - decisions
      properties:
        id:
          type: string
          format: uuid
        tenant_id:
          type: string
          format: uuid
        agent_id:
          type: string
        action:
          type: string
        resource:
          type: string
        scope:
          type: string
        justification:
          type: string
        requested_by:
          type: string
          description: >-
            Authenticated requester: human user UUID or api_key:<stored key ID>;
            never a caller-supplied reviewer.
        decision_reason:
          type: string
        status:
          type: string
          enum:
            - pending
            - approved
            - rejected
            - expired
            - cancelled
        risk_level:
          type: string
          enum:
            - low
            - medium
            - high
            - critical
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        expires_at:
          type: string
          format: date-time
        decided_at:
          type: string
          format: date-time
        decided_by:
          type: string
          description: >-
            Final reviewer or requester cancelling the request; absent while
            pending.
        required_approvals:
          type: integer
          minimum: 1
          maximum: 10
        current_approvals:
          type: integer
          minimum: 0
          maximum: 10
        decisions:
          type: array
          description: >-
            Immutable individual reviews. The queue response leaves this empty;
            get the request for its complete review history.
          items:
            type: object
            properties:
              reviewer_id:
                type: string
                format: uuid
              decision:
                type: string
                enum:
                  - approved
                  - rejected
              reason:
                type: string
              created_at:
                type: string
                format: date-time
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
    bearerAuth:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.