---
title: "Bulk reassign review items"
method: POST
path: "/api/v2/access-certification/review-items/bulk-reassign"
tags: ["Access Certification"]
---

# Bulk reassign review items

`POST /api/v2/access-certification/review-items/bulk-reassign`

## Request

- Base URL: `https://console.jumpcloud.com`
- URL: `https://console.jumpcloud.com/api/v2/access-certification/review-items/bulk-reassign`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/jumpcloud/apis/jumpcloud-console-api/docs/api/v2/access-certification/review-items/bulk-reassign/post.ts> (a function with typed inputs; its response is checked against the schema)

Delegates review responsibility for multiple identities to a single reviewer in one request.
Reassignment does not trigger remediation — the new reviewer must submit their own decision.

All review items must belong to the same active campaign run. A shared `justification` is
recorded on the audit trail for each reassignment.

Maximum **100** review items per request.

**Required permission:** `accesscertification` (Full Access)

## Request body

- JumpcloudHttpAccesscertificationBulkReassignRequest: Delegate many review items to one assignee
  - `reviewItemIds` string[], required: Review item ids to reassign (same campaign run)
  - `assigneeUserId` string, required: New reviewer user ID applied to every item
  - `justification` string: Shared reassignment note (required by service)

## Response `200`

Bulk reassign processed (per-item success/error)

- JumpcloudHttpAccesscertificationBulkReassignResponse
  - `results` object[], required
    - `reviewItemId` string, required
    - `status` 'success' | 'error', required
    - `item` JumpcloudHttpAccesscertificationReviewItemResponse: One identity under review in a campaign run
      - `id` string, required: Review item ID
      - `campaignId` string, required
      - `campaignRunId` string, required
      - `identityId` string, required
      - `finalDecision` 'pending' | 'keep' | 'revoke', required: Recorded outcome for an identity or stage
      - `remediationAction` 'no_action' | 'pending' | 'scheduled' | 'completed' | 'failed' | 'canceled', required: Remediation status for one identity after a Revoke decision
      - `remediationActionError` string: User-facing error when remediationAction is failed
      - `beforeSnapshot` JumpcloudHttpAccesscertificationBeforeSnapshot, required: Point-in-time identity context frozen at activate
        - `identityId` string
        - `username` string
        - `email` string
        - `displayName` string
        - `jobTitle` string
        - `department` string
        - `managerName` string
        - `userState` string: Directory user state at activate
        - `directoryStatus` string: Directory status shown in users-in-scope filters / expansion (raw snapshot value)
        - `employeeType` string: Employee type for users-in-scope filters / expansion (raw snapshot value)
        - `costCenter` string: Org cost center code / label
        - `company` string: Company name from directory
        - `userGroupName` string
        - `userGroupId` string
        - `applicationName` string
        - `applicationId` string
        - `associationTimestampUtc` string, date-time: When access was granted — group membership for group scope; later of group membership and app-to-group binding for application scope (frozen at activate)
        - `provisionedAt` string, date-time: Application-to-group binding timestamp (application scope only; frozen at activate)
      - `reviewerStages` JumpcloudHttpAccesscertificationReviewerStageStatus[]
        - `stageIndex` integer
        - `reviewerType` string
        - `reviewerDisplayName` string: Display name for the reviewer (resolved from Directory when available)
        - `reviewerUserId` string
        - `decision` 'pending' | 'keep' | 'revoke': Recorded outcome for an identity or stage
        - `decidedAt` string, date-time
        - `stageDeadlineAt` string, date-time: Computed per-reviewer deadline for sequential chains (not persisted)
        - `justification` string
        - `isCurrentReviewer` boolean: True when the authenticated principal is the active reviewer for this stage
        - `actorType` 'reviewer' | 'admin_override' | 'if_no_response': Decision actor classification for the deciding row on this stage. `admin_override` when an administrator overrode the stage decision.
        - `isAdminOverride` boolean: True when the deciding actor for this stage was an administrator override
      - `currentStageIndex` integer: Active reviewer stage (sequential chains)
      - `assignedReviewerUserId` string: Current assignee for this identity
      - `reassignments` JumpcloudHttpAccesscertificationReviewItemReassignment[]: Ordered reassignment events on the audit trail. Each entry records the prior reviewer, new reviewer, and justification.
        - `stageIndex` integer
        - `fromReviewerUserId` string: Reviewer who held the item before this reassignment
        - `fromReviewerDisplayName` string: Display name for fromReviewerUserId (resolved via the same directory/search path as reviewerDisplayName)
        - `toReviewerUserId` string: Newly assigned reviewer added to the chain
        - `toReviewerDisplayName` string: Display name for toReviewerUserId (resolved via the same directory/search path as reviewerDisplayName)
        - `justification` string: Required justification recorded on the audit trail
        - `createdByUserId` string: Actor who performed the reassignment (may be an admin on behalf)
        - `createdByDisplayName` string: Display name for createdByUserId (resolved via the same directory/search path as reviewerDisplayName)
        - `createdAt` string, date-time
      - `accessChangedExternally` boolean: When `true`, the identity's live Directory membership differs from the frozen snapshot captured at campaign activation. Omitted when not yet evaluated.
      - `lastAccessedAt` string, date-time: SSO last login from search-api authentication.last_login (application scope; frozen at activate; display only)
    - `error` JumpcloudHttpAccesscertificationError
      - `message` string, required: Human-readable error message
      - `code` string: Machine-readable error code (e.g. stage_not_open, not_assigned).
      - `details` JumpcloudHttpAccesscertificationErrorDetail[]: Optional structured error details
        - `field` string: JSON pointer or field name
        - `message` string: Field-level validation message

## Other responses

- `400`: Validation error with field-level details
- `401`: Missing or invalid credentials
- `403`: Forbidden — principal not assigned or lacks required role
- `default`: Unexpected error

---

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