Refolk
DevelopersIntegrations

Jobs API and MCP

View as Markdown

Search 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/jobs

In 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

ToolAccountWhat it does
refolk_search_jobsNoA sentence in, ranked roles out, with how the sentence was read.
refolk_get_jobNoOne posting, whole, by id or link.
refolk_apply_to_jobsYesUp to 10 jobs onto the person's list, each with a tailored resume and cover letter written in the background. Sends nothing.
refolk_my_applicationsYesWhere each application stands, or one in full with its cover letter.
refolk_send_applicationYesSubmits 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:

FieldMeaning
queryThe sentence. q works too.
remote, workplaceRemote only, or one of remote, hybrid, onsite.
countriesNames, ISO codes or regions (EU, LATAM). With remote, postings open to anywhere are included.
locationA city or area.
seniorityAny 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.
roleFamilyOne of engineering, data, design, product, sales, marketing, operations, finance, people, legal, support, healthcare, science.
companyOne employer.
minSalaryAnnual floor. A posting with a stated band below it is left out; one that states none stays in.
postedWithinDaysRecency.
limit, offsetUp 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.

  1. 01Describe them

    One plain sentence. Role, city, stack, stage, whatever matters to you.

  2. 02I read the web live

    GitHub, public LinkedIn and Crunchbase records, the open web. Not a database that went stale last quarter.

  3. 03You read the shortlist

    Ranked, with the reasoning under every name. Open a profile, ask a follow-up, narrow it down.

  • 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.