---
title: "Retrieve a draft's full content"
method: GET
path: "/v1/interview_plan_drafts/{draft_id}"
tags: ["Interview Plan Builder"]
---

# Retrieve a draft's full content

`GET /v1/interview_plan_drafts/{draft_id}`

## Request

- Base URL: `https://api.yardstick.team`
- URL: `https://api.yardstick.team/v1/interview_plan_drafts/{draft_id}`
- Auth: HTTP bearer

Retrieve a draft's full content

**Required scopes:** `interview_plans:read`

Read-only. Returns the draft's complete builder state: every stage checkpoint verbatim (outcomes, competencies, job_skills, interview_sequence, questions_and_directions), the per-stage `stage_versions` map, draft `status`, and a `source_metadata` provenance summary. This is the read half of the fetch-modify-submit editing loop: read the draft, take the edited stage's version from `stage_versions`, and pass it as the edit action's `source_stage` precondition. Questions always carry a discoverable id — stored ids verbatim, or a derived `question_N` fallback for generated questions that have not been edited yet.

Use `GET /v1/interview_plans/{interview_plan_id}` for the narrow lifecycle-agnostic plan read; use this route when you need full draft content for editing or diffing. Cross-organization, wrong-mode, and unknown draft ids return safe not-found responses.

**Example (curl):**

```bash
curl https://api.yardstick.team/v1/interview_plan_drafts/ipd_abc123 \
  -H 'Authorization: Bearer ys_sk_live_…'
```

**Example (TypeScript):**

```ts
await fetch("https://api.yardstick.team/v1/interview_plan_drafts/ipd_abc123", {
  headers: { Authorization: `Bearer ${process.env.YS_API_KEY}` },
}).then((r) => r.json());
```

## Path parameters

- `draft_id` string, required

## Headers

- `X-Request-Id` string

## Response `200`

Success

- InterviewPlanDraftRead: Full-content draft read: all stage checkpoints verbatim (questions carry derived `question_N` ids), the per-stage `stage_versions` map for `source_stage` preconditions, draft `status`, and `source_metadata` provenance.
  - `object` 'interview_plan_draft', required
  - `id` string, required
  - `status` 'draft' | 'validated' | 'published' | 'abandoned', required
  - `job_id` string, nullable, required
  - `role_context` object, required
  - `outcomes` unknown[], required
    - unknown
  - `competencies` unknown[], required
    - unknown
  - `job_skills` unknown[], required
    - unknown
  - `interview_sequence` unknown[], required
    - unknown
  - `questions_and_directions` object, required
  - `stage_versions` object, required
  - `source_metadata` object, required
  - `created_at` string, required
  - `updated_at` string, required

## 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)
