---
title: "Reactivate a candidate"
method: POST
path: "/candidates/{id}/reactivate"
tags: ["Candidates"]
---

# Reactivate a candidate

`POST /candidates/{id}/reactivate`

## Request

- Base URL: `https://api.cavuno.com/v1`
- URL: `https://api.cavuno.com/v1/candidates/{id}/reactivate`
- Auth: HTTP bearer

Restores sign-in, session access, and talent-surface visibility for a previously deactivated candidate. Profile and application history were preserved by deactivate. Idempotent: an already-active candidate returns 200 with the unchanged detail. Requires `candidates.manage`. The request is idempotent when an `Idempotency-Key` header is supplied.

## Path parameters

- `id` string, required: The candidate id.

## Response `200`

Candidate reactivated. `deactivatedAt` is `null`. Sign-in, session access, and talent-surface visibility are restored.

- CandidateDetail
  - `id` string, required: Unique identifier for the candidate.
  - `object` 'candidate', required: String representing the object's type.
  - `email` string, required: The candidate's email address.
  - `displayName` string, nullable, required: The candidate's display name.
  - `handle` string, nullable, required: Public-profile handle, or `null`.
  - `avatarUrl` string, nullable, required: Avatar URL, or `null`.
  - `hasResume` boolean, required: Whether a resume is on file. On list rows this reflects the stored pointer; on the single-candidate detail it reflects the resolved blob (always agrees with `resume !== null`), so the two can briefly disagree if a stored file was garbage-collected.
  - `createdAt` string, required: ISO-8601 timestamp of when the candidate registered.
  - `candidateCreatedAt` string, required: ISO-8601 timestamp when this Board user became an operator-visible Candidate. This is the reconciliation counterpart of candidate.created, not newsletter permission.
  - `updatedAt` string, nullable, required: ISO-8601 timestamp of the latest approved Candidate identity update, or null for older rows.
  - `revision` integer, required: Monotonic Candidate lifecycle revision; legacy rows are 0 until the rollout migration runs.
  - `lastActiveAt` string, nullable, required: ISO-8601 timestamp of the last activity on the board (a sign-in or signed-in use), to the hour, or `null`.
  - `deactivatedAt` string, date-time, nullable, required: ISO 8601 timestamp when sign-in was disabled, or `null` when the candidate can sign in. Deactivate revokes all sessions, blocks sign-in, and hides the profile from talent surfaces; profile and application history are preserved. Reactivate restores sign-in and talent-surface visibility; the candidate signs in again to establish a new session.
  - `profile` AdminCandidateProfile, nullable, required: Admin-visible profile detail, or `null` when no profile exists.
    - `headline` string, nullable, required
    - `location` string, nullable, required
    - `bio` string, nullable, required
    - `jobSearchStatus` string, nullable, required
    - `profileVisibility` string, nullable, required
    - `openToRelocate` boolean, nullable, required
    - `seniority` string[], required
    - `skills` string[], required
    - `workingPermits` string[], required
    - `interestedRoles` string[], required
  - `savedJobCount` number, required: Number of jobs the candidate has saved. Values are capped at 1,000 in write-operation responses (reconcile/deactivate/reactivate/create/update); GET detail returns 422 `candidate_resource_limit` beyond the cap.
  - `alertCount` number, required: Number of job alerts the candidate has. Values are capped at 1,000 in write-operation responses (reconcile/deactivate/reactivate/create/update); GET detail returns 422 `candidate_resource_limit` beyond the cap.
  - `resume` CandidateResumeFile, nullable, required: Protected download path and metadata for the uploaded resume, or `null` when no resume is on file (or the storage blob is missing).
    - `downloadUrl` string, required: Stable, permission-protected Cavuno API path for downloading the candidate resume.
    - `contentType` string, required: MIME type of the stored resume file.
    - `sizeBytes` number, required: Size of the resume file in bytes.

## Other responses

- `404`: Candidate not found.

## Changes

- **2026-10-19** `c34152c38176`: 1 info
  - added the optional property `error/upgrade` to the response with the `404` status

[Operation history](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/changes/candidates/:id/reactivate/post.md)

---

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