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

# List agent promotion requests

> Promotion requests across the workspace, newest first, each with its review steps and the decisions taken so far. Unlike the portal's review page this is not filtered by reviewer — a workspace key sees every request, including those for private agents. `reviewersByStepId` is only resolved for pending requests, since a settled request is waiting for nobody. Decisions are made in the portal; this API reads the review, it does not take part in it.



## OpenAPI

````yaml /api-reference/workspace-api.json get /workspaceapi/promotion-requests
openapi: 3.1.0
info:
  title: Abundly Workspace API
  description: >-
    Workspace-level and per-agent data and administration. GET endpoints need a
    workspace API key (wk_) with the Workspace read API scope; POST endpoints
    need the Workspace write API scope. The write endpoints are batch operations
    mirroring the Workspace Manager capability: ids travel in the JSON body,
    each id gets its own result, and per-id failures still return HTTP 200.


    Private agents are listed by /workspaceapi/agents but return 403 on every
    per-agent GET, so enumerate from /workspaceapi/agents?includeOverview=true
    rather than iterating agent ids. Write endpoints can target private agents.
  version: 1.0.0
servers:
  - url: https://service.abundly.ai
    description: Shared platform
  - url: https://{tenant}.service.abundly.ai
    description: Dedicated deployment
    variables:
      tenant:
        default: your-tenant
security:
  - workspaceApiKey: []
paths:
  /workspaceapi/promotion-requests:
    get:
      summary: List agent promotion requests
      description: >-
        Promotion requests across the workspace, newest first, each with its
        review steps and the decisions taken so far. Unlike the portal's review
        page this is not filtered by reviewer — a workspace key sees every
        request, including those for private agents. `reviewersByStepId` is only
        resolved for pending requests, since a settled request is waiting for
        nobody. Decisions are made in the portal; this API reads the review, it
        does not take part in it.
      operationId: promotion-requests
      parameters:
        - name: agentId
          in: query
          required: false
          description: Only this agent's promotion requests.
          schema:
            type: string
        - name: status
          in: query
          required: false
          description: >-
            open = pending or approved, resolved = rejected, cancelled or
            completed. Default all.
          schema:
            type: string
            enum:
              - open
              - resolved
              - all
        - name: limit
          in: query
          required: false
          description: Maximum requests to return. Default 100.
          schema:
            type: integer
            minimum: 1
            maximum: 500
      responses:
        '200':
          description: Success. Empty result sets are also 200.
          content:
            application/json:
              schema:
                description: Promotion requests, newest first.
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        customerId:
                          type: string
                        agentId:
                          type: string
                        agentName:
                          description: Absent when the agent has since been deleted.
                          type: string
                        agentGroupId:
                          type: string
                        requestedByUserId:
                          type: string
                        requestedByName:
                          type: string
                        message:
                          description: The requester's note to the reviewers.
                          type: string
                        steps:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                type: string
                              name:
                                type: string
                              reviewers:
                                description: >-
                                  Copied from the workspace's review settings
                                  when the request was made.
                                type: object
                                properties:
                                  kind:
                                    description: >-
                                      "workspace-admins", "team-admins",
                                      "team-members" or "users".
                                    type: string
                                  userIds:
                                    description: Only for kind "users".
                                    type: array
                                    items:
                                      type: string
                                required:
                                  - kind
                                additionalProperties: {}
                              decision:
                                description: Absent while the step is undecided.
                                type: object
                                properties:
                                  decision:
                                    description: '"approved" or "rejected".'
                                    type: string
                                  decidedByUserId:
                                    type: string
                                  decidedByName:
                                    type: string
                                  comment:
                                    type: string
                                  decidedAt:
                                    description: ISO 8601 timestamp.
                                    type: string
                                required:
                                  - decision
                                  - decidedByUserId
                                  - decidedByName
                                  - decidedAt
                                additionalProperties: {}
                            required:
                              - id
                              - name
                              - reviewers
                            additionalProperties: {}
                        status:
                          description: pending, approved, rejected, cancelled or completed.
                          type: string
                        resolvedAt:
                          description: ISO 8601 timestamp.
                          type: string
                        cancelReason:
                          type: string
                        cancelledByUserId:
                          type: string
                        completedByUserId:
                          description: Who promoted the agent, when a person did.
                          type: string
                        createdAt:
                          description: ISO 8601 timestamp.
                          type: string
                        updatedAt:
                          description: ISO 8601 timestamp.
                          type: string
                        reviewersByStepId:
                          description: >-
                            Who each step is waiting for. Only populated for
                            pending requests.
                          type: object
                          propertyNames:
                            type: string
                          additionalProperties:
                            type: object
                            properties:
                              reviewers:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    userId:
                                      type: string
                                    name:
                                      type: string
                                  required:
                                    - userId
                                    - name
                                  additionalProperties: false
                              fallsBackToWorkspaceAdmins:
                                description: >-
                                  The step's own audience was empty, so admins
                                  stand in.
                                type: boolean
                              nobodyCanReview:
                                type: boolean
                            required:
                              - reviewers
                              - fallsBackToWorkspaceAdmins
                              - nobodyCanReview
                            additionalProperties: {}
                      required:
                        - id
                        - customerId
                        - agentId
                        - requestedByUserId
                        - requestedByName
                        - steps
                        - status
                        - createdAt
                        - updatedAt
                        - reviewersByStepId
                      additionalProperties: {}
                required:
                  - items
                additionalProperties: false
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
components:
  responses:
    Error:
      description: >-
        Error. Every failure on this API returns JSON with a single `error`
        field.
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                description: >-
                  Human-readable message. Every error on this API uses this
                  shape.
                type: string
            required:
              - error
            additionalProperties: false
  securitySchemes:
    workspaceApiKey:
      type: http
      scheme: bearer
      description: >-
        Workspace API key (wk_). GET endpoints require the Workspace read API
        scope, POST endpoints the Workspace write API scope.

````