{"openapi":"3.1.0","info":{"title":"Fountain (BYOK) API","version":"0.1.0","description":"Fountain (BYOK) lets an AI assistant read your own Fountain data through the Fountain API with a key you supply (Fountain Hire API key). Read-only: 9 tools (list_openings, get_opening, list_opening_stages, list_locations, list_location_groups, list_hiring_goals, list_rejection_reasons, list_archived_reasons, list_company_attributes). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-fountain.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-fountain/docs"},"termsOfService":"https://connectorbay.com/byok-fountain/terms"},"servers":[{"url":"https://byok-fountain.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-fountain/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_openings":{"post":{"operationId":"list_openings","summary":"List hiring openings (funnels) with title, status, brand, location, position, shift, pay rate and apply link. Filter by ","description":"List hiring openings (funnels) with title, status, brand, location, position, shift, pay rate and apply link. Filter by active flag, title, brand, location or dates. Needs the Fountain Hire package and the main tenant host. Use for \"Which active openings does our company have in Fountain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only active openings, false for inactive ones.","title":"Active"},"title":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only openings with this title.","title":"Title"},"brand":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only openings of this brand name.","title":"Brand"},"location_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only openings at the location with this name.","title":"Location Name"},"location_group_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only openings in the location group with this name.","title":"Location Group Name"},"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text search over opening title, location, address, brand, position and location group (slower than other filters).","title":"Query"},"listing_status":{"anyOf":[{"enum":["public","internal","not_posted","intake_closed"],"type":"string"},{"type":"null"}],"default":null,"description":"On accounts with four-state sourcing: public, internal, not_posted or intake_closed.","title":"Listing Status"},"created_at_gt":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only openings created after this ISO 8601 time.","title":"Created At Gt"},"updated_at_gt":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only openings updated after this ISO 8601 time.","title":"Updated At Gt"},"sort_by":{"anyOf":[{"enum":["funnel_id","funnel_name","funnel_created_at","brand","location_group_name","location_name"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field.","title":"Sort By"},"sort_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc.","title":"Sort Direction"},"page":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Openings per page.","title":"Per Page"}},"title":"list_openingsArguments","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_opening":{"post":{"operationId":"get_opening","summary":"Get one opening by id with title, listing status, brand, address, job type, location, shift, pay rate, workflow and appl","description":"Get one opening by id with title, listing status, brand, address, job type, location, shift, pay rate, workflow and apply link. Use for \"Show me the details of one Fountain opening\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"opening_id":{"description":"Fountain opening (funnel) id, as returned by list_openings in the id field.","maxLength":200,"title":"Opening Id","type":"string"}},"required":["opening_id"],"title":"get_openingArguments","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_opening_stages":{"post":{"operationId":"list_opening_stages","summary":"List the stages of an opening's hiring workflow in order, with stage id, title and type. Use for \"What stages does the h","description":"List the stages of an opening's hiring workflow in order, with stage id, title and type. Use for \"What stages does the hiring workflow of this opening have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"opening_id":{"description":"Fountain opening (funnel) id, as returned by list_openings in the id field.","maxLength":200,"title":"Opening Id","type":"string"}},"required":["opening_id"],"title":"list_opening_stagesArguments","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_locations":{"post":{"operationId":"list_locations","summary":"List the locations of your account with name, city, state, country, address and location group. Use for \"Which locations","description":"List the locations of your account with name, city, state, country, address and location group. Use for \"Which locations do we hire for in Fountain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_locationsArguments","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_location_groups":{"post":{"operationId":"list_location_groups","summary":"List the location groups (regions or clusters of locations) of your account with id and name. Use for \"What location gro","description":"List the location groups (regions or clusters of locations) of your account with id and name. Use for \"What location groups are defined in Fountain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_location_groupsArguments","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_hiring_goals":{"post":{"operationId":"list_hiring_goals","summary":"List hiring goals: target number of hires per opening and stage, hires so far, remaining days, due date and filled or un","description":"List hiring goals: target number of hires per opening and stage, hires so far, remaining days, due date and filled or unfilled status. Use for \"Which hiring goals are still unfilled and when are they due\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["unfilled","filled"],"type":"string"},{"type":"null"}],"default":null,"description":"unfilled or filled.","title":"Status"},"current":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for goals whose hire-by date is today or later.","title":"Current"},"past":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for goals whose hire-by date is before today.","title":"Past"},"open":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for goals that have not been closed.","title":"Open"},"opening_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only goals of this opening id.","title":"Opening Id"},"hire_by_lt":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only goals with a hire-by date before this ISO 8601 date.","title":"Hire By Lt"},"page":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Goals per page.","title":"Per Page"}},"title":"list_hiring_goalsArguments","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_rejection_reasons":{"post":{"operationId":"list_rejection_reasons","summary":"List the rejection reasons configured in your account (id and text), optionally searched by text. Use for \"What rejectio","description":"List the rejection reasons configured in your account (id and text), optionally searched by text. Use for \"What rejection reasons can recruiters choose in Fountain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Search text to find specific reasons.","title":"Query"}},"title":"list_rejection_reasonsArguments","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_archived_reasons":{"post":{"operationId":"list_archived_reasons","summary":"List the archive reasons configured in your account (id and text), optionally searched by text. Use for \"What archive re","description":"List the archive reasons configured in your account (id and text), optionally searched by text. Use for \"What archive reasons exist in Fountain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Search text to find specific reasons.","title":"Query"}},"title":"list_archived_reasonsArguments","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_company_attributes":{"post":{"operationId":"list_company_attributes","summary":"List company attributes (custom tags used on openings, locations and hiring goals) with their type and allowed values. U","description":"List company attributes (custom tags used on openings, locations and hiring goals) with their type and allowed values. Use for \"Which company attributes are defined in Fountain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Attributes per page.","title":"Limit"}},"title":"list_company_attributesArguments","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}}}}