---
title: "Update Hiring Decision"
method: PUT
path: "/api/hiring-decisions/{decision_id}"
tags: ["Hiring Decisions"]
---

# Update Hiring Decision

`PUT /api/hiring-decisions/{decision_id}`

## Request

- Base URL: `https://api.thebetterhire.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.thebetterhire.ai/api/hiring-decisions/{decision_id}`
- Auth: HTTP bearer

Partial update. PUT-ing `decision` re-fires the mig-017 triggers (e.g.
offer_accepted increments filled_count) — handled in Postgres, not here.

## Path parameters

- `decision_id` string, uuid, required

## Request body

- HiringDecisionUpdate: PUT body. Field set mirrors the old route's whitelist (route.ts:69-81) EXACTLY — note it exposes 4 timestamp fields POST does not (offer_responded_at, offer_accepted_at, offer_declined_at, onboarding_date), which is how accept/decline/onboarding transitions are recorded.
  - `decision` string, nullable
  - `offer_details` unknown
  - `decision_notes` string, nullable
  - `rejection_reason` string, nullable
  - `rejection_feedback` string, nullable
  - `decline_reason` string, nullable
  - `offer_expires_at` string, date-time, nullable
  - `offer_responded_at` string, date-time, nullable
  - `offer_accepted_at` string, date-time, nullable
  - `offer_declined_at` string, date-time, nullable
  - `onboarding_date` string, date-time, nullable

## Response `200`

Successful Response

- HiringDecisionRow: Full hiring_decisions row — what POST/PUT return (bare RETURNING *). Every column is declared so nothing is silently dropped when a column is added to the table.
  - `id` string, required
  - `organization_id` string, required
  - `application_id` string, required
  - `job_position_id` string, required
  - `decision` string, required
  - `decided_by` string, nullable
  - `decided_at` string, date-time, nullable
  - `offer_details` unknown
  - `offer_extended_at` string, date-time, nullable
  - `offer_expires_at` string, date-time, nullable
  - `offer_responded_at` string, date-time, nullable
  - `offer_accepted_at` string, date-time, nullable
  - `offer_declined_at` string, date-time, nullable
  - `rejected_at` string, date-time, nullable
  - `withdrawn_at` string, date-time, nullable
  - `onboarding_date` string, date-time, nullable
  - `decision_notes` string, nullable
  - `rejection_reason` string, nullable
  - `rejection_feedback` string, nullable
  - `decline_reason` string, nullable
  - `decline_notes` string, nullable
  - `feedback_shared_with_candidate` boolean, nullable
  - `candidate_added_to_talent_pool` boolean, nullable
  - `created_at` string, date-time, nullable
  - `updated_at` string, date-time, nullable
  - `deleted_at` string, date-time, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/thebetterhire/apis/interanalysis-b2b-api.md) · [All operations](https://skmtc.dev/thebetterhire/apis/interanalysis-b2b-api/llms.txt) · [OpenAPI document](https://skmtc.dev/thebetterhire/apis/interanalysis-b2b-api/revisions/c8ad03e900ea?raw)
