Jobs API and MCP
View as MarkdownSearch open jobs for free with no key, then start and send applications on the person's account. A REST API and an MCP server that signs in only when it has to.
The talent side of the API: find an open role and apply to it, from your own code or from inside any assistant that speaks MCP. Searching is free and needs no key. Only the calls that act as a person (starting applications, reading them, sending one) need their account, and those sign them in when they are first called.
The catalog
Live postings from thousands of employers, mostly venture-backed companies, read straight off their own job boards every six hours. A posting that closes is retired from search within hours, so a result is a job somebody can still apply to. Salary is shown only where the employer publishes a band.
Add it to an assistant
One URL, no key:
https://www.refolk.ai/api/mcp/jobsIn Claude, ChatGPT or any other chat app that takes a server URL, add it as a custom connector with no authentication. Search works straight away. The first time the person asks to apply to something, the server answers with an OAuth challenge and the app opens a Refolk sign-in in a new window; after that it is connected.
The tools
| Tool | Account | What it does |
|---|---|---|
refolk_search_jobs | No | A sentence in, ranked roles out, with how the sentence was read. |
refolk_get_job | No | One posting, whole, by id or link. |
refolk_apply_to_jobs | Yes | Up to 10 jobs onto the person's list, each with a tailored resume and cover letter written in the background. Sends nothing. |
refolk_my_applications | Yes | Where each application stands, or one in full with its cover letter. |
refolk_send_application | Yes | Submits one ready application through the employer's own form. Needs confirmed: true. |
Everything on this side is free. Sending is capped at 25 applications in any seven days, the same limit the app has.
Search over HTTP
curl "https://www.refolk.ai/api/v1/jobs/search?query=senior+rust+backend+engineer,+remote+in+Europe"The sentence is read for a role, a level, a place, remote or hybrid, a salary
floor and a recency window; whatever is left is ranked as keywords against the
title, skills, company and description. interpreted says what was read, and
any of these fields overrides it:
| Field | Meaning |
|---|---|
query | The sentence. q works too. |
remote, workplace | Remote only, or one of remote, hybrid, onsite. |
countries | Names, ISO codes or regions (EU, LATAM). With remote, postings open to anywhere are included. |
location | A city or area. |
seniority | Any of intern, entry, mid, senior, staff, principal, manager, director, executive. A posting known to be at another level is left out; one with no stated level ranks lower. |
roleFamily | One of engineering, data, design, product, sales, marketing, operations, finance, people, legal, support, healthcare, science. |
company | One employer. |
minSalary | Annual floor. A posting with a stated band below it is left out; one that states none stays in. |
postedWithinDays | Recency. |
limit, offset | Up to 50 a page. Pass back nextOffset. |
GET /api/v1/jobs/{id} returns one posting with its whole description. Both
endpoints allow any origin, so a page can call them from the browser. Anonymous
calls share a rate limit per address; send a key for one of your own.
Applying over HTTP
These need the person's account: an OAuth access token from the sign-in above, or an API key from the API page.
curl -X POST https://www.refolk.ai/api/v1/applications \
-H "Authorization: Bearer $REFOLK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jobs": ["senior-backend-engineer-payments-3f9m2pa"]}'Starting an application never sends anything. It puts the job on the person's
list and writes the drafts; they read them at their applications,
and a send happens only when they press send there or ask for it. A job already
on the list comes back in alreadyQueued rather than twice.
A send that cannot go yet is a 409 conflict with a reason and a message
saying what to do first: not_ready while the drafts are being written,
answers_missing when the form will ask something the person has not answered,
needs_own_browser for the employers that only accept a submission from the
person's own browser (the extension fills those in there),
needs_account where the form sits behind creating an account on the
employer's site. A send that started is a 202; it runs in the background and
its progress shows on GET /api/v1/applications.
Try it on the search you came here for
Stop building boolean strings. Just describe the person.
Type one sentence. I plan the search, read GitHub, public LinkedIn and Crunchbase records, and the open web as it is right now, and hand back a ranked list with the reason next to every name.
01Describe them
One plain sentence. Role, city, stack, stage, whatever matters to you.
02I read the web live
GitHub, public LinkedIn and Crunchbase records, the open web. Not a database that went stale last quarter.
03You read the shortlist
Ranked, with the reasoning under every name. Open a profile, ask a follow-up, narrow it down.
- Staff backend engineers in NYC who shipped Rust in production
- Series A fintechs in SF under 50 people, growing headcount this year
- Maintainers of fast-growing Rust web frameworks on GitHub
- No boolean, no filters, no seat to buy. One box.
- Read at search time, so a profile updated yesterday counts today.
- Every step visible as it runs, every name with its reason.
500 free credits on sign-up. No card, no demo call. See real searches.