The Asana API offers RESTful endpoints to read and manipulate core Asana objects—including tasks, projects, teams, attachments, and workspaces—plus specialized capabilities such as audit‑log retrieval, batch request processing, and custom‑field management.
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
parent(query, required) — Globally unique identifier for object to fetch statuses from. Must be a GID for a `project`, `project_brief`, or `task`.
POST
/attachments
Upload an attachment
DELETE
/attachments/{attachment_gid}
Delete an attachment
GET
/attachments/{attachment_gid}
Get an attachment
POST
/batch
Submit parallel requests
POST
/custom_fields
Create a custom field
DELETE
/custom_fields/{custom_field_gid}
Delete a custom field
GET
/custom_fields/{custom_field_gid}
Get a custom field
PUT
/custom_fields/{custom_field_gid}
Update a custom field
POST
/custom_fields/{custom_field_gid}/enum_options
Create an enum option
GET
/goal_relationships
Get goal relationships
opt_pretty(query) — Provides “pretty” output. Provides the response in a “pretty” format. In the case of JSON this means doing proper line breaking and indentation to make it readable. This will take extra time and increase the response size so it is advisable only to use this during debugging.
opt_fields(query) — Defines fields to return. Some requests return *compact* representations of objects in order to conserve resources and complete the request more efficiently. Other times requests return more information than you may need. This option allows you to list the exact set of fields that the API should be sure to return for the objects. The field names should be provided as paths, described below. The id of included objects will always be returned, regardless of the field options.
supported_goal(query, required) — Globally unique identifier for the supported goal in the goal relationship.
resource_subtype(query) — If provided, filter to goal relationships with a given resource_subtype.
GET
/goal_relationships/{goal_relationship_gid}
Get a goal relationship
PUT
/goal_relationships/{goal_relationship_gid}
Update a goal relationship
GET
/goals
Get goals
portfolio(query) — Globally unique identifier for supporting portfolio.
project(query) — Globally unique identifier for supporting project.
is_workspace_level(query) — Filter to goals with is_workspace_level set to query value. Must be used with the workspace parameter.
team(query) — Globally unique identifier for the team.
workspace(query) — Globally unique identifier for the workspace.
time_periods(query) — Globally unique identifiers for the time periods.
POST
/goals
Create a goal
DELETE
/goals/{goal_gid}
Delete a goal
GET
/goals/{goal_gid}
Get a goal
PUT
/goals/{goal_gid}
Update a goal
POST
/goals/{goal_gid}/addFollowers
Add a collaborator to a goal
POST
/goals/{goal_gid}/addSupportingRelationship
Add a supporting goal relationship
GET
/goals/{goal_gid}/parentGoals
Get parent goals from a goal
POST
/goals/{goal_gid}/removeFollowers
Remove a collaborator from a goal
POST
/goals/{goal_gid}/removeSupportingRelationship
Removes a supporting goal relationship
POST
/goals/{goal_gid}/setMetric
Create a goal metric
POST
/goals/{goal_gid}/setMetricCurrentValue
Update a goal metric
GET
/jobs/{job_gid}
Get a job by id
POST
/organization_exports
Create an organization export request
GET
/organization_exports/{organization_export_gid}
Get details on an org export request
GET
/portfolio_memberships
Get multiple portfolio memberships
GET
/portfolio_memberships/{portfolio_membership_gid}
Get a portfolio membership
GET
/portfolios
Get multiple portfolios
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
workspace(query, required) — The workspace or organization to filter portfolios on.
owner(query, required) — The user who owns the portfolio. Currently, API users can only get a list of portfolios that they themselves own.
POST
/portfolios
Create a portfolio
DELETE
/portfolios/{portfolio_gid}
Delete a portfolio
GET
/portfolios/{portfolio_gid}
Get a portfolio
PUT
/portfolios/{portfolio_gid}
Update a portfolio
POST
/portfolios/{portfolio_gid}/addCustomFieldSetting
Add a custom field to a portfolio
POST
/portfolios/{portfolio_gid}/addItem
Add a portfolio item
POST
/portfolios/{portfolio_gid}/addMembers
Add users to a portfolio
GET
/portfolios/{portfolio_gid}/custom_field_settings
Get a portfolio's custom fields
GET
/project_templates
Get multiple project templates
workspace(query) — The workspace to filter results on.
team(query) — The team to filter projects on.
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
workspace(query) — The workspace or organization to filter projects on.
team(query) — The team to filter projects on.
archived(query) — Only return projects whose `archived` field takes on the value of this parameter.
POST
/projects
Create a project
DELETE
/projects/{project_gid}
Delete a project
GET
/projects/{project_gid}
Get a project
PUT
/projects/{project_gid}
Update a project
POST
/projects/{project_gid}/addCustomFieldSetting
Add a custom field to a project
POST
/projects/{project_gid}/addFollowers
Add followers to a project
POST
/projects/{project_gid}/addMembers
Add users to a project
GET
/projects/{project_gid}/custom_field_settings
Get a project's custom fields
POST
/projects/{project_gid}/duplicate
Duplicate a project
POST
/projects/{project_gid}/project_briefs
Create a project brief
GET
/projects/{project_gid}/project_memberships
Get memberships from a project
GET
/projects/{project_gid}/project_statuses
Get statuses from a project
project_gid(path, required) — Globally unique identifier for the project.
opt_pretty(query) — Provides “pretty” output. Provides the response in a “pretty” format. In the case of JSON this means doing proper line breaking and indentation to make it readable. This will take extra time and increase the response size so it is advisable only to use this during debugging.
opt_fields(query) — Defines fields to return. Some requests return *compact* representations of objects in order to conserve resources and complete the request more efficiently. Other times requests return more information than you may need. This option allows you to list the exact set of fields that the API should be sure to return for the objects. The field names should be provided as paths, described below. The id of included objects will always be returned, regardless of the field options.
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
POST
/projects/{project_gid}/project_statuses
Create a project status
POST
/projects/{project_gid}/removeCustomFieldSetting
Remove a custom field from a project
POST
/projects/{project_gid}/removeFollowers
Remove followers from a project
POST
/projects/{project_gid}/removeMembers
Remove users from a project
POST
/projects/{project_gid}/saveAsTemplate
Create a project template from a project
GET
/projects/{project_gid}/sections
Get sections in a project
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
POST
/projects/{project_gid}/sections
Create a section in a project
POST
/projects/{project_gid}/sections/insert
Move or Insert sections
GET
/projects/{project_gid}/task_counts
Get task count of a project
GET
/projects/{project_gid}/tasks
Get tasks from a project
DELETE
/sections/{section_gid}
Delete a section
GET
/sections/{section_gid}
Get a section
PUT
/sections/{section_gid}
Update a section
POST
/sections/{section_gid}/addTask
Add task to section
GET
/sections/{section_gid}/tasks
Get tasks from a section
GET
/status_updates
Get status updates from an object
parent(query, required) — Globally unique identifier for object to fetch statuses from. Must be a GID for a project, portfolio, or goal.
created_since(query) — Only return statuses that have been created since the given time.
POST
/status_updates
Create a status update
DELETE
/status_updates/{status_gid}
Delete a status update
GET
/status_updates/{status_gid}
Get a status update
DELETE
/stories/{story_gid}
Delete a story
GET
/stories/{story_gid}
Get a story
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
PUT
/stories/{story_gid}
Update a story
GET
/tags
Get multiple tags
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
workspace(query) — The workspace to filter tags on.
POST
/tags
Create a tag
DELETE
/tags/{tag_gid}
Delete a tag
GET
/tags/{tag_gid}
Get a tag
PUT
/tags/{tag_gid}
Update a tag
GET
/tags/{tag_gid}/tasks
Get tasks from a tag
GET
/tasks
Get multiple tasks
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
assignee(query) — The assignee to filter tasks on. If searching for unassigned tasks, assignee.any = null can be specified. *Note: If you specify `assignee`, you must also specify the `workspace` to filter on.*
project(query) — The project to filter tasks on.
section(query) — The section to filter tasks on. *Note: Currently, this is only supported in board views.*
workspace(query) — The workspace to filter tasks on. *Note: If you specify `workspace`, you must also specify the `assignee` to filter on.*
completed_since(query) — Only return tasks that are either incomplete or that have been completed since this time.
modified_since(query) — Only return tasks that have been modified since the given time. *Note: A task is considered “modified” if any of its properties change, or associations between it and other objects are modified (e.g. a task being added to a project). A task is not considered modified just because another object it is associated with (e.g. a subtask) is modified. Actions that count as modifying the task include assigning, renaming, completing, and adding stories.*
POST
/tasks
Create a task
DELETE
/tasks/{task_gid}
Delete a task
GET
/tasks/{task_gid}
Get a task
PUT
/tasks/{task_gid}
Update a task
POST
/tasks/{task_gid}/addDependencies
Set dependencies for a task
GET
/tasks/{task_gid}/stories
Get stories from a task
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
POST
/tasks/{task_gid}/stories
Create a story on a task
GET
/tasks/{task_gid}/subtasks
Get subtasks from a task
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
POST
/tasks/{task_gid}/subtasks
Create a subtask
GET
/tasks/{task_gid}/tags
Get a task's tags
GET
/team_memberships
Get team memberships
team(query) — Globally unique identifier for the team.
user(query) — A string identifying a user. This can either be the string "me", an email, or the gid of a user. This parameter must be used with the workspace parameter.
workspace(query) — Globally unique identifier for the workspace. This parameter must be used with the user parameter.
GET
/team_memberships/{team_membership_gid}
Get a team membership
POST
/teams
Create a team
PUT
/teams
Update a team
GET
/teams/{team_gid}
Get a team
POST
/teams/{team_gid}/addUser
Add a user to a team
GET
/teams/{team_gid}/project_templates
Get a team's project templates
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
GET
/teams/{team_gid}/projects
Get a team's projects
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
archived(query) — Only return projects whose `archived` field takes on the value of this parameter.
POST
/teams/{team_gid}/projects
Create a project in a team
POST
/teams/{team_gid}/removeUser
Remove a user from a team
GET
/teams/{team_gid}/team_memberships
Get memberships from a team
GET
/teams/{team_gid}/users
Get users in a team
GET
/time_periods
Get time periods
start_on(query) — ISO 8601 date string
end_on(query) — ISO 8601 date string
workspace(query, required) — Globally unique identifier for the workspace.
GET
/time_periods/{time_period_gid}
Get a time period
GET
/user_task_lists/{user_task_list_gid}
Get a user task list
GET
/user_task_lists/{user_task_list_gid}/tasks
Get tasks from a user task list
GET
/users
Get multiple users
GET
/users/{user_gid}
Get a user
GET
/users/{user_gid}/favorites
Get a user's favorites
GET
/users/{user_gid}/team_memberships
Get memberships from a user
workspace(query, required) — Globally unique identifier for the workspace.
GET
/users/{user_gid}/teams
Get teams for a user
GET
/users/{user_gid}/user_task_list
Get a user's task list
GET
/webhooks
Get multiple webhooks
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
workspace(query, required) — The workspace to query for webhooks in.
resource(query) — Only return webhooks for the given resource.
POST
/webhooks
Establish a webhook
DELETE
/webhooks/{webhook_gid}
Delete a webhook
GET
/webhooks/{webhook_gid}
Get a webhook
PUT
/webhooks/{webhook_gid}
Update a webhook
GET
/workspace_memberships/{workspace_membership_gid}
Get a workspace membership
GET
/workspaces
Get multiple workspaces
GET
/workspaces/{workspace_gid}
Get a workspace
PUT
/workspaces/{workspace_gid}
Update a workspace
POST
/workspaces/{workspace_gid}/addUser
Add a user to a workspace or organization
GET
/workspaces/{workspace_gid}/audit_log_events
Get audit log events
GET
/workspaces/{workspace_gid}/custom_fields
Get a workspace's custom fields
GET
/workspaces/{workspace_gid}/projects
Get all projects in a workspace
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
archived(query) — Only return projects whose `archived` field takes on the value of this parameter.
POST
/workspaces/{workspace_gid}/projects
Create a project in a workspace
POST
/workspaces/{workspace_gid}/removeUser
Remove a user from a workspace or organization
GET
/workspaces/{workspace_gid}/tags
Get tags in a workspace
limit(query, limit) — Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset(query, offset) — Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
POST
/workspaces/{workspace_gid}/tags
Create a tag in a workspace
GET
/workspaces/{workspace_gid}/tasks/search
Search tasks in a workspace
GET
/workspaces/{workspace_gid}/teams
Get teams in a workspace
GET
/workspaces/{workspace_gid}/typeahead
Get objects via typeahead
GET
/workspaces/{workspace_gid}/users
Get users in a workspace or organization
GET
/workspaces/{workspace_gid}/workspace_memberships
Get the workspace memberships for a workspace
167 endpoints auto-detected
Authentication
This API requires authentication: apiKey.
curl -X GET \
"https://developers.asana.com/docs/events"