Breezy HR
Coming soon — Breezy's own API is still in progress, so this is not connectable yet. Post a job to Breezy HR: title, description, employment type, location, department, category, experience and education levels, salary band, pipeline, questionnaire, tags and application-form field visibility. BYOK-only, production writes.
Coming soon — not connectable yet. Breezy's own v3 API is published as a work in progress, so we
are holding the integration back rather than selling it as live. Breezy shows on the Integrations
page as unavailable, connecting a key is refused, and breezy_* tools will not run. Everything below
documents the adapter as it will ship; it is accurate, not usable yet. Ask us if you need it early.
Breezy calls a job a position. Use Breezy to stand up a position directly in the customer's ATS, and publish it. It is a write target — Hyreflow reads only the company list, to verify the token.
Free (BYOK), once it opens. Breezy writes cost no credits. You will connect your own Breezy
personal access token and your company id from the dashboard Integrations page. The company's
Breezy plan needs the Developer API feature enabled. list_companies is the free connection check: it
verifies the key and returns the companies the token can reach.
Capability
| Tool | Does | Cost |
|---|---|---|
create_job | Create a position for the configured company | Free |
set_job_state | Publish a position (or move it to draft, archived or closed) | Free |
create_job parameters
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | The position title. |
description | string | yes | The position details. |
type | string | yes | fullTime, partTime, contract, temporary, other. |
location.country | string | yes | ISO 3166-1 alpha-2 country code, e.g. US. |
location.state | string | no | Validated against US states / Canadian provinces when the country is US or CA. |
location.city | string | no | The city the role is based in. |
location.is_remote | boolean | no | The role is remote. |
requisition_id | string | no | Your own requisition tracking id. |
department | string | no | Must match the name of one of the company's configured departments. |
category | string | no | software, design, product, sysadmin, devops, finance, custserv, sales, marketing, pr, hr, management, operations, other, or one of the company's own custom category ids. |
experience | string | no | na, internship, entry-level, associate, mid-level, senior-level, executive. |
education | string | no | unspecified, high-school, certification, vocational, associate-degree, bachelors-degree, masters-degree, doctorate, professional, some-college, vocational-diploma, vocational-degree, some-high-school. |
salary.from / salary.to | number | no | Pay range. |
salary.period | string | no | Matched case-insensitively against Breezy's standard periods or the company's own custom salary terms. |
salary.currency | string | no | A supported currency code. |
pipeline_id | string | no | One of the company's pipelines. A non-existent id is refused with 404. |
scorecard_id | string | no | One of the company's scorecards. A non-existent id is refused with 404. |
questionnaire_id | string | no | One of the company's questionnaires. A non-existent id is refused with 404. |
tags | array of string | no | Free-form position tags. |
application_form | object | no | Per-field visibility on the public application form — see below. |
application_form takes required, optional or hidden for each of name, headline, summary,
profile_photo, address, salary, email_address, phone_number, resume, work_history,
education and cover_letter, plus preferred_location. questionnaire_in_experience is a boolean.
hyreflow tools execute breezy_create_job --payload '{
"name": "Senior Platform Engineer",
"description": "<p>Own the deployment platform.</p>",
"type": "fullTime",
"location": {"country": "US", "state": "CA", "city": "San Francisco", "is_remote": false},
"experience": "senior-level",
"education": "bachelors-degree",
"salary": {"from": 160000, "to": 200000, "period": "yearly", "currency": "USD"},
"tags": ["platform", "kubernetes"]
}'The response is the full created position; its id is _id.
Breezy silently discards any field it doesn't recognize before saving — a mistyped key produces a
success with the value missing, not an error. Hyreflow rejects unknown top-level keys for exactly this
reason, so an error naming an "unsupported field" means a typo, not a missing feature. The same
asymmetry bites on round-trips: a position read back returns type, experience and category as
objects, while create takes plain strings — take the .id, never the object.
set_job_state parameters
| Field | Type | Required | Notes |
|---|---|---|---|
position_id | string | yes | The position to update. |
state | string | no | published (default), draft, archived, closed. |
hyreflow tools execute breezy_set_job_state --payload '{"position_id": "a3f9c1d2e4b5"}'It answers 204 with no body, so an empty result is success.
Publishing can fail with a 400 once the company's plan hits its active-position limit — that's a
billing constraint, not a bad payload, so relay it rather than retrying. pending shows up in the
state a position can be in, but the endpoint won't accept it as a value to set.
What creating a position does not do
statecannot be set here. Breezy decides the new position's state;set_job_state, above, moves it.salary.periodandsalary.currencyare validated against Breezy's own sets, which the vendor does not publish — ask the user what their account uses if one is refused.
pipeline_id, scorecard_id and questionnaire_id are checked by reference: a well-formed but
non-existent id returns 404. Only send one the user gave you. Breezy publishes no rate limit; don't
batch positions in parallel.