{"openapi":"3.1.0","info":{"title":"Asana Goals (BYOK) API","version":"0.1.0","description":"Asana Goals (BYOK) lets an AI assistant read your own Asana Goals data through the Asana Goals API with a key you supply (personal access token). Read-only: 7 tools (list_goals, get_goal, list_goal_relationships, list_parent_goals, list_goal_custom_field_settings, list_status_updates, list_project_status_updates). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-asana-goals.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-asana-goals/docs"},"termsOfService":"https://connectorbay.com/byok-asana-goals/terms"},"servers":[{"url":"https://byok-asana-goals.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-asana-goals/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_goals":{"post":{"operationId":"list_goals","summary":"List Asana goals filtered by workspace, team, supporting project, portfolio or time period, with dates, status, time per","description":"List Asana goals filtered by workspace, team, supporting project, portfolio or time period, with dates, status, time period and metric progress. Owner names are not requested. Use for \"Which goals does Asana workspace 1200000000000099 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Global id of the workspace or organization to list goals of.","title":"Workspace"},"team":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Global id of a team whose goals to list.","title":"Team"},"project":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Global id of a project that supports the goals.","title":"Project"},"portfolio":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Global id of a portfolio that supports the goals.","title":"Portfolio"},"is_workspace_level":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only company-level goals, false for only team-level goals (needs workspace).","title":"Is Workspace Level"},"time_periods":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated time period gids to restrict to.","title":"Time Periods"},"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":600,"type":"string"},{"type":"null"}],"default":"name,due_on,start_on,status,is_workspace_level,privacy_setting,num_likes,team.name,workspace.name,time_period.display_name,metric.resource_subtype,metric.unit,metric.initial_number_value,metric.target_number_value,metric.current_number_value,metric.progress_source,current_status_update.title,current_status_update.resource_subtype","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"title":"list_goalsArguments","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_goal":{"post":{"operationId":"get_goal","summary":"Get one Asana goal: dates, status, time period, metric (initial, current and target values), privacy setting and the tit","description":"Get one Asana goal: dates, status, time period, metric (initial, current and target values), privacy setting and the title of its latest status update. Use for \"How far along is Asana goal 1200000000000501\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"goal_gid":{"description":"Global id (gid) of the goal, from list_goals.","maxLength":200,"title":"Goal Gid","type":"string"},"opt_fields":{"anyOf":[{"maxLength":600,"type":"string"},{"type":"null"}],"default":"name,due_on,start_on,status,is_workspace_level,privacy_setting,num_likes,team.name,workspace.name,time_period.display_name,metric.resource_subtype,metric.unit,metric.initial_number_value,metric.target_number_value,metric.current_number_value,metric.progress_source,current_status_update.title,current_status_update.resource_subtype","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["goal_gid"],"title":"get_goalArguments","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_goal_relationships":{"post":{"operationId":"list_goal_relationships","summary":"List the supporting resources (subgoals, projects, portfolios, tasks) of a goal with their contribution weights. Use for","description":"List the supporting resources (subgoals, projects, portfolios, tasks) of a goal with their contribution weights. Use for \"What supports Asana goal 1200000000000501\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"supported_goal":{"description":"Global id of the goal whose supporting resources to list.","maxLength":40,"title":"Supported Goal","type":"string"},"resource_subtype":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only relationships of this subtype, for example subgoal, project, portfolio or task.","title":"Resource Subtype"},"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":600,"type":"string"},{"type":"null"}],"default":"resource_subtype,supporting_resource.name,supporting_resource.resource_subtype,contribution_weight","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["supported_goal"],"title":"list_goal_relationshipsArguments","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_parent_goals":{"post":{"operationId":"list_parent_goals","summary":"List the goals that a goal contributes to (its parent goals) with name, dates and status. Use for \"Which parent goals do","description":"List the goals that a goal contributes to (its parent goals) with name, dates and status. Use for \"Which parent goals does Asana goal 1200000000000501 roll up to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"goal_gid":{"description":"Global id (gid) of the goal, from list_goals.","maxLength":200,"title":"Goal Gid","type":"string"},"opt_fields":{"anyOf":[{"maxLength":600,"type":"string"},{"type":"null"}],"default":"name,due_on,start_on,status,is_workspace_level","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["goal_gid"],"title":"list_parent_goalsArguments","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_goal_custom_field_settings":{"post":{"operationId":"list_goal_custom_field_settings","summary":"List the custom fields attached to a goal and whether each is marked important. Use for \"Which custom fields are set up ","description":"List the custom fields attached to a goal and whether each is marked important. Use for \"Which custom fields are set up on Asana goal 1200000000000501\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"goal_gid":{"description":"Global id (gid) of the goal, from list_goals.","maxLength":200,"title":"Goal Gid","type":"string"},"opt_fields":{"anyOf":[{"maxLength":600,"type":"string"},{"type":"null"}],"default":"is_important,custom_field.name,custom_field.type,custom_field.resource_subtype,custom_field.enabled","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["goal_gid"],"title":"list_goal_custom_field_settingsArguments","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_status_updates":{"post":{"operationId":"list_status_updates","summary":"List the status updates posted on a goal, project or portfolio with title, color type and times (the update text and aut","description":"List the status updates posted on a goal, project or portfolio with title, color type and times (the update text and authors are not requested). Use for \"What status updates were posted on Asana goal 1200000000000501\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"parent":{"description":"Global id of the goal, project or portfolio whose status updates to list.","maxLength":40,"title":"Parent","type":"string"},"created_since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only updates created after this ISO 8601 time, for example 2026-09-01T00:00:00Z.","title":"Created 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":600,"type":"string"},{"type":"null"}],"default":"title,resource_subtype,status_type,created_at,modified_at,num_likes","description":"Comma-separated fields to return; leave the default unless you need others.","title":"Opt Fields"}},"required":["parent"],"title":"list_status_updatesArguments","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_status_updates":{"post":{"operationId":"list_project_status_updates","summary":"List the legacy project status posts of a project with title, color and times (text and authors are not requested). Use ","description":"List the legacy project status posts of a project with title, color and times (text and authors are not requested). Use for \"What color status posts did Asana project 1200000000000301 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_gid":{"description":"Global id (gid) of the project.","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":600,"type":"string"},{"type":"null"}],"default":"title,color,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_status_updatesArguments","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}}}}