{"openapi":"3.1.0","info":{"title":"Asana Projects (BYOK) API","version":"0.1.0","description":"Asana Projects (BYOK) lets an AI assistant read your own Asana Projects data through the Asana Projects API with a key you supply (personal access token). Read-only: 7 tools (get_project, list_project_sections, get_project_task_counts, list_project_members, list_project_custom_fields, list_project_tasks, search_workspace_projects). The BYOK key travels with each request, is used for that one call...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-asana-projects.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-asana-projects/docs"},"termsOfService":"https://connectorbay.com/byok-asana-projects/terms"},"servers":[{"url":"https://byok-asana-projects.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-asana-projects/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_project":{"post":{"operationId":"get_project","summary":"Get one project: name, archived flag, color, dates, owner, team, workspace, privacy and the title and status color of it","description":"Get one project: name, archived flag, color, dates, owner, team, workspace, privacy and the title and status color of its latest status update. Notes are not returned. Use for \"What are the details of Asana project 1200000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_gid":{"description":"Global id (gid) of the Asana project, the long number in a project URL.","maxLength":200,"title":"Project Gid","type":"string"},"opt_fields":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"name,archived,color,created_at,modified_at,current_status_update.title,current_status_update.status_type,default_view,due_on,start_on,owner.name,team.name,workspace.name,privacy_setting,public,permalink_url,completed","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["project_gid"],"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/list_project_sections":{"post":{"operationId":"list_project_sections","summary":"List the sections (board columns or list headings) of a project in order, with name and creation time. Use for \"What sec","description":"List the sections (board columns or list headings) of a project in order, with name and creation time. Use for \"What sections does Asana project 1200000000000001 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_gid":{"description":"Global id (gid) of the Asana project, the long number in a project URL.","maxLength":200,"title":"Project Gid","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the next_page.offset value of the previous answer (omit for the first page).","title":"Offset"},"opt_fields":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"name,created_at","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["project_gid"],"title":"list_project_sectionsArguments","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_task_counts":{"post":{"operationId":"get_project_task_counts","summary":"Get a project's task counts: total, incomplete and completed tasks and milestones. Use for \"How many tasks are still ope","description":"Get a project's task counts: total, incomplete and completed tasks and milestones. Use for \"How many tasks are still open in Asana project 1200000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_gid":{"description":"Global id (gid) of the Asana project, the long number in a project URL.","maxLength":200,"title":"Project Gid","type":"string"},"opt_fields":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"num_tasks,num_incomplete_tasks,num_completed_tasks,num_milestones,num_incomplete_milestones,num_completed_milestones","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["project_gid"],"title":"get_project_task_countsArguments","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_members":{"post":{"operationId":"list_project_members","summary":"List who has access to a project with their name and access level (editor, commenter, viewer). Use for \"Who has access t","description":"List who has access to a project with their name and access level (editor, commenter, viewer). Use for \"Who has access to Asana project 1200000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_gid":{"description":"Global id (gid) of the Asana project, the long number in a project URL.","maxLength":200,"title":"Project Gid","type":"string"},"user":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only the membership of this user (gid, email or 'me').","title":"User"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the next_page.offset value of the previous answer (omit for the first page).","title":"Offset"},"opt_fields":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"member.name,access_level","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["project_gid"],"title":"list_project_membersArguments","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_custom_fields":{"post":{"operationId":"list_project_custom_fields","summary":"List the custom fields used in a project with name, type, importance flag and (for choice fields) the option names. Use ","description":"List the custom fields used in a project with name, type, importance flag and (for choice fields) the option names. Use for \"Which custom fields does Asana project 1200000000000001 use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_gid":{"description":"Global id (gid) of the Asana project, the long number in a project URL.","maxLength":200,"title":"Project Gid","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the next_page.offset value of the previous answer (omit for the first page).","title":"Offset"},"opt_fields":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"is_important,custom_field.name,custom_field.type,custom_field.resource_subtype,custom_field.enabled,custom_field.enum_options.name","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["project_gid"],"title":"list_project_custom_fieldsArguments","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_tasks":{"post":{"operationId":"list_project_tasks","summary":"List the tasks of a project with name, completion state, due date, assignee name and subtask count (descriptions and com","description":"List the tasks of a project with name, completion state, due date, assignee name and subtask count (descriptions and comments are not returned). Use for \"Which tasks are in Asana project 1200000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_gid":{"description":"Global id (gid) of the Asana project, the long number in a project URL.","maxLength":200,"title":"Project Gid","type":"string"},"completed_since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Return incomplete tasks plus tasks completed since this ISO 8601 time; use 'now' for incomplete only.","title":"Completed Since"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: the next_page.offset value of the previous answer (omit for the first page).","title":"Offset"},"opt_fields":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"name,completed,completed_at,due_on,start_on,assignee.name,num_subtasks,resource_subtype,created_at,modified_at","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["project_gid"],"title":"list_project_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/search_workspace_projects":{"post":{"operationId":"search_workspace_projects","summary":"Search the projects of a workspace by name text, optionally by completion state, owner or team, sorted by modification d","description":"Search the projects of a workspace by name text, optionally by completion state, owner or team, sorted by modification date or relevance. Use for \"Find Asana projects in workspace 1200000000000099 about relaunch\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_gid":{"description":"Global id of the workspace or organization.","maxLength":200,"title":"Workspace Gid","type":"string"},"text":{"description":"Words to match in the project name.","maxLength":200,"title":"Text","type":"string"},"sort_by":{"anyOf":[{"enum":["due_date","created_at","completed_at","modified_at","relevance"],"type":"string"},{"type":"null"}],"default":"modified_at","description":"Order: due_date, created_at, completed_at, modified_at or relevance.","title":"Sort By"},"completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for completed projects only, false for open ones.","title":"Completed"},"owner_any":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated user gids; only projects owned by one of them.","title":"Owner Any"},"teams_any":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated team gids; only projects of one of these teams.","title":"Teams Any"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results to return (1 to 100).","title":"Limit"},"opt_fields":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"name,archived,due_on,owner.name,team.name,permalink_url","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["workspace_gid","text"],"title":"search_workspace_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}}}}