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

# List pending approvals

> Lists actions waiting on a human decision, oldest first.

Approvals raised through this API have no screen of their own — render them
in your product, where the people who decide already work. Poll this
endpoint after a completion comes back saying it is waiting for approval.
Requests older than 24 hours are no longer decidable and stop appearing
here. Requires the `mcp_query` permission.

Returns actions that a guardrail rule stopped and handed to a person, oldest
first. Nothing in this list has run.

Approvals raised through the API have no screen of their own — that is
deliberate. The people who decide ("is this refund fine?") work in your product,
not in the CoreBase panel, so you render these where they already are. Poll this
endpoint after a completion comes back saying it is waiting for approval.

`arguments` is exactly what will run if you approve. Show it to whoever decides:
approving binds the decision to these values, not to whatever the assistant
would generate on a later turn.

Requests stop appearing here 24 hours after they were raised — after that they
can no longer be decided, and the assistant has to ask again.

See [Guardrails](/platform/guardrails) for how a rule decides that an action
needs approval in the first place.


## OpenAPI

````yaml api-reference/openapi.json GET /api/v1/approvals
openapi: 3.1.0
info:
  title: CoreBase Developer API
  summary: Build on CoreBase with a cb_live_ token.
  description: >-
    Call CoreBase from your own apps with a `cb_live_` API token. The chat
    endpoint is OpenAI-compatible, so any OpenAI client works by pointing its
    base URL at this API. Create a token in the panel under API Tokens.


    Authenticate every request with `Authorization: Bearer cb_live_...`.
    Responses are JSON, except the chat endpoint, which streams Server-Sent
    Events.
  version: 0.0.1
  contact:
    name: CoreBase
    url: https://corebasehq.com
servers:
  - url: https://api.corebasehq.com
    description: Production
security:
  - bearerAuth: []
tags:
  - name: chat
    description: OpenAI-compatible chat completions over your connected data.
  - name: sources
    description: Data sources the agent can query.
  - name: agents
    description: Governed agent flows and their runs.
  - name: account
    description: Subscription plan and end-user usage for your organization.
paths:
  /api/v1/approvals:
    get:
      tags:
        - approvals
      summary: List pending approvals
      description: >-
        Lists actions waiting on a human decision, oldest first.


        Approvals raised through this API have no screen of their own — render
        them

        in your product, where the people who decide already work. Poll this

        endpoint after a completion comes back saying it is waiting for
        approval.

        Requests older than 24 hours are no longer decidable and stop appearing

        here. Requires the `mcp_query` permission.
      operationId: listApprovals
      parameters:
        - name: project_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: List approvals in this project. Omit for the default project.
            title: Project Id
          description: List approvals in this project. Omit for the default project.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApprovalOut'
                title: Response Listapprovals
        '401':
          description: Missing or invalid API token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: The token lacks the permission this endpoint requires.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: >-
            Rate limit exceeded. Back off and retry after the interval in the
            `Retry-After` response header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
        - bearerAuth: []
components:
  schemas:
    ApprovalOut:
      properties:
        id:
          type: string
          title: Id
          description: Approval id — pass it to the decide endpoint.
        chat_id:
          type: string
          title: Chat Id
          description: The conversation the action belongs to.
        tool:
          type: string
          title: Tool
          description: The action the assistant tried to take.
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
          description: Data source the action targets.
        rule:
          anyOf:
            - type: string
            - type: 'null'
          title: Rule
          description: Name of the rule that held it.
        arguments:
          additionalProperties: true
          type: object
          title: Arguments
          description: Exactly what will run if you approve. Show this to whoever decides.
        requested_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Requested At
          description: When the action was held (ISO 8601, UTC).
      type: object
      required:
        - id
        - chat_id
        - tool
      title: ApprovalOut
      description: >-
        An action a guardrail rule stopped, waiting for a person to decide.


        Nothing has run. Approving replays exactly this call — the decision
        binds to

        the arguments shown here, not to whatever the assistant would generate
        on a

        later turn — and the conversation reports the outcome on its next
        request.
    ApiError:
      properties:
        detail:
          anyOf:
            - type: string
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Detail
          description: Error message, or an object with a stable `error` code and context.
      additionalProperties: true
      type: object
      title: ApiError
      description: |-
        A structured error. `detail` is a human-readable message, or an object
        carrying a stable `error` code plus context.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A `cb_live_` API token, created in the panel under API Tokens.

````