{"openapi":"3.1.0","info":{"title":"ProjectManager (BYOK) API","version":"0.1.0","description":"ProjectManager (BYOK) lets an AI assistant read your own ProjectManager data through the ProjectManager API with a key you supply (ProjectManager API key (workspace admin)). Read-only: 10 tools (get_me, get_workspace, query_projects, get_project, query_tasks, query_time_entries, query_resources, list_project_statuses, list_project_customers, list_task_priorities). 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-projectmanager.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-projectmanager/docs"},"termsOfService":"https://connectorbay.com/byok-projectmanager/terms"},"servers":[{"url":"https://byok-projectmanager.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-projectmanager/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/get_me":{"post":{"operationId":"get_me","summary":"Show the user and workspace the key belongs to: name, role, workspace name and account status. Use for \"Which ProjectMan","description":"Show the user and workspace the key belongs to: name, role, workspace name and account status. Use for \"Which ProjectManager workspace is my key connected to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_meArguments","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_workspace":{"post":{"operationId":"get_workspace","summary":"Show the current workspace: company name, status, whether it is paid and when it was registered. Use for \"Is my ProjectM","description":"Show the current workspace: company name, status, whether it is paid and when it was registered. Use for \"Is my ProjectManager workspace on a paid plan\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_workspaceArguments","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/query_projects":{"post":{"operationId":"query_projects","summary":"List projects with status, dates, budget, completion, manager and customer. Supports OData filter, sort and paging. Use ","description":"List projects with status, dates, budget, completion, manager and customer. Supports OData filter, sort and paging. Use for \"Which projects are in progress and what is their budget\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Top"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip before returning, for paging.","title":"Skip"},"filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example \"contains(name,'Website')\" or 'createDate gt 2026-01-01'.","title":"Filter"},"orderby":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"OData sort, for example 'modifyDate desc'.","title":"Orderby"}},"title":"query_projectsArguments","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_project":{"post":{"operationId":"get_project","summary":"Get one project by id with its status, dates, budget, completion percentage, manager, customer and latest status update.","description":"Get one project by id with its status, dates, budget, completion percentage, manager, customer and latest status update. Use for \"Show the details of project p1 in ProjectManager\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Unique project id (a string from query_projects).","maxLength":200,"title":"Project Id","type":"string"}},"required":["project_id"],"title":"get_projectArguments","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/query_tasks":{"post":{"operationId":"query_tasks","summary":"List tasks across projects with status, planned and actual dates, effort in minutes, cost and completion. Supports OData","description":"List tasks across projects with status, planned and actual dates, effort in minutes, cost and completion. Supports OData filter, sort and paging. Use for \"Which tasks of project p1 are not done yet\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Top"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip before returning, for paging.","title":"Skip"},"filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example \"contains(name,'Website')\" or 'createDate gt 2026-01-01'.","title":"Filter"},"orderby":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"OData sort, for example 'modifyDate desc'.","title":"Orderby"}},"title":"query_tasksArguments","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/query_time_entries":{"post":{"operationId":"query_time_entries","summary":"List timesheet entries (one per person, task and date) with hours, approval flag and the task and project they belong to","description":"List timesheet entries (one per person, task and date) with hours, approval flag and the task and project they belong to. Use for \"How many hours were logged on project p1 this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Top"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip before returning, for paging.","title":"Skip"},"filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example \"contains(name,'Website')\" or 'createDate gt 2026-01-01'.","title":"Filter"},"orderby":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"OData sort, for example 'modifyDate desc'.","title":"Orderby"}},"title":"query_time_entriesArguments","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/query_resources":{"post":{"operationId":"query_resources","summary":"List workspace resources (people, materials and tools) with role, team membership and active flag. Contact details and r","description":"List workspace resources (people, materials and tools) with role, team membership and active flag. Contact details and rates are not returned. Use for \"Who are the active people in my ProjectManager workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Top"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip before returning, for paging.","title":"Skip"},"filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"OData filter expression, for example \"contains(name,'Website')\" or 'createDate gt 2026-01-01'.","title":"Filter"},"orderby":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"OData sort, for example 'modifyDate desc'.","title":"Orderby"}},"title":"query_resourcesArguments","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_project_statuses":{"post":{"operationId":"list_project_statuses","summary":"List the project status names defined in the workspace. Use for \"What project statuses exist in ProjectManager\".","description":"List the project status names defined in the workspace. Use for \"What project statuses exist in ProjectManager\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_project_statusesArguments","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_project_customers":{"post":{"operationId":"list_project_customers","summary":"List the customer names defined for projects in the workspace. Use for \"Which customers are defined on my ProjectManager","description":"List the customer names defined for projects in the workspace. Use for \"Which customers are defined on my ProjectManager projects\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_project_customersArguments","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_task_priorities":{"post":{"operationId":"list_task_priorities","summary":"List the task priority levels defined in the workspace. Use for \"What task priority levels does ProjectManager use\".","description":"List the task priority levels defined in the workspace. Use for \"What task priority levels does ProjectManager use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_task_prioritiesArguments","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}}}}