{"openapi":"3.1.0","info":{"title":"Breezy HR (BYOK) API","version":"0.1.0","description":"Breezy HR (BYOK) lets an AI assistant read your own Breezy HR data through the Breezy HR API with a key you supply (Breezy personal access token (starts with breezy_pat_)). Read-only: 10 tools (list_companies, get_company, list_positions, get_position, get_position_stream, list_departments, list_categories, get_pipeline, list_questionnaires, list_message_templates). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-breezy.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-breezy/docs"},"termsOfService":"https://connectorbay.com/byok-breezy/terms"},"servers":[{"url":"https://byok-breezy.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-breezy/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_companies":{"post":{"operationId":"list_companies","summary":"List the Breezy companies your token's user belongs to, with company id, name, friendly id, member count and dates. Use ","description":"List the Breezy companies your token's user belongs to, with company id, name, friendly id, member count and dates. Use the _id in the other tools. Use for \"Which Breezy companies can I access\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_companiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_company":{"post":{"operationId":"get_company","summary":"Get one Breezy company's profile: name, friendly id, member count and dates. Use for \"Show my Breezy company profile\".","description":"Get one Breezy company's profile: name, friendly id, member count and dates. Use for \"Show my Breezy company profile\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"}},"required":["company_id"],"title":"get_companyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_positions":{"post":{"operationId":"list_positions","summary":"List a company's positions (job requisitions) with name, state, type, location, department, requisition id and dates; fi","description":"List a company's positions (job requisitions) with name, state, type, location, department, requisition id and dates; filter by state and page with page_size. Use for \"Which positions are published at our company\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"},"state":{"anyOf":[{"enum":["published","draft","archived","closed","pending"],"type":"string"},{"type":"null"}],"default":null,"description":"Only positions in this state: published, draft, archived, closed or pending.","title":"State"},"page_size":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Positions per page (1 to 50). Omit to receive the full unpaged list.","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; only used together with page_size.","title":"Page"},"sort":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Sort order of the list (as accepted by the Breezy API).","title":"Sort"}},"required":["company_id"],"title":"list_positionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_position":{"post":{"operationId":"get_position","summary":"Get one position with its name, state, type, experience level, location, department, category, requisition id, dates and","description":"Get one position with its name, state, type, experience level, location, department, category, requisition id, dates and description text. Use for \"Show the details and description of one Breezy position\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"},"position_id":{"description":"Breezy position id (the _id value returned by list_positions).","maxLength":200,"title":"Position Id","type":"string"}},"required":["company_id","position_id"],"title":"get_positionArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_position_stream":{"post":{"operationId":"get_position_stream","summary":"Show a position's activity stream: when it was added, updated or changed state, with the old and new state. Acting user ","description":"Show a position's activity stream: when it was added, updated or changed state, with the old and new state. Acting user names are not returned. Use for \"When did this position change state\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"},"position_id":{"description":"Breezy position id (the _id value returned by list_positions).","maxLength":200,"title":"Position Id","type":"string"},"skip":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many events to skip for paging (default 0).","title":"Skip"}},"required":["company_id","position_id"],"title":"get_position_streamArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_departments":{"post":{"operationId":"list_departments","summary":"List the departments defined for a company (id and name). Use for \"What departments exist in our Breezy account\".","description":"List the departments defined for a company (id and name). Use for \"What departments exist in our Breezy account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"}},"required":["company_id"],"title":"list_departmentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_categories":{"post":{"operationId":"list_categories","summary":"List the position categories available to a company (id and name). Use for \"Which position categories can I use in Breez","description":"List the position categories available to a company (id and name). Use for \"Which position categories can I use in Breezy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"}},"required":["company_id"],"title":"list_categoriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_pipeline":{"post":{"operationId":"get_pipeline","summary":"Get the ordered stages of a hiring pipeline (id, name, stage type). Use 'default' or 'default_pool' for the built-in pip","description":"Get the ordered stages of a hiring pipeline (id, name, stage type). Use 'default' or 'default_pool' for the built-in pipelines. Use for \"What stages are in our default hiring pipeline\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"},"pipeline_id":{"description":"Pipeline id, or the special values default or default_pool.","maxLength":200,"title":"Pipeline Id","type":"string"}},"required":["company_id","pipeline_id"],"title":"get_pipelineArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_questionnaires":{"post":{"operationId":"list_questionnaires","summary":"List the questionnaires configured for a company (id and name only). Use for \"Which questionnaires do we have in Breezy\"","description":"List the questionnaires configured for a company (id and name only). Use for \"Which questionnaires do we have in Breezy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"}},"required":["company_id"],"title":"list_questionnairesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_message_templates":{"post":{"operationId":"list_message_templates","summary":"List the saved message templates of a company (id and name only, without the body text). Use for \"Which message template","description":"List the saved message templates of a company (id and name only, without the body text). Use for \"Which message templates are saved in Breezy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"company_id":{"description":"Breezy company id (the _id value returned by list_companies).","maxLength":200,"title":"Company Id","type":"string"}},"required":["company_id"],"title":"list_message_templatesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}