---
title: "Reassign review item"
method: POST
path: "/api/v2/access-certification/review-items/{reviewItemId}/reassign"
tags: ["Access Certification"]
---

# Reassign review item

`POST /api/v2/access-certification/review-items/{reviewItemId}/reassign`

## Request

- Base URL: `https://console.jumpcloud.com`
- URL: `https://console.jumpcloud.com/api/v2/access-certification/review-items/{reviewItemId}/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/:reviewItemId/reassign/post.ts> (a function with typed inputs; its response is checked against the schema)

Delegates review responsibility for one identity to another reviewer. The new reviewer
receives the item in their queue and must submit their own Keep or Revoke decision.

Reassignment does not trigger remediation. An optional `justification` is recorded on
the audit trail.

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

## Path parameters

- `reviewItemId` string, required

## Request body

- JumpcloudHttpAccesscertificationReassignReviewItemRequest: Delegate review for one identity
  - `assigneeUserId` string, required: New reviewer user ID
  - `justification` string: Optional reassignment note

## Response `200`

Review item reassigned successfully

- 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)

## Other responses

- `400`: Validation error with field-level details
- `401`: Missing or invalid credentials
- `403`: Forbidden — principal not assigned or lacks required role
- `404`: Resource not found
- `409`: Conflict — resource state prevents the requested action
- `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)
