---
title: "Review change requests"
method: POST
path: "/api/v1/change-requests/reviews"
tags: ["Change Requests"]
---

# Review change requests

`POST /api/v1/change-requests/reviews`

## Request

- Base URL: `https://api-docs.busabase.com`
- URL: `https://api-docs.busabase.com/api/v1/change-requests/reviews`
- Auth: none declared

## Request body

- object
  - `verdict` 'approved' | 'rejected', required
  - `reason` string
  - `changeRequestIds` string[], required

## Response `200`

Per-change-request review results (failures isolated — one bad id does not abort the rest).

- object
  - `results` union[], required
    - union
      - object
        - `changeRequestId` string, required
        - `ok` unknown, required
        - `status` string, required
        - `changeRequest` object, required
          - `id` string, required
          - `baseId` string, required
          - `targetType` 'base' | 'node', required
          - `nodeId` string, required
          - `status` 'in_review' | 'changes_requested' | 'approved' | 'rejected' | 'merged' | 'abandoned' | 'conflict', required
          - `submittedBy` string, required
          - `submittedByUser` object
            - `id` string, required
            - `name` string, required
            - `email` string, required
            - `image` string, required
            - `role` string
          - `sourceAttribution` object
            - `displayName` string, required
            - `ownerName` string, required
            - `channel` 'web_ui' | 'browser' | 'openapi' | 'sdk' | 'cli' | 'mcp' | 'skill' | 'webhook' | 'automation' | 'import', required
            - `playbook` object
              - …
          - `sourceMeta` object, required
          - `reviewPolicySnapshot` object, required
          - `mergeSummary` object, required: Filled in when the change request merges. `slugChanges` (present only when non-empty) lists items a restore brought back under a new slug because another item took the old one while they were in the Trash: `{ nodeId, nodeType, name, fromSlug, toSlug }`. Read the new slug from here instead of assuming the old one.
          - `rejectedReason` string, required
          - `reviewedAt` string, required
          - `mergedAt` string, required
          - `createdAt` string, required
          - `updatedAt` string, required
          - `base` object, required
            - `id` string, required
            - `nodeId` string, required
            - `slug` string, required
            - `name` string, required
            - `description` string, required
            - `reviewPolicy` object, required
              - …
            - `createdAt` string, required
            - `fields` object[], required
              - …
          - `node` object, required
            - `id` string, required
            - `parentId` string, required
            - `type` 'folder' | 'base' | 'skill' | 'drive' | 'airapp' | 'file' | 'doc' | 'form' | 'whiteboard' | 'workflow' | 'html', required
            - `slug` string, required
            - `name` string, required
            - `description` string, required
            - `metadata` object
              - …
            - `settings` object
              - …
            - `explicitVisibility` 'private' | 'workspace' | 'public'
            - `icon` union
              - …
            - `position` number, required
            - `createdAt` string, required
            - `updatedAt` string, required
            - `baseId` string, required
            - `children` object[], required
              - …
            - `hasChildren` boolean
            - `shared` boolean
            - `sharedViaAncestor` boolean
          - `operations` object[], required
            - `id` string, required
            - `changeRequestId` string, required
            - `baseId` string, required
            - `targetType` 'base' | 'node', required
            - `nodeId` string, required
            - `operation` 'node_create' | 'node_rename' | 'node_delete' | 'node_restore' | 'node_move' | 'record_create' | 'record_update' | 'record_delete' | 'record_variant' | 'view_create' | 'view_update' | 'view_delete' | 'view_restore' | 'base_add_field' | 'base_delete_field' | 'base_update_field' | 'base_convert_field' | 'base_reorder_fields' | 'base_restore_field' | 'base_archive' | 'base_restore' | 'record_restore' | 'skill_file_create' | 'skill_file_update' | 'skill_file_delete' | 'skill_metadata_update' | 'drive_file_create' | 'drive_file_update' | 'drive_file_delete' | 'drive_metadata_update' | 'airapp_file_create' | 'airapp_file_update' | 'airapp_file_delete' | 'airapp_metadata_update' | 'doc_update' | 'whiteboard_document_update' | 'workflow_document_update' | 'html_document_update', required
            - `status` 'pending' | 'merged' | 'archived' | 'failed', required
            - `targetRecordId` string, required
            - `targetViewId` string, required
            - `filePath` string, required
            - `sourceRecordId` string, required
            - `sourceCommitId` string, required
            - `baseCommitId` string, required
            - `headCommitId` string, required
            - `deleteMode` 'archive', required
            - `mergedRecordId` string, required
            - `mergedViewId` string, required
            - `position` number, required
            - `createdAt` string, required
            - `updatedAt` string, required
            - `headCommit` object, required
              - …
            - `baseFields` object, required
          - `primaryOperation` object, required
            - `id` string, required
            - `changeRequestId` string, required
            - `baseId` string, required
            - `targetType` 'base' | 'node', required
            - `nodeId` string, required
            - `operation` 'node_create' | 'node_rename' | 'node_delete' | 'node_restore' | 'node_move' | 'record_create' | 'record_update' | 'record_delete' | 'record_variant' | 'view_create' | 'view_update' | 'view_delete' | 'view_restore' | 'base_add_field' | 'base_delete_field' | 'base_update_field' | 'base_convert_field' | 'base_reorder_fields' | 'base_restore_field' | 'base_archive' | 'base_restore' | 'record_restore' | 'skill_file_create' | 'skill_file_update' | 'skill_file_delete' | 'skill_metadata_update' | 'drive_file_create' | 'drive_file_update' | 'drive_file_delete' | 'drive_metadata_update' | 'airapp_file_create' | 'airapp_file_update' | 'airapp_file_delete' | 'airapp_metadata_update' | 'doc_update' | 'whiteboard_document_update' | 'workflow_document_update' | 'html_document_update', required
            - `status` 'pending' | 'merged' | 'archived' | 'failed', required
            - `targetRecordId` string, required
            - `targetViewId` string, required
            - `filePath` string, required
            - `sourceRecordId` string, required
            - `sourceCommitId` string, required
            - `baseCommitId` string, required
            - `headCommitId` string, required
            - `deleteMode` 'archive', required
            - `mergedRecordId` string, required
            - `mergedViewId` string, required
            - `position` number, required
            - `createdAt` string, required
            - `updatedAt` string, required
            - `headCommit` object, required
              - …
            - `baseFields` object, required
          - `operationCount` number, required
          - `reviews` object[], required
            - `id` string, required
            - `changeRequestId` string, required
            - `reviewerId` string, required
            - `reviewer` object
              - …
            - `verdict` 'approved' | 'rejected', required
            - `reason` string, required
            - `visibleOperationHeads` object, required
            - `createdAt` string, required
      - object
        - `changeRequestId` string, required
        - `ok` unknown, required
        - `error` string, required
        - `code` string
        - `data` unknown

---

[API](https://skmtc.dev/busabase/apis/busabase-api.md) · [All operations](https://skmtc.dev/busabase/apis/busabase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/busabase/apis/busabase-api/revisions/bc6a7d5ff4c1?raw)
