---
title: "Explain how candidates score against the job rubric"
method: POST
path: "/api/v1/job/posts/{post_id}/match_explanations"
tags: ["Job::MatchExplanations"]
---

# Explain how candidates score against the job rubric

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

## 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}/match_explanations`
- Auth: HTTP bearer

Why a candidate is a fit: the job rubric, and the cached score each candidate earned against it with the reasoning per metric. Reads only — unlike getJobSearchScores it never re-dispatches an evaluation, so a candidate nobody has scored comes back as unscored rather than costing a model call. band is null whenever failed_mandatory is non-empty: that score is a must-have override, not an assessment of how good someone is. verdict states the outcome on every row: failed_must_have, not_judged (any status other than scored), or the band for a candidate who passed.

## Request body

- object
  - `saved_search_id` integer, required
  - `talent_profile_ids` string[], required

## Response `200`

Explanations

- object
  - `data` object, required
    - `rubric` object, nullable, required
      - `version_id` integer, required
      - `status` 'awaiting_approval' | 'active', required
      - `metrics` object[], required
        - `name` string, required
        - `weight` integer, nullable
        - `scale_max` integer, required
        - `mandatory` boolean, required
    - `explanations` object[], required
      - `talent_profile_id` string, required
      - `status` 'scored' | 'pending' | 'failed' | 'limit_reached' | 'unscored', required
      - `verdict` 'strong' | 'partial' | 'weak' | 'failed_must_have' | 'not_judged', required: failed_must_have when failed_mandatory is non-empty; not_judged when status is anything but scored; otherwise the band.
      - `score` integer
      - `band` 'strong' | 'partial' | 'weak' | 'null', nullable
      - `failed_mandatory` string[]
      - `metrics` object[]
        - `name` string, required
        - `score` integer, required
        - `reasoning` string, required
        - `scale_max` integer, nullable
        - `weight` integer, nullable
        - `mandatory` boolean, required
      - `error` string

## Other responses

- `400`: Invalid parameters
- `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)
