Breezy HR job board API: the public JSON feed, the keyed API and where the text lives
A Breezy HR career portal, {company}.breezy.hr, can be read two ways. Breezy's documented API, under api.breezy.hr/v3, needs a token that belongs to a user of that company's account. The portal itself serves every published position as JSON at https://{company}.breezy.hr/json, with no token, at an address Breezy's developer documentation does not mention (checked 12 October 2026). This page covers both, as we measured them.
The documented API
Breezy's developer reference (read 12 October 2026) roots every endpoint in https://api.breezy.hr/v3. Every request except sign-in and the health check needs an Authorization header carrying either a personal access token, which a user creates under My Settings, API Keys, and which starts breezy_pat_, or a session token from POST /v3/signin with that user's email and password. Positions are GET /company/{id}/positions and GET /company/{id}/position/{id}.
- The limit. 100 requests in each 60-second interval per token; over that, HTTP 429. Every response carries
X-RateLimit-Limit,X-RateLimit-RemainingandX-RateLimit-Reset. - Without a token it answers HTTP 400 with
{"error":{"type":"missingAccessToken","message":"access token is null or empty"}}, not 401 (read 12 October 2026). - Whose view it is. The token reads its own company's account: positions, candidates, pipelines and the rest of the endpoint list. It is the way to read your own account, not someone else's board.
The public feed
curl "https://{company}.breezy.hr/json"
The response is a JSON array of every published position on the portal, in one response, without the posting text. Checked against the live portals on 24 September and 12 October 2026:
- An unknown subdomain answers HTTP 404 with an HTML page titled "Career portal not found | Breezy HR", never an empty list.
- A posting id the board does not have answers HTTP 302, a redirect to the portal's home page, rather than a 404.
- Names are first come. The subdomain
breezyis a trial account holding three test positions with placeholder pay such as "$0.05 – $0.06 / hour", not Breezy's own hiring.
What a position holds
Each position carries the same 11 keys: id, friendly_id, name (the title), url, published_date, type, location, department, salary, company and locations. That held on 46 positions across nine boards on 24 September and on all 69 on the board measured below. The ones that need care:
- Pay is a sentence.
salaryis Breezy's own rendering of what the company entered: "$60,000 – $70,000 / year", "$22 – $30 / hour", "$3,500+ / year", or an empty string when nothing was entered. It carries the currency's sign, not its code, so "$" alone does not say which dollar. The posting's own page states the ISO code in its structured data. - The primary place is flagged, not first.
locationis the primary place: a label such as "Austin, TX", "Canada" or "Worldwide", a city, a state, a country with its two-letter code (orworldwide), and remote details.locationslists every place withprimary: trueon one of them, and on 2 of the 69 positions below that one was not first. Older postings can have an empty list. - Remote has three values.
is_remoteis a flag, andremote_detailssays which kind:remote("Fully remote, no location restrictions"),remote-location("Fully remote, within chosen location(s)") orhybrid. - Type and department.
typeis an id and a name:fullTime"Full-Time",partTime,contract,temporaryandotherseen live.departmentis text, an empty string or null. - No text. The posting's text is only on its page,
https://{company}.breezy.hr/p/{friendly_id}, which also carries a schema.org JobPosting block; where the posting states pay, that block gives the currency's ISO code.
Locations also carry an office street address when the company entered one, and company holds the portal's name, its subdomain and a logo address.
Measured on a public board
The board in the Actor's example input listed 69 positions on Monday 12 October 2026. The feed is one request; reading every position's text as well took 70 requests, the feed and one page per position, in 24 seconds (run JPsjpZXn59Mr10qW7).
| Fact | Positions with it | Notes |
|---|---|---|
| Country | 69 of 69 | All in the United States, across seven states |
| City | 68 of 69 | The one without is labelled "United States" |
| More than one place | 5 of 69 | Three list two places, two list three |
| Remote | 2 of 69 | One with no location restrictions, one within chosen locations |
| Employment type | 69 of 69 | Full-time 68, contract 1 |
| Pay | 0 of 69 | The company entered none |
| Department | 0 of 69 | Empty or null on every position |
55 of the 69 were published in October, the oldest in June 2026. A board this size is cheap to list and costs one request per position once you want the text.
Where it stops
- It is undocumented. Breezy documents neither the feed nor a limit for it, so it can change shape without notice.
- The text and the currency code cost a request each. Both live only on the posting page.
- Posting pages refuse some requests. In that read, 8 of 78 attempts on posting pages were answered HTTP 403 from Apify's datacentre addresses; a second read one page at a time, at a third of the pace, saw 6 of 76 (run
tIwqjAcoWuBmXcDCZ). The feed answered at the first attempt both times. - Nothing says what changed. No field records an edit, so a changed position is found only by comparing it with the last read, and an edit to the text alone cannot be seen from the feed at all.
Breezy HR Jobs Scraper reads the feed in one request per board and opens posting pages only when you ask for descriptions; when a page states the same amounts as the feed, it takes the currency code from the page. In incremental mode it compares each position's fields in the feed with the last run and returns, and charges for, only positions that are new, changed, back or gone. As with any reader of the feed, an edit only to a posting's text is not reported. Its page has the price and every field. For Breezy HR beside fourteen other systems in one table, see the measured run of the Career Site Jobs Scraper.
The same reference for other systems
- Ashby job board API: endpoint, fields and pay data, measured
- Greenhouse job board API: endpoints, fields and limits, measured
- JazzHR job board API: the keyed API, the public career page and what each holds
- Lever job board API: the Postings API on its two hosts, measured
- Recruitee job board API: the offers endpoint, its fields and the 2027 token deadline
- Rippling job board API: the public list, the job record and pay by tier
- Workable job board API: the public endpoint, its fields and its rate limit
- Workday job board API: the careers-page JSON, its paging and its 2,000 cap
Published 2026-10-12.