{"openapi":"3.1.0","info":{"title":"Shiftbase (BYOK) API","version":"0.1.0","description":"Shiftbase (BYOK) lets an AI assistant read your own Shiftbase data through the Shiftbase API with a key you supply (Shiftbase application API key (Settings, App center, Public API; needs App Center Plus)). Read-only: 10 tools (list_locations, list_departments, list_teams, list_shift_templates, list_rosters, list_open_shifts, list_timesheets, list_absences, list_absence_types, list_skills). The...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-shiftbase.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-shiftbase/docs"},"termsOfService":"https://connectorbay.com/byok-shiftbase/terms"},"servers":[{"url":"https://byok-shiftbase.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-shiftbase/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_locations":{"post":{"operationId":"list_locations","summary":"List the business locations with name, city, country and order. Use for \"What locations are set up in Shiftbase\".","description":"List the business locations with name, city, country and order. Use for \"What locations are set up in Shiftbase\".","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_departments":{"post":{"operationId":"list_departments","summary":"List the departments with their location, name, address and scheduling switches such as publishing and open-shift displa","description":"List the departments with their location, name, address and scheduling switches such as publishing and open-shift display. Use for \"Which departments exist in Shiftbase\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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_teams":{"post":{"operationId":"list_teams","summary":"List the teams, optionally within one department. Use for \"Which teams are in the security department\".","description":"List the teams, optionally within one department. Use for \"Which teams are in the security department\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"department_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this department id (see list_departments).","title":"Department Id"}},"title":"list_teamsArguments","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_shift_templates":{"post":{"operationId":"list_shift_templates","summary":"List the shift types (templates) with name, department, start and end time and colour. Use for \"Which shift types are de","description":"List the shift types (templates) with name, department, start and end time and colour. Use for \"Which shift types are defined in Shiftbase\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"department_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this department id (see list_departments).","title":"Department Id"}},"title":"list_shift_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}},"/v1/tools/list_rosters":{"post":{"operationId":"list_rosters","summary":"List scheduled shifts (the roster) between two dates with employee id, team, shift, date, times and description. Use for","description":"List scheduled shifts (the roster) between two dates with employee id, team, shift, date, times and description. Use for \"Who is scheduled to work next week in Shiftbase\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"min_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First date to include, YYYY-MM-DD (defaults to today).","title":"Min Date"},"max_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last date to include, YYYY-MM-DD (defaults to today).","title":"Max Date"},"user_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this employee (user) id.","title":"User Id"},"department_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this department id (see list_departments).","title":"Department Id"}},"title":"list_rostersArguments","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_open_shifts":{"post":{"operationId":"list_open_shifts","summary":"List open shifts that still need people between two dates, with instances remaining, times and department. Use for \"Whic","description":"List open shifts that still need people between two dates, with instances remaining, times and department. Use for \"Which Shiftbase shifts are still open next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"min_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First date to include, YYYY-MM-DD (defaults to today).","title":"Min Date"},"max_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last date to include, YYYY-MM-DD (defaults to today).","title":"Max Date"},"user_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this employee (user) id.","title":"User Id"},"department_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this department id (see list_departments).","title":"Department Id"}},"title":"list_open_shiftsArguments","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_timesheets":{"post":{"operationId":"list_timesheets","summary":"List worked-time records between two dates with employee id, scheduled and clocked times, status and total hours (wages ","description":"List worked-time records between two dates with employee id, scheduled and clocked times, status and total hours (wages and GPS data are left out). Use for \"What hours were logged in Shiftbase last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"min_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First date to include, YYYY-MM-DD (defaults to today).","title":"Min Date"},"max_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last date to include, YYYY-MM-DD (defaults to today).","title":"Max Date"},"user_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this employee (user) id.","title":"User Id"},"status":{"anyOf":[{"enum":["Approved","Declined","Pending"],"type":"string"},{"type":"null"}],"default":null,"description":"Only timesheets with this status.","title":"Status"}},"title":"list_timesheetsArguments","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_absences":{"post":{"operationId":"list_absences","summary":"List absence and time-off requests between two dates with employee id, type, dates, status and hours (notes are left out","description":"List absence and time-off requests between two dates with employee id, type, dates, status and hours (notes are left out). Use for \"Who has approved time off next week in Shiftbase\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"min_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First date to include, YYYY-MM-DD (defaults to today).","title":"Min Date"},"max_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last date to include, YYYY-MM-DD (defaults to today).","title":"Max Date"},"user_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this employee (user) id.","title":"User Id"},"status":{"anyOf":[{"enum":["Approved","Declined","Pending"],"type":"string"},{"type":"null"}],"default":null,"description":"Only absences with this status.","title":"Status"}},"title":"list_absencesArguments","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_absence_types":{"post":{"operationId":"list_absence_types","summary":"List the absence types (vacation, sick leave and so on) defined for the account. Use for \"Which absence types does Shift","description":"List the absence types (vacation, sick leave and so on) defined for the account. Use for \"Which absence types does Shiftbase have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_absence_typesArguments","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_skills":{"post":{"operationId":"list_skills","summary":"List the skills that can be assigned to employees and required on shifts. Use for \"Which skills are defined in Shiftbase","description":"List the skills that can be assigned to employees and required on shifts. Use for \"Which skills are defined in Shiftbase\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_skillsArguments","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}}}}