Skip to content

API

The henry.careers API

Every role on the board as JSON. Free, no key, no sign-up — for your own code, or for an AI assistant searching on your behalf.

1,826 UK roles, the same ones the board shows, last checked 15 November 2026. Each comes with the link to its original advert, because applications go to the employer and never through us.

Asking an AI assistant to search it

If your assistant can fetch web pages, it can read this directly. Change the family and the region to suit, and paste:

Fetch https://henry.careers/api/v1/families/engineering.json

Find the roles in the "london" region. For each, give me the title,
the employer, the pay as advertised, and the applyUrl.

Rules for reading it:
- pay.basis "disclosed" means the employer stated the figure.
  "role-shape" means they did not, so do not quote a salary for it.
- pay.tag, family and region are henry.careers' classifications,
  not statements by the employer.
- The applyUrl is the original advert and the authority on the role.
  Check anything important there before relying on it.

The rules in that prompt are there because an assistant will otherwise treat everything in the file as fact, and some of it is our judgement. They are the same distinctions this site draws on every page.

Use the family file, not the whole board

The full file is 1.4 MB, and many assistants cut off a response that size without saying so — then answer confidently from whatever part they read. Every family file below except clinical and medical is 146 KB or less; clinical and medical, at 742 KB, is the one still large enough to be cut off. Asking for a region does not help, because the assistant still has to read the whole file to filter it. The check that works is comparing the number of roles it reports with the count in the table: far fewer means it was cut off.

Finding the role is the part an assistant does well. Applying is where employers have views: some make you agree not to use AI in interviews, and one lists AI-generated CVs that read as generic among the reasons candidates did not get past its first screen. What employers say about AI in applications, in their own words.

Endpoints

Path What
/api/v1/meta.json When the board was last checked, counts, and the URL of every other file. Small. Fetch this first.
/api/v1/jobs.json Every role — 1,826 of them, 1.4 MB.
/api/v1/families/clinical.json Clinical and medical — 868 roles, 742 KB
/api/v1/families/engineering.json Engineering — 197 roles, 146 KB
/api/v1/families/data-and-ai.json Data and AI — 163 roles, 118 KB
/api/v1/families/product-and-design.json Product and design — 69 roles, 50 KB
/api/v1/families/leadership.json Leadership — 133 roles, 100 KB
/api/v1/families/finance.json Finance — 47 roles, 35 KB
/api/v1/families/legal.json Legal and compliance — 15 roles, 11 KB
/api/v1/families/commercial.json Sales and marketing — 90 roles, 65 KB

244 roles have a title that names no family we use, so they are in jobs.json and in no family file.

How fresh it is

The files are rebuilt with the board, which happens at most a few times a day. checkedAt in meta.json says when the listings were last fetched from their sources, so a program can poll that small file and only fetch the rest when it changes. Polling more often than hourly gets nothing new.

It is a snapshot. A role can close between our check and your request, and the original advert is always the authority on whether it is still open.

Fields

Each role in jobs has the fields below. Within v1 fields are added and never renamed or removed; a change that cannot keep to that will be published as v2 alongside.

id
Stable for the life of the advert: the source and its own id, e.g. greenhouse:8318103.
url
This site’s page for the role.
applyUrl
The original advert. Applications go there — never to us.
title, employer, location
As the advert states them.
track
permanent or contract. Day rates are never turned into salaries.
family, region
Our classification from the title and location, or null where neither names one we use. A heuristic, not the employer’s statement.
source
nhs (NHS Jobs, a public-sector board), or greenhouse, ashby or lever (employers’ own boards).
postedOn, closesOn
Calendar dates as YYYY-MM-DD, whatever format the source used. closesOn is null where the source gives none, which is most private-sector adverts.
jobType, workingPattern
As stated, or null. Only NHS Jobs supplies a working pattern.
pay.tag
Our label for the pay, true on its own: “£100k+”, “£500+/day”, “Range from £90k” where a range crosses the bar, or “Pay not stated”.
pay.basis
How we know. disclosed means the employer stated a figure; role-shape means they did not and we listed the role on its seniority.
pay.min, pay.max, pay.period
The advertised figure in its own unit — year, day or hour. Null when none was stated.
pay.currency
GBP, or null when there is no figure.
pay.evidence
The text the figure was read from, so it can be checked against the advert.
pay.annualised, pay.note
Where an hourly or daily rate on a permanent role was annualised to test it against the bar: the annual equivalent, and how. Shown beside the advertised figure, never instead.
pension
The employer’s pension contribution where the advert states one, with the text it came from. Usually null.
summary
Our own one-line summary. Not the employer’s text.

What the data cannot tell you

Terms

Free to use for your own job search and for tools searching on your behalf. If you show these listings to other people, credit henry.careers, link each role to its original advert, and do not present our labels as the employer’s. To republish them at scale, ask first. The advert details belong to whoever published the advert — we grant access, not rights we do not hold. Full wording in our terms.

The board · By profession · The guide