Query structured spec data via REST or MCP. Get exactly what your agent needs.
https://app.asana.com/api/1.0
/allocations
Creates a new allocation.
Returns the full record of the newly created allocation.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The allocation to create.
application/json
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 |
Successfully created a new allocation.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
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:
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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
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
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 |
Successfully uploaded the attachment to the parent object.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/batch
Make multiple requests in parallel to Asana’s API.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The requests to batch together via the Batch API.
application/json
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 |
Successfully completed the requested batch API operations.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The custom field object to create.
application/json
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 |
Custom field successfully created.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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_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.
| 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. |
| 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. |
The enum option object to create.
application/json
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 |
Custom field enum option successfully created.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| 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. |
| 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. |
The enum option object to create.
application/json
CustomFieldsReorderEnumOptionRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ enum_option | string | required |
| └ after_enum_option | string | optional |
| └ before_enum_option | string | optional |
Custom field enum option successfully reordered.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/goals/{goal_gid}/addSupportingRelationship
Creates a goal relationship by adding a supporting resource to a given goal.
Returns the newly created goal relationship record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| goal_gid | path | optional | string | Globally unique identifier for the goal. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The supporting resource to be added to the goal
application/json
GoalRelationshipsCreateSupportingRelationshipRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ insert_after | string | optional |
| └ insert_before | string | optional |
| └ contribution_weight | number | optional |
| └ supporting_resource | string | required |
Successfully created the goal relationship.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/goals/{goal_gid}/removeSupportingRelationship
Removes a goal relationship for a given parent goal.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| goal_gid | path | optional | string | Globally unique identifier for the goal. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The supporting resource to be removed from the goal
application/json
GoalRelationshipsRemoveSupportingRelationshipRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ supporting_resource | string | required |
Successfully removed the goal relationship.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
Creates a new goal in a workspace or team.
Returns the full record of the newly created goal.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The goal to create.
application/json
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 |
Successfully created a new goal.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| goal_gid | path | optional | string | Globally unique identifier for the goal. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The followers to be added as collaborators
application/json
GoalsAddCollaboratorsToGoalRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ followers | array | required |
Successfully added users as collaborators.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| goal_gid | path | optional | string | Globally unique identifier for the goal. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The followers to be removed as collaborators
application/json
GoalsRemoveFollowersFromGoalRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ followers | array | required |
Successfully removed users as collaborators.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| goal_gid | path | optional | string | Globally unique identifier for the goal. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The goal metric to create.
application/json
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 |
Successfully created a new goal metric.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| goal_gid | path | optional | string | Globally unique identifier for the goal. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The updated fields for the goal metric.
application/json
GoalsUpdateMetricCurrentValueRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ current_number_value | number | optional |
Successfully updated the goal metric.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The updated fields for the membership.
application/json
MembershipsCreateNewRecordRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ access_level | string | optional |
| └ role | string | optional |
| └ member | string | optional |
| └ parent | string | optional |
Successfully created the requested membership.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/organization_exports
This method creates a request to export an Organization. Asana will complete the export at some point after you create the request.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The organization to export.
application/json
OrganizationExportsCreateExportRequestRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ organization | string | optional |
Successfully created organization export request.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The portfolio to create.
application/json
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 |
Successfully created portfolio.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/portfolios/{portfolio_gid}/addCustomFieldSetting
Custom fields are associated with portfolios by way of custom field settings. This method creates a setting for the portfolio.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| portfolio_gid | path | optional | string | Globally unique identifier for the portfolio. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
Information about the custom field setting.
application/json
PortfoliosAddCustomFieldSettingRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ custom_field | string | required |
| └ insert_after | string | optional |
| └ is_important | boolean | optional |
| └ insert_before | string | optional |
Successfully added the custom field to the portfolio.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/portfolios/{portfolio_gid}/addItem
Add an item to a portfolio.
Returns an empty data block.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| portfolio_gid | path | optional | string | Globally unique identifier for the portfolio. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
Information about the item being inserted.
application/json
PortfoliosAddPortfolioItemRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ item | string | required |
| └ insert_after | string | optional |
| └ insert_before | string | optional |
Successfully added the item to the portfolio.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/portfolios/{portfolio_gid}/addMembers
Adds the specified list of users as members of the portfolio.
Returns the updated portfolio record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| portfolio_gid | path | optional | string | Globally unique identifier for the portfolio. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Information about the members being added.
application/json
PortfoliosAddMembersToPortfolioRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ members | string | required |
Successfully added members to the portfolio.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/portfolios/{portfolio_gid}/removeCustomFieldSetting
Removes a custom field setting from a portfolio.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| portfolio_gid | path | optional | string | Globally unique identifier for the portfolio. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
Information about the custom field setting being removed.
application/json
PortfoliosRemoveCustomFieldSettingRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ custom_field | string | required |
Successfully removed the custom field from the portfolio.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/portfolios/{portfolio_gid}/removeItem
Remove an item from a portfolio.
Returns an empty data block.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| portfolio_gid | path | optional | string | Globally unique identifier for the portfolio. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
Information about the item being removed.
application/json
PortfoliosRemoveItemFromPortfolioRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ item | string | required |
Successfully removed the item from the portfolio.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/portfolios/{portfolio_gid}/removeMembers
Removes the specified list of users from members of the portfolio.
Returns the updated portfolio record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| portfolio_gid | path | optional | string | Globally unique identifier for the portfolio. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Information about the members being removed.
application/json
PortfoliosRemoveMembersFromPortfolioRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ members | string | required |
Successfully removed the members from the portfolio.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/projects/{project_gid}/project_briefs
Creates a new project brief.
Returns the full record of the newly created project brief.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The project brief to create.
application/json
ProjectBriefsCreateNewRecordRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ title | string | optional |
| └ html_text | string | optional |
| └ text | string | optional |
Successfully created a new project brief.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The project status to create.
application/json
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 |
Successfully created a new story.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| 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. |
| 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. |
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
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 |
Successfully created the job to handle project instantiation.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The project to create.
application/json
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 |
Successfully retrieved projects.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/projects/{project_gid}/addCustomFieldSetting
Custom fields are associated with projects by way of custom field settings. This method creates a setting for the project.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Information about the custom field setting.
application/json
ProjectsAddCustomFieldSettingRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ custom_field | string | required |
| └ insert_after | string | optional |
| └ is_important | boolean | optional |
| └ insert_before | string | optional |
Successfully added the custom field to the project.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Information about the followers being added.
application/json
ProjectsAddFollowersToProjectRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ followers | string | required |
Successfully added followers to the project.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Information about the members being added.
application/json
ProjectsAddMembersToProjectRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ members | string | required |
Successfully added members to the project.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/projects/{project_gid}/duplicate
Creates and returns a job that will asynchronously handle the duplication.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Describes the duplicate’s name and the elements that will be duplicated.
application/json
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 |
Successfully created the job to handle duplication.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/projects/{project_gid}/removeCustomFieldSetting
Removes a custom field setting from a project.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
Information about the custom field setting being removed.
application/json
ProjectsRemoveCustomFieldRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ custom_field | string | required |
Successfully removed the custom field from the project.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Information about the followers being removed.
application/json
ProjectsRemoveProjectFollowersRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ followers | string | required |
Successfully removed followers from the project.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/projects/{project_gid}/removeMembers
Removes the specified list of users from members of the project.
Returns the updated project record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Information about the members being removed.
application/json
ProjectsRemoveMembersFromProjectRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ members | string | required |
Successfully removed the members from the project.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
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
ProjectsCreateProjectTemplateJobRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ name | string | required |
| └ team | string | optional |
| └ public | boolean | required |
| └ workspace | string | optional |
Successfully created the job to handle project template creation.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/teams/{team_gid}/projects
Creates a project shared with the given team.
Returns the full record of the newly created project.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| team_gid | path | optional | string | Globally unique identifier for the team. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The new project to create.
application/json
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 |
Successfully created the specified project.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| 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. |
| 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. |
The new project to create.
application/json
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 |
Successfully created a new project in the specified workspace.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/rule_triggers/{rule_trigger_gid}/run
Trigger a rule which uses an “incoming web request” trigger.
| 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. |
A dictionary of variables accessible from within the rule.
application/json
RulesTriggerRuleRequestRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ resource | string | required |
| └ action_data | object | required |
Successfully triggered a rule.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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/{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).
| 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. |
The task and optionally the insert location.
application/json
SectionsAddTaskToSectionRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ task | string | required |
| └ insert_after | string | optional |
| └ insert_before | string | optional |
Successfully added the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/projects/{project_gid}/sections
Creates a new section in a project.
Returns the full record of the newly created section.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The section to create.
application/json
SectionsCreateNewSectionRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ name | string | required |
| └ insert_after | string | optional |
| └ insert_before | string | optional |
Successfully created the specified section.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_gid | path | optional | string | Globally unique identifier for the project. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The section’s move action.
application/json
SectionsMoveOrInsertRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ section | string | required |
| └ after_section | string | optional |
| └ before_section | string | optional |
Successfully moved the specified section.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/status_updates
Creates a new status update on an object.
Returns the full record of the newly created status update.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| limit | query | optional | integer | Results per page. |
| offset | query | optional | string | Offset token. |
| 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. |
The status update to create.
application/json
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 |
Successfully created a new status update.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The story to create.
application/json
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 |
Successfully created a new story.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The tag to create.
application/json
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 |
Successfully created the newly specified tag.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| 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. |
| 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. |
The tag to create.
application/json
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 |
Successfully created the newly specified tag.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/task_templates/{task_template_gid}/instantiateTask
Creates and returns a job that will asynchronously handle the task instantiation.
| 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. |
| 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. |
Describes the inputs used for instantiating a task - the task’s name.
application/json
TaskTemplatesInstantiateTaskJobRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ name | string | optional |
Successfully created the job to handle task instantiation.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The task to create.
application/json
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 |
Successfully created a new task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The list of tasks to set as dependencies.
application/json
TasksSetDependenciesForTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ dependencies | array | optional |
Successfully set the specified dependencies on the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The list of tasks to add as dependents.
application/json
TasksSetTaskDependentsRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ dependents | array | optional |
Successfully set the specified dependents on the given task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The followers to add to the task.
application/json
TasksAddFollowersToTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ followers | array | required |
Successfully added the specified followers to the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The project to add the task to.
application/json
TasksAddProjectToTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ project | string | required |
| └ section | string | optional |
| └ insert_after | string | optional |
| └ insert_before | string | optional |
Successfully added the specified project to the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/tasks/{task_gid}/addTag
Adds a tag to a task. Returns an empty data block.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The tag to add to the task.
application/json
TasksAddTagToTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ tag | string | required |
Successfully added the specified tag to the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/tasks/{task_gid}/duplicate
Creates and returns a job that will asynchronously handle the duplication.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Describes the duplicate’s name and the fields that will be duplicated.
application/json
TasksDuplicateTaskJobRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ name | string | optional |
| └ include | string | optional |
Successfully created the job to handle duplication.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/tasks/{task_gid}/removeDependencies
Unlinks a set of dependencies from this task.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The list of tasks to unlink as dependencies.
application/json
TasksUnlinkDependenciesFromTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ dependencies | array | optional |
Successfully unlinked the dependencies from the specified task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/tasks/{task_gid}/removeDependents
Unlinks a set of dependents from this task.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The list of tasks to remove as dependents.
application/json
TasksUnlinkDependentsRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ dependents | array | optional |
Successfully unlinked the specified tasks as dependents.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
The request was valid, but the queried object or object mutation specified in the request is above your current premium level.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The followers to remove from the task.
application/json
TasksRemoveFollowersFromTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ followers | array | required |
Successfully removed the specified followers from the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The project to remove the task from.
application/json
TasksRemoveProjectFromTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ project | string | required |
Successfully removed the specified project from the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/tasks/{task_gid}/removeTag
Removes a tag from a task. Returns an empty data block.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The tag to remove from the task.
application/json
TasksRemoveTagFromTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ tag | string | required |
Successfully removed the specified tag from the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The new parent of the subtask.
application/json
TasksSetParentTaskRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ parent | string | required |
| └ insert_after | string | optional |
| └ insert_before | string | optional |
Successfully changed the parent of the specified subtask.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/tasks/{task_gid}/subtasks
Creates a new subtask and adds it to the parent task. Returns the full record for the newly created subtask.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The new subtask to create.
application/json
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 |
Successfully created the specified subtask.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
Creates a team within the current workspace.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The team to create.
application/json
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 |
Successfully created a new team.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| team_gid | path | optional | string | Globally unique identifier for the team. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The user to add to the team.
application/json
TeamsAddUserToTeamRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ user | string | optional |
Successfully added user to the team.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/teams/{team_gid}/removeUser
The user making this call must be a member of the team in order to remove themselves or others.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| team_gid | path | optional | string | Globally unique identifier for the team. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The user to remove from the team.
application/json
TeamsRemoveUserFromTeamRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ user | string | optional |
Returns an empty data record
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| task_gid | path | optional | string | The task to operate on. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
Information about the time tracking entry.
application/json
TimeTrackingEntriesCreateNewTimeEntryRecordRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ entered_on | string | optional |
| └ duration_minutes | integer | optional |
Successfully created a time tracking entry for the task.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
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
}
}
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
| 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. |
The webhook workspace and target.
application/json
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 |
Successfully created the requested webhook.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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/{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.
| 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. |
| 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. |
The user to add to the workspace.
application/json
WorkspacesAddUserToWorkspaceRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ user | string | optional |
The user was added successfully to the workspace or organization.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
/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.
| 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. |
The user to remove from the workspace.
application/json
WorkspacesRemoveUserFromWorkspaceRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ user | string | optional |
The user was removed successfully to the workspace or organization.
This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again.
A valid authentication token was not provided with the request, so the API could not associate a user with the request.
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.
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.
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
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."
}
}
}
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."
}
}
}
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."
}
}
}
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"
}
}
]
}
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."
}
}
}
]
}
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."
}
}
}
]
}
AllocationsCreateRecordRequest
{
"type": "object",
"properties": {
"data": {
"allOf": [
{
"$ref": "#/components/schemas/AllocationRequest"
},
{
"type": "object",
"required": [
"assignee",
"end_date",
"parent",
"start_date"
]
}
]
}
}
}
AllocationsCreateRecordResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/AllocationResponse"
}
}
}
AllocationsDeleteAllocationByIdResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/EmptyResponse"
}
}
}
AllocationsGetMultipleResponse
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AllocationResponse"
}
},
"next_page": {
"$ref": "#/components/schemas/NextPage"
}
}
}
AllocationsGetRecordByIdResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/AllocationResponse"
}
}
}
AllocationsUpdateRecordByIdRequest
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/AllocationRequest"
}
}
}
AllocationsUpdateRecordByIdResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/AllocationResponse"
}
}
}
AsanaNamedResource
{
"allOf": [
{
"$ref": "#/components/schemas/AsanaResource"
},
{
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Bug Task",
"description": "The name of the 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."
}
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"
}
}
]
}
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"
}
}
}
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`."
}
}
}
]
}
AttachmentsDeleteSpecificResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/EmptyResponse"
}
}
}
AttachmentsGetAllForObjectResponse
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AttachmentCompact"
}
},
"next_page": {
"$ref": "#/components/schemas/NextPage"
}
}
}
AttachmentsGetAttachmentRecordResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/AttachmentResponse"
}
}
}
AttachmentsUploadAttachmentResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/AttachmentResponse"
}
}
}
AuditLogApiGetAuditLogEventsResponse
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AuditLogEvent"
}
},
"next_page": {
"$ref": "#/components/schemas/NextPage"
}
}
}
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."
}
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."
}
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."
}
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
}
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."
}
BatchApiSubmitParallelRequestsRequest
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/BatchRequest"
}
}
}
BatchApiSubmitParallelRequestsResponse
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BatchResponse"
}
}
}
}
BatchRequest
{
"type": "object",
"properties": {
"actions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BatchRequestAction"
}
}
},
"description": "A request object for use in a batch request."
}
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."
}
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."
}
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."
}
}
}
]
}
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"
}
}
}
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."
}
}
}
]
}
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"
}
}
]
}
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."
}
}
}
]
}
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."
}
}
}
]
}
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"
}
}
]
}
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."
}
}
}
]
}
CustomFieldSettingsGetPortfolioCustomFieldSettingsResponse
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFieldSettingResponse"
}
},
"next_page": {
"$ref": "#/components/schemas/NextPage"
}
}
}
CustomFieldSettingsGetProjectCustomFieldSettingsResponse
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFieldSettingResponse"
}
},
"next_page": {
"$ref": "#/components/schemas/NextPage"
}
}
}
CustomFieldsAddEnumOptionRequest
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/EnumOptionRequest"
}
}
}
CustomFieldsAddEnumOptionResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/EnumOption"
}
}
}
CustomFieldsCreateNewFieldRecordRequest
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/CustomFieldRequest"
}
}
}
CustomFieldsCreateNewFieldRecordResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/CustomFieldResponse"
}
}
}
CustomFieldsDeleteFieldRecordResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/EmptyResponse"
}
}
}
CustomFieldsGetMetadataResponse
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/CustomFieldResponse"
}
}
}
CustomFieldsListWorkspaceCustomFieldsResponse
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFieldResponse"
}
},
"next_page": {
"$ref": "#/components/schemas/NextPage"
}
}
}
| Version | Endpoints | Schemas | Ingested | Status |
|---|---|---|---|---|
| 1.0 | 189 | 435 | 2026-05-11 | current |
| 1.0 | 189 | 435 | 2026-04-16 |