{"openapi":"3.1.0","info":{"title":"Karbon (BYOK) API","version":"0.1.0","description":"Karbon (BYOK) lets an AI assistant read your own Karbon data through the Karbon API with a key you supply (Karbon API application Bearer token (36 character GUID)). Read-only: 7 tools (list_work_items, get_work_item, list_organizations, list_contacts, list_users, list_teams, list_work_templates). 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-karbon.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-karbon/docs"},"termsOfService":"https://connectorbay.com/byok-karbon/terms"},"servers":[{"url":"https://byok-karbon.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-karbon/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_work_items":{"post":{"operationId":"list_work_items","summary":"List Karbon work items with title, client, assignee, dates, work type, status and estimated budget. Filter with an OData","description":"List Karbon work items with title, client, assignee, dates, work type, status and estimated budget. Filter with an OData expression; page with top and skip. Use for \"Which Karbon work items are in progress\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example PrimaryStatus eq 'InProgress' or contains(FullName,'Acme').","title":"Filter"},"orderby":{"anyOf":[{"enum":["StartDate","StartDate desc","DeadlineDate","DeadlineDate desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order.","title":"Orderby"},"top":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 100).","title":"Top"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging (100 for the second page of 100).","title":"Skip"}},"title":"list_work_itemsArguments","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_work_item":{"post":{"operationId":"get_work_item","summary":"Get one Karbon work item by key with title, client, assignee, dates, work type, status, estimated budget and fee type. U","description":"Get one Karbon work item by key with title, client, assignee, dates, work type, status, estimated budget and fee type. Use for \"Show Karbon work item 2dKq8mVx1Pz9\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"work_item_key":{"description":"Work item key from list_work_items (12 characters).","maxLength":200,"title":"Work Item Key","type":"string"}},"required":["work_item_key"],"title":"get_work_itemArguments","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_organizations":{"post":{"operationId":"list_organizations","summary":"List Karbon client organizations with name, email, phone, website and last modified time. Filter with an OData expressio","description":"List Karbon client organizations with name, email, phone, website and last modified time. Filter with an OData expression; page with top and skip. Use for \"Which organization clients do we have in Karbon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example PrimaryStatus eq 'InProgress' or contains(FullName,'Acme').","title":"Filter"},"orderby":{"anyOf":[{"enum":["FullName","FullName desc","LastModifiedDateTime","LastModifiedDateTime desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order.","title":"Orderby"},"top":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 100).","title":"Top"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging (100 for the second page of 100).","title":"Skip"}},"title":"list_organizationsArguments","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_contacts":{"post":{"operationId":"list_contacts","summary":"List Karbon client contacts (people) with name, email, role, owner, manager and last modified time. Filter with an OData","description":"List Karbon client contacts (people) with name, email, role, owner, manager and last modified time. Filter with an OData expression; page with top and skip. Use for \"Find the Karbon contact john@acme.example\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example PrimaryStatus eq 'InProgress' or contains(FullName,'Acme').","title":"Filter"},"orderby":{"anyOf":[{"enum":["FullName","FullName desc","LastModifiedDateTime","LastModifiedDateTime desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order.","title":"Orderby"},"top":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 100).","title":"Top"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging (100 for the second page of 100).","title":"Skip"}},"title":"list_contactsArguments","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 Karbon users of your firm with id, name and email. Page with top and skip. Use for \"Who are the users in our Ka","description":"List the Karbon users of your firm with id, name and email. Page with top and skip. Use for \"Who are the users in our Karbon account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example PrimaryStatus eq 'InProgress' or contains(FullName,'Acme').","title":"Filter"},"top":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 100).","title":"Top"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging (100 for the second page of 100).","title":"Skip"}},"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}},"/v1/tools/list_teams":{"post":{"operationId":"list_teams","summary":"List the Karbon teams with name, description and parent team. Page with top and skip. Use for \"What teams exist in Karbo","description":"List the Karbon teams with name, description and parent team. Page with top and skip. Use for \"What teams exist in Karbon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example PrimaryStatus eq 'InProgress' or contains(FullName,'Acme').","title":"Filter"},"top":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 100).","title":"Top"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging (100 for the second page of 100).","title":"Skip"}},"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_work_templates":{"post":{"operationId":"list_work_templates","summary":"List Karbon work templates with title, work type, publish date and how many work items were created from them. Page with","description":"List Karbon work templates with title, work type, publish date and how many work items were created from them. Page with top and skip. Use for \"Which work templates do we have in Karbon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example PrimaryStatus eq 'InProgress' or contains(FullName,'Acme').","title":"Filter"},"orderby":{"anyOf":[{"enum":["WorkTypeKey","WorkTypeKey desc","PublishedDate","PublishedDate desc","NumberOfWorkItemsCreated","NumberOfWorkItemsCreated desc","DateModified","DateModified desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order.","title":"Orderby"},"top":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 100).","title":"Top"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging (100 for the second page of 100).","title":"Skip"}},"title":"list_work_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}}}}