Job Studio
FeaturesPricing
Sign inStart free

For agents

Let your agent hand you leads.

Job Studio scores résumé fit, tailors applications and keeps your pipeline. Your own agent, such as Claude Code, Codex or a script, can add an opportunity to your queue with a personal API key. You stay in charge of what happens next: Job Studio never applies or sends messages for an agent.

Read skill.mdCreate an API key

Copy this prompt into your agent

Read https://personaljobcopilot.xyz/skill.md and set up Job Studio for me.
My API key is in the JOB_STUDIO_API_KEY environment variable; never print it or ask me to paste it into chat.
First run the connection check. Then ask me before you add anything to my Job Studio queue.
Only add opportunities I name or approve. Do not apply to jobs or message anyone on my behalf.

The prompt points your agent at /skill.md, which has the same steps as this page in plain markdown.

Step 1

Get an account and an API key

Sign up or sign in, then open Settings → API keys and generate a key. It starts with jc_ and is shown once. Job Studio stores only a hash.

Put the key in an environment variable, for example JOB_STUDIO_API_KEY. Don't paste it into a chat. The key acts as you, so revoke it in Settings if it leaks. No other tools are needed; any HTTP client works.

Step 2

Check the connection

This call reads nothing from your account and changes nothing.

curl -sS "https://personaljobcopilot.xyz/api/opportunities/inbound" \
  -H "X-API-Key: $JOB_STUDIO_API_KEY"
Success check: HTTP 200 and "connected": true. A 401 means the key is missing, mistyped or revoked.
{
  "connected": true,
  "endpoint": "/api/opportunities/inbound",
  "rateLimit": { "remaining": 100, "resetAt": "…" }
}

Step 3

Add your first opportunity

This writes one row to your real queue, and the API can't delete it, so have your agent ask you first and use a lead you actually want.

curl -sS -X POST "https://personaljobcopilot.xyz/api/opportunities/inbound" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $JOB_STUDIO_API_KEY" \
  -H "Idempotency-Key: my-agent:northstar-head-of-product" \
  -d '{
    "who": { "name": "Jamie Chen", "title": "Talent Partner", "company": "Northstar" },
    "role": "Head of Product",
    "ask": "Open to a chat this week?",
    "why": "Matches my product leadership focus",
    "source": "linkedin-message",
    "agent": "my-agent"
  }'
Success check: HTTP 201 with "created": true, and the row shows up on Opportunities. Sending the same request again returns 200 with "duplicate": true and no second row.
{
  "success": true,
  "created": true,
  "duplicate": false,
  "incomplete": true,
  "savedJobId": "<uuid>",
  "company": "Northstar",
  "role": "Head of Product",
  "opportunitiesUrl": "/opportunities",
  "workspaceUrl": "/workspace?job=<uuid>"
}

Without a description the row is saved as incomplete and stays unscored until you add the job description in the app. A bad payload returns 400 with a fields list and writes nothing.

Reference

Payload fields

FieldRequiredNotes
who.nameYesThe person who reached out
roleYesRole or ask title
whyYesOne line: why this is worth the user's time
sourceYeslinkedin-message, linkedin-notification, manual or other
companyYes*Top level or who.company
who.title, who.contactNoContact title; email or profile URL
askNoWhat they want, up to 8,000 characters
urlNohttp(s) link to the post or thread
descriptionNoFull job description. Without it the row is saved as incomplete and is not scored
rawTextNoOriginal message text
receivedAtNoISO timestamp, defaults to now
agentNoYour agent's name, shown as attribution
idempotencyKeyNoOr the Idempotency-Key header. 8–128 chars of letters, numbers, . _ : -

* Top-level company or who.company.

Available now

  • Create and revoke personal API keys (jc_…) in Settings → API keys. A key is shown once and stored only as a hash.
  • Check the connection: GET /api/opportunities/inbound with the X-API-Key header.
  • Add one opportunity to the user's queue: POST /api/opportunities/inbound. It lands on /opportunities as a saved row with source and contact.
  • Safe retries: the same Idempotency-Key (or the same payload) returns the existing row instead of a duplicate.
  • Clear errors: missing key or a bad key returns 401; a bad payload returns 400 with a fields list and writes nothing.

Not available

None of these is scheduled.

  • Reading, listing, editing or deleting opportunities through the API. The user reviews them in the app.
  • Running fit scores, assessments, résumé tailoring or cover letters through the API. The user starts these in the app.
  • Applying to jobs, sending messages or emails, or replying on LinkedIn. Job Studio never does these for an agent.
  • Scraping LinkedIn or any other site.
  • An MCP server or OAuth sign-in for agents. Use an API key.

© 2026 Job Studio. v0.11

What's NewAgentsPrivacyTerms