Query structured spec data via REST or MCP. Get exactly what your agent needs.
https://app.asana.com/api/1.0
/allocations/{allocation_gid}
An existing allocation can be updated by making a PUT request on the URL for
that allocation. Only the fields provided in the data block will be updated;
any unspecified fields will remain unchanged.
Returns the complete updated allocation record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| allocation_gid | path | optional | string | Globally unique identifier for the allocation. |
| 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 allocation.
application/json
AllocationsUpdateRecordByIdRequest
| 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 | optional |
| └ start_date | string | optional |
| └ parent | string | optional |
| └ assignee | string | optional |
Successfully updated the 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 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.
PUT /allocations/{allocation_gid}
/custom_fields/{custom_field_gid}
A specific, existing custom field can be updated by making a PUT request on the URL for that custom field. Only the fields provided in the data block will be updated; any unspecified fields will remain unchanged
When using this method, it is best to specify only those fields you wish to change, or else you may overwrite changes made by another user since you last retrieved the custom field.
A custom field’s type cannot be updated.
An enum custom field’s enum_options cannot be updated with this endpoint. Instead see “Work With Enum Options” for information on how to update enum_options.
Locked custom fields can only be updated by the user who locked the field.
Returns the complete updated custom field record.
| 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 custom field object with all updated properties.
application/json
CustomFieldsUpdateFieldRecordRequest
| 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 |
The custom field was successfully updated.
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.
PUT /custom_fields/{custom_field_gid}
/enum_options/{enum_option_gid}
Updates an existing enum option. Enum custom fields require at least one enabled enum option.
Locked custom fields can only be updated by the user who locked the field.
Returns the full record of the updated enum option.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| enum_option_gid | path | required | string | Globally unique identifier for the enum option. |
| 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 update
application/json
CustomFieldsUpdateEnumOptionRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ name | string | optional |
| └ color | string | optional |
| └ enabled | boolean | optional |
Successfully updated the specified custom field enum.
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.
PUT /enum_options/{enum_option_gid}
/goal_relationships/{goal_relationship_gid}
An existing goal relationship can be updated by making a PUT request on the URL for
that goal relationship. Only the fields provided in the data block will be updated;
any unspecified fields will remain unchanged.
Returns the complete updated goal relationship record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| goal_relationship_gid | path | optional | string | Globally unique identifier for the goal relationship. |
| 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 relationship.
application/json
GoalRelationshipsUpdateGoalRelationshipRecordRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ resource_subtype | string | optional |
| └ contribution_weight | number | optional |
| └ supporting_resource | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ name | string | optional |
| └ supported_goal | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ name | string | optional |
| └ owner | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ name | string | optional |
Successfully updated 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.
PUT /goal_relationships/{goal_relationship_gid}
/goals/{goal_gid}
An existing goal can be updated by making a PUT request on the URL for
that goal. Only the fields provided in the data block will be updated;
any unspecified fields will remain unchanged.
Returns the complete updated goal 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.
application/json
GoalsUpdateGoalRecordRequest
| 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 |
| └ status | string | optional |
Successfully updated the 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 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.
PUT /goals/{goal_gid}
/memberships/{membership_gid}
An existing membership can be updated by making a PUT request on the URL for
that goal. Only the fields provided in the data block will be updated;
any unspecified fields will remain unchanged. Memberships on goals and projects can be updated.
Returns the full record of the updated membership.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| membership_gid | path | optional | string | Globally unique identifier for the membership. |
| opt_pretty | query | optional | boolean | Provides “pretty” output. |
The membership to update.
application/json
MembershipsUpdateMembershipRecordRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ access_level | string | optional |
Successfully updated 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.
PUT /memberships/{membership_gid}
/portfolios/{portfolio_gid}
An existing portfolio can be updated by making a PUT request on the URL for
that portfolio. Only the fields provided in the data block will be updated;
any unspecified fields will remain unchanged.
Returns the complete 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. |
The updated fields for the portfolio.
application/json
PortfoliosUpdatePortfolioRecordRequest
| 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 updated 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.
PUT /portfolios/{portfolio_gid}
/project_briefs/{project_brief_gid}
An existing project brief can be updated by making a PUT request on the URL for
that project brief. Only the fields provided in the data block will be updated;
any unspecified fields will remain unchanged.
Returns the complete updated project brief record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| project_brief_gid | path | optional | string | Globally unique identifier for the project brief. |
| 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 project brief.
application/json
ProjectBriefsUpdateBriefRecordRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ title | string | optional |
| └ html_text | string | optional |
| └ text | string | optional |
Successfully updated the 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 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.
PUT /project_briefs/{project_brief_gid}
/projects/{project_gid}
A specific, existing project can be updated by making a PUT request on
the URL for that project. Only the fields provided in the data block
will be updated; any unspecified fields will remain unchanged.
When using this method, it is best to specify only those fields you wish
to change, or else you may overwrite changes made by another user since
you last retrieved the task.
Returns the complete 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. |
The updated fields for the project.
application/json
ProjectsUpdateProjectRecordRequest
| 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 |
| └ …6 more | object | optional |
Successfully updated 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.
PUT /projects/{project_gid}
/sections/{section_gid}
A specific, existing section can be updated by making a PUT request on
the URL for that project. Only the fields provided in the data block
will be updated; any unspecified fields will remain unchanged. (note that
at this time, the only field that can be updated is the name field.)
When using this method, it is best to specify only those fields you wish
to change, or else you may overwrite changes made by another user since
you last retrieved the task.
Returns the complete updated section record.
| 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. |
| 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
SectionsUpdateSectionRecordRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ name | string | required |
| └ insert_after | string | optional |
| └ insert_before | string | optional |
Successfully updated 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.
PUT /sections/{section_gid}
/stories/{story_gid}
Updates the story and returns the full record for the updated story. Only comment stories can have their text updated, and only comment stories and attachment stories can be pinned. Only one of text and html_text can be specified.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| story_gid | path | optional | string | Globally unique identifier for the story. |
| 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 comment story to update.
application/json
StoriesUpdateFullRecordRequest
| 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 retrieved the specified 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.
PUT /stories/{story_gid}
/tags/{tag_gid}
Updates the properties of a tag. Only the fields provided in the data
block will be updated; any unspecified fields will remain unchanged.
When using this method, it is best to specify only those fields you wish
to change, or else you may overwrite changes made by another user since
you last retrieved the tag.
Returns the complete updated tag record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| tag_gid | path | optional | string | Globally unique identifier for the tag. |
| 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. |
Successfully updated the 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.
PUT /tags/{tag_gid}
/tasks/{task_gid}
A specific, existing task can be updated by making a PUT request on the
URL for that task. Only the fields provided in the data block will be
updated; any unspecified fields will remain unchanged.
When using this method, it is best to specify only those fields you wish
to change, or else you may overwrite changes made by another user since
you last retrieved the task.
Returns the complete updated task record.
| 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 task to update.
application/json
TasksUpdateTaskRecordRequest
| 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 updated 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 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.
PUT /tasks/{task_gid}
/teams/{team_gid}
Updates a team within the current workspace.
| 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 team to update.
application/json
TeamsUpdateTeamRecordRequest
| 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 updated 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.
PUT /teams/{team_gid}
/time_tracking_entries/{time_tracking_entry_gid}
A specific, existing time tracking entry can be updated by making a PUT request on
the URL for that time tracking entry. Only the fields provided in the data block
will be updated; any unspecified fields will remain unchanged.
When using this method, it is best to specify only those fields you wish
to change, or else you may overwrite changes made by another user since
you last retrieved the task.
Returns the complete updated time tracking entry record.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| time_tracking_entry_gid | path | optional | string | Globally unique identifier for the time tracking entry. |
| 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 time tracking entry.
application/json
TimeTrackingEntriesUpdateTimeTrackingEntryRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ entered_on | string | optional |
| └ duration_minutes | integer | optional |
Successfully updated the time tracking entry.
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.
PUT /time_tracking_entries/{time_tracking_entry_gid}
/webhooks/{webhook_gid}
An existing webhook’s filters can be updated by making a PUT request on the URL for that webhook. Note that the webhook’s previous filters array will be completely overwritten by the filters sent in the PUT request.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| webhook_gid | path | optional | string | Globally unique identifier for the webhook. |
| 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 filters for the webhook.
application/json
WebhooksUpdateWebhookFiltersRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ filters | array | optional |
| └ action | string | optional |
| └ fields | array | optional |
| └ resource_type | string | optional |
| └ resource_subtype | string | optional |
Successfully updated the 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.
PUT /webhooks/{webhook_gid}
/workspaces/{workspace_gid}
A specific, existing workspace can be updated by making a PUT request on the URL for that workspace. Only the fields provided in the data block will be updated; any unspecified fields will remain unchanged.
Currently the only field that can be modified for a workspace is its name.
Returns the complete, updated workspace 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. |
| 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 workspace object with all updated properties.
application/json
WorkspacesUpdateWorkspaceRecordRequest
| Property | Type | Required |
|---|---|---|
| data | object | optional |
| └ gid | string | optional |
| └ resource_type | string | optional |
| └ name | string | optional |
Update for the workspace was successful.
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.
PUT /workspaces/{workspace_gid}
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 |