---
title: "Thumb a candidate up or down"
method: POST
path: "/api/v1/job/posts/{post_id}/candidate_judgments"
tags: ["Job::CandidateJudgments"]
---

# Thumb a candidate up or down

`POST /api/v1/job/posts/{post_id}/candidate_judgments`

## Request

- Base URL: `https://api.flexiple.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.flexiple.com/api/v1/job/posts/{post_id}/candidate_judgments`
- Auth: HTTP bearer

Upserts by profile: a re-thumb updates the existing judgment. Explicitly side-effect-free — nothing is re-scored and no automation fires. Send a thumbs `verdict`, or a calibration `fit` level (strong, partial, weak), which implies the verdict; one is required and a contradicting pair is refused. A call may carry a free-text reason (up to 500 characters); a re-thumb without one clears it.

## Request body

- object
  - `talent_profile_id` string, required
  - `verdict` 'up' | 'down'
  - `fit` 'strong' | 'partial' | 'weak'
  - `saved_search_id` integer
  - `reason` string, nullable

## Response `201`

Judgment recorded

- object
  - `data` JobCandidateJudgment, required
    - `id` integer, required
    - `verdict` 'up' | 'down', required
    - `fit` 'strong' | 'partial' | 'weak' | 'null', nullable, required
    - `saved_search_id` integer, nullable, required
    - `fit_score` integer, nullable, required
    - `reason` string, nullable, required
    - `filters_digest` string, nullable, required
    - `rubric_version_id` number, nullable, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `judged_by` string, required
    - `talent_profile_id` string, required

## Other responses

- `401`: Authentication failed

---

[API](https://skmtc.dev/flexiple/apis/flexiple-platform-api-v1.md) - [All operations](https://skmtc.dev/flexiple/apis/flexiple-platform-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/flexiple/apis/flexiple-platform-api-v1/revisions/27e7987859f2?raw)
