{"openapi":"3.1.0","info":{"title":"Asana Workspace Admin (BYOK) API","version":"0.1.0","description":"Asana Workspace Admin (BYOK) lets an AI assistant read your own Asana Workspace Admin data through the Asana Workspace Admin API with a key you supply (personal access token). Read-only: 9 tools (list_workspace_teams, list_workspace_members, list_team_members, list_workspace_custom_fields, list_roles, list_portfolios, list_time_periods, list_time_tracking_categories, list_audit_log_events). The...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-asana-workspace-admin.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-asana-workspace-admin/docs"},"termsOfService":"https://connectorbay.com/byok-asana-workspace-admin/terms"},"servers":[{"url":"https://byok-asana-workspace-admin.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-asana-workspace-admin/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_workspace_teams":{"post":{"operationId":"list_workspace_teams","summary":"List the teams of an organization workspace with name, description, visibility and link. Use for \"Which teams exist in A","description":"List the teams of an organization workspace with name, description, visibility and link. Use for \"Which teams exist in Asana workspace 1200000000000099\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_gid":{"description":"Global id (gid) of the workspace or organization, from the Asana workspaces list.","maxLength":200,"title":"Workspace 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,description,visibility,permalink_url","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["workspace_gid"],"title":"list_workspace_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_workspace_members":{"post":{"operationId":"list_workspace_members","summary":"List the memberships of a workspace with user name and flags (active, admin, guest, view-only). No email addresses. Use ","description":"List the memberships of a workspace with user name and flags (active, admin, guest, view-only). No email addresses. Use for \"Who are the admins of Asana workspace 1200000000000099\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_gid":{"description":"Global id (gid) of the workspace or organization, from the Asana workspaces list.","maxLength":200,"title":"Workspace 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":"user.name,is_active,is_admin,is_guest,is_view_only,created_at","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["workspace_gid"],"title":"list_workspace_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_team_members":{"post":{"operationId":"list_team_members","summary":"List the members of a team with user name and whether they are admin, guest or limited-access. Use for \"Who is in Asana ","description":"List the members of a team with user name and whether they are admin, guest or limited-access. Use for \"Who is in Asana team 1200000000000101\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_gid":{"description":"Global id of the team, from list_workspace_teams.","maxLength":200,"title":"Team 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":"user.name,is_admin,is_guest,is_limited_access","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["team_gid"],"title":"list_team_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_workspace_custom_fields":{"post":{"operationId":"list_workspace_custom_fields","summary":"List the custom fields defined in a workspace with name, type, description, enabled and global flags and choice option n","description":"List the custom fields defined in a workspace with name, type, description, enabled and global flags and choice option names. Use for \"Which custom fields does Asana workspace 1200000000000099 define\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_gid":{"description":"Global id (gid) of the workspace or organization, from the Asana workspaces list.","maxLength":200,"title":"Workspace 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,type,resource_subtype,description,enabled,is_global_to_workspace,format,precision,enum_options.name","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["workspace_gid"],"title":"list_workspace_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_roles":{"post":{"operationId":"list_roles","summary":"List the custom and standard roles of a workspace with name, description and whether the role is standard. Enterprise fe","description":"List the custom and standard roles of a workspace with name, description and whether the role is standard. Enterprise feature. Use for \"Which roles are defined in Asana workspace 1200000000000099\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Global id of the workspace or organization.","maxLength":40,"title":"Workspace","type":"string"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to list archived roles instead of active ones.","title":"Archived"},"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,description,is_standard_role","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["workspace"],"title":"list_rolesArguments","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_portfolios":{"post":{"operationId":"list_portfolios","summary":"List a workspace's portfolios owned by one user (default: the token's user) with name, color, dates and status. Use for ","description":"List a workspace's portfolios owned by one user (default: the token's user) with name, color, dates and status. Use for \"Which Asana portfolios does user me own in workspace 1200000000000099\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Global id of the workspace or organization.","maxLength":40,"title":"Workspace","type":"string"},"owner":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":"me","description":"Gid of the portfolio owner, or 'me' (Asana only lets a token list portfolios it owns).","title":"Owner"},"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,color,start_on,due_on,archived,public,owner.name,permalink_url","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["workspace"],"title":"list_portfoliosArguments","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_time_periods":{"post":{"operationId":"list_time_periods","summary":"List the goal time periods (quarters, halves, years) of a workspace with display name and start and end dates. Use for \"","description":"List the goal time periods (quarters, halves, years) of a workspace with display name and start and end dates. Use for \"Which goal time periods exist in Asana workspace 1200000000000099\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Global id of the workspace or organization.","maxLength":40,"title":"Workspace","type":"string"},"start_on":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only periods starting on or after this date (YYYY-MM-DD).","title":"Start On"},"end_on":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only periods ending on or before this date (YYYY-MM-DD).","title":"End On"},"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":"display_name,period,start_on,end_on","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["workspace"],"title":"list_time_periodsArguments","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_time_tracking_categories":{"post":{"operationId":"list_time_tracking_categories","summary":"List the time tracking categories of a workspace with name, color and archived flag. Use for \"Which time tracking catego","description":"List the time tracking categories of a workspace with name, color and archived flag. Use for \"Which time tracking categories does Asana workspace 1200000000000099 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Global id of the workspace or organization.","maxLength":40,"title":"Workspace","type":"string"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for archived categories only, false for active ones.","title":"Is Archived"},"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,color,is_archived","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["workspace"],"title":"list_time_tracking_categoriesArguments","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_audit_log_events":{"post":{"operationId":"list_audit_log_events","summary":"List audit log events of an Enterprise organization (event type, category, time, actor name, affected resource) filtered","description":"List audit log events of an Enterprise organization (event type, category, time, actor name, affected resource) filtered by time, type or actor. Needs a service account token on Enterprise+. Use for \"What admin events happened in Asana organization 1200000000000099 last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_gid":{"description":"Global id (gid) of the workspace or organization, from the Asana workspaces list.","maxLength":200,"title":"Workspace Gid","type":"string"},"start_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only events at or after this ISO 8601 time.","title":"Start At"},"end_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only events before this ISO 8601 time.","title":"End At"},"event_type":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only events of this type, for example 'user_deprovisioned'.","title":"Event Type"},"actor_type":{"anyOf":[{"enum":["user","asana","asana_support","anonymous","external_administrator"],"type":"string"},{"type":"null"}],"default":null,"description":"Only events by this kind of actor.","title":"Actor Type"},"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"}},"required":["workspace_gid"],"title":"list_audit_log_eventsArguments","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}}}}