Interview League API

Bring your research into Interview League

Research a company, role, and panel with your own agent (Hermes, Muse, Instinct, or a script), then send it straight into Interview League. The API creates the opportunity with its job description and your resume, adds each interviewer, generates interviewer intelligence, and returns a link you can open to practice.

The API is available on every plan. Your plan's limits apply exactly as they do in the app: Free personalizes one opportunity and two interviewers; Pro covers ten active opportunities with up to ten interviewers each, plus the paid intelligence sections.

1. Create a token

Go to Settings → API Access, choose a name and an expiry (7, 30, or 90 days), and copy the token. It starts with il_pat_ and is shown only once.

bash
export INTERVIEWLEAGUE_TOKEN="il_pat_..."
export IL_API="https://interview-prep-backend-production-3b9c.up.railway.app/api/v1"

2. Check who you are and what you can do

bash
curl -s "$IL_API/me" -H "Authorization: Bearer $INTERVIEWLEAGUE_TOKEN"

The response includes your plan (entitlements.plan.tier and status), the token's expiry, and remaining usage, such as how many personalized interviewers you have left.

3. Save your default resume once

bash
curl -s -X PUT "$IL_API/profile/resume" \
  -H "Authorization: Bearer $INTERVIEWLEAGUE_TOKEN" -H "Content-Type: application/json" \
  -d '{"resumeText": "…your resume…"}'

Opportunities created without a resumeText use it automatically. Send resumeText on an opportunity to use a tailored resume for that role instead.

4. Check you haven't saved the role already, then create it

bash
curl -s "$IL_API/opportunities?postingUrl=https://jobs.acme.com/vp-product" \
  -H "Authorization: Bearer $INTERVIEWLEAGUE_TOKEN"
bash
curl -s -X POST "$IL_API/opportunities" \
  -H "Authorization: Bearer $INTERVIEWLEAGUE_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "company": "Acme",
    "role": "VP Product",
    "postingUrl": "https://jobs.acme.com/vp-product",
    "jobDescription": "…full JD text…",
    "researchNotes": "Series C, 400 people, moving upmarket",
    "sources": ["https://acme.com/about"]
  }'

Prefer files? Send multipart/form-data with jdFile and/or resumeFile (PDF, up to 5MB).

Saving the same postingUrl twice returns 409 OPPORTUNITY_EXISTS with the existing opportunity's id. Tracking parameters (utm_*, gclid, ref…), www., and trailing slashes are ignored; other query parameters, such as a job ID, are kept.

5. Add interviewers and generate

bash
curl -s -X POST "$IL_API/opportunities/$OPP_ID/interviewers" \
  -H "Authorization: Bearer $INTERVIEWLEAGUE_TOKEN" -H "Content-Type: application/json" \
  -d '{"name": "Dana Kim", "title": "CPO", "linkedinUrl": "https://www.linkedin.com/in/…",
       "profileText": "…pasted profile…", "notes": "Ex-founder; probes pricing"}'

curl -s -X POST "$IL_API/opportunities/$OPP_ID/interviewers/$IV_ID/generate" \
  -H "Authorization: Bearer $INTERVIEWLEAGUE_TOKEN"
# -> 202 {"id": "…", "status": "queued", "statusUrl": "…"}

6. Poll, then open the result

bash
curl -s "$IL_API/jobs/$JOB_ID" -H "Authorization: Bearer $INTERVIEWLEAGUE_TOKEN"
curl -s "$IL_API/opportunities/$OPP_ID/interviewers/$IV_ID/intelligence" \
  -H "Authorization: Bearer $INTERVIEWLEAGUE_TOKEN"

Every response includes a webUrl. Hand it back to the user to finish the loop.

Next

A command-line tool (@interviewleague/cli) built on this API is planned.