{"openapi":"3.1.0","info":{"title":"OnceHub (BYOK) API","version":"0.1.0","description":"OnceHub (BYOK) lets an AI assistant read your own OnceHub data through the OnceHub API with a key you supply (OnceHub API key). Read-only: 9 tools (test_api_key, list_bookings, get_booking, list_booking_calendars, get_booking_calendar, get_available_time_slots, list_teams, get_team, list_users). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-oncehub.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-oncehub/docs"},"termsOfService":"https://connectorbay.com/byok-oncehub/terms"},"servers":[{"url":"https://byok-oncehub.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-oncehub/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/test_api_key":{"post":{"operationId":"test_api_key","summary":"Check that the API key is valid; returns a short confirmation message. Use for \"Is my OnceHub API key working\".","description":"Check that the API key is valid; returns a short confirmation message. Use for \"Is my OnceHub API key working\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"test_api_keyArguments","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_bookings":{"post":{"operationId":"list_bookings","summary":"List bookings, newest first, optionally filtered by status, host, owner, booking calendar or start time. Invitee contact","description":"List bookings, newest first, optionally filtered by status, host, owner, booking calendar or start time. Invitee contact details are not returned. Use for \"What OnceHub bookings are scheduled this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["requested","scheduled","rescheduled","completed","canceled","no_show"],"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings with this status.","title":"Status"},"host":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings hosted or co-hosted by this user ID.","title":"Host"},"owner":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings owned by this user ID.","title":"Owner"},"booking_calendar":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings made through this booking calendar ID.","title":"Booking Calendar"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings starting after this date-time (ISO 8601).","title":"Starting After"},"starting_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings starting before this date-time (ISO 8601).","title":"Starting Before"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID to continue after (returns the next page); use the last ID of the previous page. Cannot be combined with before.","title":"After"},"before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID to page backwards from; use the first ID of the previous page. Cannot be combined with after.","title":"Before"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many objects to return (1 to 100, default 10).","title":"Limit"}},"title":"list_bookingsArguments","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_booking":{"post":{"operationId":"get_booking","summary":"Get one booking: subject, status, start time, duration, time zone, booking calendar and location. Use for \"Show me OnceH","description":"Get one booking: subject, status, start time, duration, time zone, booking calendar and location. Use for \"Show me OnceHub booking BKNG-J4FR05BKEWEX\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"booking_id":{"description":"ID of the booking, from list_bookings (starts with BKNG-).","maxLength":200,"title":"Booking Id","type":"string"}},"required":["booking_id"],"title":"get_bookingArguments","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_booking_calendars":{"post":{"operationId":"list_booking_calendars","summary":"List booking calendars (the bookable meeting types) with host, public URL, publish state and duration. Use for \"Which bo","description":"List booking calendars (the bookable meeting types) with host, public URL, publish state and duration. Use for \"Which booking calendars do I have in OnceHub\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only calendars hosted by this user ID or team ID.","title":"Host"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID to continue after (returns the next page); use the last ID of the previous page. Cannot be combined with before.","title":"After"},"before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID to page backwards from; use the first ID of the previous page. Cannot be combined with after.","title":"Before"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many objects to return (1 to 100, default 10).","title":"Limit"}},"title":"list_booking_calendarsArguments","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_booking_calendar":{"post":{"operationId":"get_booking_calendar","summary":"Get one booking calendar: name, subject, host, public URL, publish state and duration. Use for \"Show me the OnceHub book","description":"Get one booking calendar: name, subject, host, public URL, publish state and duration. Use for \"Show me the OnceHub booking calendar BKC-8DJNDNL86G\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"calendar_id":{"description":"ID of the booking calendar, from list_booking_calendars (starts with BKC-).","maxLength":200,"title":"Calendar Id","type":"string"}},"required":["calendar_id"],"title":"get_booking_calendarArguments","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_available_time_slots":{"post":{"operationId":"get_available_time_slots","summary":"List the free time slots of a booking calendar between two times (defaults to the next week), with the meeting location ","description":"List the free time slots of a booking calendar between two times (defaults to the next week), with the meeting location options per slot. Use for \"When is the OnceHub intro call calendar free next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"calendar_id":{"description":"ID of the booking calendar, from list_booking_calendars.","maxLength":200,"title":"Calendar Id","type":"string"},"start_time":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the window to check (ISO 8601); defaults to now.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"End of the window to check (ISO 8601); defaults to one week from the start.","title":"End Time"}},"required":["calendar_id"],"title":"get_available_time_slotsArguments","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 teams (name and ID), optionally only teams a given user belongs to. Use for \"Which teams exist in OnceHub\".","description":"List teams (name and ID), optionally only teams a given user belongs to. Use for \"Which teams exist in OnceHub\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only teams this user ID is a member of.","title":"User"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID to continue after (returns the next page); use the last ID of the previous page. Cannot be combined with before.","title":"After"},"before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID to page backwards from; use the first ID of the previous page. Cannot be combined with after.","title":"Before"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many objects to return (1 to 100, default 10).","title":"Limit"}},"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/get_team":{"post":{"operationId":"get_team","summary":"Get one team by ID: its name and ID. Use for \"Show me the OnceHub team TEAM-1234\".","description":"Get one team by ID: its name and ID. Use for \"Show me the OnceHub team TEAM-1234\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"ID of the team, from list_teams.","maxLength":200,"title":"Team Id","type":"string"}},"required":["team_id"],"title":"get_teamArguments","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_users":{"post":{"operationId":"list_users","summary":"List the account's users with role, status, time zone and name. Email addresses are not returned. Use for \"Which users h","description":"List the account's users with role, status, time zone and name. Email addresses are not returned. Use for \"Which users have a OnceHub account and what are their roles\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID to continue after (returns the next page); use the last ID of the previous page. Cannot be combined with before.","title":"After"},"before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID to page backwards from; use the first ID of the previous page. Cannot be combined with after.","title":"Before"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many objects to return (1 to 100, default 10).","title":"Limit"}},"title":"list_usersArguments","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}}}}