API reference
The machine-readable OpenAPI document lives at https://interview-prep-backend-production-3b9c.up.railway.app/api/v1/openapi.json. Load it into your agent, Postman, or an OpenAPI client generator for full request and response schemas.
| Method | Path | Description |
|---|---|---|
| get | /me | Caller identity, plan, and remaining usage |
| get | /profile/resume | Get the default resume |
| put | /profile/resume | Set the default resume (JSON resumeText, or multipart resumeFile PDF) |
| get | /opportunities | List or search opportunities |
| post | /opportunities | Create an opportunity (JSON, or multipart with PDF files) |
| get | /opportunities/{opportunity_id} | Get an opportunity with its interviewers |
| patch | /opportunities/{opportunity_id} | Update an opportunity (omitted = unchanged, null = clear) |
| post | /opportunities/{opportunity_id}/archive | Archive an opportunity (frees active capacity) |
| post | /opportunities/{opportunity_id}/activate | Mark an opportunity active (subject to the active-opportunity cap) |
| get | /opportunities/{opportunity_id}/interviewers | List interviewers on an opportunity |
| post | /opportunities/{opportunity_id}/interviewers | Add an interviewer (JSON, or multipart with a LinkedIn PDF) |
| patch | /opportunities/{opportunity_id}/interviewers/{interviewer_id} | Update an interviewer (omitted = unchanged, null = clear) |
| get | /opportunities/{opportunity_id}/interviewers/{interviewer_id}/intelligence | Interviewer intelligence and generated questions (section-gated by plan) |
| post | /opportunities/{opportunity_id}/interviewers/{interviewer_id}/generate | Start intelligence generation (async; poll the returned job) |
| get | /jobs/{job_id} | Poll a generation job |
| delete | /tokens/self | Revoke the token used for this request (logout) |