Skip to main content

Actions

The ballerinax/asana package exposes the following clients:

ClientPurpose
ClientProvides access to the Asana REST API for managing tasks, projects, sections, teams, users, and all other Asana resources.

Client​

Provides access to the Asana REST API for managing tasks, projects, sections, teams, users, and all other Asana resources.

Configuration​

FieldTypeDefaultDescription
authhttp:BearerTokenConfig|http:OAuth2RefreshTokenGrantConfigRequiredAuthentication configuration. Typically a Personal Access Token as bearer token.
httpVersionhttp:HttpVersionHTTP_2_0HTTP protocol version.
timeoutdecimal60Request timeout in seconds.
retryConfighttp:RetryConfig()Retry configuration for failed requests.
secureSockethttp:ClientSecureSocket()SSL/TLS configuration.
proxyhttp:ProxyConfig()Proxy server configuration.

Initializing the client​

import ballerinax/asana;

configurable string authToken = ?;

asana:Client asanaClient = check new ({
auth: {
token: authToken
}
});

Operations​

Tasks​

Get multiple tasks

Returns a list of tasks filtered by project, section, tag, user task list, or assignee.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoRequest headers.
queriesGetTasksQueriesNoQuery parameters including project, section, assignee, workspace, opt_fields, limit, offset.

Returns: TaskCompacts|error

Sample code:

asana:TaskCompacts tasks = check asanaClient->/tasks({}, project = "1234567890");

Sample response:

{"data": [{"gid": "1201234567890", "name": "Draft project proposal", "resource_type": "task"}, {"gid": "1201234567891", "name": "Review budget estimates", "resource_type": "task"}], "next_page": null}
Create a task

Creates a new task in a workspace or directly within a project.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoRequest headers.
payloadTasksBodyYesTask data including name, workspace, assignee, projects, due dates, etc.
queriesCreateTaskQueriesNoQuery parameters including opt_fields.

Returns: TaskOkResponse|error

Sample code:

asana:TaskOkResponse task = check asanaClient->/tasks.post({
data: {
name: "Draft project proposal",
workspace: "1234567890",
projects: ["9876543210"],
assignee: "me",
due_on: "2026-04-01",
notes: "Write the initial draft of the Q2 project proposal."
}
});

Sample response:

{"data": {"gid": "1201234567890", "name": "Draft project proposal", "assignee": {"gid": "1100112233", "name": "Jane Doe"}, "due_on": "2026-04-01", "completed": false, "workspace": {"gid": "1234567890", "name": "My Workspace"}}}
Get a task

Returns the complete task record for a single task by its GID.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
queriesGetTaskQueriesNoQuery parameters including opt_fields.

Returns: TaskOkResponse|error

Sample code:

asana:TaskOkResponse task = check asanaClient->/tasks/["1201234567890"]();

Sample response:

{"data": {"gid": "1201234567890", "name": "Draft project proposal", "assignee": {"gid": "1100112233", "name": "Jane Doe"}, "due_on": "2026-04-01", "completed": false, "notes": "Write the initial draft of the Q2 project proposal."}}
Update a task

Updates an existing task. Only the fields provided in the payload are changed.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
payloadTaskGidBodyYesTask fields to update.
queriesUpdateTaskQueriesNoQuery parameters including opt_fields.

Returns: TaskOkResponse|error

Sample code:

asana:TaskOkResponse task = check asanaClient->/tasks/["1201234567890"].put({
data: {
completed: true
}
});

Sample response:

{"data": {"gid": "1201234567890", "name": "Draft project proposal", "completed": true}}
Delete a task

Deletes a task by its GID. Returns an empty response on success.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/tasks/["1201234567890"].delete();
Duplicate a task

Creates a duplicate of an existing task, including selected fields.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task to duplicate.
payloadTaskGidDuplicateBodyYesDuplication options including name and which fields to include.

Returns: JobOkResponse|error

Sample code:

asana:JobOkResponse job = check asanaClient->/tasks/["1201234567890"]/duplicate.post({
data: {
name: "Draft project proposal (copy)",
include: "notes,assignee,due_date"
}
});

Sample response:

{"data": {"gid": "9900112233", "resource_type": "job", "status": "in_progress", "new_task": {"gid": "1201234567899", "name": "Draft project proposal (copy)"}}}
Get tasks from a project

Returns all tasks in a specific project.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project.
queriesGetProjectTasksQueriesNoQuery parameters including opt_fields, limit, offset.

Returns: TaskCompacts|error

Sample code:

asana:TaskCompacts tasks = check asanaClient->/projects/["9876543210"]/tasks();

Sample response:

{"data": [{"gid": "1201234567890", "name": "Draft project proposal", "resource_type": "task"}, {"gid": "1201234567891", "name": "Set up environment", "resource_type": "task"}], "next_page": null}
Get subtasks from a task

Returns all subtasks of a given task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the parent task.

Returns: TaskCompacts|error

Sample code:

asana:TaskCompacts subtasks = check asanaClient->/tasks/["1201234567890"]/subtasks();

Sample response:

{"data": [{"gid": "1201234567900", "name": "Research competitors", "resource_type": "task"}], "next_page": null}
Create a subtask

Creates a new subtask under the specified parent task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the parent task.
payloadTaskGidSubtasksBodyYesSubtask data.

Returns: TaskOkResponse|error

Sample code:

asana:TaskOkResponse subtask = check asanaClient->/tasks/["1201234567890"]/subtasks.post({
data: {
name: "Research competitors"
}
});

Sample response:

{"data": {"gid": "1201234567900", "name": "Research competitors", "parent": {"gid": "1201234567890", "name": "Draft project proposal"}}}
Set the parent of a task

Sets or changes the parent task of an existing task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
payloadTaskGidSetParentBodyYesParent task configuration.

Returns: TaskOkResponse|error

Sample code:

asana:TaskOkResponse task = check asanaClient->/tasks/["1201234567900"]/setParent.post({
data: {
parent: "1201234567890"
}
});

Sample response:

{"data": {"gid": "1201234567900", "name": "Research competitors", "parent": {"gid": "1201234567890", "name": "Draft project proposal"}}}
Add a project to a task

Adds a task to a specified project.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
payloadTaskGidAddProjectBodyYesProject to add, with optional section and insert position.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/tasks/["1201234567890"]/addProject.post({
data: {
project: "9876543210"
}
});
Add a tag to a task

Adds a tag to a task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
payloadTaskGidAddTagBodyYesThe tag to add.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/tasks/["1201234567890"]/addTag.post({
data: {
tag: "5566778899"
}
});
Add followers to a task

Adds followers (collaborators) to a task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
payloadTaskGidAddFollowersBodyYesFollowers to add.

Returns: TaskOkResponse|error

Sample code:

asana:TaskOkResponse task = check asanaClient->/tasks/["1201234567890"]/addFollowers.post({
data: {
followers: ["1100112233"]
}
});

Sample response:

{"data": {"gid": "1201234567890", "name": "Draft project proposal", "followers": [{"gid": "1100112233", "name": "Jane Doe"}]}}
Search tasks in a workspace

Searches for tasks in a workspace matching specified filters.

Parameters:

NameTypeRequiredDescription
workspaceGidstringYesThe globally unique identifier for the workspace.
queriesSearchTasksQueriesNoSearch parameters including text, assignee, completed, is_subtask, etc.

Returns: TaskCompacts|error

Sample code:

asana:TaskCompacts results = check asanaClient->/workspaces/["1234567890"]/tasks/search({}, text = "proposal");

Sample response:

{"data": [{"gid": "1201234567890", "name": "Draft project proposal", "resource_type": "task"}], "next_page": null}
Set dependencies for a task

Marks a set of tasks as dependencies of a given task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
payloadTaskGidAddDependenciesBodyYesTasks to add as dependencies.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/tasks/["1201234567891"]/addDependencies.post({
data: {
dependencies: ["1201234567890"]
}
});
Get dependencies of a task

Returns all tasks that a given task depends on.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.

Returns: TaskCompacts|error

Sample code:

asana:TaskCompacts deps = check asanaClient->/tasks/["1201234567891"]/dependencies();

Sample response:

{"data": [{"gid": "1201234567890", "name": "Draft project proposal", "resource_type": "task"}], "next_page": null}

Projects​

Get multiple projects

Returns a list of projects in a workspace or team.

Parameters:

NameTypeRequiredDescription
queriesGetProjectsQueriesNoQuery parameters including workspace, team, archived, opt_fields, limit, offset.

Returns: ProjectCompacts|error

Sample code:

asana:ProjectCompacts projects = check asanaClient->/projects({}, workspace = "1234567890");

Sample response:

{"data": [{"gid": "9876543210", "name": "Q2 Planning", "resource_type": "project"}, {"gid": "9876543211", "name": "Marketing Campaign", "resource_type": "project"}], "next_page": null}
Create a project

Creates a new project in a workspace.

Parameters:

NameTypeRequiredDescription
payloadProjectsBodyYesProject data including name, workspace, privacy settings, and other fields.

Returns: ProjectCreatedResponse|error

Sample code:

asana:ProjectCreatedResponse project = check asanaClient->/projects.post({
data: {
name: "Employee Onboarding",
workspace: "1234567890",
default_view: "list",
notes: "Onboarding process for new team members."
}
});

Sample response:

{"data": {"gid": "9876543212", "name": "Employee Onboarding", "owner": {"gid": "1100112233", "name": "Jane Doe"}, "workspace": {"gid": "1234567890", "name": "My Workspace"}}}
Get a project

Returns the full record for a single project.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project.

Returns: ProjectOkResponse|error

Sample code:

asana:ProjectOkResponse project = check asanaClient->/projects/["9876543210"]();

Sample response:

{"data": {"gid": "9876543210", "name": "Q2 Planning", "owner": {"gid": "1100112233", "name": "Jane Doe"}, "notes": "Q2 planning and goals.", "workspace": {"gid": "1234567890", "name": "My Workspace"}}}
Update a project

Updates an existing project. Only the fields provided are changed.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project.
payloadProjectGidBodyYesProject fields to update.

Returns: ProjectOkResponse|error

Sample code:

asana:ProjectOkResponse project = check asanaClient->/projects/["9876543210"].put({
data: {
name: "Q2 Planning (Updated)",
archived: false
}
});

Sample response:

{"data": {"gid": "9876543210", "name": "Q2 Planning (Updated)", "archived": false}}
Delete a project

Deletes a project by its GID.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/projects/["9876543210"].delete();
Duplicate a project

Creates a duplicate of a project, including selected components.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project to duplicate.
payloadProjectGidDuplicateBodyYesDuplication options including name, team, and which elements to include.

Returns: JobOkResponse|error

Sample code:

asana:JobOkResponse job = check asanaClient->/projects/["9876543210"]/duplicate.post({
data: {
name: "Q2 Planning (Copy)",
include: "task_notes,task_assignee,task_due_dates"
}
});

Sample response:

{"data": {"gid": "9900223344", "resource_type": "job", "status": "in_progress"}}
Add members to project

Adds members to a project.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project.
payloadProjectGidAddMembersBodyYesMembers to add.

Returns: ProjectOkResponse|error

Sample code:

asana:ProjectOkResponse project = check asanaClient->/projects/["9876543210"]/addMembers.post({
data: {
members: ["1100112233"]
}
});

Sample response:

{"data": {"gid": "9876543210", "name": "Q2 Planning", "members": [{"gid": "1100112233", "name": "Jane Doe"}]}}
Get project task counts

Returns the number of tasks in various states within a project.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project.

Returns: TaskCountOkResponse|error

Sample code:

asana:TaskCountOkResponse counts = check asanaClient->/projects/["9876543210"]/task_counts();

Sample response:

{"data": {"num_tasks": 25, "num_incomplete_tasks": 18, "num_completed_tasks": 7}}

Sections​

Get sections in a project

Returns all sections in a project.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project.

Returns: SectionCompacts|error

Sample code:

asana:SectionCompacts sections = check asanaClient->/projects/["9876543210"]/sections();

Sample response:

{"data": [{"gid": "5500112233", "name": "To Do", "resource_type": "section"}, {"gid": "5500112234", "name": "In Progress", "resource_type": "section"}], "next_page": null}
Create a section in a project

Creates a new section within a project.

Parameters:

NameTypeRequiredDescription
projectGidstringYesThe globally unique identifier for the project.
payloadProjectGidSectionsBodyYesSection data including name.

Returns: SectionOkResponse|error

Sample code:

asana:SectionOkResponse section = check asanaClient->/projects/["9876543210"]/sections.post({
data: {
name: "Documentation"
}
});

Sample response:

{"data": {"gid": "5500112235", "name": "Documentation", "project": {"gid": "9876543210", "name": "Employee Onboarding"}}}
Update a section

Updates a section's name or other properties.

Parameters:

NameTypeRequiredDescription
sectionGidstringYesThe globally unique identifier for the section.
payloadSectionGidBodyYesSection fields to update.

Returns: SectionOkResponse|error

Sample code:

asana:SectionOkResponse section = check asanaClient->/sections/["5500112235"].put({
data: {
name: "Documentation & Guides"
}
});

Sample response:

{"data": {"gid": "5500112235", "name": "Documentation & Guides"}}
Delete a section

Deletes a section. Tasks in the section are not deleted.

Parameters:

NameTypeRequiredDescription
sectionGidstringYesThe globally unique identifier for the section.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/sections/["5500112235"].delete();
Add task to a section

Adds a task to a specific section within a project.

Parameters:

NameTypeRequiredDescription
sectionGidstringYesThe globally unique identifier for the section.
payloadSectionGidAddTaskBodyYesTask to add, with optional insert position.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/sections/["5500112233"]/addTask.post({
data: {
task: "1201234567890"
}
});

Users​

Get multiple users

Returns a list of users in a workspace or organization.

Parameters:

NameTypeRequiredDescription
queriesGetUsersQueriesNoQuery parameters including workspace, opt_fields, limit, offset.

Returns: UserCompactsResponse|error

Sample code:

asana:UserCompactsResponse users = check asanaClient->/users({}, workspace = "1234567890");

Sample response:

{"data": [{"gid": "1100112233", "name": "Jane Doe", "resource_type": "user"}, {"gid": "1100112234", "name": "John Smith", "resource_type": "user"}]}
Get a user

Returns the full user record for a single user. Use me as the userGid for the authenticated user.

Parameters:

NameTypeRequiredDescription
userGidstringYesThe user GID or "me" for the authenticated user.

Returns: UserOkResponse|error

Sample code:

asana:UserOkResponse me = check asanaClient->/users/["me"]();

Sample response:

{"data": {"gid": "1100112233", "name": "Jane Doe", "email": "[email protected]", "workspaces": [{"gid": "1234567890", "name": "My Workspace"}]}}
Get a user's favorites

Returns all favorites for a user in a given workspace.

Parameters:

NameTypeRequiredDescription
userGidstringYesThe user GID.
queriesGetUserFavoritesQueriesNoQuery parameters including resource_type, workspace.

Returns: AsanaNamedResourceCompacts|error

Sample code:

asana:AsanaNamedResourceCompacts favorites = check asanaClient->/users/["me"]/favorites({}, resource_type = "project", workspace = "1234567890");

Sample response:

{"data": [{"gid": "9876543210", "name": "Q2 Planning", "resource_type": "project"}]}

Workspaces​

Get multiple workspaces

Returns all workspaces visible to the authorized user.

Parameters:

NameTypeRequiredDescription
queriesGetWorkspacesQueriesNoQuery parameters including opt_fields, limit, offset.

Returns: WorkspaceCompacts|error

Sample code:

asana:WorkspaceCompacts workspaces = check asanaClient->/workspaces();

Sample response:

{"data": [{"gid": "1234567890", "name": "My Workspace", "resource_type": "workspace"}]}
Get a workspace

Returns the full workspace record for a single workspace.

Parameters:

NameTypeRequiredDescription
workspaceGidstringYesThe globally unique identifier for the workspace.

Returns: WorkspaceOkResponse|error

Sample code:

asana:WorkspaceOkResponse workspace = check asanaClient->/workspaces/["1234567890"]();

Sample response:

{"data": {"gid": "1234567890", "name": "My Workspace", "is_organization": false, "email_domains": []}}
Update a workspace

Updates a workspace's name.

Parameters:

NameTypeRequiredDescription
workspaceGidstringYesThe globally unique identifier for the workspace.
payloadWorkspaceGidBodyYesWorkspace fields to update.

Returns: WorkspaceOkResponse|error

Sample code:

asana:WorkspaceOkResponse workspace = check asanaClient->/workspaces/["1234567890"].put({
data: {
name: "Engineering Workspace"
}
});

Sample response:

{"data": {"gid": "1234567890", "name": "Engineering Workspace"}}
Add a user to a workspace

Adds a user to a workspace or organization.

Parameters:

NameTypeRequiredDescription
workspaceGidstringYesThe globally unique identifier for the workspace.
payloadWorkspaceGidAddUserBodyYesUser to add.

Returns: UserOkResponse|error

Sample code:

asana:UserOkResponse user = check asanaClient->/workspaces/["1234567890"]/addUser.post({
data: {
user: "1100112234"
}
});

Sample response:

{"data": {"gid": "1100112234", "name": "John Smith", "email": "[email protected]"}}

Teams​

Get teams in a workspace

Returns all teams in a workspace visible to the authorized user.

Parameters:

NameTypeRequiredDescription
workspaceGidstringYesThe globally unique identifier for the workspace.

Returns: TeamCompacts|error

Sample code:

asana:TeamCompacts teams = check asanaClient->/workspaces/["1234567890"]/teams();

Sample response:

{"data": [{"gid": "7700112233", "name": "Engineering", "resource_type": "team"}, {"gid": "7700112234", "name": "Marketing", "resource_type": "team"}]}
Create a team

Creates a new team in an organization.

Parameters:

NameTypeRequiredDescription
payloadTeamsBodyYesTeam data including name and organization.

Returns: TeamOkResponse|error

Sample code:

asana:TeamOkResponse team = check asanaClient->/teams.post({
data: {
name: "Design Team",
organization: "1234567890"
}
});

Sample response:

{"data": {"gid": "7700112235", "name": "Design Team", "organization": {"gid": "1234567890", "name": "My Workspace"}}}
Get a team

Returns the full team record for a single team.

Parameters:

NameTypeRequiredDescription
teamGidstringYesThe globally unique identifier for the team.

Returns: TeamOkResponse|error

Sample code:

asana:TeamOkResponse team = check asanaClient->/teams/["7700112233"]();

Sample response:

{"data": {"gid": "7700112233", "name": "Engineering", "description": "Engineering team", "organization": {"gid": "1234567890", "name": "My Workspace"}}}
Add a user to a team

Adds a user to a team.

Parameters:

NameTypeRequiredDescription
teamGidstringYesThe globally unique identifier for the team.
payloadTeamGidAddUserBodyYesUser to add.

Returns: TeamMembershipOkResponse|error

Sample code:

asana:TeamMembershipOkResponse membership = check asanaClient->/teams/["7700112233"]/addUser.post({
data: {
user: "1100112234"
}
});

Sample response:

{"data": {"gid": "8800112233", "user": {"gid": "1100112234", "name": "John Smith"}, "team": {"gid": "7700112233", "name": "Engineering"}}}

Tags​

Get multiple tags

Returns a list of tags in a workspace.

Parameters:

NameTypeRequiredDescription
queriesGetTagsQueriesNoQuery parameters including workspace, opt_fields, limit, offset.

Returns: TagCompacts|error

Sample code:

asana:TagCompacts tags = check asanaClient->/tags({}, workspace = "1234567890");

Sample response:

{"data": [{"gid": "5566778899", "name": "Priority", "resource_type": "tag"}, {"gid": "5566778900", "name": "Blocked", "resource_type": "tag"}]}
Create a tag

Creates a new tag.

Parameters:

NameTypeRequiredDescription
payloadTagsBodyYesTag data including name and workspace.

Returns: TagOkResponse|error

Sample code:

asana:TagOkResponse tag = check asanaClient->/tags.post({
data: {
name: "Urgent",
workspace: "1234567890"
}
});

Sample response:

{"data": {"gid": "5566778901", "name": "Urgent", "workspace": {"gid": "1234567890", "name": "My Workspace"}}}
Get a tag

Returns the full record for a single tag.

Parameters:

NameTypeRequiredDescription
tagGidstringYesThe globally unique identifier for the tag.

Returns: TagOkResponse|error

Sample code:

asana:TagOkResponse tag = check asanaClient->/tags/["5566778899"]();

Sample response:

{"data": {"gid": "5566778899", "name": "Priority", "color": "dark-red", "workspace": {"gid": "1234567890", "name": "My Workspace"}}}
Get tags for a task

Returns all tags associated with a task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.

Returns: TagCompacts|error

Sample code:

asana:TagCompacts tags = check asanaClient->/tasks/["1201234567890"]/tags();

Sample response:

{"data": [{"gid": "5566778899", "name": "Priority", "resource_type": "tag"}]}

Stories​

Get stories from a task

Returns all stories (comments, activity history) for a task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.

Returns: StoryCompacts|error

Sample code:

asana:StoryCompacts stories = check asanaClient->/tasks/["1201234567890"]/stories();

Sample response:

{"data": [{"gid": "6600112233", "created_at": "2026-03-15T10:30:00.000Z", "text": "Great progress on this task!", "resource_type": "story", "type": "comment"}]}
Create a story on a task

Adds a comment or story to a task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
payloadTaskGidStoriesBodyYesStory data including text.

Returns: StoryOkResponse|error

Sample code:

asana:StoryOkResponse story = check asanaClient->/tasks/["1201234567890"]/stories.post({
data: {
text: "Completed the first draft. Ready for review."
}
});

Sample response:

{"data": {"gid": "6600112234", "text": "Completed the first draft. Ready for review.", "type": "comment", "created_at": "2026-03-17T14:00:00.000Z"}}

Goals​

Get goals

Returns a list of goals in a workspace, team, or time period.

Parameters:

NameTypeRequiredDescription
queriesGetGoalsQueriesNoQuery parameters including workspace, team, time_periods, is_workspace_level.

Returns: GoalCompacts|error

Sample code:

asana:GoalCompacts goals = check asanaClient->/goals({}, workspace = "1234567890");

Sample response:

{"data": [{"gid": "3300112233", "name": "Increase customer retention by 15%", "resource_type": "goal"}]}
Create a goal

Creates a new goal in a workspace.

Parameters:

NameTypeRequiredDescription
payloadGoalsBodyYesGoal data including name, workspace, time period, etc.

Returns: GoalOkResponse|error

Sample code:

asana:GoalOkResponse goal = check asanaClient->/goals.post({
data: {
name: "Launch new product feature",
workspace: "1234567890",
due_on: "2026-06-30",
notes: "Ship the core product feature by end of Q2."
}
});

Sample response:

{"data": {"gid": "3300112234", "name": "Launch new product feature", "due_on": "2026-06-30", "workspace": {"gid": "1234567890", "name": "My Workspace"}}}
Update a goal

Updates an existing goal.

Parameters:

NameTypeRequiredDescription
goalGidstringYesThe globally unique identifier for the goal.
payloadGoalGidBodyYesGoal fields to update.

Returns: GoalOkResponse|error

Sample code:

asana:GoalOkResponse goal = check asanaClient->/goals/["3300112234"].put({
data: {
status: "on_track"
}
});

Sample response:

{"data": {"gid": "3300112234", "name": "Launch new product feature", "status": "on_track"}}

Portfolios​

Get multiple portfolios

Returns a list of portfolios in a workspace for the authenticated user.

Parameters:

NameTypeRequiredDescription
queriesGetPortfoliosQueriesNoQuery parameters including workspace, owner, opt_fields.

Returns: PortfolioCompacts|error

Sample code:

asana:PortfolioCompacts portfolios = check asanaClient->/portfolios({}, workspace = "1234567890", owner = "me");

Sample response:

{"data": [{"gid": "4400112233", "name": "Q2 Portfolio", "resource_type": "portfolio"}]}
Create a portfolio

Creates a new portfolio in a workspace.

Parameters:

NameTypeRequiredDescription
payloadPortfoliosBodyYesPortfolio data including name, workspace, and color.

Returns: PortfolioOkResponse|error

Sample code:

asana:PortfolioOkResponse portfolio = check asanaClient->/portfolios.post({
data: {
name: "Engineering Initiatives",
workspace: "1234567890",
color: "light-green"
}
});

Sample response:

{"data": {"gid": "4400112234", "name": "Engineering Initiatives", "color": "light-green", "workspace": {"gid": "1234567890", "name": "My Workspace"}}}
Add a portfolio item

Adds a project to a portfolio.

Parameters:

NameTypeRequiredDescription
portfolioGidstringYesThe globally unique identifier for the portfolio.
payloadPortfolioGidAddItemBodyYesItem to add.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/portfolios/["4400112233"]/addItem.post({
data: {
item: "9876543210"
}
});

Webhooks​

Get multiple webhooks

Returns all webhooks for a workspace.

Parameters:

NameTypeRequiredDescription
queriesGetWebhooksQueriesNoQuery parameters including workspace, resource.

Returns: WebhookCompacts|error

Sample code:

asana:WebhookCompacts webhooks = check asanaClient->/webhooks({}, workspace = "1234567890");

Sample response:

{"data": [{"gid": "2200112233", "resource": {"gid": "9876543210", "name": "Q2 Planning"}, "target": "https://example.com/webhook", "active": true}]}
Establish a webhook

Creates a new webhook subscription for a resource.

Parameters:

NameTypeRequiredDescription
payloadWebhooksBodyYesWebhook data including resource and target URL.

Returns: WebhookOkResponse|error

Sample code:

asana:WebhookOkResponse webhook = check asanaClient->/webhooks.post({
data: {
resource: "9876543210",
target: "https://example.com/asana-webhook"
}
});

Sample response:

{"data": {"gid": "2200112234", "resource": {"gid": "9876543210", "name": "Q2 Planning"}, "target": "https://example.com/asana-webhook", "active": true}}
Delete a webhook

Deletes a webhook subscription.

Parameters:

NameTypeRequiredDescription
webhookGidstringYesThe globally unique identifier for the webhook.

Returns: EmptyOkResponse|error

Sample code:

_ = check asanaClient->/webhooks/["2200112233"].delete();

Attachments​

Get attachments from an object

Returns all attachments for a given object (task, project, etc.).

Parameters:

NameTypeRequiredDescription
queriesGetAttachmentsQueriesNoQuery parameters including parent (resource GID).

Returns: AttachmentCompacts|error

Sample code:

asana:AttachmentCompacts attachments = check asanaClient->/attachments({}, parent = "1201234567890");

Sample response:

{"data": [{"gid": "1100223344", "name": "project_plan.pdf", "resource_type": "attachment"}]}
Get an attachment

Returns the full record for a single attachment.

Parameters:

NameTypeRequiredDescription
attachmentGidstringYesThe globally unique identifier for the attachment.

Returns: AttachmentOkResponse|error

Sample code:

asana:AttachmentOkResponse attachment = check asanaClient->/attachments/["1100223344"]();

Sample response:

{"data": {"gid": "1100223344", "name": "project_plan.pdf", "download_url": "https://asana-user-private-us-east-1.s3.amazonaws.com/...", "host": "asana", "view_url": "https://app.asana.com/..."}}

Custom fields​

Get workspace custom fields

Returns all custom fields in a workspace.

Parameters:

NameTypeRequiredDescription
workspaceGidstringYesThe globally unique identifier for the workspace.

Returns: CustomFieldsResponse|error

Sample code:

asana:CustomFieldsResponse fields = check asanaClient->/workspaces/["1234567890"]/custom_fields();

Sample response:

{"data": [{"gid": "8800334455", "name": "Priority Level", "resource_type": "custom_field", "type": "enum"}]}
Create a custom field

Creates a new custom field in a workspace.

Parameters:

NameTypeRequiredDescription
payloadCustomFieldsBodyYesCustom field data including name, type, workspace, and options.

Returns: CustomFieldOkResponse|error

Sample code:

asana:CustomFieldOkResponse field = check asanaClient->/custom_fields.post({
data: {
name: "Story Points",
resource_subtype: "number",
workspace: "1234567890",
precision: 0
}
});

Sample response:

{"data": {"gid": "8800334456", "name": "Story Points", "resource_subtype": "number", "precision": 0}}

Project templates​

Get multiple project templates

Returns a list of project templates accessible in a workspace or team.

Parameters:

NameTypeRequiredDescription
queriesGetProjectTemplatesQueriesNoQuery parameters including workspace, team.

Returns: ProjectTemplateCompacts|error

Sample code:

asana:ProjectTemplateCompacts templates = check asanaClient->/project_templates({}, workspace = "1234567890");

Sample response:

{"data": [{"gid": "7700334455", "name": "Sprint Planning Template", "resource_type": "project_template"}]}
Instantiate a project from template

Creates a new project from an existing project template.

Parameters:

NameTypeRequiredDescription
projectTemplateGidstringYesThe globally unique identifier for the project template.
payloadProjectTemplateGidInstantiateProjectBodyYesInstantiation options including name and team.

Returns: JobOkResponse|error

Sample code:

asana:JobOkResponse job = check asanaClient->/project_templates/["7700334455"]/instantiateProject.post({
data: {
name: "Sprint 42 Planning"
}
});

Sample response:

{"data": {"gid": "9900556677", "resource_type": "job", "status": "in_progress"}}

Time tracking​

Get time tracking entries for a task

Returns all time tracking entries for a task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.

Returns: TimeTrackingEntryCompacts|error

Sample code:

asana:TimeTrackingEntryCompacts entries = check asanaClient->/tasks/["1201234567890"]/time_tracking_entries();

Sample response:

{"data": [{"gid": "1122334455", "duration_minutes": 120, "entered_on": "2026-03-16", "created_by": {"gid": "1100112233", "name": "Jane Doe"}}]}
Create a time tracking entry

Creates a time tracking entry on a task.

Parameters:

NameTypeRequiredDescription
taskGidstringYesThe globally unique identifier for the task.
payloadTaskGidTimeTrackingEntriesBodyYesTime tracking entry data including duration and date.

Returns: TimeTrackingEntryOkResponse|error

Sample code:

asana:TimeTrackingEntryOkResponse entry = check asanaClient->/tasks/["1201234567890"]/time_tracking_entries.post({
data: {
duration_minutes: 90,
entered_on: "2026-03-17"
}
});

Sample response:

{"data": {"gid": "1122334456", "duration_minutes": 90, "entered_on": "2026-03-17", "created_by": {"gid": "1100112233", "name": "Jane Doe"}}}

Events & batch​

Get events on a resource

Returns events for a resource since a sync token. Used for polling-based change detection.

Parameters:

NameTypeRequiredDescription
queriesGetEventsQueriesNoQuery parameters including resource (GID) and sync (sync token).

Returns: EventsResponse|error

Sample code:

asana:EventsResponse events = check asanaClient->/events({}, resource = "9876543210");

Sample response:

{"data": [{"type": "task", "action": "changed", "resource": {"gid": "1201234567890", "resource_type": "task"}}], "sync": "de4774f6915eae04714ca93bb2f5ee81"}
Submit parallel batch requests

Submits multiple API requests in a single HTTP call for improved performance.

Parameters:

NameTypeRequiredDescription
payloadBatchBodyYesBatch request data containing an array of individual actions.

Returns: BatchOkResponse|error

Sample code:

asana:BatchOkResponse batch = check asanaClient->/batch.post({
data: {
actions: [
{
relative_path: "/tasks/1201234567890",
method: "GET"
},
{
relative_path: "/tasks/1201234567891",
method: "GET"
}
]
}
});

Sample response:

{"data": [{"status_code": 200, "body": {"data": {"gid": "1201234567890", "name": "Draft project proposal"}}}, {"status_code": 200, "body": {"data": {"gid": "1201234567891", "name": "Review budget estimates"}}}]}

Typeahead​

Get objects via typeahead

Searches for objects in a workspace using typeahead-style matching.

Parameters:

NameTypeRequiredDescription
workspaceGidstringYesThe globally unique identifier for the workspace.
queriesGetTypeaheadQueriesNoQuery parameters including resource_type, query, count.

Returns: AsanaNamedResourceCompacts|error

Sample code:

asana:AsanaNamedResourceCompacts results = check asanaClient->/workspaces/["1234567890"]/typeahead({}, resource_type = "task", query = "proposal");

Sample response:

{"data": [{"gid": "1201234567890", "name": "Draft project proposal", "resource_type": "task"}]}

Memberships​

Get multiple memberships

Returns memberships filtered by parent or member.

Parameters:

NameTypeRequiredDescription
queriesGetMembershipsQueriesNoQuery parameters including parent, member.

Returns: MembershipCompacts|error

Sample code:

asana:MembershipCompacts memberships = check asanaClient->/memberships({}, parent = "9876543210");

Sample response:

{"data": [{"gid": "1100998877", "member": {"gid": "1100112233", "name": "Jane Doe"}, "resource_type": "membership"}]}
Create a membership

Creates a new membership (e.g., add a user to a project or goal).

Parameters:

NameTypeRequiredDescription
payloadMembershipsBodyYesMembership data including parent and member.

Returns: MembershipCreatedResponse|error

Sample code:

asana:MembershipCreatedResponse membership = check asanaClient->/memberships.post({
data: {
parent: "9876543210",
member: "1100112234"
}
});

Sample response:

{"data": {"gid": "1100998878", "member": {"gid": "1100112234", "name": "John Smith"}, "parent": {"gid": "9876543210", "name": "Q2 Planning"}}}

Status updates​

Get status updates

Returns status updates for a given parent object (project, portfolio, or goal).

Parameters:

NameTypeRequiredDescription
queriesGetStatusUpdatesQueriesNoQuery parameters including parent (resource GID).

Returns: StatusUpdateCompacts|error

Sample code:

asana:StatusUpdateCompacts updates = check asanaClient->/status_updates({}, parent = "9876543210");

Sample response:

{"data": [{"gid": "4455667788", "title": "On Track - Week 12", "resource_type": "status_update", "status_type": "on_track"}]}
Create a status update

Creates a new status update on a project, portfolio, or goal.

Parameters:

NameTypeRequiredDescription
payloadStatusUpdatesBodyYesStatus update data including parent, title, text, and status type.

Returns: StatusUpdateOkResponse|error

Sample code:

asana:StatusUpdateOkResponse update = check asanaClient->/status_updates.post({
data: {
parent: "9876543210",
title: "On Track - Week 13",
text: "All milestones are progressing as planned.",
status_type: "on_track"
}
});

Sample response:

{"data": {"gid": "4455667789", "title": "On Track - Week 13", "text": "All milestones are progressing as planned.", "status_type": "on_track"}}

Audit log​

Get audit log events

Returns audit log events for a workspace. Only available to Enterprise organizations.

Parameters:

NameTypeRequiredDescription
workspaceGidstringYesThe globally unique identifier for the workspace.
queriesGetAuditLogEventsQueriesNoQuery parameters including start_at, end_at, event_type.

Returns: AuditLogEventResponse|error

Sample code:

asana:AuditLogEventResponse events = check asanaClient->/workspaces/["1234567890"]/audit_log_events();

Sample response:

{"data": [{"gid": "9988776655", "event_type": "task_created", "actor": {"gid": "1100112233", "actor_type": "user"}, "created_at": "2026-03-17T10:00:00.000Z"}]}