Job Matching API · Early access
Résumé in, ranked live jobs out.
Your model can read a résumé. It can't see today's job market. POST résumé text to Seeker and get back real, currently-open roles ranked by fit, each with the evidence it matches and the reasons it might not. One HTTP call, plain JSON.
Works with Claude, ChatGPT, Cursor, or any agent that speaks HTTP.
Where it fits
One call in your agent's loop.
Your agent already talks to the user. Seeker is the step that turns a résumé into real, ranked openings it can talk about.
Your AI agent
sends the résumé
Seeker
searches live listings
Your AI agent
shows the user the jobs
The call
Send résumé text. Get ranked jobs.
The whole request is a résumé. No parsing, no embeddings, no job data to supply.
{
"candidateSchemaVersion": 1,
"sourceText": "Senior iOS engineer, 6 yrs.
Swift, UIKit, AppKit…"
}
{
"matches": [
{
"company": "Stripe",
"title": "Staff Backend Engineer",
"url": "https://stripe.com/jobs/…",
"score": 91,
"skillMatchPct": 88,
"matchExplanation": "Strong overlap:
Go, distributed systems.",
"rejectionRisks": ["Emphasizes Kafka."]
}
// + 71 more, ranked by score
],
"corpusVersion": "2026-06-29"
}
Advanced parametersall optional
- candidate
- Structured profile (skills, experience, education, target roles) to bias the ranking beyond the raw text.
- jobs
- Up to 25 of your own listings to score against this résumé instead of the live corpus.
- agent
- Your platform / product / version, for your own analytics.
- endUserId
- An opaque ID for the end user, so you can correlate calls on your side.
Quickstart
Live in one
authenticated POST.
No SDK. If your agent can make an HTTP request, it can call Seeker.
- 1
Get your key
Seeker is opening access gradually. Join the waitlist, tell us what you're building, and we'll send your key when your project is up.
Join the waitlist - 2
Send the résumé
One POST. Your key in the header, the résumé text as sourceText.
curl https://www.seekerscore.com/v1/match \ -H "Authorization: Bearer skr_live_…" \ -d '{ "candidateSchemaVersion": 1, "sourceText": "…résumé text…" }' - 3
Read the matches
Ranked jobs come back as JSON. Map over them and hand your user the roles, the scores, and the reasoning. That's the whole integration.
const { matches } = await res.json(); matches.forEach(job => { console.log(job.title, job.score); // job.matchExplanation, job.rejectionRisks });
The API may return a temporary timeout while processing a résumé for the first time. Retrying the same request is safe.
The Seeker layer
Why not just use an LLM?
Your AI can understand a résumé. Seeker gives it a hiring market to evaluate.
A hiring market
LLMs don't keep a live hiring dataset. Seeker does.
Every request is evaluated against a corpus of real job postings that gains new listings daily and re-checks each one periodically.
Matching, not retrieval
Job search starts with a query. Seeker starts with a candidate.
Retrieval gives you whatever the search returns. Seeker pulls candidate roles from its live corpus for the candidate, scores each one, then ranks the strongest matches.
Deterministic results
LLMs generate. Seeker scores.
The same résumé produces the same ranking every time, with an explanation for every recommendation. Testable, cacheable, easy to explain.
One API call. An entire hiring market evaluated against your candidate.
Auth
A Bearer token in the Authorization header. One key per project.
Access
Seeker is in early access. Join the waitlist and we'll reach out as access expands.
Pricing
Free while in early access. Usage-based pricing comes later, with notice first.
Join the waitlist.
We're expanding access as we keep building Seeker. Join the waitlist and we'll let you know when your project can get started. Free while in early access.