Asana

Work management and project tracking

developers.asana.com/docs ↗
Version
1.0
OpenAPI
3.0.0
Endpoints
189
Schemas
435
80
Quality
Updated
3 days ago
Productivity productivity project-management tasks
Use this API in your AI agent

Query structured spec data via REST or MCP. Get exactly what your agent needs.

Get API Key

Server URLs

https://app.asana.com/api/1.0

Endpoints

Clear filters

Allocations 1 endpoints

POST /allocations

Creates a new allocation.

Returns the full record of the newly created allocation.

operationId: Allocations_createRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The allocation to create.

application/json
schema AllocationsCreateRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
effort object optional
type string optional
value number optional
end_date string required
start_date string required
parent string required
assignee string required

Responses

201

Successfully created a new allocation.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /allocations

Attachments 1 endpoints

POST /attachments

Upload an attachment.

This method uploads an attachment on an object and returns the compact
record for the created attachment object. This is possible by either:

  • Providing the URL of the external resource being attached, or
  • Downloading the file content first and then uploading it as any other attachment. Note that it is not possible to attach
    files from third party services such as Dropbox, Box, Vimeo & Google Drive via the API

The 100MB size limit on attachments in Asana is enforced on this endpoint.

This endpoint expects a multipart/form-data encoded request containing the full contents of the file to be uploaded.

Requests made should follow the HTTP/1.1 specification that line
terminators are of the form CRLF or \r\n outlined
here in order for the server to reliably and properly handle the request.

operationId: Attachments_uploadAttachment

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

The file you want to upload.

Note when using curl:

Be sure to add an ‘@’ before the file path, and use the --form
option instead of the -d option.

When uploading PDFs with curl, force the content-type to be pdf by
appending the content type to the file path: --form "file=@file.pdf;type=application/pdf".

multipart/form-data
schema AttachmentRequest
Property Type Required
url string optional
file string optional
name string optional
parent string required
connect_to_app boolean optional
resource_subtype string optional

Responses

200

Successfully uploaded the attachment to the parent object.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /attachments

Batchapi 1 endpoints

POST /batch

Make multiple requests in parallel to Asana’s API.

operationId: BatchApi_submitParallelRequests

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The requests to batch together via the Batch API.

application/json
schema BatchApiSubmitParallelRequestsRequest
Property Type Required
data object optional
actions array optional
data object optional
method string required
options object optional
limit integer optional
fields array optional
offset integer optional
relative_path string required

Responses

200

Successfully completed the requested batch API operations.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /batch

Customfields 3 endpoints

POST /custom_fields

Creates a new custom field in a workspace. Every custom field is required
to be created in a specific workspace, and this workspace cannot be
changed once set.

A custom field’s name must be unique within a workspace and not conflict
with names of existing task properties such as Due Date or Assignee.
A custom field’s type must be one of text, enum, multi_enum, number,
date, or people.

Returns the full record of the newly created custom field.

operationId: CustomFields_createNewFieldRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The custom field object to create.

application/json
schema CustomFieldsCreateNewFieldRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
type string optional
enabled boolean optional
id_prefix string optional
date_value object optional
date string optional
date_time string optional
enum_value object optional
gid string optional
resource_type string optional
name string optional
color string optional
enabled boolean optional
text_value string optional
enum_options array optional
gid string optional
resource_type string optional
name string optional
color string optional
enabled boolean optional
number_value number optional
display_value string optional
is_formula_field boolean optional
resource_subtype string optional
multi_enum_values array optional
gid string optional
resource_type string optional
name string optional
color string optional
enabled boolean optional
representation_type string optional
format string optional
precision integer optional
description string optional
custom_label string optional
…8 more object optional

Responses

201

Custom field successfully created.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /custom_fields
POST /custom_fields/{custom_field_gid}/enum_options

Creates an enum option and adds it to this custom field’s list of enum options. A custom field can have at most 500 enum options (including disabled options). By default new enum options are inserted at the end of a custom field’s list.
Locked custom fields can only have enum options added by the user who locked the field.
Returns the full record of the newly created enum option.

operationId: CustomFields_addEnumOption

Parameters

Name In Required Type Description
custom_field_gid path optional string

Globally unique identifier for the custom field.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

The enum option object to create.

application/json
schema CustomFieldsAddEnumOptionRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
color string optional
enabled boolean optional
insert_after string optional
insert_before string optional

Responses

201

Custom field enum option successfully created.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /custom_fields/{custom_field_gid}/enum_options
POST /custom_fields/{custom_field_gid}/enum_options/insert

Moves a particular enum option to be either before or after another specified enum option in the custom field.
Locked custom fields can only be reordered by the user who locked the field.

operationId: CustomFields_reorderEnumOption

Parameters

Name In Required Type Description
custom_field_gid path optional string

Globally unique identifier for the custom field.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

The enum option object to create.

application/json
schema CustomFieldsReorderEnumOptionRequest
Property Type Required
data object optional
enum_option string required
after_enum_option string optional
before_enum_option string optional

Responses

200

Custom field enum option successfully reordered.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /custom_fields/{custom_field_gid}/enum_options/insert

Goalrelationships 2 endpoints

POST /goals/{goal_gid}/addSupportingRelationship

Creates a goal relationship by adding a supporting resource to a given goal.

Returns the newly created goal relationship record.

operationId: GoalRelationships_createSupportingRelationship

Parameters

Name In Required Type Description
goal_gid path optional string

Globally unique identifier for the goal.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The supporting resource to be added to the goal

application/json
schema GoalRelationshipsCreateSupportingRelationshipRequest
Property Type Required
data object optional
insert_after string optional
insert_before string optional
contribution_weight number optional
supporting_resource string required

Responses

200

Successfully created the goal relationship.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /goals/{goal_gid}/addSupportingRelationship
POST /goals/{goal_gid}/removeSupportingRelationship

Removes a goal relationship for a given parent goal.

operationId: GoalRelationships_removeSupportingRelationship

Parameters

Name In Required Type Description
goal_gid path optional string

Globally unique identifier for the goal.

opt_pretty query optional boolean

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.

Request Body

required

The supporting resource to be removed from the goal

application/json
schema GoalRelationshipsRemoveSupportingRelationshipRequest
Property Type Required
data object optional
supporting_resource string required

Responses

200

Successfully removed the goal relationship.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /goals/{goal_gid}/removeSupportingRelationship

Goals 5 endpoints

POST /goals

Creates a new goal in a workspace or team.

Returns the full record of the newly created goal.

operationId: Goals_createNewGoalRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The goal to create.

application/json
schema GoalsCreateNewGoalRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
liked boolean optional
notes string optional
due_on string optional
start_on string optional
html_notes string optional
is_workspace_level boolean optional
team string optional
owner string optional
workspace string optional
time_period string optional
followers array optional

Responses

201

Successfully created a new goal.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /goals
POST /goals/{goal_gid}/addFollowers

Adds followers to a goal. Returns the goal the followers were added to.
Each goal can be associated with zero or more followers in the system.
Requests to add/remove followers, if successful, will return the complete updated goal record, described above.

operationId: Goals_addCollaboratorsToGoal

Parameters

Name In Required Type Description
goal_gid path optional string

Globally unique identifier for the goal.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The followers to be added as collaborators

application/json
schema GoalsAddCollaboratorsToGoalRequest
Property Type Required
data object optional
followers array required

Responses

200

Successfully added users as collaborators.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /goals/{goal_gid}/addFollowers
POST /goals/{goal_gid}/removeFollowers

Removes followers from a goal. Returns the goal the followers were removed from.
Each goal can be associated with zero or more followers in the system.
Requests to add/remove followers, if successful, will return the complete updated goal record, described above.

operationId: Goals_removeFollowersFromGoal

Parameters

Name In Required Type Description
goal_gid path optional string

Globally unique identifier for the goal.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The followers to be removed as collaborators

application/json
schema GoalsRemoveFollowersFromGoalRequest
Property Type Required
data object optional
followers array required

Responses

200

Successfully removed users as collaborators.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /goals/{goal_gid}/removeFollowers
POST /goals/{goal_gid}/setMetric

Creates and adds a goal metric to a specified goal. Note that this replaces an existing goal metric if one already exists.

operationId: Goals_createMetric

Parameters

Name In Required Type Description
goal_gid path optional string

Globally unique identifier for the goal.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The goal metric to create.

application/json
schema GoalsCreateMetricRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
unit string optional
precision integer optional
currency_code string optional
progress_source string optional
resource_subtype string optional
target_number_value number optional
current_number_value number optional
initial_number_value number optional
current_display_value string optional

Responses

200

Successfully created a new goal metric.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /goals/{goal_gid}/setMetric
POST /goals/{goal_gid}/setMetricCurrentValue

Updates a goal’s existing metric’s current_number_value if one exists,
otherwise responds with a 400 status code.

Returns the complete updated goal metric record.

operationId: Goals_updateMetricCurrentValue

Parameters

Name In Required Type Description
goal_gid path optional string

Globally unique identifier for the goal.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The updated fields for the goal metric.

application/json
schema GoalsUpdateMetricCurrentValueRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
current_number_value number optional

Responses

200

Successfully updated the goal metric.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /goals/{goal_gid}/setMetricCurrentValue

Memberships 1 endpoints

POST /memberships

Creates a new membership in a goal or project. Teams or users can be a member
of goals or projects.

Returns the full record of the newly created membership.

operationId: Memberships_createNewRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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.

Request Body

The updated fields for the membership.

application/json
schema MembershipsCreateNewRecordRequest
Property Type Required
data object optional
access_level string optional
role string optional
member string optional
parent string optional

Responses

201

Successfully created the requested membership.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /memberships

Organizationexports 1 endpoints

POST /organization_exports

This method creates a request to export an Organization. Asana will complete the export at some point after you create the request.

operationId: OrganizationExports_createExportRequest

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The organization to export.

application/json
schema OrganizationExportsCreateExportRequestRequest
Property Type Required
data object optional
organization string optional

Responses

201

Successfully created organization export request.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /organization_exports

Portfolios 7 endpoints

POST /portfolios

Creates a new portfolio in the given workspace with the supplied name.

Note that portfolios created in the Asana UI may have some state
(like the “Priority” custom field) which is automatically added
to the portfolio when it is created. Portfolios created via our
API will not be created with the same initial state to allow
integrations to create their own starting state on a portfolio.

operationId: Portfolios_createNewPortfolioRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The portfolio to create.

application/json
schema PortfoliosCreateNewPortfolioRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
color string optional
public boolean optional
members array optional
workspace string optional

Responses

201

Successfully created portfolio.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /portfolios
POST /portfolios/{portfolio_gid}/addCustomFieldSetting

Custom fields are associated with portfolios by way of custom field settings. This method creates a setting for the portfolio.

operationId: Portfolios_addCustomFieldSetting

Parameters

Name In Required Type Description
portfolio_gid path optional string

Globally unique identifier for the portfolio.

opt_pretty query optional boolean

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.

Request Body

required

Information about the custom field setting.

application/json
schema PortfoliosAddCustomFieldSettingRequest
Property Type Required
data object optional
custom_field string required
insert_after string optional
is_important boolean optional
insert_before string optional

Responses

200

Successfully added the custom field to the portfolio.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /portfolios/{portfolio_gid}/addCustomFieldSetting
POST /portfolios/{portfolio_gid}/addItem

Add an item to a portfolio.
Returns an empty data block.

operationId: Portfolios_addPortfolioItem

Parameters

Name In Required Type Description
portfolio_gid path optional string

Globally unique identifier for the portfolio.

opt_pretty query optional boolean

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.

Request Body

required

Information about the item being inserted.

application/json
schema PortfoliosAddPortfolioItemRequest
Property Type Required
data object optional
item string required
insert_after string optional
insert_before string optional

Responses

200

Successfully added the item to the portfolio.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /portfolios/{portfolio_gid}/addItem
POST /portfolios/{portfolio_gid}/addMembers

Adds the specified list of users as members of the portfolio.
Returns the updated portfolio record.

operationId: Portfolios_addMembersToPortfolio

Parameters

Name In Required Type Description
portfolio_gid path optional string

Globally unique identifier for the portfolio.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Information about the members being added.

application/json
schema PortfoliosAddMembersToPortfolioRequest
Property Type Required
data object optional
members string required

Responses

200

Successfully added members to the portfolio.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /portfolios/{portfolio_gid}/addMembers
POST /portfolios/{portfolio_gid}/removeCustomFieldSetting

Removes a custom field setting from a portfolio.

operationId: Portfolios_removeCustomFieldSetting

Parameters

Name In Required Type Description
portfolio_gid path optional string

Globally unique identifier for the portfolio.

opt_pretty query optional boolean

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.

Request Body

required

Information about the custom field setting being removed.

application/json
schema PortfoliosRemoveCustomFieldSettingRequest
Property Type Required
data object optional
custom_field string required

Responses

200

Successfully removed the custom field from the portfolio.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /portfolios/{portfolio_gid}/removeCustomFieldSetting
POST /portfolios/{portfolio_gid}/removeItem

Remove an item from a portfolio.
Returns an empty data block.

operationId: Portfolios_removeItemFromPortfolio

Parameters

Name In Required Type Description
portfolio_gid path optional string

Globally unique identifier for the portfolio.

opt_pretty query optional boolean

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.

Request Body

required

Information about the item being removed.

application/json
schema PortfoliosRemoveItemFromPortfolioRequest
Property Type Required
data object optional
item string required

Responses

200

Successfully removed the item from the portfolio.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /portfolios/{portfolio_gid}/removeItem
POST /portfolios/{portfolio_gid}/removeMembers

Removes the specified list of users from members of the portfolio.
Returns the updated portfolio record.

operationId: Portfolios_removeMembersFromPortfolio

Parameters

Name In Required Type Description
portfolio_gid path optional string

Globally unique identifier for the portfolio.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Information about the members being removed.

application/json
schema PortfoliosRemoveMembersFromPortfolioRequest
Property Type Required
data object optional
members string required

Responses

200

Successfully removed the members from the portfolio.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /portfolios/{portfolio_gid}/removeMembers

Projectbriefs 1 endpoints

POST /projects/{project_gid}/project_briefs

Creates a new project brief.

Returns the full record of the newly created project brief.

operationId: ProjectBriefs_createNewRecord

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The project brief to create.

application/json
schema ProjectBriefsCreateNewRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
title string optional
html_text string optional
text string optional

Responses

201

Successfully created a new project brief.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/project_briefs

Projectstatuses 1 endpoints

POST /projects/{project_gid}/project_statuses

Deprecated: new integrations should prefer the /status_updates route.

Creates a new status update on the project.

Returns the full record of the newly created project status update.

operationId: ProjectStatuses_createNewStatusUpdateRecord

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The project status to create.

application/json
schema ProjectStatusesCreateNewStatusUpdateRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
title string optional
text string optional
color string optional
html_text string optional

Responses

201

Successfully created a new story.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/project_statuses

Projecttemplates 1 endpoints

POST /project_templates/{project_template_gid}/instantiateProject

Creates and returns a job that will asynchronously handle the project instantiation.

To form this request, it is recommended to first make a request to get a project template. Then, from the response, copy the gid from the object in the requested_dates array. This gid should be used in requested_dates to instantiate a project.

Note: The body of this request will differ if your workspace is an organization. To determine if your workspace is an organization, use the is_organization parameter.

operationId: ProjectTemplates_instantiateProjectJob

Parameters

Name In Required Type Description
project_template_gid path optional string

Globally unique identifier for the project template.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

Describes the inputs used for instantiating a project, such as the resulting project’s name, which team it should be created in, and values for date variables.

application/json
schema ProjectTemplatesInstantiateProjectJobRequest
Property Type Required
data object optional
name string required
team string optional
public boolean optional
is_strict boolean optional
requested_dates array optional
gid string optional
value string optional
requested_roles array optional
gid string optional
value string optional

Responses

201

Successfully created the job to handle project instantiation.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /project_templates/{project_template_gid}/instantiateProject

Projects 11 endpoints

POST /projects

Create a new project in a workspace or team.

Every project is required to be created in a specific workspace or
organization, and this cannot be changed once set. Note that you can use
the workspace parameter regardless of whether or not it is an
organization.

If the workspace for your project is an organization, you must also
supply a team to share the project with.

Returns the full record of the newly created project.

operationId: Projects_createNewProjectRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The project to create.

application/json
schema ProjectsCreateNewProjectRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
color string optional
notes string optional
due_on string optional
public boolean optional
members array optional
gid string optional
resource_type string optional
name string optional
archived boolean optional
due_date string optional
start_on string optional
created_at string optional
html_notes string optional
modified_at string optional
default_view string optional
current_status object optional
gid string optional
resource_type string optional
title string optional
text string optional
color string optional
html_text string optional
author object optional
gid string optional
resource_type string optional
name string optional
created_at string optional
created_by object optional
gid string optional
resource_type string optional
name string optional
modified_at string optional
privacy_setting string optional
default_access_level string optional
current_status_update object optional
gid string optional
resource_type string optional
title string optional
resource_subtype string optional
custom_field_settings array optional
gid string optional
resource_type string optional
parent object optional
gid string optional
resource_type string optional
name string optional
project object optional
gid string optional
resource_type string optional
name string optional
custom_field object optional
gid string optional
resource_type string optional
name string optional
type string optional
enabled boolean optional
id_prefix string optional
date_value object optional
enum_value object optional
text_value string optional
enum_options array optional
number_value number optional
display_value string optional
is_formula_field boolean optional
resource_subtype string optional
multi_enum_values array optional
representation_type string optional
format string optional
precision integer optional
description string optional
custom_label string optional
…8 more object optional
is_important boolean optional
…7 more object optional

Responses

201

Successfully retrieved projects.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects
POST /projects/{project_gid}/addCustomFieldSetting

Custom fields are associated with projects by way of custom field settings. This method creates a setting for the project.

operationId: Projects_addCustomFieldSetting

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Information about the custom field setting.

application/json
schema ProjectsAddCustomFieldSettingRequest
Property Type Required
data object optional
custom_field string required
insert_after string optional
is_important boolean optional
insert_before string optional

Responses

200

Successfully added the custom field to the project.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/addCustomFieldSetting
POST /projects/{project_gid}/addFollowers

Adds the specified list of users as followers to the project. Followers are a subset of members who have opted in to receive “tasks added” notifications for a project. Therefore, if the users are not already members of the project, they will also become members as a result of this operation.
Returns the updated project record.

operationId: Projects_addFollowersToProject

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Information about the followers being added.

application/json
schema ProjectsAddFollowersToProjectRequest
Property Type Required
data object optional
followers string required

Responses

200

Successfully added followers to the project.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/addFollowers
POST /projects/{project_gid}/addMembers

Adds the specified list of users as members of the project. Note that a user being added as a member may also be added as a follower as a result of this operation. This is because the user’s default notification settings (i.e., in the “Notifcations” tab of “My Profile Settings”) will override this endpoint’s default behavior of setting “Tasks added” notifications to false.
Returns the updated project record.

operationId: Projects_addMembersToProject

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Information about the members being added.

application/json
schema ProjectsAddMembersToProjectRequest
Property Type Required
data object optional
members string required

Responses

200

Successfully added members to the project.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/addMembers
POST /projects/{project_gid}/duplicate

Creates and returns a job that will asynchronously handle the duplication.

operationId: Projects_duplicateProjectJob

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

Describes the duplicate’s name and the elements that will be duplicated.

application/json
schema ProjectsDuplicateProjectJobRequest
Property Type Required
data object optional
name string required
team string optional
include string optional
schedule_dates object optional
due_on string optional
start_on string optional
should_skip_weekends boolean required

Responses

201

Successfully created the job to handle duplication.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/duplicate
POST /projects/{project_gid}/removeCustomFieldSetting

Removes a custom field setting from a project.

operationId: Projects_removeCustomField

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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.

Request Body

required

Information about the custom field setting being removed.

application/json
schema ProjectsRemoveCustomFieldRequest
Property Type Required
data object optional
custom_field string required

Responses

200

Successfully removed the custom field from the project.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/removeCustomFieldSetting
POST /projects/{project_gid}/removeFollowers

Removes the specified list of users from following the project, this will not affect project membership status.
Returns the updated project record.

operationId: Projects_removeProjectFollowers

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Information about the followers being removed.

application/json
schema ProjectsRemoveProjectFollowersRequest
Property Type Required
data object optional
followers string required

Responses

200

Successfully removed followers from the project.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/removeFollowers
POST /projects/{project_gid}/removeMembers

Removes the specified list of users from members of the project.
Returns the updated project record.

operationId: Projects_removeMembersFromProject

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Information about the members being removed.

application/json
schema ProjectsRemoveMembersFromProjectRequest
Property Type Required
data object optional
members string required

Responses

200

Successfully removed the members from the project.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/removeMembers
POST /projects/{project_gid}/saveAsTemplate

Creates and returns a job that will asynchronously handle the project template creation. Note that
while the resulting project template can be accessed with the API, it won’t be visible in the Asana
UI until Project Templates 2.0 is launched in the app. See more in this forum post.

operationId: Projects_createProjectTemplateJob

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Describes the inputs used for creating a project template, such as the resulting project template’s name, which team it should be created in.

application/json
schema ProjectsCreateProjectTemplateJobRequest
Property Type Required
data object optional
name string required
team string optional
public boolean required
workspace string optional

Responses

201

Successfully created the job to handle project template creation.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/saveAsTemplate
POST /teams/{team_gid}/projects

Creates a project shared with the given team.

Returns the full record of the newly created project.

operationId: Projects_createProjectForTeam

Parameters

Name In Required Type Description
team_gid path optional string

Globally unique identifier for the team.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The new project to create.

application/json
schema ProjectsCreateProjectForTeamRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
color string optional
notes string optional
due_on string optional
public boolean optional
members array optional
gid string optional
resource_type string optional
name string optional
archived boolean optional
due_date string optional
start_on string optional
created_at string optional
html_notes string optional
modified_at string optional
default_view string optional
current_status object optional
gid string optional
resource_type string optional
title string optional
text string optional
color string optional
html_text string optional
author object optional
gid string optional
resource_type string optional
name string optional
created_at string optional
created_by object optional
gid string optional
resource_type string optional
name string optional
modified_at string optional
privacy_setting string optional
default_access_level string optional
current_status_update object optional
gid string optional
resource_type string optional
title string optional
resource_subtype string optional
custom_field_settings array optional
gid string optional
resource_type string optional
parent object optional
gid string optional
resource_type string optional
name string optional
project object optional
gid string optional
resource_type string optional
name string optional
custom_field object optional
gid string optional
resource_type string optional
name string optional
type string optional
enabled boolean optional
id_prefix string optional
date_value object optional
enum_value object optional
text_value string optional
enum_options array optional
number_value number optional
display_value string optional
is_formula_field boolean optional
resource_subtype string optional
multi_enum_values array optional
representation_type string optional
format string optional
precision integer optional
description string optional
custom_label string optional
…8 more object optional
is_important boolean optional
…7 more object optional

Responses

201

Successfully created the specified project.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /teams/{team_gid}/projects
POST /workspaces/{workspace_gid}/projects

Creates a project in the workspace.

If the workspace for your project is an organization, you must also
supply a team to share the project with.

Returns the full record of the newly created project.

operationId: Projects_createInWorkspace

Parameters

Name In Required Type Description
workspace_gid path optional string

Globally unique identifier for the workspace or organization.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The new project to create.

application/json
schema ProjectsCreateInWorkspaceRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
color string optional
notes string optional
due_on string optional
public boolean optional
members array optional
gid string optional
resource_type string optional
name string optional
archived boolean optional
due_date string optional
start_on string optional
created_at string optional
html_notes string optional
modified_at string optional
default_view string optional
current_status object optional
gid string optional
resource_type string optional
title string optional
text string optional
color string optional
html_text string optional
author object optional
gid string optional
resource_type string optional
name string optional
created_at string optional
created_by object optional
gid string optional
resource_type string optional
name string optional
modified_at string optional
privacy_setting string optional
default_access_level string optional
current_status_update object optional
gid string optional
resource_type string optional
title string optional
resource_subtype string optional
custom_field_settings array optional
gid string optional
resource_type string optional
parent object optional
gid string optional
resource_type string optional
name string optional
project object optional
gid string optional
resource_type string optional
name string optional
custom_field object optional
gid string optional
resource_type string optional
name string optional
type string optional
enabled boolean optional
id_prefix string optional
date_value object optional
enum_value object optional
text_value string optional
enum_options array optional
number_value number optional
display_value string optional
is_formula_field boolean optional
resource_subtype string optional
multi_enum_values array optional
representation_type string optional
format string optional
precision integer optional
description string optional
custom_label string optional
…8 more object optional
is_important boolean optional
…7 more object optional

Responses

201

Successfully created a new project in the specified workspace.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /workspaces/{workspace_gid}/projects

Rules 1 endpoints

POST /rule_triggers/{rule_trigger_gid}/run

Trigger a rule which uses an “incoming web request” trigger.

operationId: Rules_triggerRuleRequest

Parameters

Name In Required Type Description
rule_trigger_gid path optional string

The ID of the incoming web request trigger. This value is a path parameter that is automatically generated for the API endpoint.

Request Body

required

A dictionary of variables accessible from within the rule.

application/json
schema RulesTriggerRuleRequestRequest
Property Type Required
data object optional
resource string required
action_data object required

Responses

200

Successfully triggered a rule.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /rule_triggers/{rule_trigger_gid}/run

Sections 3 endpoints

POST /sections/{section_gid}/addTask

Add a task to a specific, existing section. This will remove the task from other sections of the project.

The task will be inserted at the top of a section unless an insert_before or insert_after parameter is declared.

This does not work for separators (tasks with the resource_subtype of section).

operationId: Sections_addTaskToSection

Parameters

Name In Required Type Description
section_gid path optional string

The globally unique identifier for the section.

opt_pretty query optional boolean

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.

Request Body

The task and optionally the insert location.

application/json
schema SectionsAddTaskToSectionRequest
Property Type Required
data object optional
task string required
insert_after string optional
insert_before string optional

Responses

200

Successfully added the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /sections/{section_gid}/addTask
POST /projects/{project_gid}/sections

Creates a new section in a project.
Returns the full record of the newly created section.

operationId: Sections_createNewSection

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

The section to create.

application/json
schema SectionsCreateNewSectionRequest
Property Type Required
data object optional
name string required
insert_after string optional
insert_before string optional

Responses

201

Successfully created the specified section.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/sections
POST /projects/{project_gid}/sections/insert

Move sections relative to each other. One of
before_section or after_section is required.

Sections cannot be moved between projects.

Returns an empty data block.

operationId: Sections_moveOrInsert

Parameters

Name In Required Type Description
project_gid path optional string

Globally unique identifier for the project.

opt_pretty query optional boolean

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.

Request Body

The section’s move action.

application/json
schema SectionsMoveOrInsertRequest
Property Type Required
data object optional
section string required
after_section string optional
before_section string optional

Responses

200

Successfully moved the specified section.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /projects/{project_gid}/sections/insert

Statusupdates 1 endpoints

POST /status_updates

Creates a new status update on an object.
Returns the full record of the newly created status update.

operationId: StatusUpdates_createNewStatusUpdateRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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.

limit query optional integer

Results per page.
The number of objects to return per page. The value must be between 1 and 100.

offset query optional string

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.

opt_fields query optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The status update to create.

application/json
schema StatusUpdatesCreateNewStatusUpdateRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
title string optional
resource_subtype string optional
text string required
html_text string optional
status_type string required
parent string required

Responses

201

Successfully created a new status update.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /status_updates

Stories 1 endpoints

POST /tasks/{task_gid}/stories

Adds a story to a task. This endpoint currently only allows for comment
stories to be created. The comment will be authored by the currently
authenticated user, and timestamped when the server receives the request.

Returns the full record for the new story added to the task.

operationId: Stories_createComment

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The story to create.

application/json
schema StoriesCreateCommentRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
text string optional
html_text string optional
is_pinned boolean optional
created_at string optional
sticker_name string optional
resource_subtype string optional

Responses

201

Successfully created a new story.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/stories

Tags 2 endpoints

POST /tags

Creates a new tag in a workspace or organization.

Every tag is required to be created in a specific workspace or
organization, and this cannot be changed once set. Note that you can use
the workspace parameter regardless of whether or not it is an
organization.

Returns the full record of the newly created tag.

operationId: Tags_createNewTagRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The tag to create.

application/json
schema TagsCreateNewTagRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
color string optional
notes string optional
followers array optional
workspace string optional

Responses

201

Successfully created the newly specified tag.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tags
POST /workspaces/{workspace_gid}/tags

Creates a new tag in a workspace or organization.

Every tag is required to be created in a specific workspace or
organization, and this cannot be changed once set. Note that you can use
the workspace parameter regardless of whether or not it is an
organization.

Returns the full record of the newly created tag.

operationId: Tags_createTagInWorkspace

Parameters

Name In Required Type Description
workspace_gid path optional string

Globally unique identifier for the workspace or organization.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The tag to create.

application/json
schema TagsCreateTagInWorkspaceRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
color string optional
notes string optional
followers array optional

Responses

201

Successfully created the newly specified tag.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /workspaces/{workspace_gid}/tags

Tasktemplates 1 endpoints

POST /task_templates/{task_template_gid}/instantiateTask

Creates and returns a job that will asynchronously handle the task instantiation.

operationId: TaskTemplates_instantiateTaskJob

Parameters

Name In Required Type Description
task_template_gid path optional string

Globally unique identifier for the task template.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

Describes the inputs used for instantiating a task - the task’s name.

application/json
schema TaskTemplatesInstantiateTaskJobRequest
Property Type Required
data object optional
name string optional

Responses

201

Successfully created the job to handle task instantiation.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /task_templates/{task_template_gid}/instantiateTask

Tasks 14 endpoints

POST /tasks

Creating a new task is as easy as POSTing to the /tasks endpoint with a
data block containing the fields you’d like to set on the task. Any
unspecified fields will take on default values.

Every task is required to be created in a specific workspace, and this
workspace cannot be changed once set. The workspace need not be set
explicitly if you specify projects or a parent task instead.

operationId: Tasks_createNewTask

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The task to create.

application/json
schema TasksCreateNewTaskRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
created_by object optional
gid string optional
resource_type string optional
resource_subtype string optional
liked boolean optional
likes array optional
gid string optional
user object optional
gid string optional
resource_type string optional
name string optional
notes string optional
due_at string optional
due_on string optional
hearts array optional
gid string optional
user object optional
gid string optional
resource_type string optional
name string optional
hearted boolean optional
external object optional
gid string optional
data string optional
start_at string optional
start_on string optional
completed boolean optional
num_likes integer optional
created_at string optional
dependents array optional
gid string optional
resource_type string optional
html_notes string optional
…19 more object optional

Responses

201

Successfully created a new task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks
POST /tasks/{task_gid}/addDependencies

Marks a set of tasks as dependencies of this task, if they are not already dependencies. A task can have at most 30 dependents and dependencies combined.

operationId: Tasks_setDependenciesForTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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.

Request Body

required

The list of tasks to set as dependencies.

application/json
schema TasksSetDependenciesForTaskRequest
Property Type Required
data object optional
dependencies array optional

Responses

200

Successfully set the specified dependencies on the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/addDependencies
POST /tasks/{task_gid}/addDependents

Marks a set of tasks as dependents of this task, if they are not already dependents. A task can have at most 30 dependents and dependencies combined.

operationId: Tasks_setTaskDependents

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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.

Request Body

required

The list of tasks to add as dependents.

application/json
schema TasksSetTaskDependentsRequest
Property Type Required
data object optional
dependents array optional

Responses

200

Successfully set the specified dependents on the given task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/addDependents
POST /tasks/{task_gid}/addFollowers

Adds followers to a task. Returns an empty data block.
Each task can be associated with zero or more followers in the system.
Requests to add/remove followers, if successful, will return the complete updated task record, described above.

operationId: Tasks_addFollowersToTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The followers to add to the task.

application/json
schema TasksAddFollowersToTaskRequest
Property Type Required
data object optional
followers array required

Responses

200

Successfully added the specified followers to the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/addFollowers
POST /tasks/{task_gid}/addProject

Adds the task to the specified project, in the optional location
specified. If no location arguments are given, the task will be added to
the end of the project.

addProject can also be used to reorder a task within a project or
section that already contains it.

At most one of insert_before, insert_after, or section should be
specified. Inserting into a section in an non-order-dependent way can be
done by specifying section, otherwise, to insert within a section in a
particular place, specify insert_before or insert_after and a task
within the section to anchor the position of this task.

A task can have at most 20 projects multi-homed to it.

Returns an empty data block.

operationId: Tasks_addProjectToTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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.

Request Body

required

The project to add the task to.

application/json
schema TasksAddProjectToTaskRequest
Property Type Required
data object optional
project string required
section string optional
insert_after string optional
insert_before string optional

Responses

200

Successfully added the specified project to the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/addProject
POST /tasks/{task_gid}/addTag

Adds a tag to a task. Returns an empty data block.

operationId: Tasks_addTagToTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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.

Request Body

required

The tag to add to the task.

application/json
schema TasksAddTagToTaskRequest
Property Type Required
data object optional
tag string required

Responses

200

Successfully added the specified tag to the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/addTag
POST /tasks/{task_gid}/duplicate

Creates and returns a job that will asynchronously handle the duplication.

operationId: Tasks_duplicateTaskJob

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Describes the duplicate’s name and the fields that will be duplicated.

application/json
schema TasksDuplicateTaskJobRequest
Property Type Required
data object optional
name string optional
include string optional

Responses

201

Successfully created the job to handle duplication.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/duplicate
POST /tasks/{task_gid}/removeDependencies

Unlinks a set of dependencies from this task.

operationId: Tasks_unlinkDependenciesFromTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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.

Request Body

required

The list of tasks to unlink as dependencies.

application/json
schema TasksUnlinkDependenciesFromTaskRequest
Property Type Required
data object optional
dependencies array optional

Responses

200

Successfully unlinked the dependencies from the specified task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/removeDependencies
POST /tasks/{task_gid}/removeDependents

Unlinks a set of dependents from this task.

operationId: Tasks_unlinkDependents

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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.

Request Body

required

The list of tasks to remove as dependents.

application/json
schema TasksUnlinkDependentsRequest
Property Type Required
data object optional
dependents array optional

Responses

200

Successfully unlinked the specified tasks as dependents.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

402

The request was valid, but the queried object or object mutation specified in the request is above your current premium level.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/removeDependents
POST /tasks/{task_gid}/removeFollowers

Removes each of the specified followers from the task if they are following. Returns the complete, updated record for the affected task.

operationId: Tasks_removeFollowersFromTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The followers to remove from the task.

application/json
schema TasksRemoveFollowersFromTaskRequest
Property Type Required
data object optional
followers array required

Responses

200

Successfully removed the specified followers from the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/removeFollowers
POST /tasks/{task_gid}/removeProject

Removes the task from the specified project. The task will still exist in
the system, but it will not be in the project anymore.

Returns an empty data block.

operationId: Tasks_removeProjectFromTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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.

Request Body

required

The project to remove the task from.

application/json
schema TasksRemoveProjectFromTaskRequest
Property Type Required
data object optional
project string required

Responses

200

Successfully removed the specified project from the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/removeProject
POST /tasks/{task_gid}/removeTag

Removes a tag from a task. Returns an empty data block.

operationId: Tasks_removeTagFromTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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.

Request Body

required

The tag to remove from the task.

application/json
schema TasksRemoveTagFromTaskRequest
Property Type Required
data object optional
tag string required

Responses

200

Successfully removed the specified tag from the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/removeTag
POST /tasks/{task_gid}/setParent

parent, or no parent task at all. Returns an empty data block. When using insert_before and insert_after, at most one of those two options can be specified, and they must already be subtasks of the parent.

operationId: Tasks_setParentTask

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The new parent of the subtask.

application/json
schema TasksSetParentTaskRequest
Property Type Required
data object optional
parent string required
insert_after string optional
insert_before string optional

Responses

200

Successfully changed the parent of the specified subtask.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/setParent
POST /tasks/{task_gid}/subtasks

Creates a new subtask and adds it to the parent task. Returns the full record for the newly created subtask.

operationId: Tasks_createSubtaskRecord

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The new subtask to create.

application/json
schema TasksCreateSubtaskRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
created_by object optional
gid string optional
resource_type string optional
resource_subtype string optional
liked boolean optional
likes array optional
gid string optional
user object optional
gid string optional
resource_type string optional
name string optional
notes string optional
due_at string optional
due_on string optional
hearts array optional
gid string optional
user object optional
gid string optional
resource_type string optional
name string optional
hearted boolean optional
external object optional
gid string optional
data string optional
start_at string optional
start_on string optional
completed boolean optional
num_likes integer optional
created_at string optional
dependents array optional
gid string optional
resource_type string optional
html_notes string optional
…19 more object optional

Responses

201

Successfully created the specified subtask.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/subtasks

Teams 3 endpoints

POST /teams

Creates a team within the current workspace.

operationId: Teams_createTeamRecord

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The team to create.

application/json
schema TeamsCreateTeamRecordRequest
Property Type Required
data object optional
gid string optional
resource_type string optional
name string optional
visibility string optional
description string optional
organization string optional
html_description string optional
team_member_removal_access_level string optional
guest_invite_management_access_level string optional
join_request_management_access_level string optional
member_invite_management_access_level string optional
edit_team_name_or_description_access_level string optional
edit_team_visibility_or_trash_team_access_level string optional

Responses

201

Successfully created a new team.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /teams
POST /teams/{team_gid}/addUser

The user making this call must be a member of the team in order to add others. The user being added must exist in the same organization as the team.

Returns the complete team membership record for the newly added user.

operationId: Teams_addUserToTeam

Parameters

Name In Required Type Description
team_gid path optional string

Globally unique identifier for the team.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The user to add to the team.

application/json
schema TeamsAddUserToTeamRequest
Property Type Required
data object optional
user string optional

Responses

200

Successfully added user to the team.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /teams/{team_gid}/addUser
POST /teams/{team_gid}/removeUser

The user making this call must be a member of the team in order to remove themselves or others.

operationId: Teams_removeUserFromTeam

Parameters

Name In Required Type Description
team_gid path optional string

Globally unique identifier for the team.

opt_pretty query optional boolean

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.

Request Body

required

The user to remove from the team.

application/json
schema TeamsRemoveUserFromTeamRequest
Property Type Required
data object optional
user string optional

Responses

204

Returns an empty data record

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /teams/{team_gid}/removeUser

Timetrackingentries 1 endpoints

POST /tasks/{task_gid}/time_tracking_entries

Creates a time tracking entry on a given task.

Returns the record of the newly created time tracking entry.

operationId: TimeTrackingEntries_createNewTimeEntryRecord

Parameters

Name In Required Type Description
task_gid path optional string

The task to operate on.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

Information about the time tracking entry.

application/json
schema TimeTrackingEntriesCreateNewTimeEntryRecordRequest
Property Type Required
data object optional
entered_on string optional
duration_minutes integer optional

Responses

201

Successfully created a time tracking entry for the task.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /tasks/{task_gid}/time_tracking_entries

Webhooks 1 endpoints

POST /webhooks

Establishing a webhook is a two-part process. First, a simple HTTP POST
request initiates the creation similar to creating any other resource.

Next, in the middle of this request comes the confirmation handshake.
When a webhook is created, we will send a test POST to the target with an
X-Hook-Secret header. The target must respond with a 200 OK or 204 No Content and a matching X-Hook-Secret header to confirm that this
webhook subscription is indeed expected. We strongly recommend storing
this secret to be used to verify future webhook event signatures.

The POST request to create the webhook will then return with the status
of the request. If you do not acknowledge the webhook’s confirmation
handshake it will fail to setup, and you will receive an error in
response to your attempt to create it. This means you need to be able to
receive and complete the webhook while the POST request is in-flight
(in other words, have a server that can handle requests asynchronously).

Invalid hostnames like localhost will recieve a 403 Forbidden status code.

# Request
curl -H "Authorization: Bearer <personal_access_token>" \
-X POST https://app.asana.com/api/1.0/webhooks \
-d "resource=8675309" \
-d "target=https://example.com/receive-webhook/7654"
# Handshake sent to https://example.com/
POST /receive-webhook/7654
X-Hook-Secret: b537207f20cbfa02357cf448134da559e8bd39d61597dcd5631b8012eae53e81
# Handshake response sent by example.com
HTTP/1.1 200
X-Hook-Secret: b537207f20cbfa02357cf448134da559e8bd39d61597dcd5631b8012eae53e81
# Response
HTTP/1.1 201
{
  "data": {
    "gid": "43214",
    "resource": {
      "gid": "8675309",
      "name": "Bugs"
    },
    "target": "https://example.com/receive-webhook/7654",
    "active": false,
    "last_success_at": null,
    "last_failure_at": null,
    "last_failure_content": null
  }
}
operationId: Webhooks_establishWebhook

Parameters

Name In Required Type Description
opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The webhook workspace and target.

application/json
schema WebhooksEstablishWebhookRequest
Property Type Required
data object optional
target string required
filters array optional
action string optional
fields array optional
resource_type string optional
resource_subtype string optional
resource string required

Responses

201

Successfully created the requested webhook.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /webhooks

Workspaces 2 endpoints

POST /workspaces/{workspace_gid}/addUser

Add a user to a workspace or organization.
The user can be referenced by their globally unique user ID or their email address. Returns the full user record for the invited user.

operationId: Workspaces_addUserToWorkspace

Parameters

Name In Required Type Description
workspace_gid path optional string

Globally unique identifier for the workspace or organization.

opt_pretty query optional boolean

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 optional array

This endpoint returns a compact resource, which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

Request Body

required

The user to add to the workspace.

application/json
schema WorkspacesAddUserToWorkspaceRequest
Property Type Required
data object optional
user string optional

Responses

200

The user was added successfully to the workspace or organization.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /workspaces/{workspace_gid}/addUser
POST /workspaces/{workspace_gid}/removeUser

Remove a user from a workspace or organization.
The user making this call must be an admin in the workspace. The user can be referenced by their globally unique user ID or their email address.
Returns an empty data record.

operationId: Workspaces_removeUserFromWorkspace

Parameters

Name In Required Type Description
workspace_gid path optional string

Globally unique identifier for the workspace or organization.

opt_pretty query optional boolean

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.

Request Body

required

The user to remove from the workspace.

application/json
schema WorkspacesRemoveUserFromWorkspaceRequest
Property Type Required
data object optional
user string optional

Responses

204

The user was removed successfully to the workspace or organization.

400

This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.

401

A valid authentication token was not provided with the request, so the API could not associate a user with the request.

403

The authentication and request syntax was valid but the server is refusing to complete the request. This can happen if you try to read or write to objects or properties that the user does not have access to.

404

Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist.

500

There was a problem on Asana’s end. In the event of a server error the response body should contain an error phrase. These phrases can be used by Asana support to quickly look up the incident that caused the server error. Some errors are due to server load, and will not supply an error phrase.

POST /workspaces/{workspace_gid}/removeUser

Schemas

object AddCustomFieldSettingRequest
{
  "type": "object",
  "required": [
    "custom_field"
  ],
  "properties": {
    "custom_field": {
      "type": "string",
      "example": "14916",
      "description": "The custom field to associate with this container."
    },
    "insert_after": {
      "type": "string",
      "example": "1331",
      "description": "A gid of a Custom Field Setting on this container, after which the new Custom Field Setting will be added.  `insert_before` and `insert_after` parameters cannot both be specified."
    },
    "is_important": {
      "type": "boolean",
      "example": true,
      "description": "Whether this field should be considered important to this container (for instance, to display in the list view of items in the container)."
    },
    "insert_before": {
      "type": "string",
      "example": "1331",
      "description": "A gid of a Custom Field Setting on this container, before which the new Custom Field Setting will be added.  `insert_before` and `insert_after` parameters cannot both be specified."
    }
  }
}
object AddFollowersRequest
{
  "type": "object",
  "required": [
    "followers"
  ],
  "properties": {
    "followers": {
      "type": "string",
      "example": 521621621373,
      "description": "An array of strings identifying users. These can either be the string \"me\", an email, or the gid of a user."
    }
  }
}
object AddMembersRequest
{
  "type": "object",
  "required": [
    "members"
  ],
  "properties": {
    "members": {
      "type": "string",
      "example": 521621621373,
      "description": "An array of strings identifying users. These can either be the string \"me\", an email, or the gid of a user."
    }
  }
}
object AllocationBase
{
  "allOf": [
    {
      "$ref": "#/components/schemas/AsanaResource"
    },
    {
      "type": "object",
      "properties": {
        "effort": {
          "type": "object",
          "nullable": true,
          "properties": {
            "type": {
              "enum": [
                "hours",
                "percent"
              ],
              "type": "string",
              "description": "The units used for tracking effort on an allocation, either \"hours\" or \"percent\"."
            },
            "value": {
              "type": "number",
              "example": 50,
              "description": "The numeric effort value on the allocation."
            }
          },
          "description": "The amount of time associated with the allocation, represented as a percentage or number of hours"
        },
        "end_date": {
          "type": "string",
          "format": "date",
          "example": "2024-02-28",
          "description": "The localized day on which the allocation ends."
        },
        "start_date": {
          "type": "string",
          "format": "date",
          "example": "2024-02-28",
          "description": "The localized day on which the allocation starts."
        }
      },
      "x-docs-overrides": {
        "properties.resource_type.example": "allocation"
      }
    }
  ]
}
object AllocationRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/AllocationBase"
    },
    {
      "type": "object",
      "properties": {
        "parent": {
          "type": "string",
          "description": "Globally unique identifier for the project the allocation is on."
        },
        "assignee": {
          "type": "string",
          "description": "Globally unique identifier for the user who is assigned to the allocation."
        }
      }
    }
  ]
}
object AllocationResponse
{
  "allOf": [
    {
      "$ref": "#/components/schemas/AllocationBase"
    },
    {
      "type": "object",
      "properties": {
        "parent": {
          "$ref": "#/components/schemas/ProjectCompact",
          "type": "object",
          "description": "The project the allocation is on."
        },
        "assignee": {
          "$ref": "#/components/schemas/UserCompact",
          "type": "object",
          "description": "The user who is assigned to the allocation."
        },
        "created_by": {
          "$ref": "#/components/schemas/UserCompact",
          "type": "object",
          "description": "The user who created the allocation."
        },
        "resource_subtype": {
          "type": "string",
          "example": "project_allocation",
          "description": "The subtype of the allocation."
        }
      }
    }
  ]
}
object AllocationsCreateRecordRequest
{
  "type": "object",
  "properties": {
    "data": {
      "allOf": [
        {
          "$ref": "#/components/schemas/AllocationRequest"
        },
        {
          "type": "object",
          "required": [
            "assignee",
            "end_date",
            "parent",
            "start_date"
          ]
        }
      ]
    }
  }
}
object AllocationsCreateRecordResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/AllocationResponse"
    }
  }
}
object AllocationsDeleteAllocationByIdResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/EmptyResponse"
    }
  }
}
object AllocationsGetMultipleResponse
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/AllocationResponse"
      }
    },
    "next_page": {
      "$ref": "#/components/schemas/NextPage"
    }
  }
}
object AllocationsGetRecordByIdResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/AllocationResponse"
    }
  }
}
object AllocationsUpdateRecordByIdRequest
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/AllocationRequest"
    }
  }
}
object AllocationsUpdateRecordByIdResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/AllocationResponse"
    }
  }
}
object AsanaNamedResource
{
  "allOf": [
    {
      "$ref": "#/components/schemas/AsanaResource"
    },
    {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "example": "Bug Task",
          "description": "The name of the object."
        }
      }
    }
  ]
}
object AsanaResource
{
  "type": "object",
  "properties": {
    "gid": {
      "type": "string",
      "example": "12345",
      "readOnly": true,
      "description": "Globally unique identifier of the resource, as a string.",
      "x-insert-after": false
    },
    "resource_type": {
      "type": "string",
      "example": "task",
      "readOnly": true,
      "description": "The base type of this resource.",
      "x-insert-after": "gid"
    }
  },
  "description": "A generic Asana Resource, containing a globally unique identifier."
}
object AttachmentCompact
{
  "allOf": [
    {
      "$ref": "#/components/schemas/AsanaResource"
    },
    {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "example": "Screenshot.png",
          "readOnly": true,
          "description": "The name of the file."
        },
        "resource_subtype": {
          "type": "string",
          "example": "dropbox",
          "description": "The service hosting the attachment. Valid values are `asana`, `dropbox`, `gdrive`, `onedrive`, `box`, `vimeo`, and `external`."
        }
      },
      "description": "An *attachment* object represents any file attached to a task in Asana, whether it’s an uploaded file or one associated via a third-party service such as Dropbox or Google Drive.",
      "x-docs-overrides": {
        "properties.resource_type.example": "attachment"
      }
    }
  ]
}
object AttachmentRequest
{
  "type": "object",
  "required": [
    "parent"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The URL of the external resource being attached. Required for attachments of type `external`.\n"
    },
    "file": {
      "type": "string",
      "format": "binary",
      "description": "Required for `asana` attachments.\n"
    },
    "name": {
      "type": "string",
      "description": "The name of the external resource being attached. Required for attachments of type `external`.\n"
    },
    "parent": {
      "type": "string",
      "description": "Required identifier of the parent task, project, or project_brief, as a string.\n"
    },
    "connect_to_app": {
      "type": "boolean",
      "description": "*Optional*. Only relevant for external attachments with a parent task. A boolean indicating whether the current app should be connected with the attachment for the purposes of showing an app components widget. Requires the app to have been added to a project the parent task is in.\n"
    },
    "resource_subtype": {
      "enum": [
        "asana",
        "dropbox",
        "gdrive",
        "onedrive",
        "box",
        "vimeo",
        "external"
      ],
      "type": "string",
      "example": "external",
      "description": "The type of the attachment. Must be one of the given values. If not specified, a file attachment of type `asana` will be assumed. Note that if the value of `resource_subtype` is `external`, a `parent`, `name`, and `url` must also be provided.\n"
    }
  }
}
object AttachmentResponse
{
  "allOf": [
    {
      "$ref": "#/components/schemas/AttachmentCompact"
    },
    {
      "type": "object",
      "properties": {
        "host": {
          "type": "string",
          "example": "dropbox",
          "readOnly": true,
          "description": "The service hosting the attachment. Valid values are `asana`, `dropbox`, `gdrive`, `box`, and `vimeo`."
        },
        "size": {
          "type": "integer",
          "example": 12345,
          "readOnly": true,
          "description": "The size of the attachment in bytes. Only present when the `resource_subtype` is `asana`."
        },
        "parent": {
          "allOf": [
            {
              "$ref": "#/components/schemas/TaskCompact"
            },
            {
              "type": "object",
              "nullable": true,
              "readOnly": true,
              "properties": {
                "resource_subtype": {
                  "type": "string",
                  "example": "default_task",
                  "nullable": true,
                  "description": "The resource subtype of the parent resource that the filter applies to."
                }
              },
              "description": "The task this attachment is attached to."
            }
          ]
        },
        "view_url": {
          "type": "string",
          "format": "uri",
          "example": "https://www.dropbox.com/s/123/Screenshot.png",
          "nullable": true,
          "readOnly": true,
          "description": "The URL where the attachment can be viewed, which may be friendlier to users in a browser than just directing them to a raw file. May be null if no view URL exists for the service."
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "example": "2012-02-22T02:06:58.147Z",
          "readOnly": true,
          "description": "The time at which this resource was created."
        },
        "download_url": {
          "type": "string",
          "format": "uri",
          "example": "https://s3.amazonaws.com/assets/123/Screenshot.png",
          "nullable": true,
          "readOnly": true,
          "description": "The URL containing the content of the attachment.\n*Note:* May be null if the attachment is hosted by [Box](https://www.box.com/) and will be null if the attachment is a Video Message hosted by [Vimeo](https://vimeo.com/). If present, this URL may only be valid for two minutes from the time of retrieval. You should avoid persisting this URL somewhere and just refresh it on demand to ensure you do not keep stale URLs."
        },
        "permanent_url": {
          "type": "string",
          "format": "uri",
          "example": "https://s3.amazonaws.com/assets/123/Screenshot.png",
          "nullable": true,
          "readOnly": true,
          "description": ""
        },
        "connected_to_app": {
          "type": "boolean",
          "readOnly": true,
          "description": "Whether the attachment is connected to the app making the request for the purposes of showing an app components widget. Only present when the `resource_subtype` is `external` or `gdrive`."
        }
      }
    }
  ]
}
object AttachmentsDeleteSpecificResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/EmptyResponse"
    }
  }
}
object AttachmentsGetAllForObjectResponse
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/AttachmentCompact"
      }
    },
    "next_page": {
      "$ref": "#/components/schemas/NextPage"
    }
  }
}
object AttachmentsGetAttachmentRecordResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/AttachmentResponse"
    }
  }
}
object AttachmentsUploadAttachmentResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/AttachmentResponse"
    }
  }
}
object AuditLogApiGetAuditLogEventsResponse
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/AuditLogEvent"
      }
    },
    "next_page": {
      "$ref": "#/components/schemas/NextPage"
    }
  }
}
object AuditLogEvent
{
  "type": "object",
  "properties": {
    "gid": {
      "type": "string",
      "example": "12345",
      "description": "Globally unique identifier of the `AuditLogEvent`, as a string.",
      "x-insert-after": false
    },
    "actor": {
      "$ref": "#/components/schemas/AuditLogEventActor"
    },
    "context": {
      "$ref": "#/components/schemas/AuditLogEventContext"
    },
    "details": {
      "$ref": "#/components/schemas/AuditLogEventDetails"
    },
    "resource": {
      "$ref": "#/components/schemas/AuditLogEventResource"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2021-01-01T00:00:00.000Z",
      "description": "The time the event was created."
    },
    "event_type": {
      "type": "string",
      "example": "task_deleted",
      "description": "The type of the event."
    },
    "event_category": {
      "type": "string",
      "example": "deletion",
      "description": "The category that this `event_type` belongs to."
    }
  },
  "description": "An object representing a single event within an Asana domain.\n\nEvery audit log event is comprised of an `event_type`, `actor`, `resource`, and `context`. Some events will include additional metadata about the event under `details`. See our [currently supported list of events](/docs/audit-log-events#supported-audit-log-events) for more details."
}
object AuditLogEventActor
{
  "type": "object",
  "properties": {
    "gid": {
      "type": "string",
      "example": "1111",
      "description": "Globally unique identifier of the actor, if it is a user."
    },
    "name": {
      "type": "string",
      "example": "Greg Sanchez",
      "description": "The name of the actor, if it is a user."
    },
    "email": {
      "type": "string",
      "example": "gregsanchez@example.com",
      "description": "The email of the actor, if it is a user."
    },
    "actor_type": {
      "enum": [
        "user",
        "asana",
        "asana_support",
        "anonymous",
        "external_administrator"
      ],
      "type": "string",
      "example": "user",
      "description": "The type of actor.\nCan be one of `user`, `asana`, `asana_support`, `anonymous`, or `external_administrator`."
    }
  },
  "description": "The entity that triggered the event. Will typically be a user."
}
object AuditLogEventContext
{
  "type": "object",
  "properties": {
    "user_agent": {
      "type": "string",
      "example": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
      "description": "The user agent of the client that initiated the event, if applicable."
    },
    "context_type": {
      "enum": [
        "web",
        "desktop",
        "mobile",
        "asana_support",
        "asana",
        "email",
        "api"
      ],
      "type": "string",
      "example": "web",
      "description": "The type of context.\nCan be one of `web`, `desktop`, `mobile`, `asana_support`, `asana`, `email`, or `api`."
    },
    "oauth_app_name": {
      "type": "string",
      "description": "The name of the OAuth App that initiated the event.\nOnly present if the `api_authentication_method` is `oauth`."
    },
    "client_ip_address": {
      "type": "string",
      "example": "1.1.1.1",
      "description": "The IP address of the client that initiated the event, if applicable."
    },
    "api_authentication_method": {
      "enum": [
        "cookie",
        "oauth",
        "personal_access_token",
        "service_account"
      ],
      "type": "string",
      "description": "The authentication method used in the context of an API request.\nOnly present if the `context_type` is `api`. Can be one of `cookie`, `oauth`, `personal_access_token`, or `service_account`."
    }
  },
  "description": "The context from which this event originated."
}
object AuditLogEventDetails
{
  "type": "object",
  "properties": {
    "group": {
      "type": "object",
      "additionalProperties": true
    },
    "new_value": {
      "type": "string",
      "nullable": true
    },
    "old_value": {
      "type": "string",
      "nullable": true
    }
  },
  "description": "Event specific details. The schema will vary depending on the `event_type`.",
  "additionalProperties": true
}
object AuditLogEventResource
{
  "type": "object",
  "properties": {
    "gid": {
      "type": "string",
      "example": "1111",
      "description": "Globally unique identifier of the resource."
    },
    "name": {
      "type": "string",
      "example": "Example Task",
      "nullable": true,
      "description": "The name of the resource."
    },
    "email": {
      "type": "string",
      "description": "The email of the resource, if applicable."
    },
    "resource_type": {
      "type": "string",
      "example": "task",
      "description": "The type of resource."
    },
    "resource_subtype": {
      "type": "string",
      "example": "milestone",
      "description": "The subtype of resource. Most resources will not have a subtype."
    }
  },
  "description": "The primary object that was affected by this event."
}
object BatchApiSubmitParallelRequestsRequest
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/BatchRequest"
    }
  }
}
object BatchApiSubmitParallelRequestsResponse
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/BatchResponse"
      }
    }
  }
}
object BatchRequest
{
  "type": "object",
  "properties": {
    "actions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/BatchRequestAction"
      }
    }
  },
  "description": "A request object for use in a batch request."
}
object BatchRequestAction
{
  "type": "object",
  "required": [
    "relative_path",
    "method"
  ],
  "properties": {
    "data": {
      "type": "object",
      "example": {
        "assignee": "me",
        "workspace": "1337"
      },
      "description": "For `GET` requests, this should be a map of query parameters you would have normally passed in the URL. Options and pagination are not accepted here; put them in `options` instead. For `POST`, `PATCH`, and `PUT` methods, this should be the content you would have normally put in the data field of the body."
    },
    "method": {
      "enum": [
        "get",
        "post",
        "put",
        "delete",
        "patch",
        "head"
      ],
      "type": "string",
      "example": "get",
      "description": "The HTTP method you wish to emulate for the action."
    },
    "options": {
      "type": "object",
      "example": {
        "limit": 3,
        "fields": [
          "name",
          "notes",
          "completed"
        ]
      },
      "properties": {
        "limit": {
          "type": "integer",
          "example": 50,
          "description": "Pagination limit for the request."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "name",
            "gid",
            "notes",
            "completed"
          ],
          "description": "The fields to retrieve in the request."
        },
        "offset": {
          "type": "integer",
          "example": null,
          "description": "Pagination offset for the request."
        }
      },
      "description": "Pagination (`limit` and `offset`) and output options (`fields` or `expand`) for the action. “Pretty” JSON output is not an available option on individual actions; if you want pretty output, specify that option on the parent request."
    },
    "relative_path": {
      "type": "string",
      "example": "/tasks/123",
      "description": "The path of the desired endpoint relative to the API’s base URL. Query parameters are not accepted here; put them in `data` instead."
    }
  },
  "description": "An action object for use in a batch request."
}
object BatchResponse
{
  "type": "object",
  "properties": {
    "body": {
      "type": "object",
      "example": {
        "data": {
          "gid": "1967",
          "name": "Hello, world!",
          "notes": "How are you today?",
          "completed": false
        }
      },
      "description": "The JSON body that the invoked endpoint returned."
    },
    "headers": {
      "type": "object",
      "example": {
        "location": "/tasks/1234"
      },
      "description": "A map of HTTP headers specific to this result. This is primarily used for returning a `Location` header to accompany a `201 Created` result.  The parent HTTP response will contain all common headers."
    },
    "status_code": {
      "type": "integer",
      "example": 200,
      "description": "The HTTP status code that the invoked endpoint returned."
    }
  },
  "description": "A response object returned from a batch request."
}
object CreateMembershipRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/MembershipRequest"
    },
    {
      "type": "object",
      "properties": {
        "role": {
          "type": "string",
          "example": "editor",
          "deprecated": true,
          "description": "*Deprecated: new integrations should use access_level* The role given to the member. Optional argument, will default to `commenter` for goals and the default project role for projects. Can be `editor` or `commenter` for goals. Can be `admin`,`editor` or `commenter` for projects."
        },
        "member": {
          "type": "string",
          "example": 12345,
          "description": "The gid of the user or team."
        },
        "parent": {
          "type": "string",
          "example": "987654",
          "description": "The gid of the `goal` or `project` to add the member to."
        }
      }
    }
  ]
}
object CreateTimeTrackingEntryRequest
{
  "type": "object",
  "properties": {
    "entered_on": {
      "type": "string",
      "format": "date",
      "example": "2023-03-19",
      "description": "*Optional*. The day that this entry is logged on. Defaults to today if not specified"
    },
    "duration_minutes": {
      "type": "integer",
      "example": 12,
      "description": "Time in minutes tracked by the entry. Must be greater than 0"
    }
  }
}
object CustomFieldBase
{
  "allOf": [
    {
      "$ref": "#/components/schemas/CustomFieldCompact"
    },
    {
      "type": "object",
      "properties": {
        "format": {
          "enum": [
            "currency",
            "identifier",
            "percentage",
            "custom",
            "duration",
            "none"
          ],
          "type": "string",
          "example": "custom",
          "description": "The format of this custom field."
        },
        "precision": {
          "type": "integer",
          "example": 2,
          "description": "Only relevant for custom fields of type ‘Number’. This field dictates the number of places after the decimal to round to, i.e. 0 is integer values, 1 rounds to the nearest tenth, and so on. Must be between 0 and 6, inclusive.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.\nThe identifier format will always have a precision of 0."
        },
        "description": {
          "type": "string",
          "example": "Development team priority",
          "description": "[Opt In](https://raw.githubusercontent.com). The description of the custom field."
        },
        "custom_label": {
          "type": "string",
          "example": "gold pieces",
          "nullable": true,
          "description": "This is the string that appears next to the custom field value. This will be null if the `format` is not `custom`."
        },
        "enum_options": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/EnumOption"
          },
          "description": "*Conditional*. Only relevant for custom fields of type `enum`. This array specifies the possible values which an `enum` custom field can adopt. To modify the enum options, refer to [working with enum options](https://raw.githubusercontent.com)."
        },
        "currency_code": {
          "type": "string",
          "example": "EUR",
          "nullable": true,
          "description": "ISO 4217 currency code to format this custom field. This will be null if the `format` is not `currency`."
        },
        "asana_created_field": {
          "enum": [
            "a_v_requirements",
            "account_name",
            "actionable",
            "align_shipping_link",
            "align_status",
            "allotted_time",
            "appointment",
            "approval_stage",
            "approved",
            "article_series",
            "board_committee",
            "browser",
            "campaign_audience",
            "campaign_project_status",
            "campaign_regions",
            "channel_primary",
            "client_topic_type",
            "complete_by",
            "contact",
            "contact_email_address",
            "content_channels",
            "content_channels_needed",
            "content_stage",
            "content_type",
            "contract",
            "contract_status",
            "cost",
            "creation_stage",
            "creative_channel",
            "creative_needed",
            "creative_needs",
            "data_sensitivity",
            "deal_size",
            "delivery_appt",
            "delivery_appt_date",
            "department",
            "department_responsible",
            "design_request_needed",
            "design_request_type",
            "discussion_category",
            "do_this_task",
            "editorial_content_status",
            "editorial_content_tag",
            "editorial_content_type",
            "effort",
            "effort_level",
            "est_completion_date",
            "estimated_time",
            "estimated_value",
            "expected_cost",
            "external_steps_needed",
            "favorite_idea",
            "feedback_type",
            "financial",
            "funding_amount",
            "grant_application_process",
            "hiring_candidate_status",
            "idea_status",
            "ids_link",
            "ids_patient_link",
            "implementation_stage",
            "insurance",
            "interview_area",
            "interview_question_score",
            "itero_scan_link",
            "job_s_applied_to",
            "lab",
            "launch_status",
            "lead_status",
            "localization_language",
            "localization_market_team",
            "localization_status",
            "meeting_minutes",
            "meeting_needed",
            "minutes",
            "mrr",
            "must_localize",
            "name_of_foundation",
            "need_to_follow_up",
            "next_appointment",
            "next_steps_sales",
            "num_people",
            "number_of_user_reports",
            "office_location",
            "onboarding_activity",
            "owner",
            "participants_needed",
            "patient_date_of_birth",
            "patient_email",
            "patient_phone",
            "patient_status",
            "phone_number",
            "planning_category",
            "point_of_contact",
            "position",
            "post_format",
            "prescription",
            "priority",
            "priority_level",
            "product",
            "product_stage",
            "progress",
            "project_size",
            "project_status",
            "proposed_budget",
            "publish_status",
            "reason_for_scan",
            "referral",
            "request_type",
            "research_status",
            "responsible_department",
            "responsible_team",
            "risk_assessment_status",
            "room_name",
            "sales_counterpart",
            "sentiment",
            "shipping_link",
            "social_channels",
            "stage",
            "status",
            "status_design",
            "status_of_initiative",
            "system_setup",
            "task_progress",
            "team",
            "team_marketing",
            "team_responsible",
            "time_it_takes_to_complete_tasks",
            "timeframe",
            "treatment_type",
            "type_work_requests_it",
            "use_agency",
            "user_name",
            "vendor_category",
            "vendor_type",
            "word_count",
            null
          ],
          "type": "string",
          "example": "priority",
          "nullable": true,
          "readOnly": true,
          "description": "*Conditional*. A unique identifier to associate this field with the template source of truth."
        },
        "custom_label_position": {
          "enum": [
            "prefix",
            "suffix",
            null
          ],
          "type": "string",
          "example": "suffix",
          "nullable": true,
          "description": "Only relevant for custom fields with `custom` format. This depicts where to place the custom label. This will be null if the `format` is not `custom`."
        },
        "is_global_to_workspace": {
          "type": "boolean",
          "example": true,
          "readOnly": true,
          "description": "This flag describes whether this custom field is available to every container in the workspace. Before project-specific custom fields, this field was always true."
        },
        "has_notifications_enabled": {
          "type": "boolean",
          "example": true,
          "description": "*Conditional*. This flag describes whether a follower of a task with this field should receive inbox notifications from changes to this field."
        }
      }
    }
  ]
}
object CustomFieldCompact
{
  "allOf": [
    {
      "$ref": "#/components/schemas/AsanaResource"
    },
    {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "example": "Status",
          "description": "The name of the custom field."
        },
        "type": {
          "enum": [
            "text",
            "enum",
            "multi_enum",
            "number",
            "date",
            "people"
          ],
          "type": "string",
          "readOnly": true,
          "description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n"
        },
        "enabled": {
          "type": "boolean",
          "example": true,
          "readOnly": true,
          "description": "*Conditional*. Determines if the custom field is enabled or not."
        },
        "id_prefix": {
          "type": "string",
          "example": "ID",
          "nullable": true,
          "description": "This field is the unique custom ID string for the custom field."
        },
        "date_value": {
          "type": "object",
          "nullable": true,
          "properties": {
            "date": {
              "type": "string",
              "example": "2024-08-23",
              "description": "A string representing the date in YYYY-MM-DD format."
            },
            "date_time": {
              "type": "string",
              "example": "2024-08-23T22:00:00.000Z",
              "description": "A string representing the date in ISO 8601 format. If no time value is selected, the value of `date-time` will be `null`."
            }
          },
          "description": "*Conditional*. Only relevant for custom fields of type `date`. This object reflects the chosen date (and optionally, time) value of a `date` custom field. If no date is selected, the value of `date_value` will be `null`."
        },
        "enum_value": {
          "allOf": [
            {
              "$ref": "#/components/schemas/EnumOption"
            },
            {
              "type": "object",
              "nullable": true,
              "description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
            }
          ]
        },
        "text_value": {
          "type": "string",
          "example": "Some Value",
          "nullable": true,
          "description": "*Conditional*. This string is the value of a `text` custom field."
        },
        "enum_options": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/EnumOption"
          },
          "description": "*Conditional*. Only relevant for custom fields of type `enum`. This array specifies the possible values which an `enum` custom field can adopt. To modify the enum options, refer to [working with enum options](https://raw.githubusercontent.com)."
        },
        "number_value": {
          "type": "number",
          "example": 5.2,
          "nullable": true,
          "description": "*Conditional*. This number is the value of a `number` custom field."
        },
        "display_value": {
          "type": "string",
          "example": "blue",
          "nullable": true,
          "readOnly": true,
          "description": "A string representation for the value of the custom field. Integrations that don't require the underlying type should use this field to read values. Using this field will future-proof an app against new custom field types."
        },
        "is_formula_field": {
          "type": "boolean",
          "example": false,
          "description": "*Conditional*. This flag describes whether a custom field is a formula custom field."
        },
        "resource_subtype": {
          "enum": [
            "text",
            "enum",
            "multi_enum",
            "number",
            "date",
            "people"
          ],
          "type": "string",
          "example": "text",
          "readOnly": true,
          "description": "The type of the custom field. Must be one of the given values.\n"
        },
        "multi_enum_values": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/EnumOption"
          },
          "description": "*Conditional*. Only relevant for custom fields of type `multi_enum`. This object is the chosen values of a `multi_enum` custom field."
        },
        "representation_type": {
          "enum": [
            "text",
            "enum",
            "multi_enum",
            "number",
            "date",
            "people",
            "formula",
            "custom_id"
          ],
          "type": "string",
          "example": "number",
          "readOnly": true,
          "description": "This field tells the type of the custom field."
        }
      },
      "description": "Custom Fields store the metadata that is used in order to add user-specified information to tasks in Asana. Be sure to reference the [custom fields](https://raw.githubusercontent.com) developer documentation for more information about how custom fields relate to various resources in Asana.\n\nUsers in Asana can [lock custom fields](https://asana.com/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code `403 Forbidden`.",
      "x-docs-overrides": {
        "properties.resource_type.example": "custom_field"
      }
    }
  ]
}
object CustomFieldRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/CustomFieldBase"
    },
    {
      "type": "object",
      "required": [
        "workspace"
      ],
      "properties": {
        "workspace": {
          "type": "string",
          "example": "1331",
          "description": "*Create-Only* The workspace to create a custom field in."
        },
        "owned_by_app": {
          "type": "boolean",
          "description": "*Allow-listed*. Instructs the API that this Custom Field is app-owned. This parameter is allow-listed to specific apps at this point in time. For apps that are not allow-listed, providing this parameter will result in a `403 Forbidden`."
        },
        "people_value": {
          "type": "array",
          "items": {
            "type": "string",
            "description": "The GID of a user."
          },
          "example": [
            "12345"
          ],
          "description": "*Conditional*. Only relevant for custom fields of type `people`. This array of user GIDs reflects the users to be written to a `people` custom field. Note that *write* operations will replace existing users (if any) in the custom field with the users specified in this array."
        }
      }
    }
  ]
}
object CustomFieldResponse
{
  "allOf": [
    {
      "$ref": "#/components/schemas/CustomFieldBase"
    },
    {
      "type": "object",
      "properties": {
        "id_prefix": {
          "type": "string",
          "example": "ID",
          "nullable": true,
          "description": "This field is the unique custom ID string for the custom field."
        },
        "created_by": {
          "allOf": [
            {
              "$ref": "#/components/schemas/UserCompact"
            },
            {
              "nullable": true
            }
          ]
        },
        "people_value": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/UserCompact"
          },
          "description": "*Conditional*. Only relevant for custom fields of type `people`. This array of [compact user](https://raw.githubusercontent.com) objects reflects the values of a `people` custom field."
        },
        "is_formula_field": {
          "type": "boolean",
          "example": false,
          "description": "*Conditional*. This flag describes whether a custom field is a formula custom field."
        },
        "is_value_read_only": {
          "type": "boolean",
          "example": false,
          "description": "*Conditional*. This flag describes whether a custom field is read only."
        },
        "representation_type": {
          "enum": [
            "text",
            "enum",
            "multi_enum",
            "number",
            "date",
            "people",
            "formula",
            "custom_id"
          ],
          "type": "string",
          "example": "number",
          "readOnly": true,
          "description": "This field tells the type of the custom field."
        }
      }
    }
  ]
}
object CustomFieldSettingCompact
{
  "allOf": [
    {
      "$ref": "#/components/schemas/AsanaResource"
    },
    {
      "type": "object",
      "description": "Custom Fields Settings objects represent the many-to-many join of the Custom Field and Project as well as stores information that is relevant to that particular pairing.",
      "x-docs-overrides": {
        "properties.resource_type.example": "custom_field_setting"
      }
    }
  ]
}
object CustomFieldSettingResponse
{
  "allOf": [
    {
      "$ref": "#/components/schemas/CustomFieldSettingCompact"
    },
    {
      "type": "object",
      "properties": {
        "parent": {
          "allOf": [
            {
              "$ref": "#/components/schemas/ProjectCompact"
            },
            {
              "type": "object",
              "readOnly": true,
              "description": "The parent to which the custom field is applied. This can be a project or portfolio and indicates that the tasks or projects that the parent contains may be given custom field values for this custom field."
            }
          ]
        },
        "project": {
          "allOf": [
            {
              "$ref": "#/components/schemas/ProjectCompact"
            },
            {
              "type": "object",
              "readOnly": true,
              "description": "*Deprecated: new integrations should prefer the `parent` field.* The id of the project that this custom field settings refers to."
            }
          ]
        },
        "custom_field": {
          "allOf": [
            {
              "$ref": "#/components/schemas/CustomFieldResponse"
            },
            {
              "type": "object",
              "readOnly": true,
              "description": "The custom field that is applied to the `parent`."
            }
          ]
        },
        "is_important": {
          "type": "boolean",
          "example": false,
          "readOnly": true,
          "description": "`is_important` is used in the Asana web application to determine if this custom field is displayed in the list/grid view of a project or portfolio."
        }
      }
    }
  ]
}
object CustomFieldSettingsGetPortfolioCustomFieldSettingsResponse
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/CustomFieldSettingResponse"
      }
    },
    "next_page": {
      "$ref": "#/components/schemas/NextPage"
    }
  }
}
object CustomFieldSettingsGetProjectCustomFieldSettingsResponse
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/CustomFieldSettingResponse"
      }
    },
    "next_page": {
      "$ref": "#/components/schemas/NextPage"
    }
  }
}
object CustomFieldsAddEnumOptionRequest
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/EnumOptionRequest"
    }
  }
}
object CustomFieldsAddEnumOptionResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/EnumOption"
    }
  }
}
object CustomFieldsCreateNewFieldRecordRequest
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/CustomFieldRequest"
    }
  }
}
object CustomFieldsCreateNewFieldRecordResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/CustomFieldResponse"
    }
  }
}
object CustomFieldsDeleteFieldRecordResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/EmptyResponse"
    }
  }
}
object CustomFieldsGetMetadataResponse
{
  "type": "object",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/CustomFieldResponse"
    }
  }
}
object CustomFieldsListWorkspaceCustomFieldsResponse
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/CustomFieldResponse"
      }
    },
    "next_page": {
      "$ref": "#/components/schemas/NextPage"
    }
  }
}

Versions

Version Endpoints Schemas Ingested Status
1.0 189 435 2026-05-11 current
1.0 189 435 2026-04-16