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

# Submit campaign item review decisions

> Submits one or more review decisions for campaign item reviews assigned
to the authenticated user. Mirrors the GraphQL `reviewCampaignItems`
mutation.

Each decision targets a `campaign_item_review_id` that must belong to
this campaign and be assigned to the caller. Supported decisions are
`APPROVED`, `REVOKED`, `CHANGE_ROLE`, and `REASSIGNED`.

For `CHANGE_ROLE`, `access_level_remote_id` is required. For
`REASSIGNED`, either supply `new_reviewer_user_ids` (manual) or an
`assignment_source` preset (`PRINCIPAL_MANAGER` / `ASSET_ADMIN_OWNER`).
Reassignment also requires the campaign configuration flag
`allow_reviewer_reassignment` to be enabled.

When the campaign uses `revoke_on: ACTION`, `REVOKED` decisions revoke
access immediately.




## OpenAPI

````yaml https://app.opal.dev/openapi.yaml post /campaigns/{campaign_id}/reviews
openapi: 3.1.0
info:
  contact:
    email: hello@opal.dev
    name: Opal Team
    url: https://www.opal.dev/
  description: >-
    The Opal API is a RESTful API that allows you to interact with the Opal
    Security platform programmatically.
  title: Opal API
  version: '1.0'
servers:
  - description: Production
    url: https://api.opal.dev/v1
security: []
tags:
  - name: access-rules
    description: Operations related to access rules
  - name: apps
    description: Operations related to apps
  - name: bundles
    description: Operations related to bundles
  - name: campaigns
    description: Operations related to access review campaigns
  - name: configuration-templates
    description: Operations related to configuration templates
  - name: delegations
    description: Operations related to request reviewer delegations
  - name: event-streams
    description: Operations related to event streaming connections
  - name: events
    description: Operations related to events
  - name: groups
    description: Operations related to groups
  - name: group-bindings
    description: Operations related to group bindings
  - name: idp-group-mappings
    description: Operations related to IDP group mappings
  - name: message-channels
    description: Operations related to message channels
  - name: non-human-identities
    description: Operations related to non-human identities
  - name: on-call-schedules
    description: Operations related to on-call schedules
  - name: opal-queries
    description: Operations related to OpalQuery
  - name: owners
    description: Operations related to owners
  - name: requests
    description: Operations related to requests
  - name: resources
    description: Operations related to resources
  - name: paladin
    description: Operations related to Paladin
  - name: sessions
    description: Operations related to sessions
  - name: tags
    description: Operations related to tags
  - name: tokens
    description: Operations related to API tokens
  - name: uars
    description: Operations related to UARs. Deprecated in favor of the `campaigns` API.
  - name: users
    description: Operations related to users
paths:
  /campaigns/{campaign_id}/reviews:
    post:
      tags:
        - campaigns
      summary: Submit campaign item review decisions
      description: |
        Submits one or more review decisions for campaign item reviews assigned
        to the authenticated user. Mirrors the GraphQL `reviewCampaignItems`
        mutation.

        Each decision targets a `campaign_item_review_id` that must belong to
        this campaign and be assigned to the caller. Supported decisions are
        `APPROVED`, `REVOKED`, `CHANGE_ROLE`, and `REASSIGNED`.

        For `CHANGE_ROLE`, `access_level_remote_id` is required. For
        `REASSIGNED`, either supply `new_reviewer_user_ids` (manual) or an
        `assignment_source` preset (`PRINCIPAL_MANAGER` / `ASSET_ADMIN_OWNER`).
        Reassignment also requires the campaign configuration flag
        `allow_reviewer_reassignment` to be enabled.

        When the campaign uses `revoke_on: ACTION`, `REVOKED` decisions revoke
        access immediately.
      operationId: reviewCampaignItems
      parameters:
        - description: The ID of the campaign.
          example: f454d283-ca87-4a8a-bdbb-df212eca5353
          explode: true
          in: path
          name: campaign_id
          required: true
          schema:
            type: string
            format: uuid
          style: simple
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReviewCampaignItemsInfo'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewCampaignItemsResponse'
          description: The updated campaign item reviews.
      security:
        - BearerAuth: []
components:
  schemas:
    ReviewCampaignItemsInfo:
      description: >
        Input for submitting review decisions on one or more campaign item
        reviews.
      type: object
      required:
        - decisions
      properties:
        decisions:
          description: The decisions to record. Each targets a single campaign item review.
          items:
            $ref: '#/components/schemas/ReviewCampaignItemDecisionInfo'
          type: array
    ReviewCampaignItemsResponse:
      description: Result of submitting campaign item review decisions.
      type: object
      required:
        - reviews
      properties:
        reviews:
          description: Updated reviews in the same order as the request decisions.
          items:
            $ref: '#/components/schemas/CampaignItemReviewResult'
          type: array
    ReviewCampaignItemDecisionInfo:
      description: |
        A single reviewer decision to submit for a campaign item review.
        Mirrors GraphQL `CampaignItemReviewDecisionInput`.
      type: object
      required:
        - campaign_item_review_id
        - decision
      properties:
        campaign_item_review_id:
          description: The ID of the campaign item review to update.
          example: 4b8f2c1a-9d3e-4f6a-8b1c-2e5d7a9f0c3b
          format: uuid
          type: string
        decision:
          $ref: '#/components/schemas/CampaignItemReviewDecisionEnum'
        note:
          description: Optional note from the reviewer for this decision.
          example: Access is still required for on-call.
          nullable: true
          type: string
        access_level_remote_id:
          description: |
            Required when `decision` is `CHANGE_ROLE`. The remote ID of the
            access level to change to. Ignored for other decisions.
          example: arn:aws:iam::123456789012:role/ReadOnly
          nullable: true
          type: string
        new_reviewer_user_ids:
          description: |
            When `decision` is `REASSIGNED` and `assignment_source` is `MANUAL`
            or omitted, the user IDs to reassign this review to.
          items:
            type: string
            format: uuid
          nullable: true
          type: array
        assignment_source:
          allOf:
            - $ref: '#/components/schemas/CampaignItemReviewerAssignmentSourceEnum'
          nullable: true
    CampaignItemReviewResult:
      description: |
        A campaign item review after a successful submit. Flat fields only —
        does not expand principal/entity relationships.
      type: object
      required:
        - campaign_item_review_id
      properties:
        campaign_item_review_id:
          description: The ID of the campaign item review.
          example: 4b8f2c1a-9d3e-4f6a-8b1c-2e5d7a9f0c3b
          format: uuid
          type: string
        decision:
          allOf:
            - $ref: '#/components/schemas/CampaignItemReviewDecisionEnum'
          nullable: true
        note:
          description: Note recorded with the decision, if any.
          nullable: true
          type: string
        decided_at:
          description: When the decision was submitted.
          format: date-time
          nullable: true
          type: string
        updated_access_level_remote_id:
          description: |
            When `decision` is `CHANGE_ROLE`, the remote ID of the access level
            the reviewer selected.
          nullable: true
          type: string
        reassigned_to_reviewer_ids:
          description: |
            When `decision` is `REASSIGNED`, the user IDs the review was
            reassigned to.
          items:
            type: string
            format: uuid
          type: array
    CampaignItemReviewDecisionEnum:
      description: Decision recorded on a campaign item review row.
      enum:
        - APPROVED
        - REVOKED
        - CHANGE_ROLE
        - ADMIN_REVOKED
        - NO_ACTION
        - REASSIGNED
        - ADMIN_OVERRIDE_APPROVED
        - ADMIN_OVERRIDE_REVOKED
      example: APPROVED
      type: string
    CampaignItemReviewerAssignmentSourceEnum:
      description: How a reviewer was assigned to a campaign item.
      enum:
        - MANUAL
        - PRINCIPAL_MANAGER
        - ASSET_ADMIN_OWNER
        - PRINCIPAL_SELF
      example: MANUAL
      type: string
  securitySchemes:
    BearerAuth:
      scheme: bearer
      type: http

````

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