---
title: "Unassign an interviewer from an interview session"
method: POST
path: "/v1/interview_sessions/{interview_session_id}/actions/unassign_interviewer"
tags: ["Scheduling"]
---

# Unassign an interviewer from an interview session

`POST /v1/interview_sessions/{interview_session_id}/actions/unassign_interviewer`

## Request

- Base URL: `https://api.yardstick.team`
- URL: `https://api.yardstick.team/v1/interview_sessions/{interview_session_id}/actions/unassign_interviewer`
- Auth: HTTP bearer

Unassign an interviewer from an interview session

**Required scopes:** `interview_sessions:write`

Deletes the scoped `(session, interviewer)` assignment row when present. Requires a secret key with `interview_sessions:write`; publishable keys are denied. Removing an interviewer that is not currently assigned is an idempotent no-op and returns `removed: 0`. The response recomputes `scheduling_ready` / `scheduling_blocker` from the remaining rows and includes `user_tasks` booleans derived from actual trigger side effects.

**Example (curl):**

```bash
curl -X POST https://api.yardstick.team/v1/interview_sessions/is_abc123/actions/unassign_interviewer \
  -H 'Authorization: Bearer ys_sk_live_…' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: 7c3a…' \
  -d '{"interviewer_user_id":"00000000-0000-0000-0000-000000000000"}'
```

**Example (TypeScript):**

```ts
await fetch(
  "https://api.yardstick.team/v1/interview_sessions/is_abc123/actions/unassign_interviewer",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.YS_API_KEY}`,
      "Content-Type": "application/json",
      "Idempotency-Key": crypto.randomUUID(),
    },
    body: JSON.stringify({
      interviewer_user_id: "00000000-0000-0000-0000-000000000000",
    }),
  },
).then((r) => r.json());
```

## Path parameters

- `interview_session_id` string, required

## Headers

- `Idempotency-Key` string
- `X-Request-Id` string

## Request body

- object
  - `interviewer_user_id` string, required: The interviewer to unassign, as the `usr_<base32>` display id or the raw UUID.

## Response `200`

Interviewer unassigned or confirmed absent. The response includes scheduling and user-task side-effect signals.

- InterviewSessionUnassignInterviewerResponse: Success envelope for unassigning an interviewer from an interview session.
  - `object` 'interview_session_interviewer', required
  - `interview_session_id` string, required: Display id of the interview session, e.g. `is_<base32>`.
  - `interviewer_user_id` string, required: Raw UUID of the interviewer requested for removal.
  - `removed` integer, required: 1 when a row was deleted; 0 for an idempotent no-op.
  - `scheduling_ready` boolean, required: True only when the session has exactly one interviewer.
  - `scheduling_blocker` 'INTERVIEWER_ASSIGNMENT_REQUIRED' | 'INTERVIEWER_ASSIGNMENT_AMBIGUOUS', nullable, required: Scheduling blocker derived from the current interviewer assignment rows.
  - `user_tasks` object, required: Observed user-task trigger side effects after unassignment.
    - `interview_session_task_removed` boolean, required: Whether the interview-session task was removed.
    - `application_interview_task_removed` boolean, required: Whether the application-interview task was removed.
  - `audit_id` string, required: Display id of the audit log row.
  - `event_id` string, required: Display id of the API event row.

## Other responses

- `400`: Invalid request
- `401`: Authentication failure
- `403`: Permission denied (scope or feature flag)
- `404`: Resource not found. The error uses the resource-specific code and param names the exact body field or path parameter that referenced it.
- `409`: Conflict (e.g. idempotency key reuse with different body)
- `429`: Rate limited
- `500`: Internal error

---

[API](https://skmtc.dev/yardstick/apis/yardstick-public-api.md) · [All operations](https://skmtc.dev/yardstick/apis/yardstick-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/yardstick/apis/yardstick-public-api/revisions/35b5a6e88b35?raw)
