diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index c795b05..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-build
\ No newline at end of file
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 9180782..0000000
--- a/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-setup:
-ifndef OPENAPI_DIR
- $(error OPENAPI_DIR is not set. Please see https://app.asana.com/0/0/1200652548580470/f before running)
-endif
- cd $$OPENAPI_DIR && pip install -r requirements.txt
-
-build_spec:
-ifndef OPENAPI_DIR
- $(error OPENAPI_DIR is not set. Please see https://app.asana.com/0/0/1200652548580470/f before running)
-endif
- python $$OPENAPI_DIR/build.py && cp $$OPENAPI_DIR/dist/public_asana_oas.yaml ./defs/asana_oas.yaml && cp $$OPENAPI_DIR/app_components_oas.yaml ./defs/app_components_oas.yaml
diff --git a/README.md b/README.md
deleted file mode 100644
index 2531c4e..0000000
--- a/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Asana's OpenAPI Specifications
-
-This repository contains the [OpenAPI Specification](https://swagger.io/specification/) for Asana's APIs.
-
-To learn more about Asana's APIs, [visit our developer documentation](https://developers.asana.com/docs).
-
-# Setup
-
-1. Clone this repository to your local machine.
-
-2. Navigate to project's root directory via your terminal and install dependencies:
-
-```
-make setup
-```
-
-# Usage
-
-To build (i.e., update) the OpenAPI specifications for the REST API (`./defs/asana_oas.yaml`) and for app components (`./defs/app_components_oas.yaml`), create a new branch and run the following:
-
-```
-./bin/build_spec.sh
-```
-
-Then, create a pull request with the result of the above operation.
diff --git a/add_code_samples_to_oas.py b/add_code_samples_to_oas.py
deleted file mode 100644
index ae4b4b8..0000000
--- a/add_code_samples_to_oas.py
+++ /dev/null
@@ -1,93 +0,0 @@
-import os
-import ruamel.yaml
-
-ASANA_OAS_DIR = './defs/asana_oas.yaml'
-LANGUAGES = ['java', 'node', 'python', 'php', 'ruby']
-
-# ReadMe code configurations
-readme_code_config = {
- 'java': {
- # TODO: Dynamically pull the latest java-asana package version number
- # NOTE: this FoldedScalarString method adds this line as a YAML block scalar style so in the future when ReadMe supports '\n' in their install we can go back and add it in here
- # Context: more info on YAML Multiline: https://yaml-multiline.info/
- 'install': ruamel.yaml.scalarstring.FoldedScalarString('com.asanaasana1.0.0'),
- },
- 'node': {
- 'install': 'npm install asana',
- },
- 'python': {
- 'install': 'pip install asana',
- },
- 'php': {
- 'install': 'composer require asana/asana',
- },
- 'ruby': {
- 'install': 'gem install asana',
- }
-}
-
-# Let ruamel.yaml know that we don't want to use aliases/anchors in the output YAML file
-ruamel.yaml.representer.RoundTripRepresenter.ignore_aliases = lambda x, y: True
-
-yaml = ruamel.yaml.YAML()
-# Configure ruamel.yaml to preserve OpenAPI Spec file formatting
-yaml.preserve_quotes = True
-yaml.indent(sequence=4, offset=2)
-
-# Helper function to convert snakecase to camel case
-def camel_case(s):
- # Split underscore using split
- temp = s.split('_')
- # Joining result
- return temp[0] + ''.join(word.title() for word in temp[1:])
-
-# Gather sample code
-print('Gathering sample code')
-code_samples = {}
-for language in LANGUAGES:
- for dirpath,_,filenames in os.walk(f'./build/{language}/samples'):
- for filename in filenames:
- with open(f'{dirpath}/{filename}') as fp:
- data = yaml.load(fp)
- for resource, operations in data.items():
- # Set resource key in code_samples dict
- # NOTE: java resource name has a "base" suffix. We'll need to remove this so we
- # can group the sample code together with the other languages
- resource_name = resource.replace("base", '') if language == 'java' else resource
- code_samples.setdefault(resource_name, {})
- # Loop through each operation
- for operation, code_sample in operations.items():
- # Convert operation name from snake case to camel case
- operation_name_camel_case = camel_case(operation)
- # Set operation name
- code_samples[resource_name].setdefault(operation_name_camel_case, [])
- # Add sample code
- code_samples[resource_name][operation_name_camel_case].append(
- {
- "language": language,
- "install": readme_code_config[language]['install'],
- "code": code_sample
- }
- )
-
-# TODO: Find a more efficient way to inject the sample code
-# Load OAS file
-with open(ASANA_OAS_DIR) as fp:
- data = yaml.load(fp)
-
- # Add code samples to each enpoint in the OAS
- for resource, operations in code_samples.items():
- print(f'Adding code samples to {resource}')
- for operation in operations:
- for endpoint, endpoint_data in data['paths'].items():
- for method, method_data in endpoint_data.items():
- if method in ['delete', 'get', 'post', 'put']:
- if method_data['operationId'] == operation:
- modified_data = data['paths'][endpoint][method]
- modified_data.setdefault('x-readme', {})
- modified_data['x-readme'].setdefault('code-samples', [])
- modified_data['x-readme']['code-samples'] = code_samples[resource][operation]
-
-# Update OpenAPI Spec file with injected code samples
-with open(ASANA_OAS_DIR, 'w') as fp:
- yaml.dump(data, fp)
diff --git a/bin/build_spec.sh b/bin/build_spec.sh
deleted file mode 100755
index 2de47d2..0000000
--- a/bin/build_spec.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/bash -e
-
-# Build the OpenAPI Spec
-make build_spec
-
-# Clone client libraries
-mkdir -p build
-checkout_client_lib() (
- url="$1"
- dest="$2"
-
- if [[ -d "$dest" ]]; then
- cd $dest
- echo "Getting latest changes for $dest"
- git checkout master
- git pull
- return
- fi
-
- git clone "$url" "$dest"
-)
-
-checkout_client_lib "https://github.com/Asana/java-asana.git" build/java
-checkout_client_lib "https://github.com/Asana/node-asana.git" build/node
-checkout_client_lib "https://github.com/Asana/python-asana.git" build/python
-checkout_client_lib "https://github.com/Asana/php-asana.git" build/php
-checkout_client_lib "https://github.com/Asana/ruby-asana.git" build/ruby
-
-# Run script to add client library sample code to OpenAPI Spec file
-python add_code_samples_to_oas.py
diff --git a/defs/app_components_oas.yaml b/defs/app_components_oas.yaml
deleted file mode 100644
index 86d9959..0000000
--- a/defs/app_components_oas.yaml
+++ /dev/null
@@ -1,2011 +0,0 @@
----
-openapi: 3.0.0
-info:
- description: >-
- This is the interface for handling requests for
- [app components](https://developers.asana.com/docs/overview-of-app-components). This reference
- is generated from an [OpenAPI spec]
- (https://raw.githubusercontent.com/Asana/openapi/master/defs/app_components_oas.yaml).
- title: App Components
- termsOfService: https://asana.com/terms
- contact:
- name: Asana Support
- url: https://asana.com/support
- license:
- name: Apache 2.0
- url: https://www.apache.org/licenses/LICENSE-2.0
- version: '0.1'
- x-docs-schema-whitelist:
- - AttachedResourceResponse
- - FormField-Checkbox
- - FormField-Date
- - FormField-Datetime
- - FormField-Dropdown
- - FormField-MultiLineText
- - FormField-RadioButton
- - FormField-RichText
- - FormField-SingleLineText
- - FormField-StaticText
- - FormField-Typeahead
- - FormMetadataResponse
- - RanActionResponse
- - WidgetFooter-CustomText
- - WidgetFooter-Created
- - WidgetFooter-Updated
- - WidgetMetadataResponse
- - WidgetField-DatetimeWithIcon
- - WidgetField-Pill
- - WidgetField-TextWithIcon
- - TypeaheadListResponse
- - TypeaheadItem
- - FormValues
- - BadRequestResponse
- - UnauthorizedResponse
- - ForbiddenResponse
- - NotFoundResponse
- - InternalServerErrorResponse
-x-readme:
- explorer-enabled: false
-servers:
- - url: "{siteUrl}"
- description: Main endpoint.
-tags:
- - name: Modal forms
- description: >-
- The modal form is displayed when the user starts the flow to create a resource. Asana will make a signed
- request to the specified `form_metadata_url` in the configuration, and expect a response with the metadata needed to
- create the form. This process is also used for forms within rule actions.
- - name: Rule actions
- description: >-
- When a rule containing a rule action is triggered, the [rules](https://asana.com/guide/help/premium/rules) engine will make a request to the app to
- inform the app to run the configured rule action. The resulting status code will indicate to the rules engine
- whether the action was successfully completed and, if not, specify a cause for the error.
-
-
- _Note: An app server must be hosted in order for rule actions to function. For a brief list of popular hosting options, see [hosting](/docs/hosting)._
- - name: Lookups
- description: >-
- If the app defined a resource attach URL, tasks without a widget offer the lookup functionality. This appears as a text
- input to the user. When the user submits the text, the app responds with either a resource attachment or with an error.
- - name: Widgets
- description: >-
- The widget is displayed when the user views a task with an attachment with a resource URL matching your
- capability’s `match_resource_url_pattern`. When this happens, Asana will make a signed request to your `widget_metadata_url`,
- and expect a response with information to render in the widget.
-components:
- parameters:
- action:
- name: action
- in: query
- schema:
- type: string
- description: >-
- The ID of an existing rule action that is being edited. Should be omitted when configuring a new rule action.
- action_type:
- name: action_type
- required: true
- in: query
- schema:
- type: string
- description: >-
- The ID of the configuration used to create the rule action.
- attachment:
- name: attachment
- required: true
- in: query
- schema:
- type: string
- description: >-
- The attachment ID of the URL attachment.
- expires_at:
- name: expires_at
- required: true
- in: query
- schema:
- type: string
- description: >-
- The time (in ISO 8601 date format) when the request should expire.
- fragment:
- name: fragment
- required: true
- in: query
- schema:
- type: string
- description: >-
- The text entered into the typeahead input.
- project:
- name: project
- required: true
- in: query
- schema:
- type: string
- description: >-
- The project GID this hook is coming from.
- user:
- name: user
- required: true
- in: query
- schema:
- type: string
- description: >-
- The user GID this hook is coming from.
- resource_url:
- name: resource_url
- required: true
- in: query
- schema:
- type: string
- description: >-
- The URL of the URL attachment on the task (i.e., Jira issue, GitHub pull request)
- task:
- name: task
- required: true
- in: query
- schema:
- type: string
- description: >-
- The task GID this hook is coming from.
- workspace:
- name: workspace
- required: true
- in: query
- schema:
- type: string
- description: >-
- The workspace GID this hook is coming from.
- responses:
- BadRequest:
- description: >-
- Bad request
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/BadRequestResponse'
- Unauthorized:
- description: >-
- Unauthorized
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/UnauthorizedResponse'
- Forbidden:
- description: >-
- Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ForbiddenResponse'
- NotFound:
- description: >-
- Not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/NotFoundResponse'
- TooManyRequests:
- description: >-
- Too Many Requests
- Gone:
- description: >-
- Gone
- InternalServerError:
- description: >-
- Server error
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/InternalServerErrorResponse'
- ImATeapot:
- description: >-
- I'm A Teapot
- schemas:
- RootUIComponentRequest:
- description: >-
- The building block of all app component requests.
- type: object
- properties:
- expires_at:
- type: string
- description: >-
- The time (in ISO 8601 date format) when the request should expire.
- example: '2019-04-15T01:01:46.055Z'
- user:
- type: string
- description: >-
- The user GID this hook is coming from.
- example: '54321'
- workspace:
- type: string
- description: >-
- The workspace GID this hook is coming from.
- example: '12345'
- AttachResourceRequest:
- allOf:
- - $ref: '#/components/schemas/RootUIComponentRequest'
- - type: object
- description: >-
- The body of an attach request.
- properties:
- task:
- type: string
- description: >-
- The task GID this hook is coming from.
- attachment:
- type: string
- description: >-
- The attachment ID of the URL attachment
- query:
- type: string
- description: >-
- The user’s input in the lookup text input. This is often a resource URL or resource key, such as
- `"CP-1"` or `"https://abcde.atlassian.net/browse/CP-1"`
- AttachedResourceResponse:
- description: >-
- The response to a successful lookup request.
- type: object
- required:
- - resource_name
- - resource_url
- properties:
- resource_name:
- description: >-
- The name of the attached resource
- type: string
- example: 'Build the Thing'
- resource_url:
- description: >-
- The URL of the attached resource
- type: string
- example: 'https://example.atlassian.net/browse/CP-1'
- error:
- description: >-
- The error that should be displayed to the user
- type: string
- example: 'No resource matched that input'
- BadRequestResponse:
- description: >-
- An error response object indicating a bad request (i.e., a status code of `400`).
- type: object
- properties:
- data:
- description: >-
- An object containing an `error` string to display to the user.
- type: object
- properties:
- error:
- description: >-
- The error to display.
- type: string
- example: "Illegal or malformed request."
- CheckboxOption:
- description: >-
- An option for a checkbox field (i.e., an object in the field's `options` array).
- type: object
- required:
- - id
- - label
- properties:
- id:
- description: >-
- The ID of the option.
- type: string
- example: 'opt-in'
- label:
- description: >-
- The label of the option. Limit 80 characters.
- type: string
- example: 'Opt in'
- DropdownOption:
- description: >-
- An option for a dropdown field (i.e., an object in the field's `options` array).
- type: object
- required:
- - id
- - label
- properties:
- id:
- description: >-
- The ID of the option.
- type: string
- example: 'red'
- label:
- description: >-
- The label of the option. Limit 80 characters.
- type: string
- example: 'Red'
- icon_url:
- description: >-
- *Optional*. The URL for the icon beside the label. If not present, no icon will be displayed.
- type: string
- example: 'https://example.com/red.png'
- ForbiddenResponse:
- description: >-
- An error response object indicating a forbidden request (i.e., a status code of `403`).
- type: object
- properties:
- data:
- description: >-
- An object containing an `error` string to display to the user.
- type: object
- properties:
- error:
- description: >-
- The error to display.
- type: string
- example: "Access forbidden."
- InternalServerErrorResponse:
- description: >-
- An error response object indicating a request that could not be found (i.e., a status code of `500`).
- type: object
- properties:
- data:
- description: >-
- An object containing an `error` string to display to the user.
- type: object
- properties:
- error:
- description: >-
- The error to display.
- type: string
- example: "Internal server error."
- FormField-StaticText:
- description: >-
- A modal form "field" that displays static text. Fields of this type do not collect user input.
- type: object
- required:
- - id
- - type
- - name
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - static_text
- example: 'static_text'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'static_text_field_1'
- name:
- description: >-
- The text (i.e., label) for the field. Limit 50 characters.
- type: string
- example: 'Please enter the following details:'
- FormField-SingleLineText:
- description: >-
- A modal form field that accepts single-line text input.
- type: object
- required:
- - id
- - type
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - single_line_text
- example: 'single_line_text'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'single_line_text_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Resource name'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- placeholder:
- description: >-
- The placeholder for the input, which is shown if the field has no value. If not provided, there will be no placeholder.
- type: string
- example: 'Enter the full title of the resource here'
- width:
- description: >-
- *Optional*. The width of the form field. If not provided, the default value will be `"full"`.
- type: string
- enum:
- - full
- - half
- example: 'full'
- value:
- description: >-
- The value of the field. If not provided, the field will be empty and the form cannot be submitted if it is required. Limit 200 characters.
- type: string
- example: "Annual Kick-Off Meeting"
- FormField-MultiLineText:
- description: >-
- A modal form field that accepts multi-line text input.
- type: object
- required:
- - id
- - type
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - multi_line_text
- example: 'multi_line_text'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'multi_line_text_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Resource name'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- placeholder:
- description: >-
- The placeholder for the input, which is shown if the field has no value. If not provided, there will be no placeholder.
- type: string
- example: 'Enter the full title of the resource here'
- value:
- description: >-
- The value of the field. If not provided, the field will be empty and the form cannot be submitted if it is required. Limit 3000 characters.
- type: string
- example: "Annual Kick-Off Meeting"
- FormField-RichText:
- description: >-
- A modal form field that accepts rich text input.
- type: object
- required:
- - id
- - type
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - rich_text
- example: 'rich_text'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'rich_text_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Resource name'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- placeholder:
- description: >-
- The placeholder for the input, which is shown if the field has no value. If not provided, there will be no placeholder.
- type: string
- example: 'Enter the full title of the resource here'
- value:
- description: >-
- The value of the field. If not provided, the field will be empty and the form cannot be submitted if it is required. Limit 3000 characters.
- type: string
- example: "Annual Kick-Off Meeting"
- FormField-Dropdown:
- description: >-
- A modal form field that accepts input via a dropdown list. Limit 50 options.
- type: object
- required:
- - id
- - type
- - options
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - dropdown
- example: 'dropdown'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'dropdown_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Resource name'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- width:
- description: >-
- *Optional*. The width of the form field. If not provided, the default value will be `"full"`.
- type: string
- enum:
- - full
- - half
- example: 'full'
- value:
- description: >-
- *Optional*. The value for the form field, which is the ID of the chosen DropdownOption object.
- type: string
- example: 'dropdown_option_1'
- options:
- description: >-
- An array (minimum length: 1) of DropdownOption objects.
- type: array
- items:
- $ref: '#/components/schemas/DropdownOption'
- FormField-RadioButton:
- description: >-
- A modal form field that accepts radio button input. Limit 5 options.
- type: object
- required:
- - id
- - type
- - options
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - radio_button
- example: 'radio_button'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'radio_button_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Resource name'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- value:
- description: >-
- *Optional*. The value for the form field, which is the ID of the chosen RadioOption object.
- type: string
- example: 'radio_option_1'
- options:
- description: >-
- An array (minimum length: 1) of RadioOption objects.
- type: array
- items:
- $ref: '#/components/schemas/RadioOption'
- FormField-Checkbox:
- description: >-
- A modal form field that accepts checkbox input. Limit 10 options.
- type: object
- required:
- - id
- - type
- - options
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - checkbox
- example: 'checkbox'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'checkbox_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Resource name'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- value:
- description: >-
- *Optional*. The values for the form field, which are the IDs of the chosen CheckboxOption objects.
- type: array
- items:
- type: string
- example:
- - 'opt-in'
- options:
- description: >-
- An array (minimum length: 1) of CheckboxOption objects.
- type: array
- items:
- $ref: '#/components/schemas/CheckboxOption'
- FormField-Date:
- description: >-
- A modal form field that accepts date input.
- type: object
- required:
- - id
- - type
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - date
- example: 'date'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'date_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Date'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- placeholder:
- description: >-
- The placeholder for the input, which is shown if the field has no value. If not provided, there will be no placeholder.
- type: string
- example: '2022-02-01'
- value:
- description: >-
- The value of the field. This takes a date with format YYYY-MM-DD or ISO 8601 date string in UTC.
- type: string
- format: date
- example: '2022-02-01'
- nullable: true
- FormField-Datetime:
- description: >-
- A modal form field that accepts datetime input.
- type: object
- required:
- - id
- - type
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - datetime
- example: 'datetime'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'datetime_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Datetime'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- placeholder:
- description: >-
- The placeholder for the input, which is shown if the field has no value. If not provided, there will be no placeholder.
- type: string
- example: '2022-02-01T14:48:00.000Z'
- value:
- description: >-
- The value of the field. This value takes the form of an ISO 8601 date string in UTC.
- type: string
- format: date-time
- example: '2022-02-01T14:48:00.000Z'
- nullable: true
- FormField-Typeahead:
- description: >-
- A modal form field that accepts typeahead input.
- type: object
- required:
- - id
- - type
- - typeahead_url
- properties:
- type:
- description: >-
- The type of modal form field.
- type: string
- enum:
- - typeahead
- example: 'typeahead'
- id:
- description: >-
- The ID of the field, which is used to reference the field. These should be unique across the entire form.
- type: string
- example: 'typeahead_field_1'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 50 characters.
- type: string
- example: 'Statuses'
- is_required:
- description: >-
- *Optional*. Indicates whether the field is required to submit the form. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- is_watched:
- description: >-
- *Optional*. Indicates whether the field should be watched. Fields that are watched send requests to the `on_change` URL specified
- in the form metadata to get updated form information. If this property is not specified, the value is assumed `false`.
- type: boolean
- example: true
- error:
- description: >-
- *Optional*. The developer-specified error message displayed to the user if there is an error with the chosen value.
- type: string
- example: 'Please review and change your input'
- width:
- description: >-
- *Optional*. The width of the form field. If not provided, the default value will be `"full"`.
- type: string
- enum:
- - full
- - half
- example: 'full'
- typeahead_url:
- description: >-
- The URL that Asana uses to request typehead results from the application server.
- type: string
- example: 'https://www.app-server.com/app/typeahead'
- value:
- allOf:
- - $ref: '#/components/schemas/TypeaheadItem'
- - type: object
- description: >-
- *Optional*. The value for the form field, which is the chosen [TypeaheadItem](/reference/lookups#typeaheaditem) object.
- FormMetadataResponse:
- description: >-
- Contains the metadata that describes how to display and manage a form.
- type: object
- required:
- - metadata
- - template
- properties:
- template:
- description: >-
- The interface name and version of a distinct form UI layout. A `template` is directly associated with a particular `metadata` schema.
- type: string
- enum:
- - form_metadata_v0
- example: 'form_metadata_v0'
- metadata:
- description: >-
- The metadata (i.e., underlying definition) of a form. `metadata` must exist alongside a `template`, and its schema must be specific to the value of that `template`.
- type: object
- required:
- - fields
- - title
- properties:
- title:
- description: >-
- The title of the form, which is displayed at the top of the creation form
- type: string
- example: 'Create New Issue'
- fields:
- description: >-
- An array of form field objects that are rendered in the order they are in the array. Limit of 30 fields.
-
-
- Valid object schemas: [FormField-Checkbox](/reference/modal-forms#formfield-checkbox), [FormField-Date](/reference/modal-forms#formfield-date),
- [FormField-Datetime](/reference/modal-forms#formfield-datetime), [FormField-Dropdown](/reference/modal-forms#formfield-dropdown),
- [FormField-MultiLineText](/reference/modal-forms#formfield-multilinetext), [FormField-RadioButton](/reference/modal-forms#formfield-radiobutton),
- [FormField-RichText](/reference/modal-forms#formfield-richtext), [FormField-SingleLineText](/reference/modal-forms#formfield-singlelinetext),
- [FormField-StaticText](/reference/modal-forms#formfield-statictext), [FormField-Typeahead](/reference/modal-forms#formfield-typeahead)
- type: array
- submit_button_text:
- description: >-
- The text to display on the form’s submit button. If not provided, the default text “Submit” will be
- displayed on the button.
- type: string
- example: 'Create New Issue'
- on_submit_callback:
- description: >-
- The URL to `POST` the form to when the user clicks the submit button.
- If this is field is omitted then the submission button will be disabled. This is useful if the user must
- enter information in a watched field first, such as to show additional fields.
- type: string
- example: 'https://www.example.com/on_submit'
- on_change_callback:
- description: >-
- The URL to `POST` the form to whenever watched field values are changed.
- type: string
- example: 'https://www.example.com/on_change'
- FormOnChangeFormSubmissionRequest:
- description: >-
- Common properties between app component on change and on submit requests.
- properties:
- values:
- type: object
- description: >-
- An object that maps each FormField’s GID to its value.
-
- Refer to the `value` property on the FormField schema: [FormField-Checkbox](/reference/modal-forms#formfield-checkbox), [FormField-Date](/reference/modal-forms#formfield-date),
- [FormField-Datetime](/reference/modal-forms#formfield-datetime), [FormField-Dropdown](/reference/modal-forms#formfield-dropdown),
- [FormField-MultiLineText](/reference/modal-forms#formfield-multilinetext), [FormField-RadioButton](/reference/modal-forms#formfield-radiobutton),
- [FormField-RichText](/reference/modal-forms#formfield-richtext), [FormField-SingleLineText](/reference/modal-forms#formfield-singlelinetext),
- [FormField-StaticText](/reference/modal-forms#formfield-statictext), [FormField-Typeahead](/reference/modal-forms#formfield-typeahead)
- example:
- checkbox_field_1: ["opt-in"]
- date_field_1: "2021-12-31T08:00:00.000Z"
- datetime_field_1: "2023-01-01T00:00:00.000Z"
- dropdown_field_1: "red"
- multi_line_text_field_1: "Multiline Text"
- radio_button_field_1: "blue"
- rich_text_field_1: "
Rich Text"
- single_line_text_field_1: "Single Line Text"
- static_text_field_1: "Static Text"
- typeahead_field_1:
- icon_url: "https://example.com/icon.png"
- subtitle: "Subtitle"
- title: "Title"
- value: "Typeahead"
- FormSubmissionRequest:
- allOf:
- - $ref: '#/components/schemas/RootUIComponentRequest'
- - $ref: '#/components/schemas/FormOnChangeFormSubmissionRequest'
- - type: object
- description: >-
- The body of a form submission.
- properties:
- task:
- type: string
- description: >-
- The task GID this hook is coming from.
- example: '67890'
- ActionFormSubmissionRequest:
- allOf:
- - $ref: '#/components/schemas/FormSubmissionRequest'
- - type: object
- description: >-
- The body of a form submission.
- properties:
- rule_name:
- type: string
- description: >-
- The name of the rule being created
- example: 'rule name'
- action:
- type: string
- description: >-
- The ID of an existing rule action that is being edited
- example: '12345'
- action_type:
- type: string
- description: >-
- The ID of the configuration used to create the rule action.
- example: '45678'
- project:
- type: string
- description: >-
- The project GID this hook is coming from.
- example: '12345'
- WidgetFooter-Created:
- description: >-
- A widget footer that displays the timestamp of the resource's creation time.
- type: object
- required:
- - created_at
- - footer_type
- properties:
- footer_type:
- description: >-
- The type of widget footer.
- type: string
- enum:
- - created
- example: 'created'
- created_at:
- description: >-
- The time (in ISO 8601 date format) to show in the footer.
- type: string
- example: '2012-02-22T02:06:58.147Z'
- WidgetFooter-CustomText:
- type: object
- required:
- - footer_type
- - text
- description: >-
- A widget footer that displays custom text and an optional icon.
- properties:
- footer_type:
- description: >-
- The text to show in the footer.
- type: string
- enum:
- - custom_text
- example: 'custom_text'
- text:
- description: >-
- The text to show in the footer.
- type: string
- example: 'This is a custom footer message'
- icon_url:
- description: >-
- *Optional*. The icon to show in the footer next to the text. If not provided, no
- icon will be shown.
- type: string
- example: 'https://example-icon.png'
- FormOnChangeBaseRequest:
- allOf:
- - $ref: '#/components/schemas/RootUIComponentRequest'
- - $ref: '#/components/schemas/FormOnChangeFormSubmissionRequest'
- - type: object
- description: >-
- The body of an onchange event.
- properties:
- changed_field:
- type: string
- description: >-
- The name of the changed FormField.
- example: 'checkbox_field_1'
- FormOnChangeRequest:
- allOf:
- - $ref: '#/components/schemas/FormOnChangeBaseRequest'
- - type: object
- description: >-
- The body of an onchange event.
- properties:
- task:
- type: string
- description: >-
- The task GID this hook is coming from.
- example: '67890'
- ActionFormOnChangeRequest:
- allOf:
- - $ref: '#/components/schemas/FormOnChangeBaseRequest'
- - type: object
- description: >-
- The body of an action onchange event.
- properties:
- action:
- type: string
- description: >-
- The ID of an existing rule action that is being edited.
- example: '12345'
- action_type:
- type: string
- description: >-
- The ID of the configuration used to create the rule action.
- example: '45678'
- project:
- type: string
- description: >-
- The project GID this hook is coming from.
- example: '12345'
- NotFoundResponse:
- description: >-
- An error response object indicating a request that could not be found (i.e., a status code of `404`).
- type: object
- properties:
- data:
- description: >-
- An object containing an `error` string to display to the user.
- type: object
- properties:
- error:
- description: >-
- The error to display.
- type: string
- example: "Not found."
- RunActionRequest:
- allOf:
- - $ref: '#/components/schemas/RootUIComponentRequest'
- - type: object
- description: >-
- The body of an action request.
- required:
- - idempotency_key
- properties:
- project:
- type: string
- description: >-
- The project GID this hook is coming from.
- example: '12345'
- target_object:
- type: string
- description: >-
- The ID of the target object that the rule action is acting on. Currently, this value is always a task GID.
- action:
- type: string
- description: >-
- The action ID generated from rule creation.
- action_type:
- type: string
- description: >-
- The ID from the configuration used to create the rule action.
- idempotency_key:
- type: string
- description: >-
- A unique key associated with the "run action" request. App servers should use
- this key to implement idempotency.
- RanActionResponse:
- type: object
- description: >-
- The response to an action request.
- required:
- - action_result
- properties:
- error:
- description: >-
- The error that should be displayed to the user.
- type: string
- example: 'That resource no longer exists'
- action_result:
- type: string
- enum:
- - resources_created
- - ok
- description: >-
- Specifies any additional information that the app wants to send to Asana on completion of the action.
- Can only be `resources_created` or `ok`.
- example: 'ok'
- resources_created:
- type: array
- description: >-
- A field with the data corresponding to the action_result value. Each `action_result` has its own data field
- shape that Asana expects. `resources_created` expects the name and URL of the resources that the action
- created.
- items:
- $ref: '#/components/schemas/AttachedResourceResponse'
- RadioOption:
- description: >-
- An option for a radio button field (i.e., an object in the field's `options` array).
- type: object
- required:
- - id
- - label
- properties:
- id:
- description: >-
- The ID of the option.
- type: string
- example: 'radio_option_1'
- label:
- description: >-
- The label of the option. Limit 80 characters.
- type: string
- example: 'Radio Option 1'
- sub_label:
- description: >-
- *Optional*. The label to display as subtext for the `label`.
- type: string
- example: '#0000FF'
- TypeaheadItem:
- description: >-
- An object describing a typeahead result.
- type: object
- required:
- - title
- - value
- properties:
- title:
- description: >-
- The title of the typeahead item.
- type: string
- example: 'OTP Team PF'
- subtitle:
- description: >-
- The subtitle of the typeahead item.
- type: string
- example: 'OTP'
- value:
- description: >-
- The value of the typeahead item.
- type: string
- example: 'OTP'
- icon_url:
- description: >-
- The URL of the icon to display next to the title.
- type: string
- example: 'https://example-icon.png'
- TypeaheadListRequest:
- allOf:
- - $ref: '#/components/schemas/RootUIComponentRequest'
- - type: object
- description: >-
- The body of a typeahead request.
- properties:
- workspace:
- type: string
- description: >-
- The workspace GID this hook is coming from.
- example: '12345'
- query:
- type: string
- description: >-
- The user's input in the typeahead text input.
- example: 'Messages'
- task:
- type: string
- description: >-
- *Conditional*. The task GID this hook is coming from. `task` is only present in the [modal form](/docs/modal-form) (as there is a "context task"), but not in the [rule action](/docs/rule-action) (as rules are associated with a _project_).
- example: '67890'
- user:
- type: string
- description: >-
- The user GID this hook is coming from.
- example: '54321'
- expires_at:
- type: string
- description: >-
- The time (in ISO 8601 format) when the request should expire.
- example: '2019-04-15T01:01:46.055Z'
- TypeaheadListResponse:
- description: >-
- The response to a successful typeahead request.
- type: object
- required:
- - items
- properties:
- header:
- description: >-
- *Optional*. Header text to display above the list of typeahead results. If no `header` is passed in or the value is an empty string, only the typeahead results with be rendered.
- type: string
- example: 'List of messages'
- items:
- description: >-
- Array of [TypeaheadItem](/reference/lookups#typeaheaditem) objects that indicate typeahead results.
- type: array
- items:
- $ref: '#/components/schemas/TypeaheadItem'
- UnauthorizedResponse:
- description: >-
- An error response object indicating a unauthorized request (i.e., a status code of `401`).
- type: object
- properties:
- data:
- description: >-
- An object containing an `error` string to display to the user.
- type: object
- properties:
- error:
- description: >-
- The error to display.
- type: string
- example: "Authorization required."
- WidgetFooter-Updated:
- description: >-
- A widget footer that displays the timestamp of the resource's last updated time.
- type: object
- required:
- - footer_type
- - last_updated_at
- properties:
- footer_type:
- description: >-
- The type of widget footer.
- type: string
- enum:
- - updated
- example: 'updated'
- last_updated_at:
- description: >-
- The time (in ISO 8601 date format) to show in the footer.
- type: string
- example: '2012-02-22T02:06:58.147Z'
- WidgetField-DatetimeWithIcon:
- description: >-
- A widget field that displays a timestamp and an optional icon.
- type: object
- required:
- - name
- - type
- properties:
- type:
- description: >-
- The type of widget field.
- type: string
- enum:
- - datetime_with_icon
- example: 'datetime_with_icon'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 40 characters.
- type: string
- example: 'Status'
- datetime:
- description: >-
- The time (in ISO 8601 date format) to display next to the icon.
- type: string
- example: '2012-02-22T02:06:58.147Z'
- icon_url:
- description: >-
- *Optional*. The URL of the icon to display next to the time.
- type: string
- example: 'https://example-icon.png'
- WidgetField-Pill:
- description: >-
- A widget field that displays custom text in a colored "pill" format.
- type: object
- required:
- - color
- - name
- - text
- - type
- properties:
- type:
- description: >-
- The type of widget field.
- type: string
- enum:
- - pill
- example: 'pill'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 40 characters.
- type: string
- example: 'Status'
- text:
- description: >-
- The text to show in the field. Limit 40 characters.
- type: string
- example: 'In Progress'
- color:
- description: >-
- The color of the pill.
- type: string
- enum:
- - none
- - red
- - orange
- - yellow-orange
- - yellow
- - yellow-green
- - green
- - blue-green
- - aqua
- - blue
- - indigo
- - purple
- - magenta
- - hot-pink
- - pink
- - cool-gray
- example: 'cool-gray'
- WidgetField-TextWithIcon:
- description: >-
- A widget field that displays custom text with an optional icon.
- type: object
- required:
- - name
- - text
- - type
- properties:
- type:
- description: >-
- The type of widget field.
- type: string
- enum:
- - text_with_icon
- example: 'text_with_icon'
- name:
- description: >-
- The text (i.e., label) to show in the title of the field. Limit 40 characters.
- type: string
- example: 'Status'
- text:
- description: >-
- The text to show in the field. Limit 40 characters.
- type: string
- example: 'In Progress'
- icon_url:
- description: >-
- *Optional*. The URL of the icon to display next to the text.
- type: string
- example: 'https://example-icon.png'
- WidgetMetadataResponse:
- description: >-
- An object containing information about the widget.
- type: object
- required:
- - metadata
- - template
- properties:
- template:
- description: >-
- The interface name and version of a distinct widget UI layout. A `template` is directly associated with a particular `metadata` schema.
- type: string
- enum:
- - summary_with_details_v0
- example: 'summary_with_details_v0'
- metadata:
- description: >-
- The metadata (i.e., underlying definition) of a widget. `metadata` must exist alongside a `template`, and its schema must be specific to the value of that `template`.
- type: object
- required:
- - fields
- - footer
- - title
- properties:
- title:
- description: >-
- The text to show in the title of the widget. Max length of 200 characters.
- type: string
- example: 'Status'
- fields:
- description: >-
- A list of fields showing data from external resources (i.e., an array of WidgetField objects). A widget must contain at least 1 field and no more than 5 fields.
-
-
- Valid object schemas: [WidgetField-DatetimeWithIcon](/reference/widgets#widgetfield-datetimewithicon), [WidgetField-Pill](/reference/widgets#widgetfield-pill), [WidgetField-TextWithIcon](/reference/widgets#widgetfield-textwithicon).
- type: array
- subtitle:
- description: >-
- The text to show under the title of the widget, next to "Open in {App Name}". If not provided, the
- `resource_name` from the app definition will be used as default.
- type: string
- example: 'Custom App Story · Open in Custom App'
- subicon_url:
- description: >-
- The URL of the subicon next to the subtitle . If not provided, no icon will be shown.
- type: string
- example: 'https://example-icon.png'
- footer:
- type: object
- description: >-
- Contains the information to display a footer on the widget.
-
-
- Valid schemas: [WidgetFooter-Created](/reference/widgets#widgetfooter-created), [WidgetFooter-CustomText](/reference/widgets#widgetfooter-customtext), [WidgetFooter-Updated](/reference/widgets#widgetfooter-updated).
- num_comments:
- description: >-
- The number of comments to display on the lower right corner of the widget. If not provided, no comment
- count will be shown
- type: integer
- example: 2
-paths:
- /widget_metadata_url_path_placeholder:
- parameters:
- - $ref: '#/components/parameters/resource_url'
- - $ref: '#/components/parameters/workspace'
- - $ref: '#/components/parameters/task'
- - $ref: '#/components/parameters/user'
- - $ref: '#/components/parameters/attachment'
- - $ref: '#/components/parameters/expires_at'
- get:
- summary: Get widget metadata
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- Get the metadata from the app server to render a widget.
-
-
-
-
-
- tags:
- - Widgets
- operationId: getWidgetMetadata
- responses:
- 200:
- description: Successfully retrieved the metadata for a single widget.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/WidgetMetadataResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 418:
- $ref: '#/components/responses/Unauthorized'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /resource_attach_url_path_placeholder:
- post:
- summary: Attach resource
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- When the user attaches a resource URL to a task, Asana will make a signed request to the specified
- `resource_attach_url` in the app configuration. Information about the attached resource should be included in the
- response.
- tags:
- - Lookups
- operationId: attachResource
- requestBody:
- description: >-
- Request to attach a resource.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/AttachResourceRequest'
- responses:
- 200:
- description: Successfully attached the resource to the given object.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/AttachedResourceResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /resource_typeahead_url_path_placeholder:
- get:
- summary: Get lookup typeahead results
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- Gets typeahead results to render as a dropdown list in the resource lookup input field.
-
-
- When the user types into the lookup input field, Asana will send a request containing the entered string to the application's `typeahead_url`. The list of [TypeaheadItem](/reference/lookups#typeaheaditem)s in the response will then be rendered in a dropdown list. When the user selects an item from the list, Asana will send a [resource attach](/reference/attachresource) request to the app server, then process the response and render the attached resource in the widget.
- tags:
- - Lookups
- operationId: getTypeaheadResults
- requestBody:
- description: >-
- Request to retrieve typeahead results for a resource lookup query.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TypeaheadListRequest'
- responses:
- 200:
- description: Successfully retrieved typeahead results.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TypeaheadListResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /form_metadata_url_path_placeholder:
- parameters:
- - $ref: '#/components/parameters/workspace'
- - $ref: '#/components/parameters/task'
- - $ref: '#/components/parameters/user'
- - $ref: '#/components/parameters/expires_at'
- get:
- summary: Get form metadata
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- Get the metadata from the app server to render a form.
-
-
-
-
-
- tags:
- - Modal forms
- operationId: getFormMetadata
- responses:
- 200:
- description: Successfully retrieved the metadata for a single form.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormMetadataResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /modal_form_typeahead_url_path_placeholder:
- get:
- summary: Get modal form typeahead results
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- If a modal form field is of type `typehead`, this operation gets typeahead results to render as a dropdown list.
-
-
- When the user types into a modal form form field, Asana will send a request containing the entered string to the application's `typeahead_url`. The list of [TypeaheadItem](/reference/lookups#typeaheaditem)s in the response will then be rendered in a dropdown list.
-
-
-
-
-
- tags:
- - Modal forms
- operationId: getModalFormTypeaheadResults
- requestBody:
- description: >-
- Request to retrieve typeahead results in a modal form typeahead form field.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TypeaheadListRequest'
- responses:
- 200:
- description: Successfully retrieved typeahead results.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TypeaheadListResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /rule_action_typeahead_url_path_placeholder:
- get:
- summary: Get rule action typeahead results
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- In a rule action typeahead form field, this operation gets typeahead results to render as a dropdown list. Typeahead results are limited to 50 items.
-
-
- When the user types into a rule action form field, Asana will send a request containing the entered string to the application's `typeahead_url`. The list of [TypeaheadItem](/reference/lookups#typeaheaditem)s in the response will then be rendered in a dropdown list.
-
-
-
-
-
- tags:
- - Rule actions
- operationId: getRuleActionTypeaheadResults
- requestBody:
- description: >-
- Request to retrieve typeahead results in a rule action typeahead form field.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TypeaheadListRequest'
- responses:
- 200:
- description: Successfully retrieved typeahead results.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TypeaheadListResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
-
- /on_change_callback_path_placeholder:
- post:
- summary: On change callback
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- The callback request made to an app server when a watched field's value changes within a form.
- The request is subject to a 10-second timeout if no response is received from the app server.
-
-
-
-
-
- tags:
- - Modal forms
- operationId: onFormChange
- requestBody:
- description: >-
- Request to notify of an on change event.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormOnChangeRequest'
- responses:
- 200:
- description: Successfully returned the new state of the form.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormMetadataResponse'
- 400:
- description: Something was wrong with the form data.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormMetadataResponse'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /on_submit_callback_path_placeholder:
- post:
- summary: On submit callback
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- The callback request made to an app server when a form is submitted.
- The request is subject to a 10-second timeout if no response is received from the app server.
-
-
-
-
-
- tags:
- - Modal forms
- operationId: onFormSubmit
- requestBody:
- description: >-
- Request to notify of a form submission.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormSubmissionRequest'
- responses:
- 200:
- description: Successfully attached the resource created by the form.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/AttachedResourceResponse'
- 400:
- description: Something was wrong with the form data.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormMetadataResponse'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /run_action_url_path_placeholder:
- post:
- summary: Run action
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- The request made when an action is triggered. Rule actions in rules containing a "Task added to this project" trigger have a 2 minute
- delay for newly created tasks in that project. This is to provide time for the creating
- user to fill out task details (name, description, etc.) before the rule action is triggered.
-
-
- An app server must be hosted in order for rule actions to function. For a brief list of popular hosting options, see [hosting](/docs/hosting).
-
-
-
-
-
- tags:
- - Rule actions
- operationId: runAction
- requestBody:
- description: >-
- Request to notify of an action running.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/RunActionRequest'
- responses:
- 200:
- description: Successfully attached the resource created by the form.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/RanActionResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 410:
- $ref: '#/components/responses/Gone'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /action.metadata_url_path_placeholder:
- parameters:
- - $ref: '#/components/parameters/action'
- - $ref: '#/components/parameters/action_type'
- - $ref: '#/components/parameters/project'
- - $ref: '#/components/parameters/workspace'
- - $ref: '#/components/parameters/user'
- - $ref: '#/components/parameters/expires_at'
- get:
- summary: Get action metadata
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- When a user has navigated to the [custom rule builder](https://asana.com/guide/help/premium/rules#gl-create-rule)
- UI and selected a rule action (either through the sidebar or via a rule preset), Asana will make a request to the
- app to get the configuration form definition for the chosen rule action. This will initiate the flow to configure
- a new rule action or edit the configuration of an existing rule action. This is the endpoint and schema for
- updating rule actions; app triggers (V2) will be analogous.
-
-
-
-
-
- tags:
- - Rule actions
- operationId: getActionMetadata
- responses:
- 200:
- description: Successfully retrieved the metadata for a single action.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormMetadataResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /action.on_change_callback_path_placeholder:
- post:
- summary: On action change callback
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- The callback request made to an app server when a watched field's value changes within an action form.
- The request is subject to a 10-second timeout if no response is received from the app server.
-
-
-
-
-
- tags:
- - Rule actions
- operationId: onActionFormChange
- requestBody:
- description: >-
- Request to notify of an on change event.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ActionFormOnChangeRequest'
- responses:
- 200:
- description: Successfully returned the new state of the form.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormMetadataResponse'
- 400:
- description: Something was wrong with the form data.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormMetadataResponse'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /action.on_submit_callback_path_placeholder:
- post:
- summary: On action submit callback
- description: >-
- _Note: The path is a placeholder. The actual path is determined by the
- configuration of the app component._
-
-
- The form is submitted when the user chooses to create their rule. Asana will create the rule action data model
- object and make a signed request to the `on_submit_callback` specified in the form metadata returned from the
- fetch/update rule action form endpoints. Information about the created rule action should be included in the
- response if it was successfully created. This is the endpoint and schema for updating rule actions; app triggers
- (V2) will be analogous.
-
-
- The request is subject to a 10-second timeout if no response is received from the app server.
-
-
-
-
-
- tags:
- - Rule actions
- operationId: onActionFormSubmit
- requestBody:
- description: >-
- Request to submit an action form.
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ActionFormSubmissionRequest'
- responses:
- 200:
- description: Successfully handled form submission.
- 400:
- description: Something was wrong with the form data.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/FormMetadataResponse'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
diff --git a/defs/asana_oas.yaml b/defs/asana_oas.yaml
deleted file mode 100644
index 5d083e8..0000000
--- a/defs/asana_oas.yaml
+++ /dev/null
@@ -1,25884 +0,0 @@
-openapi: 3.0.0
-info:
- description: >-
- This is the interface for interacting with the [Asana
- Platform](https://developers.asana.com). Our API reference
- is generated from our [OpenAPI spec]
- (https://raw.githubusercontent.com/Asana/openapi/master/defs/asana_oas.yaml).
- x-public-description: >-
- This is the interface for interacting with the [Asana
- Platform](https://developers.asana.com). Our API reference
- is generated from our [OpenAPI spec]
- (https://raw.githubusercontent.com/Asana/openapi/master/defs/asana_oas.yaml).
- title: Asana
- termsOfService: https://asana.com/terms
- contact:
- name: Asana Support
- url: https://asana.com/support
- license:
- name: Apache 2.0
- url: https://www.apache.org/licenses/LICENSE-2.0
- version: '1.0'
- x-docs-schema-whitelist:
- - AsanaResource
- - AsanaNamedResource
- - AuditLogEvent
- - AttachmentResponse
- - AttachmentCompact
- - BatchResponse
- - CustomFieldSettingResponse
- - CustomFieldSettingCompact
- - CustomFieldResponse
- - CustomFieldCompact
- - EnumOption
- - EventResponse
- - ErrorResponse
- - GoalResponse
- - GoalCompact
- - GoalMembershipCompact
- - GoalMembershipBase
- - GoalMembershipResponse
- - GoalRelationshipResponse
- - GoalRelationshipCompact
- - JobResponse
- - JobCompact
- - OrganizationExportResponse
- - OrganizationExportCompact
- - PortfolioMembershipResponse
- - PortfolioMembershipCompact
- - PortfolioResponse
- - PortfolioCompact
- - ProjectBriefResponse
- - ProjectBriefCompact
- - ProjectMembershipResponse
- - ProjectMembershipCompact
- - ProjectResponse
- - ProjectCompact
- - ProjectStatusResponse
- - ProjectStatusCompact
- - ProjectTemplateCompact
- - ProjectTemplateResponse
- - SectionResponse
- - SectionCompact
- - StatusUpdateResponse
- - StatusUpdateCompact
- - StoryResponse
- - StoryCompact
- - TagResponse
- - TagCompact
- - TaskResponse
- - TaskCompact
- - TaskCountResponse
- - TeamMembershipResponse
- - TeamMembershipCompact
- - TeamResponse
- - TeamCompact
- - TimePeriodResponse
- - TimePeriodCompact
- - UserTaskListResponse
- - UserTaskListCompact
- - UserResponse
- - UserCompact
- - WebhookFilter
- - WebhookResponse
- - WebhookCompact
- - WorkspaceMembershipResponse
- - WorkspaceMembershipCompact
- - WorkspaceResponse
- - WorkspaceCompact
-servers:
- - url: https://app.asana.com/api/1.0
- description: Main endpoint.
-security:
- - personalAccessToken: []
- - oauth2: []
-x-readme:
- proxy-enabled: false
-tags:
- - name: Attachments
- 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.
- - name: Audit log API
- description: >-
- Asana's audit log is an immutable log of [important events](/docs/audit-log-events#supported-audit-log-events)
- in your organization's Asana instance.
-
-
- The audit log API allows you to monitor and act upon important security
- and compliance-related changes. Organizations might use this API endpoint to:
-
-
- * Set up proactive alerting with a Security Information and Event Management
- (SIEM) tool like [Splunk](https://asana.com/guide/help/api/splunk)
-
- * Conduct reactive investigations when a security incident takes place
-
- * Visualize key domain data in aggregate to identify security trends
-
-
- Note that since the API provides insight into what is happening in an Asana
- instance, the data is [read-only](/reference/getauditlogevents). That is, there
- are no "write" or "update" endpoints for audit log events.
-
-
- Only [Service Accounts](https://asana.com/guide/help/premium/service-accounts)
- in [Enterprise Domains](https://asana.com/enterprise) can access audit log API
- endpoints. Authentication with a Service Account's
- [personal access token](/docs/personal-access-token) is required.
-
-
- For a full list of
- supported events, see [supported AuditLogEvents](/docs/audit-log-events#supported-audit-log-events).
- - name: Batch API
- description: >-
- There are many cases where you want to accomplish a variety of work in
- the Asana API but want to minimize the number of HTTP requests you make.
- For example:
-
-
- * Modern browsers limit the number of requests that a single web page can
- make at once.
- * Mobile apps will use more battery life to keep the cellular radio on
- when making a series of requests.
- * There is an overhead cost to developing software that can make multiple
- requests in parallel.
- * Some cloud platforms handle parallelism poorly, or disallow it
- entirely.
-
-
- To make development easier in these use cases, Asana provides a **batch
- API** that enables developers to perform multiple “actions” by making
- only a single HTTP request.
-
-
- #### Making a batch request
-
-
- To make a batch request, send a `POST` request to `/batch`. Like other
- `POST` endpoints, the body should contain a `data` envelope. Inside this
- envelope should be a single `actions` field, containing a list of
- “action” objects. Each action represents a standard request to an
- existing endpoint in the Asana API.
-
-
- **The maximum number of actions allowed in a single batch request is 10**.
- Making a batch request with no actions in it will result in a `400 Bad
- Request`.
-
-
- When the batch API receives the list of actions to execute, it will
- dispatch those actions to the already-implemented endpoints specified by
- the `relative_path` and `method` for each action. This happens in
- parallel, so all actions in the request will be processed simultaneously.
- There is no guarantee of the execution order for these actions, nor is
- there a way to use the output of one action as the input of another
- action (such as creating a task and then commenting on it).
-
-
- The response to the batch request will contain (within the `data`
- envelope) a list of result objects, one for each action. The results are
- guaranteed to be in the same order as the actions in the request (e.g.,
- the first result in the response corresponds to the first action in the
- request)
-
-
- The batch API will always attempt to return a `200 Success` response with
- individual result objects for each individual action in the request. Only
- in certain cases (such as missing authorization or malformed JSON in the
- body) will the entire request fail with another status code. Even if
- every individual action in the request fails, the batch API will still
- return a `200 Success` response, and each result object in the response
- will contain the errors encountered with each action.
-
-
- #### Rate limiting
-
-
- The batch API fully respects all of our rate limiting. This means that a
- batch request counts against *both* the standard rate limiter and the
- concurrent request limiter as though you had made a separate HTTP request
- for every individual action. For example, a batch request with five
- actions counts as five separate requests in the standard rate limiter,
- and counts as five concurrent requests in the concurrent request limiter.
- The batch request itself incurs no cost.
-
-
- If any of the actions in a batch request would exceed any of the enforced
- limits, the *entire* request will fail with a `429 Too Many Requests`
- error. This is to prevent the unpredictability of which actions might
- succeed if not all of them could succeed.
-
-
- #### Restrictions
-
-
- Not every endpoint can be accessed through the batch API.
- Specifically, the following actions cannot be taken and will result in a
- `400 Bad Request` for that action:
-
-
- * Uploading attachments
-
- * Creating, getting, or deleting organization exports
-
- * Any SCIM operations
-
- * Nested calls to the batch API
- - name: Custom fields
- description: >-
- _Note: Custom fields are a premium feature. Integrations which work
- with custom fields need to handle an assortment of use cases for free and
- premium users in context of free and premium organizations. For a detailed
- examination of which data users will have access in different
- circumstances, review the section below on access control._
-
-
- In the Asana application, tasks, projects, and portfolios can hold
- user-specified [custom fields](https://asana.com/guide/help/premium/custom-fields)
- which provide extra information (e.g., a "priority" property with an associated
- value, or a number representing the time required to complete a task). This
- lets
- a user define the type of information that each item within a project or portfolio
- can contain in addition to the built-in fields that Asana provides.
-
- `display_value` is a read-only field that will always be a string. For apps
- that use custom fields, this is a great way to safely display/export the
- value of a custom field, regardless of its type. We suggest apps use
- this field in order to future-proof for changes to custom fields.
-
-
- #### Characteristics of custom fields
-
-
- * There is metadata that defines the custom field. This metadata can be
- shared across an entire workspace, or be specific to a project or portfolio.
-
- * Creating a custom field setting on a project or portfolio means each direct
- child will have the custom field. This is conceptually akin to adding
- columns in a database or a spreadsheet:
- every task (row) in the project (table) can contain information for that
- field, including "blank" values (i.e., `null` data). For portfolio custom
- fields, every project (row) in the portfolio (table) will contain
- information for the custom field.
-
- * Custom field settings only go one child deep. This means that a custom field
- setting on a portfolio will give each project the custom field, but not
- each task within those projects.
-
- * Tasks have custom field _values_ assigned to them.
-
-
- #### Types of custom fields
-
-
- Integrations using custom fields need to be aware of the six basic types that
- a custom field can adopt. These types are:
-
-
- * `text` - an arbitrary, relatively short string of text
-
- * `number` - a number with a defined level of precision
-
- * `enum` - a selection of a single option from a defined list of options (i.e.,
- mutually exclusive selections)
-
- * `multi_enum` - a selection of one or more options from a defined list of options
- (i.e., mutually inclusive selections)
-
- * `date` - a reference date with an optional time value
-
- * `people` - a list of active contributors (i.e., where their relationship to
- the work is defined in the custom field title)
-
-
- #### Example use case
-
-
- Consider an organization that has defined a custom field for "Priority".
- This field is of `enum` type and can have user-defined values of
- `Low`, `Medium`, or `High`. This is the field metadata, and it is
- visible within, and shared across, the entire organization.
-
-
- A project is then created in the organization, called "Bugs", and the
- "Priority" custom field is associated with that project. This will allow
- all tasks within the "Bugs" project to have an associated "Priority".
-
-
- A new task is created within "Bugs". This task, then, has a field named
- "Priority" which can take on the custom field value of one of `[null]`,
- `Low`, `Medium`, and `High`.
-
-
- #### Custom fields in the API
-
-
- These custom fields are accessible via the API through a number of
- endpoints at the top level (e.g. `/custom_fields` and
- `/custom_field_settings`) and through requests on workspaces, portfolios,
- projects, and tasks resources. The API also provides a way to fetch both the
- metadata and data which define each particular custom field, so that a client
- application may render proper UI to display or edit the values.
-
-
- Text fields are currently limited to 1024 characters. On tasks, their
- custom field value will have a `text_value` property to represent this
- field.
-
-
- Number fields can have an arbitrary `precision` associated with them; for
- example, a precision of `2` would round its value to the second
- (hundredths) place (e.g., `1.2345` would round to `1.23`). On tasks, the custom
- field value will have a `number_value` property to represent this field.
-
-
- #### Enum fields
-
-
- Enum fields represent a selection from a list of options. On the metadata,
- they will contain all of the options in an array. Each option has 4
- properties:
-
-
- * `gid` - the GID of this enum option. Note that this is the GID of the individual
- _option_. The custom field itself has a separate `gid`.
-
- * `name` - the name of the option (e.g., "Choice #1")
-
- * `enabled` - whether this field is enabled. Disabled fields are not
- available to choose from when disabled, and are visually hidden in the
- Asana application, but they remain in the metadata for custom field values
- which were set to the option before the option was disabled.
-
- * `color` - a color associated with this choice.
-
-
- On the task's custom field value, the enum will have an `enum_value`
- property which will be the same as one of the choices from the list
- defined in the custom field metadata.
-
-
- #### Querying an organization for its custom fields
-
-
- For custom fields shared across the workspace or organization, the
- workspace [can be queried](/reference/getcustomfieldsforworkspace)
- for its list of defined custom fields. Like other collection queries, the
- fields will be returned as a compact record; slightly different from most
- other compact records is the fact that the compact record for custom fields
- includes `type` as well as `gid` and `name`.
-
-
- #### Accessing custom field definitions
-
-
- The [custom fields](/reference/getcustomfield) reference
- describes how the metadata which defines a custom field is accessed. A
- GET request with a `gid` can be issued on the `/custom_fields` endpoint
- to fetch the full definition of a single custom field given its `gid`
- from (for instance) listing all custom fields on a workspace, or getting
- the `gid` from a custom field settings object or a task.
-
-
- #### Associating custom fields with a project or portfolio
-
-
- A mapping between a custom field and a project or portfolio is handled with
- a
- [custom field settings](/reference/custom-field-settings) object. This object
- contains a reference for each
- of the custom fields and the project or portfolio, as well as additional information
- about the status of that particular custom field (e.g., `is_important`, which
- defines
- whether or not the custom field will appear in the list/grid on the Asana application).
-
-
- #### Accessing custom field values on tasks or projects
-
-
- The [tasks](/reference/gettask) reference has information on how custom fields
- look on tasks. custom fields will return as an array on the
- property `custom_fields`, and each entry will contain, side-by-side, the
- compact representation of the custom field metadata and a
- `{typename}_value` property that stores the value set for the
- custom field.
-
-
- Of particular note is that the top-level `gid` of each entry in the
- `custom_fields` array is the `gid` of the custom field metadata, as it is
- the compact representation of this metadata. This can be used to refer to
- the full metadata by making a request to the
- `/custom_fields/{custom_fields_id}` endpoint as described above.
-
-
- Custom fields can be set just as in the Asana-defined fields on a task via
- `POST` or `PUT` requests. You can see an example in the
- [update a task](/reference/updatetask) endpoint.
-
-
- Custom fields on projects follow this same pattern.
-
-
- #### Warning: Program defensively with regards to custom field definitions
-
-
- Asana application users have the ability to change the definitions of
- custom field metadata. This means that as you write scripts or
- applications to work with them, it is possible for the definitions to
- change at any time, which may cause an application using them to break or
- malfunction if it makes assumptions about the metadata for a particular
- custom field. When using custom fields, it is a good idea to program
- *defensively*, meaning you your application should double-check that
- the custom field metadata are what it expects.
-
-
- Storing the state of the custom field metadata for too long if you
- dynamically create a model for it can cause your model to become
- out of sync with the model stored in Asana. For example, if you encounter
- an `enum` value on a task that does not match any option
- in your metadata model, your metadata model has become out of date with
- the custom field metadata.
-
-
- #### Enabled and disabled values
-
-
- When information that is contained in a custom field value loses a
- logical association with its metadata definition, the value becomes
- disabled. This can happen in a couple of simple ways, for example, if
- you remove the custom field metadata from a project, or move a task with
- a custom field to a different project which does not have the custom
- field metadata associated with it. The value remains on the task, and
- the custom field metadata can still be found and examined, but as the
- context in which the custom field makes sense is gone, the custom field
- cannot change its value; it can only be cleared.
-
-
- _Note: Tasks that are associated with multiple projects do not become
- disabled, so long as at least one of the projects is still associated
- with the custom field metadata. In other words, tasks with multiple
- projects will retain logically associated to the set of custom field
- metadata represented by all of their projects._
-
-
- Moving the task back under a project with that custom field applied to it
- or applying the custom field metadata to the current project will return
- the custom field value to an enabled state. In this scenario, the custom
- field will be re-enabled and editable again.
-
-
- In the Asana application, disabled fields are grayed out and not allowed
- to change, other than to be discarded. In the API, we return a property
- `enabled: false` to inform the external application that the value has
- been disabled.
-
-
- Note that the API enforces the same operations on disabled custom field
- values as hold in the Asana application: they may not have their values
- changed, since the lack of context for the values of a custom field in
- general doesn't provide enough information to know what new values should
- be. Setting the custom field value to `null` will clear and remove the
- custom field value from the task.
-
-
- #### Custom field access control
-
-
- Custom fields are a complex feature of the Asana platform, and their
- access in the Asana application and in the API vary based on the status
- of the user and project. When building your application, it is best to be
- defensive and not assume the given user will have read or write access
- to a custom field, and fail gracefully when this occurs.
- - name: Custom field settings
- description: >-
- Custom fields are attached to a particular project with the custom
- field settings resource. This resource both represents the
- many-to-many join of the custom field and project as well as stores
- information that is relevant to that particular pairing. For instance,
- the `is_important` property determines some possible
- application-specific handling of that custom field.
- - name: Events
- description: >-
- An event is an object representing a change to a resource that was
- observed by an event subscription. Event streams rely on the same infrastructure
- as webhooks, which ensures events are delivered within a minute (on average).
- This
- system is designed for at most once delivery, meaning in exceptional circumstances
- a small number of events may be missing from the stream. For this reason, if
- your use
- case requires strong guarantees about processing all changes on a resource and
- cannot
- tolerate any missing events, regardless of how rare that might be, we recommend
- building
- a fallback polling system that fetches the resource periodically as well. Note
- that while
- webhooks cannot be replayed once delivered, events are retrievable from the
- event stream
- for 24 hours after being processed.
-
-
- In general, requesting events on a resource is faster and subject to
- higher rate limits than requesting the resource itself. Additionally,
- change events "bubble up" (e.g., listening to events on a project would include
- when stories are added to tasks in the project, and even to subtasks).
-
-
- Establish an initial sync token by making a request with no sync token.
- The response will be a `412 Precondition Failed` error - the same as if
- the sync token had expired.
-
-
- Subsequent requests should always provide the sync token from the
- immediately preceding call.
-
-
- Sync tokens may not be valid if you attempt to go "backward" in the
- history by requesting previous tokens, though re-requesting the current
- sync token is generally safe, and will always return the same results.
-
-
- When you receive a `412 Precondition Failed` error, it means that the
- sync token is either invalid or expired. If you are attempting to keep a
- set of data in sync, this signals you may need to re-crawl the data.
-
-
- Sync tokens always expire after 24 hours, but may expire sooner,
- depending on load on the service.
- - name: Goals
- description: >-
- A goal is an object in the goal-tracking system that helps your organization
- drive measurable results.
- - name: Goal relationships
- description: >-
- A goal relationship is an object representing the relationship between a goal
- and another goal, a project, or a portfolio.
- - name: Jobs
- description: >-
- Jobs represent processes that handle asynchronous work. A job created when an
- endpoint requests an action
- that will be handled asynchronously, such as project or task duplication.
-
-
- Only the creator of the duplication process can access the duplication
- status of the new object.
-
-
- *Note*: With any work that is handled asynchronously
- (e.g., [project instantation from a template](/reference/instantiateproject),
- duplicating a [task](/reference/duplicatetask) or [project](/reference/duplicateproject),
- etc.),
- the *intermittent states* of newly-created objects may not be consistent. That
- is, object properties may
- return different values each time when polled until the job `status` has returned
- a `succeeded` value.
- - name: Organization exports
- description: >-
- An `organization_export` object represents a request to export the
- complete data of an organization in JSON format.
-
-
- To export an organization using this API:
-
-
- * Create an `organization_export`
- [request](/reference/createorganizationexport)
- and store the ID that is returned.
- * Request the `organization_export` every few minutes, until the
- `state` field contains ‘finished’.
- * Download the file located at the URL in the `download_url` field.
- * Exports can take a long time, from several minutes to a few hours
- for large organizations.
-
-
- *Note: These endpoints are only available to [Service
- Accounts](https://asana.com/guide/help/premium/service-accounts) of an
- [Enterprise](https://asana.com/enterprise) organization.*
- - name: Portfolios
- description: >-
- A portfolio gives a high-level overview of the status of multiple
- initiatives in Asana. Portfolios provide a dashboard overview of the
- state of multiple projects, including a progress report and the most
- recent [status update](/reference/status-updates).
-
- Portfolios have some restrictions on size. Each portfolio has a max of 500
- items and, like projects, a maximum of 20 custom fields.
- - name: Portfolio memberships
- description: >-
- This object determines if a user is a member of a portfolio.
- - name: Projects
- description: >-
- A project represents a prioritized list of tasks in Asana or a board
- with columns of tasks represented as cards. A project exists in a single
- workspace or organization and is accessible to a subset of users in that
- workspace or organization, depending on its permissions.
-
-
- Projects in organizations are shared with a single team. Currently, the team
- of a project cannot be changed via the API. Non-organization
- workspaces do not have teams and so you should not specify the team of
- project in a regular workspace.
-
-
- Followers of a project are a subset of the members of that project.
- Followers of a project will receive all updates including tasks
- created, added and removed from that project. Members of the project
- have access to and will receive status updates of the project. Adding
- followers to a project will add them as members if they are not
- already, removing followers from a project will not affect membership.
-
-
- **Note:** You can use certain project endpoints to operate on
- [user task lists](/reference/user-task-lists) ([My Tasks](https://asana.com/guide/help/fundamentals/my-tasks))
- by substituting the `{project_gid}` with the `{user_task_list_gid}`. For example,
- you can perform
- operations on the custom fields of a user task list by using the following
- projects endpoints: [Add a custom field to a project](/reference/addcustomfieldsettingforproject),
- [Remove a custom field from a project](/reference/removecustomfieldsettingforproject)
- and
- [Get a project's custom fields](/reference/getcustomfieldsettingsforproject)
- - name: Project briefs
- description: >-
- A project brief object represents a rich text document that describes
- a project.
-
-
- Please note that this API is in *preview*, and is expected to change.
- This API is to be used for development and testing only as an advance
- view into the upcoming rich text format experience in the task description.
- For more information, see [this post](https://forum.asana.com/t/project-brief-api-now-available-as-a-preview/150885)
- in the developer forum.
- - name: Project memberships
- description: >-
- With the introduction of “comment-only” projects in Asana, a user’s
- membership in a project comes with associated permissions. These
- permissions (i.e., whether a user has full access to the project or
- comment-only access) are accessible through the project memberships
- endpoints described here.
- - name: Project statuses
- description: |-
- *Deprecated: new integrations should prefer using [status updates](/reference/status-updates)*
-
- A project status is an update on the progress of a particular project,
- and is sent out to all project followers when created. These updates
- include both text describing the update and a color code intended to
- represent the overall state of the project: "green" for projects that
- are on track, "yellow" for projects at risk, "red" for projects that
- are behind, and "blue" for projects on hold.
-
- Project statuses can be created and deleted, but not modified.
- - name: Project templates
- description: |-
- A project template is an object that allows new projects to be created
- with a predefined setup, which may include tasks, sections, rules, etc.
- It simplifies the process of running a workflow that involves a similar
- set of work every time.
-
-
- Project templates in organizations are shared with a single team. Currently, the
- team of a project template cannot be changed via the API.
- - name: Sections
- description: >-
- A section is a subdivision of a project that groups tasks together.
- It can either be a header above a list of tasks in a list view or a
- column in a board view of a project.
-
-
- Sections are largely a shared idiom in Asana’s API for both list and
- board views of a project regardless of the project’s layout.
-
-
- The ‘memberships’ property when [getting a task](/reference/gettask)
- will return the information for the section or the column under
- ‘section’ in the response.
- - name: Status updates
- description: |-
- A status update is an update on the progress of a particular object,
- and is sent out to all followers when created. These updates
- include both text describing the update and a `status_type` intended to
- represent the overall state of the project. These include: `on_track` for projects that
- are on track, `at_risk` for projects at risk, `off_track` for projects that
- are behind, and `on_hold` for projects on hold.
-
- Status updates can be created and deleted, but not modified.
- - name: Stories
- description: >-
- *See [our forum post](https://forum.asana.com/t/no-more-parsing-story-text-new-fields-on-stories/42924)
- for more info on when conditional fields are returned.*
-
-
- A story represents an activity associated with an object in the
- Asana system. Stories are generated by the system whenever users take
- actions such as creating or assigning tasks, or moving tasks between
- projects. "Comments" are also a form of user-generated story.
- - name: Tags
- description: >-
- A tag is a label that can be attached to any task in Asana. It exists in
- a single workspace or organization.
-
-
- Tags have some metadata associated with them, but it is possible that
- we will simplify them in the future so it is not encouraged to rely
- too heavily on it. Unlike projects, tags do not provide any ordering
- on the tasks they are associated with.
- - name: Tasks
- description: >-
- The task is the basic object around which many operations in Asana are
- centered. In the Asana application, multiple tasks populate the
- middle pane according to some view parameters, and the set of selected
- tasks determines the more detailed information presented in the
- details pane.
-
-
- Sections are unique in that they will be included in the `memberships`
- field of task objects returned in the API when the task is within a
- section. They can also be used to manipulate the ordering of a task
- within a project.
-
-
- [Queries](/reference/gettasks)
- return a [compact representation of each task object](/reference/tasks). To
- retrieve *all* fields or *specific set* of the fields, use
- [field selectors](/docs/inputoutput-options) to manipulate what data is included
- in a response.
- - name: Teams
- description: >-
- A team is used to group related projects and people together within an
- organization. Each project in an organization is associated with a team.
- - name: Team memberships
- description: >-
- This object determines if a user is a member of a team.
- - name: Time periods
- description: >-
- A time period is an object that represents a domain-scoped date range that can
- be set on [goals](/reference/goals).
- - name: Typeahead
- description: >-
- The typeahead search API provides search for objects from a single
- workspace.
- - name: Users
- description: >-
- A user object represents an account in Asana that can be given access to
- various workspaces, projects, and tasks.
-
-
- Like other objects in the system, users are referred to by numerical
- IDs. However, the special string identifier `me` can be used anywhere
- a user ID is accepted, to refer to the current authenticated user
- (e.g, `GET /users/me`).
- - name: User task lists
- description: >-
- A user task list represents the tasks assigned to a particular user.
- This list is the user's [My Tasks](https://asana.com/guide/help/fundamentals/my-tasks)
- list.
- - name: Webhooks
- description: >-
- Webhooks allow you to subscribe to notifications about events that occur on
- Asana resources (e.g., tasks, projects, stories, etc.).
-
-
- For a more detailed explanation of webhooks see the [overview of webhooks](/docs/webhooks-guide).
- - name: Workspaces
- description: >-
- A *workspace* is the highest-level organizational unit in Asana. All
- projects and tasks have an associated workspace.
-
-
- An *organization* is a special kind of workspace that represents a
- company. In an organization, you can group your projects into teams.
- You can read more about how organizations work on the Asana Guide. To
- tell if your workspace is an organization or not, check its
- `is_organization` property.
-
-
- Over time, we intend to migrate most workspaces into organizations and
- to release more organization-specific functionality. We may eventually
- deprecate using workspace-based APIs for organizations. Currently, and
- until after some reasonable grace period following any further
- announcements, you can still reference organizations in any
- `workspace` parameter.
- - name: Workspace memberships
- description: >-
- This object determines if a user is a member of a workspace.
-components:
- parameters:
- fields:
- name: opt_fields
- in: query
- description: >-
- Defines fields to return.
-
- Some requests return *compact* representations of objects in order to
- conserve resources and complete the request more efficiently. Other times
- requests return more information than you may need. This option allows
- you to list the exact set of fields that the API should be sure to
- return for the objects. The field names should be provided as paths,
- described below.
-
- The id of included objects will always be returned, regardless of the
- field options.
- example:
- - followers
- - assignee
- required: false
- schema:
- type: array
- items:
- type: string
- style: form
- explode: false
- pretty:
- name: opt_pretty
- in: query
- description: >-
- Provides “pretty” output.
-
- Provides the response in a “pretty” format. In the case of JSON this
- means doing proper line breaking and indentation to make it readable.
- This will take extra time and increase the response size so it is
- advisable only to use this during debugging.
- required: false
- allowEmptyValue: true
- schema:
- type: boolean
- style: form
- example: true
- limit:
- name: limit
- in: query
- description: >-
- Results per page.
-
- The number of objects to return per page. The value must be between 1
- and 100.
- example: 50
- schema:
- type: integer
- offset:
- name: offset
- in: query
- description: >-
- Offset token.
-
- An offset to the next page returned by the API. A pagination request
- will return an offset token, which can be used as an input parameter to
- the next request. If an offset is not passed in, the API will return
- the first page of results.
-
- 'Note: You can only pass in an offset that was returned to you via a
- previously paginated request.'
- example: eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9
- schema:
- type: string
- archived_query_param:
- name: archived
- in: query
- description: >-
- Only return projects whose `archived` field takes on the value of
- this parameter.
- schema:
- type: boolean
- example: false
- attachment_path_gid:
- name: attachment_gid
- in: path
- description: >-
- Globally unique identifier for the attachment.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: attachment
- custom_field_path_gid:
- name: custom_field_gid
- in: path
- description: >-
- Globally unique identifier for the custom field.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: custom_field
- goal_path_gid:
- name: goal_gid
- in: path
- description: >-
- Globally unique identifier for the goal.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: goal
- goal_relationship_path_gid:
- name: goal_relationship_gid
- in: path
- description: >-
- Globally unique identifier for the goal relationship.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: goal_relationship
- job_path_gid:
- name: job_gid
- in: path
- description: >-
- Globally unique identifier for the job.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: job
- membership_path_gid:
- name: membership_gid
- in: path
- description: >-
- Globally unique identifier for the membership.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: membership
- organization_export_path_gid:
- name: organization_export_gid
- in: path
- description: >-
- Globally unique identifier for the organization export.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: organization_export
- project_brief_path_gid:
- name: project_brief_gid
- in: path
- description: >-
- Globally unique identifier for the project brief.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: project_brief
- project_path_gid:
- name: project_gid
- in: path
- description: >-
- Globally unique identifier for the project.
- required: true
- schema:
- type: string
- example: '1331'
- x-env-variable: project
- project_template_path_gid:
- name: project_template_gid
- in: path
- description: >-
- Globally unique identifier for the project template.
- required: true
- schema:
- type: string
- example: '1331'
- x-env-variable: project_template
- project_membership_path_gid:
- name: project_membership_gid
- in: path
- required: true
- schema:
- type: string
- example: '1331'
- x-env-variable: project_membership
- project_status_path_gid:
- name: project_status_gid
- in: path
- required: true
- description: The project status update to get.
- schema:
- type: string
- example: '321654'
- x-env-variable: project_status
- status_path_gid:
- name: status_gid
- in: path
- required: true
- description: The status update to get.
- schema:
- type: string
- example: '321654'
- x-env-variable: status
- portfolio_path_gid:
- name: portfolio_gid
- in: path
- description: >-
- Globally unique identifier for the portfolio.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: portfolio
- portfolio_membership_path_gid:
- name: portfolio_membership_gid
- in: path
- required: true
- schema:
- type: string
- example: '1331'
- x-env-variable: portfolio_membership
- portfolio_query_param:
- name: portfolio
- in: query
- description: The portfolio to filter results on.
- schema:
- type: string
- example: '12345'
- x-env-variable: portfolio
- section_path_gid:
- name: section_gid
- in: path
- required: true
- description: The globally unique identifier for the section.
- schema:
- type: string
- example: '321654'
- x-env-variable: section
- story_path_gid:
- name: story_gid
- in: path
- description: Globally unique identifier for the story.
- required: true
- schema:
- type: string
- example: '35678'
- x-env-variable: story
- tag_path_gid:
- name: tag_gid
- in: path
- description: Globally unique identifier for the tag.
- required: true
- schema:
- type: string
- example: '11235'
- x-env-variable: tag
- task_path_gid:
- name: task_gid
- in: path
- required: true
- description: The task to operate on.
- schema:
- type: string
- example: '321654'
- x-env-variable: task
- team_path_gid:
- name: team_gid
- in: path
- description: Globally unique identifier for the team.
- required: true
- schema:
- type: string
- example: '159874'
- x-env-variable: team
- team_query_param:
- name: team
- in: query
- description: The team to filter projects on.
- schema:
- type: string
- example: '14916'
- x-env-variable: team
- team_membership_path_gid:
- name: team_membership_gid
- in: path
- required: true
- schema:
- type: string
- example: '724362'
- x-env-variable: team_membership
- time_period_path_gid:
- name: time_period_gid
- in: path
- description: >-
- Globally unique identifier for the time period.
- required: true
- schema:
- type: string
- example: '917392'
- x-env-variable: time_period
- time_tracking_entry_path_gid:
- name: time_tracking_entry_gid
- in: path
- description: >-
- Globally unique identifier for the time tracking entry.
- required: true
- schema:
- type: string
- example: '917392'
- x-env-variable: time_tracking_entry
- user_query_param:
- name: user
- in: query
- description: >-
- A string identifying a user. This can either be the string "me", an email,
- or the gid of a user.
- schema:
- type: string
- x-env-variable: user
- example: me
- user_path_gid:
- name: user_gid
- in: path
- description: >-
- A string identifying a user. This can either be the string "me", an email,
- or the gid of a user.
- required: true
- schema:
- type: string
- x-env-variable: user
- example: me
- user_task_list_path_gid:
- name: user_task_list_gid
- in: path
- description: >-
- Globally unique identifier for the user task list.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: user_task_list
- webhook_path_gid:
- name: webhook_gid
- in: path
- description: >-
- Globally unique identifier for the webhook.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: webhook
- workspace_path_gid:
- name: workspace_gid
- in: path
- description: >-
- Globally unique identifier for the workspace or organization.
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: workspace
- workspace_query_param:
- name: workspace
- in: query
- description: The workspace to filter results on.
- schema:
- type: string
- example: '12345'
- x-env-variable: workspace
- workspace_membership_path_gid:
- name: workspace_membership_gid
- in: path
- required: true
- schema:
- type: string
- example: '12345'
- x-env-variable: workspace_membership
- audit_log_start_at:
- name: start_at
- in: query
- description: Filter to events created after this time (inclusive).
- required: false
- schema:
- type: string
- format: date-time
- audit_log_end_at:
- name: end_at
- in: query
- description: Filter to events created before this time (exclusive).
- required: false
- schema:
- type: string
- format: date-time
- audit_log_event_type:
- name: event_type
- in: query
- description: >-
- Filter to events of this type.
-
- Refer to the [supported audit log events](/docs/audit-log-events#supported-audit-log-events)
- for a full list of values.
- required: false
- schema:
- type: string
- audit_log_actor_type:
- name: actor_type
- in: query
- description: >-
- Filter to events with an actor of this type.
-
- This only needs to be included if querying for actor types without an ID.
- If `actor_gid` is included, this should be excluded.
- required: false
- schema:
- type: string
- enum:
- - user
- - asana
- - asana_support
- - anonymous
- - external_administrator
- audit_log_actor_gid:
- name: actor_gid
- in: query
- description: >-
- Filter to events triggered by the actor with this ID.
- required: false
- schema:
- type: string
- audit_log_resource_gid:
- name: resource_gid
- in: query
- description: Filter to events with this resource ID.
- required: false
- schema:
- type: string
- completed_since:
- name: completed_since
- in: query
- required: false
- description: >
- Only return tasks that are either incomplete or that have
- been completed since this time. Accepts a date-time string or
- the keyword *now*.
- schema:
- type: string
- example: '2012-02-22T02:06:58.158Z'
- member:
- name: member
- in: query
- required: false
- description: >
- Member object gid can be user or team.
- schema:
- type: string
- example: '123'
- message_path_gid:
- name: message_gid
- in: path
- required: true
- description: The message to get.
- schema:
- type: string
- example: '321654'
- x-env-variable: message
- responses:
- GenericErrorResponse:
- description: >-
- Sadly, sometimes requests to the API are not successful. Failures can
- occur for a wide range of reasons. In all cases, the API should return
- an HTTP Status Code that indicates the nature of the failure,
- with a response body in JSON format containing additional information.
- In the event of a server error the response body will contain an error
- phrase. These phrases are automatically generated using the
- [node-asana-phrase
- library](https://github.com/Asana/node-asana-phrase) and can be used by
- Asana support to quickly look up the incident that caused the server
- error.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- BadRequest:
- description: >-
- This usually occurs because of a missing or malformed parameter. Check
- the documentation and the syntax of your request and try again.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- Unauthorized:
- description: >-
- A valid authentication token was not provided with the request, so the
- API could not associate a user with the request.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- PaymentRequired:
- description: >-
- The request was valid, but the queried object or object mutation
- specified in the request is above your current premium level.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- Forbidden:
- description: >-
- 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.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- NotFound:
- description: >-
- 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.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- TooManyRequests:
- description: >-
- You have exceeded one of the enforced rate limits in the API. See the
- [documentation on rate
- limiting](https://developers.asana.com/docs/#rate-limits)
- for more information.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- InternalServerError:
- description: >-
- 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.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- BadGateway:
- description: >-
- There is an issue between the load balancers and Asana's API.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- ServiceUnavailable:
- description: >-
- Either the upstream service is unavailable to the API, or the API has been
- intentionally shut off.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- GatewayTimeout:
- description: >-
- This request took too long to complete.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ErrorResponse'
- schemas:
- AddCustomFieldSettingRequest:
- type: object
- required:
- - custom_field
- properties:
- custom_field:
- description: The custom field to associate with this container.
- type: string
- example: '14916'
- is_important:
- description: >-
- Whether this field should be considered important to this container
- (for instance, to display in the list view of items in the container).
- type: boolean
- example: true
- insert_before:
- 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.
- type: string
- example: '1331'
- insert_after:
- 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.
- type: string
- example: '1331'
- AddFollowersRequest:
- type: object
- required:
- - followers
- properties:
- followers:
- description: >-
- An array of strings identifying users. These can either be the string
- "me", an email, or the gid of a user.
- type: string
- example: 521621,621373
- AddMembersRequest:
- type: object
- required:
- - members
- properties:
- members:
- description: >-
- An array of strings identifying users. These can either be the string
- "me", an email, or the gid of a user.
- type: string
- example: 521621,621373
- AsanaNamedResource:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- properties:
- name:
- description: The name of the object.
- type: string
- example: Bug Task
- AsanaResource:
- description: >-
- A generic Asana Resource, containing a globally unique identifier.
- type: object
- properties:
- gid:
- description: >-
- Globally unique identifier of the resource, as a string.
- type: string
- readOnly: true
- example: '12345'
- x-insert-after: false
- resource_type:
- description: The base type of this resource.
- type: string
- readOnly: true
- example: task
- x-insert-after: gid
- AttachmentBase:
- $ref: '#/components/schemas/AttachmentCompact'
- AttachmentCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- 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
- properties:
- name:
- description: The name of the file.
- type: string
- readOnly: true
- example: Screenshot.png
- resource_subtype:
- description: >-
- The service hosting the attachment. Valid values are `asana`,
- `dropbox`, `gdrive`, `onedrive`, `box`, `vimeo`, and `external`.
- type: string
- example: dropbox
- AttachmentRequest:
- type: object
- properties:
- resource_subtype:
- 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.
- type: string
- example: external
- enum:
- - asana
- - dropbox
- - gdrive
- - onedrive
- - box
- - vimeo
- - external
- file:
- description: >
- Required for `asana` attachments.
- type: string
- format: binary
- parent:
- description: >
- Required identifier of the parent task, project, or project_brief, as
- a string.
- type: string
- url:
- description: >
- The URL of the external resource being attached. Required for
- attachments of type `external`.
- type: string
- name:
- description: >
- The name of the external resource being attached. Required for
- attachments of type `external`.
- type: string
- connect_to_app:
- 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.
- type: boolean
- AttachmentResponse:
- allOf:
- - $ref: '#/components/schemas/AttachmentBase'
- - type: object
- properties:
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- download_url:
- description: >-
- The URL containing the content of the attachment.
-
- *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.
- type: string
- format: uri
- readOnly: true
- nullable: true
- example: https://s3.amazonaws.com/assets/123/Screenshot.png
- permanent_url:
- description: >
- type: string
- format: uri
- readOnly: true
- nullable: true
- example: https://s3.amazonaws.com/assets/123/Screenshot.png
- host:
- description: >-
- The service hosting the attachment. Valid values are `asana`,
- `dropbox`, `gdrive`, `box`, and `vimeo`.
- type: string
- readOnly: true
- example: dropbox
- parent:
- allOf:
- - $ref: '#/components/schemas/TaskCompact'
- - type: object
- description: The task this attachment is attached to.
- readOnly: true
- properties:
- resource_subtype:
- description: >-
- The resource subtype of the parent resource that the filter
- applies to.
- type: string
- example: default_task
- nullable: true
- size:
- description: >-
- The size of the attachment in bytes. Only present when the `resource_subtype`
- is `asana`.
- type: integer
- readOnly: true
- example: 12345
- view_url:
- 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.
- type: string
- format: uri
- readOnly: true
- nullable: true
- example: https://www.dropbox.com/s/123/Screenshot.png
- connected_to_app:
- 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`.
- type: boolean
- readOnly: true
- AuditLogEvent:
- description: >-
- An object representing a single event within an Asana domain.
-
-
- Every 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.
- type: object
- properties:
- gid:
- description: >-
- Globally unique identifier of the `AuditLogEvent`, as a string.
- type: string
- example: '12345'
- x-insert-after: false
- created_at:
- description: The time the event was created.
- type: string
- format: date-time
- example: '2021-01-01T00:00:00.000Z'
- event_type:
- description: The type of the event.
- type: string
- example: task_deleted
- event_category:
- description: The category that this `event_type` belongs to.
- type: string
- example: deletion
- actor:
- allOf:
- - $ref: '#/components/schemas/AuditLogEventActor'
- resource:
- allOf:
- - $ref: '#/components/schemas/AuditLogEventResource'
- details:
- allOf:
- - $ref: '#/components/schemas/AuditLogEventDetails'
- context:
- allOf:
- - $ref: '#/components/schemas/AuditLogEventContext'
- AuditLogEventActor:
- description: >-
- The entity that triggered the event. Will typically be a user.
- type: object
- properties:
- actor_type:
- description: >-
- The type of actor.
-
- Can be one of `user`, `asana`, `asana_support`, `anonymous`, or `external_administrator`.
- type: string
- enum:
- - user
- - asana
- - asana_support
- - anonymous
- - external_administrator
- example: user
- gid:
- description: >-
- Globally unique identifier of the actor, if it is a user.
- type: string
- example: '1111'
- name:
- description: The name of the actor, if it is a user.
- type: string
- example: Greg Sanchez
- email:
- description: The email of the actor, if it is a user.
- type: string
- example: gregsanchez@example.com
- AuditLogEventContext:
- description: The context from which this event originated.
- type: object
- properties:
- context_type:
- description: >-
- The type of context.
-
- Can be one of `web`, `desktop`, `mobile`, `asana_support`, `asana`, `email`,
- or `api`.
- type: string
- enum:
- - web
- - desktop
- - mobile
- - asana_support
- - asana
- - email
- - api
- example: web
- api_authentication_method:
- description: >-
- The authentication method used in the context of an API request.
-
- Only present if the `context_type` is `api`. Can be one of `cookie`, `oauth`,
- `personal_access_token`, or `service_account`.
- type: string
- enum:
- - cookie
- - oauth
- - personal_access_token
- - service_account
- client_ip_address:
- description: The IP address of the client that initiated the event, if applicable.
- type: string
- example: 1.1.1.1
- user_agent:
- description: The user agent of the client that initiated the event, if applicable.
- type: string
- example: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
- Gecko) Chrome/51.0.2704.103 Safari/537.36
- oauth_app_name:
- description: >-
- The name of the OAuth App that initiated the event.
-
- Only present if the `api_authentication_method` is `oauth`.
- type: string
- AuditLogEventDetails:
- description: Event specific details. The schema will vary depending on the `event_type`.
- type: object
- AuditLogEventResource:
- description: The primary object that was affected by this event.
- type: object
- properties:
- resource_type:
- description: The type of resource.
- type: string
- example: task
- resource_subtype:
- description: The subtype of resource. Most resources will not have a subtype.
- type: string
- example: milestone
- gid:
- description: Globally unique identifier of the resource.
- type: string
- example: '1111'
- name:
- description: The name of the resource.
- type: string
- example: Example Task
- email:
- description: The email of the resource, if applicable.
- type: string
- BatchRequest:
- description: A request object for use in a batch request.
- type: object
- properties:
- actions:
- type: array
- items:
- $ref: '#/components/schemas/BatchRequestAction'
- BatchRequestAction:
- description: An action object for use in a batch request.
- type: object
- properties:
- relative_path:
- 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.
- type: string
- example: /tasks/123
- method:
- description: The HTTP method you wish to emulate for the action.
- type: string
- enum:
- - get
- - post
- - put
- - delete
- - patch
- - head
- example: get
- data:
- 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.
- type: object
- example:
- assignee: me
- workspace: '1337'
- options:
- 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.
- type: object
- properties:
- limit:
- description: Pagination limit for the request.
- type: integer
- example: 50
- offset:
- description: Pagination offset for the request.
- type: integer
- example: eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9
- fields:
- description: The fields to retrieve in the request.
- type: array
- items:
- type: string
- example:
- - name
- - gid
- - notes
- - completed
- example:
- limit: 3
- fields:
- - name
- - notes
- - completed
- required:
- - relative_path
- - method
- BatchResponse:
- description: A response object returned from a batch request.
- type: object
- properties:
- status_code:
- description: The HTTP status code that the invoked endpoint returned.
- type: integer
- example: 200
- headers:
- 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.
- type: object
- example:
- location: /tasks/1234
- body:
- description: The JSON body that the invoked endpoint returned.
- type: object
- example:
- data:
- gid: '1967'
- completed: false
- name: Hello, world!
- notes: How are you today?
- CustomFieldBase:
- allOf:
- - $ref: '#/components/schemas/CustomFieldCompact'
- - type: object
- properties:
- description:
- description: >-
- [Opt
- In](/docs/inputoutput-options).
- The description of the custom field.
- type: string
- example: Development team priority
- enum_options:
- 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](/reference/createenumoptionforcustomfield).
- type: array
- items:
- $ref: '#/components/schemas/EnumOption'
- precision:
- 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.
-
- For 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%.
-
- The identifier format will always have a precision of 0.
- type: integer
- example: 2
- format:
- description: >-
- The format of this custom field.
- type: string
- enum:
- - currency
- - identifier
- - percentage
- - custom
- - none
- example: custom
- currency_code:
- description: >-
- ISO 4217 currency code to format this custom field. This will be
- null if the `format` is not `currency`.
- type: string
- nullable: true
- example: EUR
- custom_label:
- description: >-
- This is the string that appears next to the custom field value.
- This will be null if the `format` is not `custom`.
- type: string
- nullable: true
- example: gold pieces
- custom_label_position:
- 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`.
- type: string
- enum:
- - prefix
- - suffix
- example: suffix
- is_global_to_workspace:
- 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.
- type: boolean
- example: true
- readOnly: true
- has_notifications_enabled:
- description: >-
- *Conditional*. This flag describes whether a follower of a task
- with this field should receive inbox notifications from changes
- to this field.
- type: boolean
- example: true
- asana_created_field:
- description: >-
- *Conditional*. A unique identifier to associate this field with the
- template source of truth.
- type: string
- readOnly: true
- nullable: true
- 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
- example: priority
- CustomFieldCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- 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](/reference/custom-fields)
- developer documentation for more information about how custom fields
- relate to various resources in Asana.
-
-
- Users 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
- properties:
- name:
- description: The name of the custom field.
- type: string
- example: Status
- resource_subtype:
- description: >
- The type of the custom field. Must be one of the given values.
- type: string
- example: text
- enum:
- - text
- - enum
- - multi_enum
- - number
- - date
- - people
- type:
- description: >
- *Deprecated: new integrations should prefer the resource_subtype
- field.* The type of the custom field. Must be one of the given
- values.
- type: string
- readOnly: true
- enum:
- - text
- - enum
- - multi_enum
- - number
- enum_options:
- 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](/reference/createenumoptionforcustomfield).
- type: array
- items:
- $ref: '#/components/schemas/EnumOption'
- enabled:
- description: >-
- *Conditional*. Determines if the custom field is enabled or not.
- type: boolean
- example: true
- date_value:
- 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`.
- type: object
- properties:
- date:
- type: string
- description: >-
- A string representing the date in YYYY-MM-DD format.
- example: '2024-08-23'
- date_time:
- type: string
- description: >-
- A string representing the date in ISO 8601 format. If no time
- value
- is selected, the value of `date-time` will be `null`.
- example: '2024-08-23T22:00:00.000Z'
- enum_value:
- allOf:
- - $ref: '#/components/schemas/EnumOption'
- - type: object
- description: >-
- *Conditional*. Only relevant for custom fields of type
- `enum`. This object is the chosen value of an `enum` custom
- field.
- multi_enum_values:
- description: >-
- *Conditional*. Only relevant for custom fields of type
- `multi_enum`. This object is the chosen values of a `multi_enum` custom
- field.
- type: array
- items:
- $ref: '#/components/schemas/EnumOption'
- number_value:
- description: >-
- *Conditional*. This number is the value of a `number` custom field.
- type: number
- example: 5.2
- text_value:
- description: >-
- *Conditional*. This string is the value of a `text` custom field.
- type: string
- example: Some Value
- display_value:
- 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.
- type: string
- readOnly: true
- example: blue
- nullable: true
- CustomFieldRequest:
- allOf:
- - $ref: '#/components/schemas/CustomFieldBase'
- - type: object
- required:
- - workspace
- properties:
- workspace:
- type: string
- description: >-
- *Create-Only* The workspace to create a custom field in.
- example: '1331'
- 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:
- 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.
- type: array
- items:
- type: string
- description: >-
- The GID of a user.
- example:
- - '12345'
- CustomFieldResponse:
- allOf:
- - $ref: '#/components/schemas/CustomFieldBase'
- - type: object
- properties:
- created_by:
- $ref: '#/components/schemas/UserCompact'
- nullable: true
- people_value:
- description: >-
- *Conditional*. Only relevant for custom fields of type `people`.
- This array of [compact user](/reference/users) objects reflects the
- values
- of a `people` custom field.
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- CustomFieldSettingBase:
- $ref: '#/components/schemas/CustomFieldSettingCompact'
- 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/CustomFieldSettingBase'
- - type: object
- properties:
- project:
- allOf:
- - $ref: '#/components/schemas/ProjectCompact'
- - type: object
- description: >-
- *Deprecated: new integrations should prefer the `parent`
- field.* The id of the project that this custom field settings
- refers to.
- readOnly: true
- is_important:
- 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.
- type: boolean
- readOnly: true
- example: false
- parent:
- allOf:
- - $ref: '#/components/schemas/ProjectCompact'
- - type: object
- 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.
- readOnly: true
- custom_field:
- allOf:
- - $ref: '#/components/schemas/CustomFieldResponse'
- - type: object
- description: >-
- The custom field that is applied to the `parent`.
- readOnly: true
- EmptyResponse:
- type: object
- description: >-
- An empty object. Some endpoints do not return an object on success. The
- success is conveyed through a 2-- status code and returning an empty
- object.
- EnumOption:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- Enum options are the possible values which an enum custom field can
- adopt. An enum custom field must contain at least 1 enum option but no
- more than 500.
-
-
- You can add enum options to a custom field by using the `POST
- /custom_fields/custom_field_gid/enum_options` endpoint.
-
-
- **It is not possible to remove or delete an enum option**. Instead,
- enum options can be disabled by updating the `enabled` field to false
- with the `PUT /enum_options/enum_option_gid` endpoint. Other
- attributes can be updated similarly.
-
-
- On creation of an enum option, `enabled` is always set to `true`,
- meaning the enum option is a selectable value for the custom field.
- Setting `enabled=false` is equivalent to “trashing” the enum option in
- the Asana web app within the “Edit Fields” dialog. The enum option
- will no longer be selectable but, if the enum option value was
- previously set within a task, the task will retain the value.
-
-
- Enum options are an ordered list and by default new enum options are
- inserted at the end. Ordering in relation to existing enum options can
- be specified on creation by using `insert_before` or `insert_after` to
- reference an existing enum option. Only one of `insert_before` and
- `insert_after` can be provided when creating a new enum option.
-
-
- An enum options list can be reordered with the `POST
- /custom_fields/custom_field_gid/enum_options/insert` endpoint.
- x-docs-overrides:
- properties.resource_type.example: enum_option
- properties:
- name:
- description: The name of the enum option.
- type: string
- example: Low
- enabled:
- description: >-
- Whether or not the enum option is a selectable value for the
- custom field.
- type: boolean
- example: true
- color:
- description: >-
- The color of the enum option. Defaults to ‘none’.
- type: string
- example: blue
- EnumOptionBase:
- $ref: '#/components/schemas/EnumOption'
- EnumOptionInsertRequest:
- type: object
- required:
- - enum_option
- properties:
- enum_option:
- type: string
- description: The gid of the enum option to relocate.
- example: '97285'
- before_enum_option:
- type: string
- description: >-
- An existing enum option within this custom field
- before which the new enum option should be
- inserted. Cannot be provided together with
- after_enum_option.
- example: '12345'
- after_enum_option:
- type: string
- description: >-
- An existing enum option within this custom field
- after which the new enum option should be inserted.
- Cannot be provided together with
- before_enum_option.
- example: '12345'
- EnumOptionRequest:
- allOf:
- - $ref: '#/components/schemas/EnumOptionBase'
- - type: object
- properties:
- insert_before:
- type: string
- description: >-
- An existing enum option within this custom field
- before which the new enum option should be
- inserted. Cannot be provided together with
- after_enum_option.
- example: '12345'
- insert_after:
- type: string
- description: >-
- An existing enum option within this custom field
- after which the new enum option should be inserted.
- Cannot be provided together with
- before_enum_option.
- example: '12345'
- Error:
- type: object
- properties:
- message:
- type: string
- readOnly: true
- description: >-
- Message providing more detail about the error that occurred, if
- available.
- example: 'project: Missing input'
- help:
- type: string
- readOnly: true
- description: >-
- Additional information directing developers to resources on how
- to address and fix the problem, if available.
- example: >-
- For more information on API status codes and how to handle them,
- read the docs on errors:
- https://asana.github.io/developer-docs/#errors'
- phrase:
- type: string
- readOnly: true
- description: >-
- *500 errors only*. A unique error phrase which can be used
- when contacting developer support to help identify the exact
- occurrence of the problem in Asana’s logs.
- example: 6 sad squid snuggle softly
- ErrorResponse:
- description: |-
- Sadly, sometimes requests to the API are not successful. Failures can
- occur for a wide range of reasons. In all cases, the API should return
- an HTTP Status Code that indicates the nature of the failure,
- with a response body in JSON format containing additional information.
-
-
- In the event of a server error the response body will contain an error
- phrase. These phrases are automatically generated using the
- [node-asana-phrase
- library](https://github.com/Asana/node-asana-phrase) and can be used by
- Asana support to quickly look up the incident that caused the server
- error.
- type: object
- properties:
- errors:
- type: array
- items:
- $ref: '#/components/schemas/Error'
- EventResponse:
- description: |-
- An *event* is an object representing a change to a resource that was
- observed by an event subscription or delivered asynchronously to
- the target location of an active webhook.
-
- The event may be triggered by a different `user` than the
- subscriber. For example, if user A subscribes to a task and user B
- modified it, the event’s user will be user B. Note: Some events
- are generated by the system, and will have `null` as the user. API
- consumers should make sure to handle this case.
-
- The `resource` that triggered the event may be different from the one
- that the events were requested for or the webhook is subscribed to. For
- example, a subscription to a project will contain events for tasks
- contained within the project.
-
- **Note:** pay close attention to the relationship between the fields
- `Event.action` and `Event.change.action`.
- `Event.action` represents the action taken on the resource
- itself, and `Event.change.action` represents how the information
- within the resource's fields have been modified.
-
- For instance, consider these scenarios:
-
-
- * When at task is added to a project, `Event.action` will be
- `added`, `Event.parent` will be an object with the `id` and
- `type` of the project, and there will be no `change` field.
-
-
- * When an assignee is set on the task, `Event.parent` will be
- `null`, `Event.action` will be `changed`,
- `Event.change.action` will be `changed`, and `new_value` will
- be an object with the user's `id` and `type`.
-
-
- * When a collaborator is added to the task, `Event.parent` will
- be `null`, `Event.action` will be `changed`,
- `Event.change.action` will be `added`, and `added_value` will be
- an object with the user's `id` and `type`.
- type: object
- properties:
- user:
- allOf:
- - $ref: '#/components/schemas/UserCompact'
- - description: >-
- The user who triggered the event.
- resource:
- allOf:
- - $ref: '#/components/schemas/AsanaNamedResource'
- - description: >-
- The resource which has triggered the event by being modified in
- some way.
- type:
- description: >-
- *Deprecated: Refer to the resource_type of the resource.*
- The type of the resource that generated the event.
- type: string
- readOnly: true
- example: task
- action:
- description: >-
- The type of action taken on the **resource** that triggered the
- event. This can be one of `changed`, `added`, `removed`, `deleted`,
- or `undeleted` depending on the nature of the event.
- type: string
- readOnly: true
- example: changed
- parent:
- allOf:
- - $ref: '#/components/schemas/AsanaNamedResource'
- - description: >-
- For added/removed events, the parent object that resource was
- added to or removed from. The parent will be `null` for other
- event types.
- created_at:
- description: The timestamp when the event occurred.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- change:
- type: object
- description: >-
- Information about the type of change that has occurred. This field
- is only present when the value of the property `action`, describing
- the action taken on the **resource**, is `changed`.
- readOnly: true
- properties:
- field:
- description: The name of the field that has changed in the resource.
- type: string
- readOnly: true
- example: assignee
- action:
- description: >-
- The type of action taken on the **field** which has been
- changed. This can be one of `changed`, `added`, or `removed`
- depending on the nature of the change.
- type: string
- readOnly: true
- example: changed
- new_value:
- description: >-
- *Conditional.* This property is only present when the
- **field's** `action` is `changed` _and_ the `new_value` is an
- Asana resource. This will be only the `gid` and `resource_type`
- of the resource when the events come from webhooks; this will
- be the compact representation (and can have fields expanded
- with [opt_fields](/docs/inputoutput-options)) when using the
- [get events](/reference/getevents) endpoint.
- example:
- gid: '12345'
- resource_type: user
- added_value:
- description: >-
- *Conditional.* This property is only present when the
- **field's** `action` is `added` _and_ the `added_value` is an
- Asana resource. This will be only the `gid` and `resource_type`
- of the resource when the events come from webhooks; this will
- be the compact representation (and can have fields expanded
- with [opt_fields](/docs/inputoutput-options)) when using the
- [get events](/reference/getevents) endpoint.
- example:
- gid: '12345'
- resource_type: user
- removed_value:
- description: >-
- *Conditional.* This property is only present when the
- **field's** `action` is `removed` _and_ the `removed_value` is an
- Asana resource. This will be only the `gid` and `resource_type`
- of the resource when the events come from webhooks; this will
- be the compact representation (and can have fields expanded
- with [opt_fields](/docs/inputoutput-options)) when using the
- [get events](/reference/getevents) endpoint.
- example:
- gid: '12345'
- resource_type: user
- GoalAddSubgoalRequest:
- type: object
- required:
- - subgoal
- properties:
- subgoal:
- description: >-
- The goal gid to add as subgoal to a parent goal
- type: string
- example: '1331'
- insert_before:
- description: >-
- An id of a subgoal of this parent goal. The new
- subgoal will be added before the one specified here.
- `insert_before` and `insert_after` parameters cannot both
- be specified.
- type: string
- example: '1331'
- insert_after:
- description: >-
- An id of a subgoal of this parent goal. The new
- subgoal will be added after the one specified here.
- `insert_before` and `insert_after` parameters cannot both
- be specified.
- type: string
- example: '1331'
- GoalAddSupportingWorkRequest:
- type: object
- required:
- - supporting_work
- properties:
- supporting_work:
- description: >-
- The project/portfolio gid to add as supporting work for a goal
- type: string
- example: '1331'
- GoalBase:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- x-docs-overrides:
- properties.resource_type.example: goal
- properties:
- name:
- type: string
- description: The name of the goal.
- example: Grow web traffic by 30%
- html_notes:
- type: string
- description: >-
- The notes of the goal with formatting as HTML.
- example: Start building brand awareness.
- notes:
- type: string
- description: >-
- Free-form textual information associated with the
- goal (i.e. its description).
- example: Start building brand awareness.
- due_on:
- type: string
- description: >-
- The localized day on which this goal is due. This takes a
- date with format `YYYY-MM-DD`.
- example: '2019-09-15'
- nullable: true
- start_on:
- type: string
- description: >-
- The day on which work for this goal begins, or null if the
- goal has no start date. This takes a date with `YYYY-MM-DD`
- format, and cannot be set unless there is an accompanying due date.
- example: '2019-09-14'
- nullable: true
- status:
- type: string
- description: >-
- The current status of this goal. When the goal is open, its status
- can be `green`, `yellow`, and `red` to reflect "On Track", "At Risk",
- and "Off Track", respectively. When the goal is closed, the value
- can be `missed`, `achieved`, `partial`, or `dropped`.
-
- *Note* you can only write to this property if `metric` is set.
- example: green
- nullable: true
- is_workspace_level:
- type: boolean
- description: >-
- *Conditional*. This property is only present when the `workspace`
- provided is an organization. Whether the goal belongs to the `workspace`
- (and is listed as part of the workspace’s goals) or not. If it isn’t
- a workspace-level goal, it is a team-level goal, and is associated
- with the goal’s team.
- example: true
- liked:
- type: boolean
- description: >-
- True if the goal is liked by the authorized user, false if not.
- example: false
- GoalCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- x-docs-overrides:
- properties.resource_type.example: goal
- properties:
- name:
- type: string
- description: The name of the goal.
- example: Grow web traffic by 30%
- owner:
- allOf:
- - $ref: '#/components/schemas/UserCompact'
- - type: object
- nullable: true
- GoalMetricBase:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- properties:
- resource_subtype:
- description: >-
- The subtype of this resource. Different subtypes retain many of the
- same fields and behavior, but may render differently in Asana or
- represent resources with different semantic meaning.
- type: string
- readOnly: true
- example: number
- enum:
- - number
- precision:
- description: >-
- *Conditional*. Only relevant for goal metrics 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.
-
- For 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%.
- type: integer
- example: 2
- unit:
- description: >-
- A supported unit of measure for the goal metric, or none.
- type: string
- enum:
- - none
- - currency
- - percentage
- currency_code:
- description: >-
- ISO 4217 currency code to format this custom field. This will be
- null if the `unit` is not `currency`.
- type: string
- nullable: true
- example: EUR
- initial_number_value:
- description: >-
- This number is the start value of a goal metric of
- type number.
- type: number
- example: 5.2
- target_number_value:
- description: >-
- This number is the end value of a goal metric of
- type number. This number cannot equal `initial_number_value`.
- type: number
- example: 10.2
- current_number_value:
- description: >-
- This number is the current value of a goal metric of
- type number.
- type: number
- example: 8.12
- current_display_value:
- description: >-
- This string is the current value of a goal metric of
- type string.
- type: string
- readOnly: true
- example: '8.12'
- progress_source:
- description: >-
- This field defines how the progress value of a goal metric is being
- calculated.
- A goal's progress can be provided manually by the user,
- calculated automatically from contributing subgoals or projects,
- or managed by an integration with an external data source, such as
- Salesforce.
- type: string
- enum:
- - manual
- - subgoal_progress
- - project_task_completion
- - project_milestone_completion
- - external
- example: manual
- GoalRemoveSupportingRelationshipRequest:
- type: object
- required:
- - supporting_resource
- properties:
- supporting_resource:
- description: >-
- The gid of the supporting resource to remove from the parent goal. Must
- be the gid of a goal, project, or portfolio.
- type: string
- example: '12345'
- GoalAddSupportingRelationshipRequest:
- type: object
- required:
- - supporting_resource
- properties:
- supporting_resource:
- description: >-
- The gid of the supporting resource to add to the parent goal. Must be
- the gid of a goal, project, or portfolio.
- type: string
- example: '12345'
- insert_before:
- description: >-
- An id of a subgoal of this parent goal. The new
- subgoal will be added before the one specified here.
- `insert_before` and `insert_after` parameters cannot both
- be specified. Currently only supported when adding a subgoal.
- type: string
- example: '1331'
- insert_after:
- description: >-
- An id of a subgoal of this parent goal. The new
- subgoal will be added after the one specified here.
- `insert_before` and `insert_after` parameters cannot both
- be specified. Currently only supported when adding a subgoal.
- type: string
- example: '1331'
- contribution_weight:
- description: The weight that the supporting resource's progress will contribute
- to the supported goal's progress. This can only be 0 or 1.
- type: number
- example: 1
- GoalMetricCurrentValueRequest:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- properties:
- current_number_value:
- description: >-
- *Conditional*. This number is the current value of a goal metric of
- type number.
- type: number
- example: 8.12
- GoalMetricRequest:
- $ref: '#/components/schemas/GoalMetricBase'
- GoalRemoveSubgoalRequest:
- type: object
- required:
- - subgoal
- properties:
- subgoal:
- description: >-
- The goal gid to remove as subgoal from the parent goal
- type: string
- example: '1331'
- GoalRequest:
- allOf:
- - $ref: '#/components/schemas/GoalBase'
- - type: object
- properties:
- team:
- type: string
- description: >-
- *Conditional*. This property is only present when the `workspace`
- provided is an organization.
- example: '12345'
- nullable: true
- workspace:
- type: string
- description: >-
- The `gid` of a workspace.
- example: '12345'
- followers:
- type: array
- items:
- type: string
- description: >-
- The `gid` of a user.
- example:
- - '12345'
- time_period:
- type: string
- description: >-
- The `gid` of a time period.
- example: '12345'
- nullable: true
- owner:
- type: string
- description: >-
- The `gid` of a user.
- example: '12345'
- nullable: true
- GoalResponse:
- allOf:
- - $ref: '#/components/schemas/GoalBase'
- - type: object
- properties:
- likes:
- description: >-
- Array of likes for users who have liked this goal.
- type: array
- items:
- $ref: '#/components/schemas/Like'
- readOnly: true
- num_likes:
- description: >-
- The number of users who have liked this goal.
- type: integer
- readOnly: true
- example: 5
- team:
- allOf:
- - $ref: '#/components/schemas/TeamCompact'
- - type: object
- nullable: true
- description: >-
- *Conditional*. This property is only present when the `workspace`
- provided is an organization.
- workspace:
- allOf:
- - $ref: '#/components/schemas/WorkspaceCompact'
- - type: object
- followers:
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- description: >-
- Array of users who are members of this goal.
- time_period:
- allOf:
- - $ref: '#/components/schemas/TimePeriodCompact'
- - type: object
- nullable: true
- metric:
- allOf:
- - $ref: '#/components/schemas/GoalMetricBase'
- - type: object
- nullable: true
- properties:
- can_manage:
- description: >-
- *Conditional*. Only relevant for `progress_source` of type
- `external`.
- This boolean indicates whether the requester has the ability
- to update the current value of this metric.
- This returns `true` if the external metric was created by
- the requester, `false` otherwise.
- type: boolean
- readOnly: true
- example: true
- owner:
- allOf:
- - $ref: '#/components/schemas/UserCompact'
- - type: object
- nullable: true
- current_status_update:
- description: The latest `status_update` posted to this goal.
- nullable: true
- allOf:
- - $ref: '#/components/schemas/StatusUpdateCompact'
- GoalRelationshipBase:
- allOf:
- - $ref: '#/components/schemas/GoalRelationshipCompact'
- - type: object
- properties:
- supported_goal:
- allOf:
- - $ref: '#/components/schemas/GoalCompact'
- - type: object
- readOnly: true
- description: >-
- The goal that the supporting resource supports.
- GoalRelationshipCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *goal relationship* is an object representing the relationship between
- a goal and another goal, a project, or a portfolio.
- x-docs-overrides:
- properties.resource_type.example: goal_relationship
- properties:
- resource_subtype:
- description: >-
- The subtype of this resource. Different subtypes retain many of the
- same fields and behavior, but may render differently in Asana or
- represent resources with different semantic meaning.
- type: string
- readOnly: true
- example: subgoal
- enum:
- - subgoal
- - supporting_work
- supporting_resource:
- allOf:
- - $ref: '#/components/schemas/ProjectCompact'
- - type: object
- readOnly: true
- description: >-
- The supporting resource that supports the goal. This can be either
- a project, portfolio, or goal.
- contribution_weight:
- description: The weight that the supporting resource's progress contributes
- to the supported goal's progress. This can only be 0 or 1.
- type: number
- example: 1
- GoalRelationshipRequest:
- allOf:
- - $ref: '#/components/schemas/GoalRelationshipBase'
- - type: object
- GoalRelationshipResponse:
- allOf:
- - $ref: '#/components/schemas/GoalRelationshipBase'
- - type: object
- JobBase:
- $ref: '#/components/schemas/JobCompact'
- JobCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *job* is an object representing a process that handles asynchronous
- work.
- x-docs-overrides:
- properties.resource_type.example: job
- properties:
- resource_subtype:
- description: >-
- The subtype of this resource. Different subtypes retain many of the
- same fields and behavior, but may render differently in Asana or
- represent resources with different semantic meaning.
- type: string
- readOnly: true
- example: duplicate_task
- status:
- description: >-
- The current status of this job. The value is one of: `not_started`,
- `in_progress`, `succeeded`, or `failed`.
- type: string
- enum:
- - not_started
- - in_progress
- - succeeded
- - failed
- readOnly: true
- example: in_progress
- new_project:
- $ref: '#/components/schemas/ProjectCompact'
- new_task:
- $ref: '#/components/schemas/TaskCompact'
- new_project_template:
- $ref: '#/components/schemas/ProjectTemplateCompact'
- JobResponse:
- $ref: '#/components/schemas/JobBase'
- Like:
- type: object
- description: >-
- An object to represent a user's like.
- properties:
- gid:
- description: >-
- Globally unique identifier of the object, as a string.
- type: string
- readOnly: true
- example: '12345'
- user:
- $ref: '#/components/schemas/UserCompact'
- MemberCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: A *member* object represents either a team or user.
- x-docs-overrides:
- properties.resource_type.example: member
- properties:
- name:
- type: string
- description: The name of the member
- example: Greg Sanchez
- resource_type:
- type: string
- description: The type of the member (team or user)
- example: user
- ModifyDependenciesRequest:
- type: object
- properties:
- dependencies:
- description: An array of task gids that a task depends on.
- type: array
- items:
- type: string
- example:
- dependencies:
- - '133713'
- - '184253'
- ModifyDependentsRequest:
- description: A set of dependent tasks.
- type: object
- properties:
- dependents:
- description: An array of task gids that are dependents of the given task.
- type: array
- items:
- type: string
- example:
- dependents:
- - '133713'
- - '184253'
- OrganizationExportBase:
- $ref: '#/components/schemas/OrganizationExportCompact'
- OrganizationExportCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- An *organization_export* object represents a request to export the
- complete data of an Organization in JSON format.
- x-docs-overrides:
- properties.resource_type.example: organization_export
- properties:
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- download_url:
- description: |-
- Download this URL to retreive the full export of the organization
- in JSON format. It will be compressed in a gzip (.gz) container.
-
- *Note: May be null if the export is still in progress or
- failed. If present, this URL may only be valid for 1 hour from
- the time of retrieval. You should avoid persisting this URL
- somewhere and rather refresh on demand to ensure you do not keep
- stale URLs.*
- type: string
- format: uri
- readOnly: true
- nullable: true
- example: >-
- https://asana-export.s3.amazonaws.com/export-4632784536274-20170127-43246.json.gz?AWSAccessKeyId=xxxxxxxx
- state:
- description: The current state of the export.
- type: string
- enum:
- - pending
- - started
- - finished
- - error
- readOnly: true
- example: started
- organization:
- $ref: '#/components/schemas/WorkspaceCompact'
- OrganizationExportRequest:
- type: object
- description: >-
- An *organization_export* request starts a job to export the complete
- data of the given Organization.
- properties:
- organization:
- description: >-
- Globally unique identifier for the workspace or organization.
- type: string
- example: '1331'
- OrganizationExportResponse:
- $ref: '#/components/schemas/OrganizationExportBase'
- PortfolioAddItemRequest:
- type: object
- required:
- - item
- properties:
- item:
- description: >-
- The item to add to the portfolio.
- type: string
- example: '1331'
- insert_before:
- description: >-
- An id of an item in this portfolio. The new
- item will be added before the one specified here.
- `insert_before` and `insert_after` parameters cannot both
- be specified.
- type: string
- example: '1331'
- insert_after:
- description: >-
- An id of an item in this portfolio. The new
- item will be added after the one specified here.
- `insert_before` and `insert_after` parameters cannot both
- be specified.
- type: string
- example: '1331'
- PortfolioBase:
- allOf:
- - $ref: '#/components/schemas/PortfolioCompact'
- - type: object
- properties:
- color:
- description: Color of the portfolio.
- type: string
- enum:
- - dark-pink
- - dark-green
- - dark-blue
- - dark-red
- - dark-teal
- - dark-brown
- - dark-orange
- - dark-purple
- - dark-warm-gray
- - light-pink
- - light-green
- - light-blue
- - light-red
- - light-teal
- - light-brown
- - light-orange
- - light-purple
- - light-warm-gray
- example: light-green
- PortfolioCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *portfolio* gives a high-level overview of the status of multiple
- initiatives in Asana. Portfolios provide a dashboard overview of
- the state of multiple projects, including a progress report and the
- most recent [project
- status](/reference/project-statuses)
- update.
-
- Portfolios have some restrictions on size. Each portfolio has a max of
- 500 items and, like projects, a max of 20 custom fields.
- x-docs-overrides:
- properties.resource_type.example: portfolio
- properties:
- name:
- description: The name of the portfolio.
- type: string
- example: Bug Portfolio
- PortfolioMembershipBase:
- $ref: '#/components/schemas/PortfolioMembershipCompact'
- PortfolioMembershipCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- This object determines if a user is a member of a portfolio.
- x-docs-overrides:
- properties.resource_type.example: portfolio_membership
- properties:
- portfolio:
- description: >-
- [Opt In](/docs/inputoutput-options).
- The portfolio the user is a member of.
- $ref: '#/components/schemas/PortfolioCompact'
- user:
- $ref: '#/components/schemas/UserCompact'
- PortfolioMembershipResponse:
- $ref: '#/components/schemas/PortfolioMembershipBase'
- PortfolioRemoveItemRequest:
- type: object
- required:
- - item
- properties:
- item:
- description: >-
- The item to remove from the portfolio.
- type: string
- example: '1331'
- PortfolioRequest:
- allOf:
- - $ref: '#/components/schemas/PortfolioBase'
- - type: object
- properties:
- members:
- readOnly: true
- type: array
- description: >-
- An array of strings identifying users. These can either be the
- string "me", an email, or the gid of a user.
- items:
- type: string
- description: >-
- Gid of an object.
- example:
- - '52164'
- - '15363'
- workspace:
- type: string
- description: >-
- Gid of an object.
- example: '167589'
- public:
- type: boolean
- description: >-
- True if the portfolio is public to its workspace members.
- example: false
- PortfolioResponse:
- allOf:
- - $ref: '#/components/schemas/PortfolioBase'
- - type: object
- properties:
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- created_by:
- $ref: '#/components/schemas/UserCompact'
- custom_field_settings:
- description: Array of custom field settings applied to the portfolio.
- type: array
- items:
- $ref: '#/components/schemas/CustomFieldSettingResponse'
- current_status_update:
- description: The latest `status_update` posted to this portfolio.
- nullable: true
- allOf:
- - $ref: '#/components/schemas/StatusUpdateCompact'
- due_on:
- description: >-
- The localized day on which this portfolio is due. This takes a
- date with format YYYY-MM-DD.
- type: string
- format: date-time
- nullable: true
- example: '2019-09-15'
- custom_fields:
- description: Array of Custom Fields.
- type: array
- items:
- $ref: '#/components/schemas/CustomFieldCompact'
- members:
- type: array
- readOnly: true
- items:
- $ref: '#/components/schemas/UserCompact'
- owner:
- $ref: '#/components/schemas/UserCompact'
- start_on:
- description: >-
- The day on which work for this portfolio begins, or null if the
- portfolio has no start date. This takes a date with `YYYY-MM-DD`
- format. *Note: `due_on` must be present in the
- request when setting or unsetting the `start_on` parameter.
- Additionally, `start_on` and `due_on` cannot be the same date.*
- type: string
- format: date
- nullable: true
- example: '2019-09-14'
- workspace:
- allOf:
- - $ref: '#/components/schemas/WorkspaceCompact'
- - type: object
- description: >-
- *Create-only*. The workspace or organization that the
- portfolio belongs to.
- permalink_url:
- type: string
- readOnly: true
- description: >-
- A url that points directly to the object within Asana.
- example: https://app.asana.com/0/resource/123456789/list
- public:
- description: >-
- True if the portfolio is public to its workspace members.
- type: boolean
- example: false
- Preview:
- type: object
- description: >-
- A collection of rich text that will be displayed as a preview to another
- app.
-
-
- This is read-only except for a small group of whitelisted apps.
- readOnly: true
- properties:
- fallback:
- description: Some fallback text to display if unable to display the full
- preview.
- type: string
- example: >-
- Greg: Great! I like this
- idea.\n\nhttps//a_company.slack.com/archives/ABCDEFG/12345678
- footer:
- description: Text to display in the footer.
- type: string
- example: Mar 17, 2019 1:25 PM
- header:
- description: Text to display in the header.
- type: string
- example: Asana for Slack
- header_link:
- description: Where the header will link to.
- type: string
- example: https://asana.comn/apps/slack
- html_text:
- description: HTML formatted text for the body of the preview.
- type: string
- example: Great! I like this idea.
- text:
- description: Text for the body of the preview.
- type: string
- example: Great! I like this idea.
- title:
- description: Text to display as the title.
- type: string
- example: Greg
- title_link:
- description: Where to title will link to.
- type: string
- example: https://asana.slack.com/archives/ABCDEFG/12345678
- ProjectBase:
- allOf:
- - $ref: '#/components/schemas/ProjectCompact'
- - type: object
- properties:
- archived:
- description: >-
- True if the project is archived, false if not. Archived projects
- do not show in the UI by default and may be treated differently
- for queries.
- type: boolean
- example: false
- color:
- description: Color of the project.
- type: string
- nullable: true
- enum:
- - dark-pink
- - dark-green
- - dark-blue
- - dark-red
- - dark-teal
- - dark-brown
- - dark-orange
- - dark-purple
- - dark-warm-gray
- - light-pink
- - light-green
- - light-blue
- - light-red
- - light-teal
- - light-brown
- - light-orange
- - light-purple
- - light-warm-gray
- example: light-green
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- current_status:
- description: >-
- *Deprecated: new integrations should prefer the `current_status_update`
- resource.*
- nullable: true
- allOf:
- - $ref: '#/components/schemas/ProjectStatusResponse'
- current_status_update:
- description: The latest `status_update` posted to this project.
- nullable: true
- allOf:
- - $ref: '#/components/schemas/StatusUpdateCompact'
- custom_field_settings:
- description: Array of Custom Field Settings (in compact form).
- readOnly: true
- type: array
- items:
- $ref: '#/components/schemas/CustomFieldSettingResponse'
- default_view:
- description: The default view (list, board, calendar, or timeline) of
- a project.
- type: string
- enum:
- - list
- - board
- - calendar
- - timeline
- example: calendar
- due_date:
- description: >-
- *Deprecated: new integrations should prefer the `due_on` field.*
- type: string
- nullable: true
- format: date-time
- example: '2019-09-15'
- due_on:
- description: >-
- The day on which this project is due. This takes a date with
- format YYYY-MM-DD.
- type: string
- nullable: true
- format: date-time
- example: '2019-09-15'
- html_notes:
- description: >-
- [Opt In](/docs/inputoutput-options).
- The notes of the project with formatting as HTML.
- type: string
- example: These are things we need to purchase.
- members:
- description: Array of users who are members of this project.
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- readOnly: true
- modified_at:
- description: >-
- The time at which this project was last modified.
-
- *Note: This does not currently reflect any changes in
- associations such as tasks or comments that may have been added or
- removed from the project.*
- type: string
- readOnly: true
- format: date-time
- example: '2012-02-22T02:06:58.147Z'
- notes:
- description: >-
- Free-form textual information associated with the
- project (ie., its description).
- type: string
- example: These are things we need to purchase.
- public:
- description: >-
- True if the project is public to its team.
- type: boolean
- example: false
- start_on:
- description: >-
- The day on which work for this project begins, or null if the
- project has no start date. This takes a date with `YYYY-MM-DD`
- format. *Note: `due_on` or `due_at` must be present in the
- request when setting or unsetting the `start_on` parameter.
- Additionally, `start_on` and `due_on` cannot be the same date.*
- type: string
- nullable: true
- format: date
- example: '2019-09-14'
- workspace:
- allOf:
- - $ref: '#/components/schemas/WorkspaceCompact'
- - type: object
- readOnly: true
- description: >-
- *Create-only*. The workspace or organization this project is
- associated with. Once created, projects cannot be moved to a
- different workspace. This attribute can only be specified at
- creation time.
- ProjectBriefBase:
- allOf:
- - $ref: '#/components/schemas/ProjectBriefCompact'
- - type: object
- properties:
- title:
- description: >-
- The title of the project brief.
- type: string
- example: Stuff to buy — Project Brief
- html_text:
- description: >-
- HTML formatted text for the project brief.
- type: string
- example: This is a project brief.
- ProjectBriefCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *Project Brief* allows you to explain the what and why of the project
- to
- your team.
- x-docs-overrides:
- properties.resource_type.example: project_brief
- ProjectBriefRequest:
- allOf:
- - $ref: '#/components/schemas/ProjectBriefBase'
- - type: object
- properties:
- text:
- description: >-
- The plain text of the project brief. When writing to a project
- brief, you can specify either `html_text` (preferred) or `text`,
- but not both.
- type: string
- example: This is a project brief.
- ProjectBriefResponse:
- allOf:
- - $ref: '#/components/schemas/ProjectBriefBase'
- - type: object
- properties:
- text:
- description: >-
- [Opt In](/docs/inputoutput-options).
- The plain text of the project brief.
- type: string
- example: This is a project brief.
- permalink_url:
- type: string
- readOnly: true
- description: >-
- A url that points directly to the object within Asana.
- example: https://app.asana.com/0/11111111/22222222
- project:
- allOf:
- - $ref: '#/components/schemas/ProjectCompact'
- - type: object
- description: >-
- The project with which this project brief is associated.
- ProjectCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *project* represents a prioritized list of tasks in Asana or a board
- with columns of tasks represented as cards. It exists in a single
- workspace or organization and is accessible to a subset of users in
- that workspace or organization, depending on its permissions.
- x-docs-overrides:
- properties.resource_type.example: project
- properties:
- name:
- description: >-
- Name of the project. This is generally a short sentence fragment
- that fits on a line in the UI for maximum readability. However, it
- can be longer.
- type: string
- example: Stuff to buy
- ProjectDuplicateRequest:
- type: object
- required:
- - name
- properties:
- name:
- description: The name of the new project.
- type: string
- example: New Project Name
- team:
- description: >-
- Sets the team of the new project. If team is not defined,
- the new project will be in the same team as the the
- original project.
- type: string
- example: '12345'
- include:
- description: >-
- The elements that will be duplicated to the new project.
- Tasks are always included.
- type: string
- enum:
- - members
- - notes
- - forms
- - task_notes
- - task_assignee
- - task_subtasks
- - task_attachments
- - task_dates
- - task_dependencies
- - task_followers
- - task_tags
- - task_projects
- example:
- - members
- - task_notes
- schedule_dates:
- description: >-
- A dictionary of options to auto-shift dates.
- `task_dates` must be included to use this option.
- Requires either `start_on` or `due_on`, but not both.
- type: object
- required:
- - should_skip_weekends
- properties:
- should_skip_weekends:
- description: >-
- Determines if the auto-shifted dates should skip weekends.
- type: boolean
- example: true
- due_on:
- description: >-
- Sets the last due date in the duplicated project to the given
- date. The rest of the due dates will be offset by the same amount
- as the due dates in the original project.
- type: string
- example: '2019-05-21'
- start_on:
- description: >-
- Sets the first start date in the duplicated project to the given
- date. The rest of the start dates will be offset by the same amount
- as the start dates in the original project.
- type: string
- example: '2019-05-21'
- ProjectMembershipBase:
- $ref: '#/components/schemas/ProjectMembershipCompact'
- ProjectMembershipCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- With the introduction of “comment-only” projects in Asana, a user’s
- membership in a project comes with associated permissions. These
- permissions (whether a user has full access to the project or
- comment-only access) are accessible through the project memberships
- endpoints described here.
- x-docs-overrides:
- properties.resource_type.example: project_membership
- properties:
- user:
- $ref: '#/components/schemas/UserCompact'
- ProjectMembershipResponse:
- allOf:
- - $ref: '#/components/schemas/ProjectMembershipBase'
- - type: object
- properties:
- project:
- description: >-
- [Opt
- In](/docs/inputoutput-options).
- The project the user is a member of.
- $ref: '#/components/schemas/ProjectCompact'
- member:
- description: Member can be a user or a team.
- $ref: '#/components/schemas/MemberCompact'
- resource_type:
- description: Type of the membership.
- type: string
- example: project_membership
- write_access:
- description: >-
- Whether the member has full access, edit access, or comment-only
- access to the project.
- type: string
- enum:
- - full_write
- - editor
- - comment_only
- readOnly: true
- example: full_write
- ProjectRequest:
- allOf:
- - $ref: '#/components/schemas/ProjectBase'
- - type: object
- properties:
- custom_fields:
- description: >-
- An object where each key is a Custom Field GID and each value is
- an enum GID, string, number, or object.
- type: object
- additionalProperties:
- type: string
- description: >-
- "{custom_field_gid}" => Value (Can be text, number, etc.)
- example:
- 5678904321: On Hold
- 4578152156: Not Started
- followers:
- description: >-
- *Create-only*. Comma separated string of users. Followers
- are a subset of members who have opted in to receive "tasks
- added" notifications for a project.
- type: string
- example: 12345,23456
- owner:
- description: >-
- The current owner of the project, may be null.
- nullable: true
- type: string
- example: '12345'
- team:
- description: >-
- The team that this project is shared with.
- type: string
- example: '12345'
- ProjectResponse:
- allOf:
- - $ref: '#/components/schemas/ProjectBase'
- - type: object
- properties:
- custom_fields:
- description: Array of Custom Fields.
- readOnly: true
- type: array
- items:
- $ref: '#/components/schemas/CustomFieldCompact'
- completed:
- description: >-
- True if the project is currently marked complete, false if not.
- type: boolean
- readOnly: true
- example: false
- completed_at:
- description: >-
- The time at which this project was completed, or null if the project
- is not completed.
- type: string
- format: date-time
- readOnly: true
- nullable: true
- example: '2012-02-22T02:06:58.147Z'
- completed_by:
- description: >-
- The user that marked this project complete, or null if the project
- is not completed.
- readOnly: true
- nullable: true
- $ref: '#/components/schemas/UserCompact'
- followers:
- description: >-
- Array of users following this project. Followers are a subset
- of members who have opted in to receive "tasks added"
- notifications for a project.
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- readOnly: true
- owner:
- description: >-
- The current owner of the project, may be null.
- nullable: true
- allOf:
- - $ref: '#/components/schemas/UserCompact'
- team:
- allOf:
- - $ref: '#/components/schemas/TeamCompact'
- - type: object
- description: >-
- The team that this project is shared with.
- icon:
- description: >-
- The icon for a project.
- type: string
- nullable: true
- enum:
- - list
- - board
- - timeline
- - calendar
- - rocket
- - people
- - graph
- - star
- - bug
- - light_bulb
- - globe
- - gear
- - notebook
- - computer
- - check
- - target
- - html
- - megaphone
- - chat_bubbles
- - briefcase
- - page_layout
- - mountain_flag
- - puzzle
- - presentation
- - line_and_symbols
- - speed_dial
- - ribbon
- - shoe
- - shopping_basket
- - map
- - ticket
- - coins
- example: chat_bubbles
- permalink_url:
- type: string
- readOnly: true
- description: >-
- A url that points directly to the object within Asana.
- example: https://app.asana.com/0/resource/123456789/list
- project_brief:
- allOf:
- - $ref: '#/components/schemas/ProjectBriefCompact'
- - type: object
- description: >-
- [Opt In](/docs/inputoutput-options).
- The project brief associated with this project.
- nullable: true
- created_from_template:
- allOf:
- - $ref: '#/components/schemas/ProjectTemplateCompact'
- - type: object
- description: >-
- [Opt In](/docs/inputoutput-options).
- The project template from which this project was created. If the
- project was
- not created from a template, this field will be null.
- nullable: true
- ProjectSectionInsertRequest:
- type: object
- properties:
- project:
- description: The project in which to reorder the given section.
- type: string
- example: '123456'
- section:
- description: The section to reorder.
- type: string
- example: '321654'
- before_section:
- description: >-
- Insert the given section immediately before the section
- specified by this parameter.
- type: string
- example: '86420'
- after_section:
- description: >-
- Insert the given section immediately after the section
- specified by this parameter.
- type: string
- example: '987654'
- required:
- - project
- - section
- ProjectStatusBase:
- allOf:
- - $ref: '#/components/schemas/ProjectStatusCompact'
- - type: object
- required:
- - text
- - color
- properties:
- text:
- description: The text content of the status update.
- type: string
- example: The project is moving forward according to plan...
- html_text:
- description: >-
- [Opt
- In](/docs/inputoutput-options).
- The text content of the status update with formatting as HTML.
- type: string
- example: >-
- The project is moving forward according to
- plan...
- color:
- description: The color associated with the status update.
- type: string
- enum:
- - green
- - yellow
- - red
- - blue
- ProjectStatusCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- *Deprecated: new integrations should prefer the `status_update` resource.*
-
- A *project status* is an update on the progress of a particular
- project, and is sent out to all project followers when created. These
- updates include both text describing the update and a color code
- intended to represent the overall state of the project: "green" for
- projects that are on track, "yellow" for projects at risk, and "red"
- for projects that are behind.
- x-docs-overrides:
- properties.resource_type.example: project_status
- properties:
- title:
- description: The title of the project status update.
- type: string
- example: Status Update - Jun 15
- ProjectStatusRequest:
- $ref: '#/components/schemas/ProjectStatusBase'
- ProjectStatusResponse:
- allOf:
- - $ref: '#/components/schemas/ProjectStatusBase'
- - type: object
- properties:
- author:
- $ref: '#/components/schemas/UserCompact'
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- created_by:
- $ref: '#/components/schemas/UserCompact'
- modified_at:
- description: >-
- The time at which this project status was last modified.
-
- *Note: This does not currently reflect any changes in
- associations such as comments that may have been added or
- removed from the project status.*
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- ProjectTemplateCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *project template* is an object that allows new projects to be created
- with a predefined setup, which may include tasks, sections, Rules, etc.
- It simplifies the process of running a workflow that involves a similar
- set of work every time.
- x-docs-overrides:
- properties.resource_type.example: project_template
- properties:
- name:
- description: >-
- Name of the project template.
- type: string
- example: Packing list
- ProjectTemplateBase:
- allOf:
- - $ref: '#/components/schemas/ProjectTemplateCompact'
- - type: object
- properties:
- description:
- description: >-
- Free-form textual information associated with the
- project template
- type: string
- example: These are things we need to pack for a trip.
- html_description:
- description: >-
- The description of the project template with formatting as HTML.
- type: string
- example: These are things we need to pack for a trip.
- public:
- description: >-
- True if the project template is public to its team.
- type: boolean
- example: false
- owner:
- description: >-
- The current owner of the project template, may be null.
- nullable: true
- allOf:
- - $ref: '#/components/schemas/UserCompact'
- team:
- allOf:
- - $ref: '#/components/schemas/TeamCompact'
- requested_dates:
- description: >-
- Array of date variables in this project template. Calendar dates
- must be provided for these variables when instantiating a project.
- type: array
- items:
- $ref: '#/components/schemas/DateVariableCompact'
- readOnly: true
- color:
- description: Color of the project template.
- type: string
- nullable: true
- enum:
- - dark-pink
- - dark-green
- - dark-blue
- - dark-red
- - dark-teal
- - dark-brown
- - dark-orange
- - dark-purple
- - dark-warm-gray
- - light-pink
- - light-green
- - light-blue
- - light-red
- - light-teal
- - light-brown
- - light-orange
- - light-purple
- - light-warm-gray
- example: light-green
- requested_roles:
- description: >-
- Array of template roles in this project template. User Ids can be
- provided
- for these variables when instantiating a project to assign template
- tasks to
- the user.
- type: array
- items:
- $ref: '#/components/schemas/TemplateRole'
- ProjectTemplateResponse:
- allOf:
- - $ref: '#/components/schemas/ProjectTemplateBase'
- ProjectTemplateInstantiateProjectRequest:
- type: object
- required:
- - name
- - public
- properties:
- name:
- description: The name of the new project.
- type: string
- example: New Project Name
- team:
- description: >-
- *Optional*. Sets the team of the new project. If the project template
- exists in an
- _organization_, you may specify a value for `team`. If no value is provided
- then it
- defaults to the same team as the project template.
- type: string
- example: '12345'
- public:
- description: >-
- Sets the project to public to its team.
- type: boolean
- example: true
- is_strict:
- description: >-
- *Optional*. If set to `true`, the endpoint returns an "Unprocessable Entity"
- error
- if you fail to provide a calendar date value for any date variable. If
- set to
- `false`, a default date is used for each unfulfilled date variable (e.g.,
- the
- current date is used as the Start Date of a project).
- type: boolean
- example: true
- requested_dates:
- description: >-
- Array of mappings of date variables to calendar dates.
- type: array
- items:
- $ref: '#/components/schemas/DateVariableRequest'
- requested_roles:
- description: >-
- Array of mappings of template roles to user ids
- type: array
- items:
- $ref: '#/components/schemas/RequestedRoleRequest'
- DateVariableCompact:
- type: object
- properties:
- gid:
- description: >-
- Globally unique identifier of the date field in the project template.
- A value of
- `1` refers to the project start date, while `2` refers to the project
- due date.
- type: string
- readOnly: true
- example: '1'
- name:
- description: >-
- The name of the date variable.
- type: string
- readOnly: true
- example: Start Date
- description:
- description: >-
- The description of what the date variable is used for when instantiating
- a project.
- type: string
- readOnly: true
- example: Choose a start date for your project.
- DateVariableRequest:
- type: object
- properties:
- gid:
- description: >-
- Globally unique identifier of the date field in the project template.
- A value of
- `1` refers to the project start date, while `2` refers to the project
- due date.
- type: string
- example: '1'
- value:
- description: >-
- The date with which the date variable should be replaced when instantiating
- a project.
- This takes a date with `YYYY-MM-DD` format.
- type: string
- nullable: true
- format: date-time
- example: '2022-01-01'
- RequestedRoleRequest:
- type: object
- properties:
- gid:
- description: >-
- Globally unique identifier of the template role in the project template.
- type: string
- example: '1'
- value:
- description: >-
- The user id that should be assigned to the template role.
- type: string
- example: '123'
- ProjectSaveAsTemplateRequest:
- type: object
- required:
- - name
- - public
- properties:
- name:
- description: The name of the new project template.
- type: string
- example: New Project Template
- team:
- description: >-
- Sets the team of the new project template. If the project exists in an
- organization, specify team and not workspace.
- type: string
- example: '12345'
- workspace:
- description: >-
- Sets the workspace of the new project template. Only specify workspace
- if the
- project exists in a workspace.
- type: string
- example: '12345'
- public:
- description: >-
- Sets the project template to public to its team.
- type: boolean
- example: true
- RemoveCustomFieldSettingRequest:
- type: object
- required:
- - custom_field
- properties:
- custom_field:
- description: The custom field to remove from this portfolio.
- type: string
- example: '14916'
- RemoveFollowersRequest:
- type: object
- required:
- - followers
- properties:
- followers:
- description: >-
- An array of strings identifying users. These can either be the string
- "me", an email, or the gid of a user.
- type: string
- example: 521621,621373
- RemoveMembersRequest:
- type: object
- required:
- - members
- properties:
- members:
- description: >-
- An array of strings identifying users. These can either be the string
- "me", an email, or the gid of a user.
- type: string
- example: 521621,621373
- SectionBase:
- $ref: '#/components/schemas/SectionCompact'
- SectionCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *section* is a subdivision of a project that groups tasks together.
- It can either be a header above a list of tasks in a list view or a
- column in a board view of a project.
- x-docs-overrides:
- properties.resource_type.example: section
- properties:
- name:
- description: >-
- The name of the section (i.e. the text displayed as the section
- header).
- type: string
- example: Next Actions
- SectionRequest:
- type: object
- properties:
- name:
- description: >-
- The text to be displayed as the section name. This cannot be
- an empty string.
- type: string
- example: Next Actions
- insert_before:
- description: >-
- An existing section within this project before which the added
- section should be inserted. Cannot be provided together with
- insert_after.
- type: string
- example: '86420'
- insert_after:
- description: >-
- An existing section within this project after which the added
- section should be inserted. Cannot be provided together with
- insert_before.
- type: string
- example: '987654'
- required:
- - project
- - name
- SectionResponse:
- allOf:
- - $ref: '#/components/schemas/SectionBase'
- - type: object
- properties:
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- project:
- $ref: '#/components/schemas/ProjectCompact'
- projects:
- description: >-
- *Deprecated - please use project instead*
- type: array
- readOnly: true
- items:
- $ref: '#/components/schemas/ProjectCompact'
- SectionTaskInsertRequest:
- type: object
- properties:
- task:
- description: The task to add to this section.
- type: string
- example: '123456'
- insert_before:
- description: >-
- An existing task within this section before which the added
- task should be inserted. Cannot be provided together with
- insert_after.
- type: string
- example: '86420'
- insert_after:
- description: >-
- An existing task within this section after which the added
- task should be inserted. Cannot be provided together with
- insert_before.
- type: string
- example: '987654'
- required:
- - task
- StatusUpdateBase:
- allOf:
- - $ref: '#/components/schemas/StatusUpdateCompact'
- - type: object
- required:
- - text
- - status_type
- properties:
- text:
- description: The text content of the status update.
- type: string
- example: The project is moving forward according to plan...
- html_text:
- description: >-
- [Opt
- In](/docs/inputoutput-options).
- The text content of the status update with formatting as HTML.
- type: string
- example: >-
- The project is moving forward according to
- plan...
- status_type:
- description: The type associated with the status update. This represents
- the current state of the object this object is on.
- type: string
- enum:
- - on_track
- - at_risk
- - off_track
- - on_hold
- - complete
- - achieved
- - partial
- - missed
- - dropped
- StatusUpdateCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *status update* is an update on the progress of a particular
- project, portfolio, or goal, and is sent out to all of its parent's
- followers when created. These
- updates include both text describing the update and a `status_type`
- intended to represent the overall state of the project.
- x-docs-overrides:
- properties.resource_type.example: status_update
- properties:
- title:
- description: The title of the status update.
- type: string
- example: Status Update - Jun 15
- resource_subtype:
- type: string
- description: >-
- The subtype of this resource. Different subtypes retain many of
- the same fields and behavior, but may render differently in Asana
- or represent resources with different semantic meaning.
-
- The `resource_subtype`s for `status` objects represent the type of
- their parent.
- enum:
- - project_status_update
- - portfolio_status_update
- - goal_status_update
- example: project_status_update
- readOnly: true
- StatusUpdateRequest:
- allOf:
- - $ref: '#/components/schemas/StatusUpdateBase'
- - type: object
- required:
- - parent
- properties:
- parent:
- allOf:
- - type: string
- description: >-
- The id of parent to send this status update to. This can be a
- project,
- goal or portfolio.
- StatusUpdateResponse:
- allOf:
- - $ref: '#/components/schemas/StatusUpdateBase'
- - type: object
- properties:
- author:
- $ref: '#/components/schemas/UserCompact'
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- created_by:
- $ref: '#/components/schemas/UserCompact'
- hearted:
- description: >-
- *Deprecated - please use liked instead* True if the status is
- hearted by the authorized user, false if not.
- type: boolean
- example: true
- readOnly: true
- hearts:
- description: >-
- *Deprecated - please use likes instead* Array of likes for users
- who have hearted this status.
- type: array
- items:
- $ref: '#/components/schemas/Like'
- readOnly: true
- liked:
- description: >-
- True if the status is liked by the authorized user, false if not.
- type: boolean
- example: true
- likes:
- description: Array of likes for users who have liked this status.
- type: array
- items:
- $ref: '#/components/schemas/Like'
- readOnly: true
- modified_at:
- description: >-
- The time at which this project status was last modified.
-
- *Note: This does not currently reflect any changes in
- associations such as comments that may have been added or
- removed from the status.*
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- num_hearts:
- description: >-
- *Deprecated - please use likes instead* The number of users who
- have hearted this status.
- type: integer
- example: 5
- readOnly: true
- num_likes:
- description: The number of users who have liked this status.
- type: integer
- example: 5
- readOnly: true
- parent:
- allOf:
- - $ref: '#/components/schemas/ProjectCompact'
- - type: object
- description: >-
- The parent of the status update. This can be a project,
- goal or portfolio, and indicates that this status was sent
- on that object.
- StoryBase:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A story represents an activity associated with an object in the Asana
- system.
- x-docs-overrides:
- properties.resource_type.example: story
- properties:
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- resource_subtype:
- description: >-
- The subtype of this resource. Different subtypes retain many of the
- same fields and behavior, but may render differently in Asana or
- represent resources with different semantic meaning.
- type: string
- readOnly: true
- example: comment_added
- text:
- description: The plain text of the comment to add. Cannot be used with
- html_text.
- type: string
- example: This is a comment.
- html_text:
- description: >-
- [Opt In](/docs/inputoutput-options).
- HTML formatted text for a comment. This will not include the name
- of the creator.
- type: string
- example: This is a comment.
- is_pinned:
- description: >-
- *Conditional*. Whether the story should be pinned on the
- resource.
- type: boolean
- example: false
- sticker_name:
- description: >-
- The name of the sticker in this story. `null` if there is no sticker.
- type: string
- enum:
- - green_checkmark
- - people_dancing
- - dancing_unicorn
- - heart
- - party_popper
- - people_waving_flags
- - splashing_narwhal
- - trophy
- - yeti_riding_unicorn
- - celebrating_people
- - determined_climbers
- - phoenix_spreading_love
- example: dancing_unicorn
- StoryCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A story represents an activity associated with an object in the Asana
- system.
- x-docs-overrides:
- properties.resource_type.example: story
- properties:
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- created_by:
- $ref: '#/components/schemas/UserCompact'
- resource_subtype:
- description: >-
- The subtype of this resource. Different subtypes retain many of the
- same fields and behavior, but may render differently in Asana or
- represent resources with different semantic meaning.
- type: string
- readOnly: true
- example: comment_added
- text:
- description: >-
- *Create-only*. Human-readable text for the story or comment.
-
- This will not include the name of the creator.
-
- *Note: This is not guaranteed to be stable for a given type of
- story. For example, text for a reassignment may not always say
- “assigned to …” as the text for a story can both be edited and
- change based on the language settings of the user making the
- request.*
-
- Use the `resource_subtype` property to discover the action that
- created the story.
- type: string
- example: marked today
- StoryRequest:
- $ref: '#/components/schemas/StoryBase'
- StoryResponse:
- allOf:
- - $ref: '#/components/schemas/StoryBase'
- - type: object
- properties:
- created_by:
- $ref: '#/components/schemas/UserCompact'
- type:
- type: string
- enum:
- - comment
- - system
- readOnly: true
- example: comment
- is_editable:
- description: >-
- *Conditional*. Whether the text of the story can be edited
- after creation.
- type: boolean
- readOnly: true
- example: false
- is_edited:
- description: >-
- *Conditional*. Whether the text of the story has been edited
- after creation.
- type: boolean
- readOnly: true
- example: false
- hearted:
- description: >-
- *Deprecated - please use likes instead*
-
- *Conditional*. True if the story is hearted by the authorized
- user, false if not.
- type: boolean
- readOnly: true
- example: false
- hearts:
- description: |-
- *Deprecated - please use likes instead*
-
- *Conditional*. Array of likes for users who have hearted this story.
- type: array
- items:
- $ref: '#/components/schemas/Like'
- readOnly: true
- num_hearts:
- description: |-
- *Deprecated - please use likes instead*
-
- *Conditional*. The number of users who have hearted this story.
- type: integer
- readOnly: true
- example: 5
- liked:
- description: >-
- *Conditional*. True if the story is liked by the authorized
- user, false if not.
- type: boolean
- readOnly: true
- example: false
- likes:
- description: >-
- *Conditional*. Array of likes for users who have liked this story.
- type: array
- items:
- $ref: '#/components/schemas/Like'
- readOnly: true
- num_likes:
- description: >-
- *Conditional*. The number of users who have liked this story.
- type: integer
- readOnly: true
- example: 5
- previews:
- description: >-
- *Conditional*. A collection of previews to be displayed in the
- story.
-
-
- *Note: This property only exists for comment stories.*
- type: array
- items:
- $ref: '#/components/schemas/Preview'
- readOnly: true
- old_name:
- description: >-
- *Conditional*'
- type: string
- example: This was the Old Name
- new_name:
- description: >-
- *Conditional*
- type: string
- readOnly: true
- example: This is the New Name
- old_dates:
- $ref: '#/components/schemas/StoryResponseDates'
- new_dates:
- $ref: '#/components/schemas/StoryResponseDates'
- old_resource_subtype:
- description: >-
- *Conditional*
- type: string
- readOnly: true
- example: default_task
- new_resource_subtype:
- description: >-
- *Conditional*
- type: string
- readOnly: true
- example: milestone
- story:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/StoryCompact'
- readOnly: true
- assignee:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/UserCompact'
- readOnly: true
- follower:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/UserCompact'
- readOnly: true
- old_section:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/SectionCompact'
- readOnly: true
- new_section:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/SectionCompact'
- readOnly: true
- task:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/TaskCompact'
- readOnly: true
- project:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/ProjectCompact'
- readOnly: true
- tag:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/TagCompact'
- readOnly: true
- custom_field:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/CustomFieldCompact'
- readOnly: true
- old_text_value:
- description: >-
- *Conditional*
- type: string
- readOnly: true
- example: This was the Old Text
- new_text_value:
- description: >-
- *Conditional*
- type: string
- readOnly: true
- example: This is the New Text
- old_number_value:
- description: >-
- *Conditional*
- type: integer
- readOnly: true
- example: 1
- new_number_value:
- description: >-
- *Conditional*
- type: integer
- readOnly: true
- example: 2
- old_enum_value:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/EnumOption'
- readOnly: true
- new_enum_value:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/EnumOption'
- readOnly: true
- old_date_value:
- allOf:
- - $ref: '#/components/schemas/StoryResponseDates'
- - description: >-
- *Conditional*. The old value of a date custom field story.
- readOnly: true
- new_date_value:
- allOf:
- - $ref: '#/components/schemas/StoryResponseDates'
- - description: >-
- *Conditional* The new value of a date custom field story.
- readOnly: true
- old_people_value:
- description: >-
- *Conditional*. The old value of a people custom field story.
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- readOnly: true
- new_people_value:
- description: >-
- *Conditional*. The new value of a people custom field story.
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- readOnly: true
- old_multi_enum_values:
- description: >-
- *Conditional*. The old value of a multi-enum custom field story.
- type: array
- items:
- $ref: '#/components/schemas/EnumOption'
- readOnly: true
- new_multi_enum_values:
- description: >-
- *Conditional*. The new value of a multi-enum custom field story.
- type: array
- items:
- $ref: '#/components/schemas/EnumOption'
- readOnly: true
- new_approval_status:
- description: >-
- *Conditional*. The new value of approval status.
- type: string
- readOnly: true
- example: approved
- old_approval_status:
- description: >-
- *Conditional*. The old value of approval status.
- type: string
- readOnly: true
- example: pending
- duplicate_of:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/TaskCompact'
- readOnly: true
- duplicated_from:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/TaskCompact'
- readOnly: true
- dependency:
- description: >-
- *Conditional*
- $ref: '#/components/schemas/TaskCompact'
- readOnly: true
- source:
- description: >-
- The component of the Asana product the user used to trigger the
- story.
- type: string
- enum:
- - web
- - email
- - mobile
- - api
- - unknown
- readOnly: true
- example: web
- target:
- allOf:
- - $ref: '#/components/schemas/TaskCompact'
- - type: object
- readOnly: true
- description: >-
- The object this story is associated with. Currently may only be
- a
- task.
- StoryResponseDates:
- description: >-
- *Conditional*
- type: object
- readOnly: true
- properties:
- start_on:
- description: >-
- The day on which work for this goal begins, or null if the
- goal has no start date. This takes a date with `YYYY-MM-DD`
- format, and cannot be set unless there is an accompanying due date.
- type: string
- format: date
- example: '2019-09-14'
- nullable: true
- due_at:
- description: >-
- The UTC date and time on which this task is due, or null if the
- task has no due time. This takes an ISO 8601 date string in UTC
- and should not be used together with `due_on`.
- type: string
- format: date-time
- example: '2019-09-15T02:06:58.158Z'
- nullable: true
- due_on:
- description: >-
- The localized day on which this goal is due. This takes a
- date with format `YYYY-MM-DD`.
- type: string
- format: date
- example: '2019-09-15'
- TagBase:
- allOf:
- - $ref: '#/components/schemas/TagCompact'
- - type: object
- properties:
- color:
- type: string
- description: Color of the tag.
- nullable: true
- enum:
- - dark-pink
- - dark-green
- - dark-blue
- - dark-red
- - dark-teal
- - dark-brown
- - dark-orange
- - dark-purple
- - dark-warm-gray
- - light-pink
- - light-green
- - light-blue
- - light-red
- - light-teal
- - light-brown
- - light-orange
- - light-purple
- - light-warm-gray
- example: light-green
- notes:
- description: >-
- Free-form textual information associated with the
- tag (i.e. its description).
- type: string
- example: Mittens really likes the stuff from Humboldt.
- TagCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *tag* is a label that can be attached to any task in Asana. It
- exists in a single workspace or organization.
- x-docs-overrides:
- properties.resource_type.example: tag
- properties:
- name:
- description: >-
- Name of the tag. This is generally a short sentence fragment that
- fits on a line in the UI for maximum readability. However, it can
- be longer.
- type: string
- example: Stuff to buy
- TagRequest:
- allOf:
- - $ref: '#/components/schemas/TagBase'
- - type: object
- properties:
- followers:
- type: array
- description: >-
- An array of strings identifying users. These can either be the
- string "me", an email, or the gid of a user.
- items:
- type: string
- example:
- - '12345'
- - '42563'
- workspace:
- type: string
- x-env-variable: true
- description: >-
- Gid of an object.
- example: '12345'
- TagResponse:
- allOf:
- - $ref: '#/components/schemas/TagBase'
- - type: object
- properties:
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- followers:
- description: Array of users following this tag.
- type: array
- readOnly: true
- items:
- $ref: '#/components/schemas/UserCompact'
- workspace:
- $ref: '#/components/schemas/WorkspaceCompact'
- permalink_url:
- type: string
- readOnly: true
- description: >-
- A url that points directly to the object within Asana.
- example: https://app.asana.com/0/resource/123456789/list
- TaskAddFollowersRequest:
- type: object
- properties:
- followers:
- description: >-
- An array of strings identifying users. These can either be the string
- "me", an email, or the gid of a user.
- type: array
- items:
- type: string
- example:
- - '13579'
- - '321654'
- required:
- - followers
- TaskAddProjectRequest:
- type: object
- properties:
- project:
- description: The project to add the task to.
- type: string
- example: '13579'
- insert_after:
- description: >-
- A task in the project to insert the task after, or `null`
- to insert at the beginning of the list.
- type: string
- nullable: true
- example: '124816'
- insert_before:
- description: >-
- A task in the project to insert the task before, or
- `null` to insert at the end of the list.
- type: string
- nullable: true
- example: '432134'
- section:
- description: >-
- A section in the project to insert the task into. The
- task will be inserted at the bottom of the section.
- type: string
- nullable: true
- example: '987654'
- required:
- - project
- TaskAddTagRequest:
- type: object
- properties:
- tag:
- description: The tag to add to the task.
- type: string
- example: '13579'
- required:
- - tag
- TaskBase:
- allOf:
- - $ref: '#/components/schemas/TaskCompact'
- - type: object
- properties:
- approval_status:
- type: string
- description: >-
- *Conditional* Reflects the approval status of this task. This
- field is kept in sync with `completed`, meaning `pending`
- translates to false while `approved`, `rejected`, and
- `changes_requested` translate to true. If you set completed
- to true, this field will be set to `approved`.
- enum:
- - pending
- - approved
- - rejected
- - changes_requested
- example: pending
- assignee_status:
- description: >-
- *Deprecated* Scheduling status of this task for the user it is assigned
- to.
- This field can only be set if the assignee is non-null.
- Setting this field to "inbox" or "upcoming" inserts it at the top
- of the section, while the other options will insert at the bottom.
- type: string
- enum:
- - today
- - upcoming
- - later
- - new
- - inbox
- example: upcoming
- completed:
- description: >-
- True if the task is currently marked complete, false if not.
- type: boolean
- example: false
- completed_at:
- description: >-
- The time at which this task was completed, or null if the task is
- incomplete.
- type: string
- format: date-time
- readOnly: true
- nullable: true
- example: '2012-02-22T02:06:58.147Z'
- completed_by:
- readOnly: true
- $ref: '#/components/schemas/UserCompact'
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- dependencies:
- description: >-
- [Opt
- In](/docs/inputoutput-options).
- Array of resources referencing tasks that this task depends on.
- The objects contain only the gid of the dependency.
- type: array
- items:
- $ref: '#/components/schemas/AsanaResource'
- readOnly: true
- dependents:
- description: >-
- [Opt
- In](/docs/inputoutput-options).
- Array of resources referencing tasks that depend on this task. The
- objects contain only the ID of the dependent.
- type: array
- items:
- $ref: '#/components/schemas/AsanaResource'
- readOnly: true
- due_at:
- description: >-
- The UTC date and time on which this task is due, or null if the
- task has no due time. This takes an ISO 8601 date string in UTC
- and should not be used together with `due_on`.
- type: string
- format: date
- example: '2019-09-15T02:06:58.147Z'
- nullable: true
- due_on:
- description: >-
- The localized date on which this task is due, or null if the task
- has no due date. This takes a date with `YYYY-MM-DD` format and
- should not be used together with `due_at`.
- type: string
- format: date
- example: '2019-09-15'
- nullable: true
- external:
- description: >-
- *OAuth Required*. *Conditional*. This field is returned only
- if external values are set or included by using [Opt In]
- (/docs/inputoutput-options).
-
- The external field allows you to store app-specific metadata on
- tasks, including a gid that can be used to retrieve tasks and a
- data blob that can store app-specific character strings. Note that
- you will need to authenticate with Oauth to access or modify this
- data. Once an external gid is set, you can use the notation
- `external:custom_gid` to reference your object anywhere in the API
- where you may use the original object gid. See the page on Custom
- External Data for more details.
- type: object
- properties:
- gid:
- type: string
- example: '1234'
- data:
- type: string
- example: A blob of information.
- example:
- gid: my_gid
- data: A blob of information
- html_notes:
- description: >-
- [Opt
- In](/docs/inputoutput-options).
- The notes of the text with formatting as HTML.
- type: string
- example: >-
- Mittens really likes the stuff from
- Humboldt.
- hearted:
- description: >-
- *Deprecated - please use liked instead* True if the task is
- hearted by the authorized user, false if not.
- type: boolean
- example: true
- readOnly: true
- hearts:
- description: >-
- *Deprecated - please use likes instead* Array of likes for users
- who have hearted this task.
- type: array
- items:
- $ref: '#/components/schemas/Like'
- readOnly: true
- is_rendered_as_separator:
- description: >-
- [Opt In](/docs/inputoutput-options).
- In some contexts tasks can be rendered as a visual separator;
- for instance, subtasks can appear similar to
- [sections](/reference/sections) without being true
- `section` objects. If a `task` object is rendered this way in any
- context it will have the property `is_rendered_as_separator` set
- to `true`.
- type: boolean
- example: false
- readOnly: true
- liked:
- description: >-
- True if the task is liked by the authorized user, false if not.
- type: boolean
- example: true
- likes:
- description: Array of likes for users who have liked this task.
- type: array
- items:
- $ref: '#/components/schemas/Like'
- readOnly: true
- memberships:
- description: >-
- *Create-only*. Array of projects this task is associated with
- and the section it is in. At task creation time, this array can be
- used to add the task to specific sections. After task creation,
- these associations can be modified using the `addProject` and
- `removeProject` endpoints. Note that over time, more types of
- memberships may be added to this property.
- type: array
- readOnly: true
- items:
- type: object
- properties:
- project:
- $ref: '#/components/schemas/ProjectCompact'
- section:
- $ref: '#/components/schemas/SectionCompact'
- modified_at:
- description: |-
- The time at which this task was last modified.
-
- *Note: This does not currently reflect any changes in
- associations such as projects or comments that may have been
- added or removed from the task.*
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- name:
- description: >-
- Name of the task. This is generally a short sentence fragment that
- fits on a line in the UI for maximum readability. However, it can
- be longer.
- type: string
- example: Buy catnip
- notes:
- description: >-
- Free-form textual information associated with the
- task (i.e. its description).
- type: string
- example: Mittens really likes the stuff from Humboldt.
- num_hearts:
- description: >-
- *Deprecated - please use likes instead* The number of users who
- have hearted this task.
- type: integer
- example: 5
- readOnly: true
- num_likes:
- description: The number of users who have liked this task.
- type: integer
- example: 5
- readOnly: true
- num_subtasks:
- description: >
- [Opt
- In](/docs/inputoutput-options).
- The number of subtasks on this task.
- type: integer
- example: 3
- readOnly: true
- start_at:
- description: >-
- Date and time on which work begins for the task, or null if the task
- has no start time. This takes an ISO 8601 date string in UTC
- and should not be used together with `start_on`.
-
- *Note: `due_at` must be present in the request when
- setting or unsetting the `start_at` parameter.*
- type: string
- nullable: true
- format: date
- example: '2019-09-14T02:06:58.147Z'
- start_on:
- description: >-
- The day on which work begins for the task , or null if the task
- has no start date. This takes a date with `YYYY-MM-DD` format and
- should not be used together with `start_at`.
-
- *Note: `due_on` or `due_at` must be present in the request when
- setting or unsetting the `start_on` parameter.*
- type: string
- nullable: true
- format: date
- example: '2019-09-14'
- actual_time_minutes:
- description: >-
- This value represents the sum of all the Time Tracking entries in
- the Actual Time field on a given Task. It is represented as a nullable
- long value.
- type: number
- example: 200
- readOnly: true
- nullable: true
- TaskCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- The *task* is the basic object around which many operations in Asana
- are centered.
- x-docs-overrides:
- properties.resource_type.example: task
- properties:
- name:
- description: The name of the task.
- type: string
- example: Bug Task
- resource_subtype:
- type: string
- description: >-
- The subtype of this resource. Different subtypes retain many of
- the same fields and behavior, but may render differently in Asana
- or represent resources with different semantic meaning.
-
- The resource_subtype `milestone` represent a single moment in
- time. This means tasks with this subtype cannot have a start_date.
- enum:
- - default_task
- - milestone
- - section
- - approval
- example: default_task
- TaskCountResponse:
- description: A response object returned from the task count endpoint.
- type: object
- properties:
- num_tasks:
- description: The number of tasks in a project.
- type: integer
- example: 200
- num_incomplete_tasks:
- description: The number of incomplete tasks in a project.
- type: integer
- example: 50
- num_completed_tasks:
- description: The number of completed tasks in a project.
- type: integer
- example: 150
- num_milestones:
- description: The number of milestones in a project.
- type: integer
- example: 10
- num_incomplete_milestones:
- description: The number of incomplete milestones in a project.
- type: integer
- example: 7
- num_completed_milestones:
- description: The number of completed milestones in a project.
- type: integer
- example: 3
- TaskDuplicateRequest:
- type: object
- properties:
- name:
- description: The name of the new task.
- type: string
- example: New Task Name
- include:
- description: The fields that will be duplicated to the new task.
- type: string
- enum:
- - notes
- - assignee
- - subtasks
- - attachments
- - tags
- - followers
- - projects
- - dates
- - dependencies
- - parent
- example:
- - notes
- - assignee
- TaskRemoveFollowersRequest:
- type: object
- properties:
- followers:
- description: >-
- An array of strings identifying users. These can either be the string
- "me", an email, or the gid of a user.
- type: array
- items:
- type: string
- example:
- - '13579'
- - '321654'
- required:
- - followers
- TaskRemoveProjectRequest:
- type: object
- properties:
- project:
- description: The project to remove the task from.
- type: string
- example: '13579'
- required:
- - project
- TaskRemoveTagRequest:
- type: object
- properties:
- tag:
- description: The tag to remove from the task.
- type: string
- example: '13579'
- required:
- - tag
- TaskRequest:
- allOf:
- - $ref: '#/components/schemas/TaskBase'
- - type: object
- properties:
- assignee:
- type: string
- readOnly: false
- x-env-variable: true
- description: >-
- Gid of a user.
- example: '12345'
- nullable: true
- assignee_section:
- nullable: true
- type: string
- description: >-
- The *assignee section* is a subdivision of a project that groups
- tasks together in the assignee's "My Tasks" list. It can either be
- a
- header above a list of tasks in a list view or a column in a board
- view of "My Tasks."
-
- The `assignee_section` property will be returned in the response only
- if the request was sent by the user who is the assignee of the task.
- Note that you can only write to `assignee_section` with the gid of
- an
- existing section visible in the user's "My Tasks" list.
- example: '12345'
- custom_fields:
- description: >-
- An object where each key is a Custom Field GID and each value is
- an enum GID, string, number, object, or array.
- type: object
- additionalProperties:
- type: string
- description: >-
- "{custom_field_gid}" => Value (Can be text, number, etc.)
- example:
- 5678904321: On Hold
- 4578152156: Not Started
- followers:
- type: array
- description: >-
- *Create-Only* An array of strings identifying users. These can
- either be the string "me", an email, or the gid of a user. In
- order to change followers on an existing task use `addFollowers`
- and `removeFollowers`.
- items:
- type: string
- description: >-
- Gid of a user.
- example:
- - '12345'
- parent:
- type: string
- readOnly: false
- x-env-variable: true
- description: >-
- Gid of a task.
- example: '12345'
- nullable: true
- projects:
- type: array
- description: >-
- *Create-Only* Array of project gids. In order to change projects on
- an
- existing task use `addProject` and `removeProject`.
- items:
- type: string
- description: >-
- Gid of a project.
- example:
- - '12345'
- tags:
- type: array
- description: >-
- *Create-Only* Array of tag gids. In order to change tags on an
- existing task use `addTag` and `removeTag`.
- items:
- type: string
- description: >-
- Gid of a tag.
- example:
- - '12345'
- workspace:
- type: string
- readOnly: false
- x-env-variable: true
- description: >-
- Gid of a workspace.
- example: '12345'
- TaskResponse:
- allOf:
- - $ref: '#/components/schemas/TaskBase'
- - type: object
- properties:
- assignee:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/UserCompact'
- assignee_section:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/SectionCompact'
- - description: >-
- The *assignee section* is a subdivision of a project that groups
- tasks together in the assignee's "My Tasks" list. It can either
- be a
- header above a list of tasks in a list view or a column in a board
- view of "My Tasks."
-
- The `assignee_section` property will be returned in the response
- only
- if the request was sent by the user who is the assignee of the
- task.
- Note that you can only write to `assignee_section` with the gid
- of an
- existing section visible in the user's "My Tasks" list.
- custom_fields:
- description: >-
- Array of custom field values applied to the task. These
- represent the custom field values recorded on this project for a
- particular custom field. For example, these custom field values
- will contain an `enum_value` property for custom fields of type
- `enum`, a `text_value` property for custom fields of type
- `text`, and so on. Please note that the `gid` returned on each
- custom field value *is identical* to the `gid` of the custom field,
- which allows referencing the custom field metadata through the
- `/custom_fields/custom_field-gid` endpoint.
- type: array
- items:
- $ref: '#/components/schemas/CustomFieldResponse'
- readOnly: true
- followers:
- description: Array of users following this task.
- type: array
- readOnly: true
- items:
- $ref: '#/components/schemas/UserCompact'
- parent:
- allOf:
- - $ref: '#/components/schemas/TaskCompact'
- - type: object
- readOnly: true
- description: >-
- The parent of this task, or `null` if this is not a subtask.
- This property cannot be modified using a PUT request but you
- can change it with the `setParent` endpoint. You can create
- subtasks by using the subtasks endpoint.
- nullable: true
- projects:
- description: >-
- *Create-only.* Array of projects this task is associated with.
- At task creation time, this array can be used to add the task to
- many projects at once. After task creation, these associations can
- be modified using the addProject and removeProject endpoints.
- type: array
- readOnly: true
- items:
- $ref: '#/components/schemas/ProjectCompact'
- tags:
- description: >-
- Array of tags associated with this task. In order to change tags on
- an
- existing task use `addTag` and `removeTag`.
- type: array
- readOnly: true
- items:
- $ref: '#/components/schemas/TagCompact'
- example:
- - gid: '59746'
- name: Grade A
- workspace:
- allOf:
- - $ref: '#/components/schemas/WorkspaceCompact'
- - type: object
- readOnly: true
- description: >-
- *Create-only*. The workspace this task is associated with.
- Once created, task cannot be moved to a different workspace.
- This attribute can only be specified at creation time.
- permalink_url:
- type: string
- readOnly: true
- description: >-
- A url that points directly to the object within Asana.
- example: https://app.asana.com/0/resource/123456789/list
- TaskSetParentRequest:
- type: object
- properties:
- parent:
- description: >-
- The new parent of the task, or `null` for no parent.
- type: string
- example: '987654'
- insert_after:
- description: >-
- A subtask of the parent to insert the task after, or `null` to
- insert at the beginning of the list.
- type: string
- example: 'null'
- insert_before:
- description: >-
- A subtask of the parent to insert the task before, or `null` to
- insert at the end of the list.
- type: string
- example: '124816'
- required:
- - parent
- TeamAddUserRequest:
- type: object
- description: A user identification object for specification with the addUser/removeUser
- endpoints.
- properties:
- user:
- description: >-
- A string identifying a user. This can either be the string "me", an email,
- or the gid of a user.
- type: string
- example: '12345'
- TeamBase:
- $ref: '#/components/schemas/TeamCompact'
- TeamCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *team* is used to group related projects and people together within
- an organization. Each project in an organization is associated with a
- team.
- x-docs-overrides:
- properties.resource_type.example: team
- properties:
- name:
- description: The name of the team.
- type: string
- example: Marketing
- TeamMembershipBase:
- $ref: '#/components/schemas/TeamMembershipCompact'
- TeamMembershipCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- This object represents a user's connection to a team.
- x-docs-overrides:
- properties.resource_type.example: team_membership
- properties:
- user:
- $ref: '#/components/schemas/UserCompact'
- team:
- $ref: '#/components/schemas/TeamCompact'
- is_guest:
- type: boolean
- description: >-
- Describes if the user is a guest in the team.
- example: false
- is_limited_access:
- type: boolean
- description: >-
- Describes if the user has limited access to the team.
- example: false
- is_admin:
- type: boolean
- description: >-
- Describes if the user is a team admin.
- example: false
- TeamMembershipResponse:
- $ref: '#/components/schemas/TeamMembershipBase'
- TeamRemoveUserRequest:
- type: object
- description: A user identification object for specification with the addUser/removeUser
- endpoints.
- properties:
- user:
- description: >-
- A string identifying a user. This can either be the string "me", an email,
- or the gid of a user.
- type: string
- example: '12345'
- TeamRequest:
- allOf:
- - $ref: '#/components/schemas/TeamBase'
- - type: object
- properties:
- description:
- description: >
- The description of the team.
- type: string
- example: All developers should be members of this team.
- html_description:
- description: >
- The description of the team with formatting as HTML.
- type: string
- example: >-
- All developers should be members of this
- team.
- organization:
- type: string
- description: >
- The organization/workspace the team belongs to. This must be the same
- organization you are in and cannot be changed once set.
- example: '123456789'
- visibility:
- description: >
- The visibility of the team to users in the same organization
- type: string
- enum:
- - secret
- - request_to_join
- - public
- edit_team_name_or_description_access_level:
- description: >
- Controls who can edit team name and description
- type: string
- enum:
- - all_team_members
- - only_team_admins
- edit_team_visibility_or_trash_team_access_level:
- description: >
- Controls who can edit team visibility and trash teams
- type: string
- enum:
- - all_team_members
- - only_team_admins
- member_invite_management_access_level:
- description: >
- Controls who can accept or deny member invites for a given team
- type: string
- enum:
- - all_team_members
- - only_team_admins
- guest_invite_management_access_level:
- description: >
- Controls who can accept or deny guest invites for a given team
- type: string
- enum:
- - all_team_members
- - only_team_admins
- join_request_management_access_level:
- description: >
- Controls who can accept or deny join team requests for a Membership
- by Request team
- type: string
- enum:
- - all_team_members
- - only_team_admins
- team_member_removal_access_level:
- description: >
- Controls who can remove team members
- type: string
- enum:
- - all_team_members
- - only_team_admins
- TeamResponse:
- allOf:
- - $ref: '#/components/schemas/TeamBase'
- - type: object
- properties:
- description:
- description: >
- [Opt
- In](/docs/inputoutput-options).
- The description of the team.
- type: string
- example: All developers should be members of this team.
- html_description:
- description: >
- [Opt
- In](/docs/inputoutput-options).
- The description of the team with formatting as HTML.
- type: string
- example: >-
- All developers should be members of this
- team.
- organization:
- allOf:
- - $ref: '#/components/schemas/WorkspaceCompact'
- - type: object
- description: |
- The organization/workspace the team belongs to.
- permalink_url:
- type: string
- readOnly: true
- description: >-
- A url that points directly to the object within Asana.
- example: https://app.asana.com/0/resource/123456789/list
- visibility:
- description: >
- The visibility of the team to users in the same organization
- type: string
- enum:
- - secret
- - request_to_join
- - public
- edit_team_name_or_description_access_level:
- description: >
- Controls who can edit team name and description
- type: string
- enum:
- - all_team_members
- - only_team_admins
- edit_team_visibility_or_trash_team_access_level:
- description: >
- Controls who can edit team visibility and trash teams
- type: string
- enum:
- - all_team_members
- - only_team_admins
- member_invite_management_access_level:
- description: >
- Controls who can accept or deny member invites for a given team
- type: string
- enum:
- - all_team_members
- - only_team_admins
- guest_invite_management_access_level:
- description: >
- Controls who can accept or deny guest invites for a given team
- type: string
- enum:
- - all_team_members
- - only_team_admins
- join_request_management_access_level:
- description: >
- Controls who can accept or deny join team requests for a Membership
- by Request team
- type: string
- enum:
- - all_team_members
- - only_team_admins
- team_member_removal_access_level:
- description: >
- Controls who can remove team members
- type: string
- enum:
- - all_team_members
- - only_team_admins
- TemplateRole:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- properties:
- name:
- type: string
- description: >-
- Name of the template role.
- example: Designer
- TimePeriodBase:
- allOf:
- - $ref: '#/components/schemas/TimePeriodCompact'
- - type: object
- properties:
- parent:
- $ref: '#/components/schemas/TimePeriodCompact'
- TimePeriodCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- x-docs-overrides:
- properties.resource_type.example: time_period
- properties:
- end_on:
- type: string
- description: >-
- The localized end date of the time period in `YYYY-MM-DD` format.
- example: '2019-09-14'
- start_on:
- type: string
- description: >-
- The localized start date of the time period in `YYYY-MM-DD` format.
- example: '2019-09-13'
- period:
- type: string
- description: >-
- The cadence and index of the time period. The value is one of: `FY`,
- `H1`, `H2`, `Q1`, `Q2`, `Q3`, or `Q4`.
- enum:
- - FY
- - H1
- - H2
- - Q1
- - Q2
- - Q3
- - Q4
- example: Q1
- display_name:
- type: string
- description: >-
- A string representing the cadence code and the fiscal year.
- example: Q1 FY22
- TimePeriodResponse:
- allOf:
- - $ref: '#/components/schemas/TimePeriodBase'
- - type: object
- UserBase:
- $ref: '#/components/schemas/UserCompact'
- UserCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *user* object represents an account in Asana that can be given
- access to various workspaces, projects, and tasks.
- x-docs-overrides:
- properties.resource_type.example: user
- properties:
- name:
- type: string
- description: >-
- *Read-only except when same user as requester*. The user’s name.
- example: Greg Sanchez
- UserRequest:
- $ref: '#/components/schemas/UserBase'
- UserBaseResponse:
- allOf:
- - $ref: '#/components/schemas/UserBase'
- - type: object
- properties:
- email:
- type: string
- format: email
- readOnly: true
- description: The user's email address.
- example: gsanchez@example.com
- photo:
- type: object
- nullable: true
- properties:
- image_21x21:
- type: string
- format: uri
- image_27x27:
- type: string
- format: uri
- image_36x36:
- type: string
- format: uri
- image_60x60:
- type: string
- format: uri
- image_128x128:
- type: string
- format: uri
- image_1024x1024:
- type: string
- format: uri
- readOnly: true
- description: >-
- A map of the user’s profile photo in various sizes, or null if no
- photo is set. Sizes provided are 21, 27, 36, 60, 128, and 1024. All
- images
- are in PNG format, except for 1024 (which is in JPEG format).
- example:
- image_21x21: https://...
- image_27x27: https://...
- image_36x36: https://...
- image_60x60: https://...
- image_128x128: https://...
- image_1024x1024: https://...
- UserResponse:
- allOf:
- - $ref: '#/components/schemas/UserBaseResponse'
- - type: object
- properties:
- workspaces:
- description: >-
- Workspaces and organizations this user may access.
-
- Note\: The API will only return workspaces and organizations that
- also contain the authenticated user.
- readOnly: true
- type: array
- items:
- $ref: '#/components/schemas/WorkspaceCompact'
- UserTaskListBase:
- $ref: '#/components/schemas/UserTaskListCompact'
- UserTaskListCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A user task list represents the tasks assigned to a particular user.
- It provides API access to a user’s [My Tasks](https://asana.com/guide/help/fundamentals/my-tasks)
- view in Asana.
- x-docs-overrides:
- properties.resource_type.example: user_task_list
- properties:
- name:
- description: The name of the user task list.
- type: string
- example: My Tasks in My Workspace
- owner:
- description: >-
- The owner of the user task list, i.e. the person whose My
- Tasks is represented by this resource.
- readOnly: true
- allOf:
- - $ref: '#/components/schemas/UserCompact'
- workspace:
- description: The workspace in which the user task list is located.
- readOnly: true
- allOf:
- - $ref: '#/components/schemas/WorkspaceCompact'
- UserTaskListRequest:
- $ref: '#/components/schemas/UserTaskListBase'
- UserTaskListResponse:
- $ref: '#/components/schemas/UserTaskListBase'
- WebhookCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- Webhook objects represent the state of an active subscription for a
- server to be updated with information from Asana. This schema
- represents the subscription itself, not the objects that are sent to
- the server. For information on those please refer to the
- [event](/reference/events) schema.
- x-docs-overrides:
- properties.resource_type.example: webhook
- properties:
- active:
- description: >-
- If true, the webhook will send events - if false it is considered
- inactive and will not generate events.
- type: boolean
- readOnly: true
- example: false
- resource:
- $ref: '#/components/schemas/AsanaNamedResource'
- target:
- description: The URL to receive the HTTP POST.
- type: string
- format: uri
- readOnly: true
- example: https://example.com/receive-webhook/7654
- WebhookFilter:
- type: object
- description: >-
- A WebhookFilter can be passed on creation of a webhook in order to filter
- the types of actions that trigger delivery of an
- [event](/reference/events)
- properties:
- resource_type:
- type: string
- description: >-
- The type of the resource which created the event when modified; for
- example, to filter to changes on regular tasks this field should be
- set to `task`.
- example: task
- resource_subtype:
- description: >-
- The resource subtype of the resource that the filter applies to. This
- should be set to the same value as is returned on the
- `resource_subtype` field on the resources themselves.
- type: string
- example: milestone
- action:
- type: string
- description: >-
- The type of change on the **resource** to pass through the filter.
- For more information refer to `Event.action` in the
- [event](/reference/events) schema. This can be one of
- `changed`, `added`, `removed`, `deleted`, and `undeleted` depending
- on the nature of what has occurred on the resource.
- example: changed
- fields:
- type: array
- description: >-
- *Conditional.* A whitelist of fields for events which will pass the
- filter when the resource is changed. These can be any combination of
- the fields on the resources themselves. This field is only valid for
- `action` of type `changed`
- items:
- type: string
- example:
- - due_at
- - due_on
- - dependencies
- WebhookRequest:
- type: object
- properties:
- resource:
- description: >-
- A resource ID to subscribe to. Many Asana resources are valid to
- create webhooks on, but higher-level resources require filters.
- type: string
- example: '12345'
- target:
- description: >-
- The URL to receive the HTTP POST. The full URL will be used to
- deliver events from this webhook (including parameters) which allows
- encoding of application-specific state when the webhook is created.
- type: string
- format: uri
- example: >-
- https://example.com/receive-webhook/7654?app_specific_param=app_specific_value
- filters:
- type: array
- description: >-
- An array of WebhookFilter objects to specify a whitelist of filters
- to apply to events from this webhook. If a webhook event passes any
- of the filters the event will be delivered; otherwise no event will
- be sent to the receiving server.
- items:
- allOf:
- - $ref: '#/components/schemas/WebhookFilter'
- - description: >-
- A set of filters to specify a whitelist for what types of
- events will be delivered.
- - type: object
- required:
- - resource
- - target
- WebhookResponse:
- allOf:
- - $ref: '#/components/schemas/WebhookCompact'
- - type: object
- properties:
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- last_failure_at:
- description: >-
- The timestamp when the webhook last received an error when sending
- an event to the target.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- last_failure_content:
- description: >-
- The contents of the last error response sent to the webhook when
- attempting to deliver events to the target.
- type: string
- readOnly: true
- example: 500 Server Error\n\nCould not complete the request
- last_success_at:
- description: >-
- The timestamp when the webhook last successfully sent an event to
- the target.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- filters:
- description: >-
- Whitelist of filters to apply to events from this webhook. If a
- webhook event passes any of the filters the event will be
- delivered; otherwise no event will be sent to the receiving server.
- type: array
- items:
- allOf:
- - $ref: '#/components/schemas/WebhookFilter'
- - description: A set of filters to specify a whitelist for what
- types of events will be delivered.
- - type: object
- WebhookUpdateRequest:
- type: object
- properties:
- filters:
- type: array
- description: >-
- An array of WebhookFilter objects to specify a whitelist of filters
- to apply to events from this webhook. If a webhook event passes any
- of the filters the event will be delivered; otherwise no event will
- be sent to the receiving server.
- items:
- allOf:
- - $ref: '#/components/schemas/WebhookFilter'
- - description: >-
- A set of filters to specify a whitelist for what types of
- events will be delivered.
- - type: object
- WorkspaceAddUserRequest:
- type: object
- description: A user identification object for specification with the addUser/removeUser
- endpoints.
- properties:
- user:
- description: >-
- A string identifying a user. This can either be the string "me", an email,
- or the gid of a user.
- type: string
- example: '12345'
- WorkspaceBase:
- $ref: '#/components/schemas/WorkspaceCompact'
- WorkspaceCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- A *workspace* is the highest-level organizational unit in Asana. All
- projects and tasks have an associated workspace.
- x-docs-overrides:
- properties.resource_type.example: workspace
- properties:
- name:
- description: The name of the workspace.
- type: string
- example: My Company Workspace
- WorkspaceMembershipBase:
- $ref: '#/components/schemas/WorkspaceMembershipCompact'
- WorkspaceMembershipCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: >-
- This object determines if a user is a member of a workspace.
- x-docs-overrides:
- properties.resource_type.example: workspace_membership
- properties:
- user:
- $ref: '#/components/schemas/UserCompact'
- workspace:
- $ref: '#/components/schemas/WorkspaceCompact'
- WorkspaceMembershipRequest:
- $ref: '#/components/schemas/WorkspaceMembershipBase'
- WorkspaceMembershipResponse:
- allOf:
- - $ref: '#/components/schemas/WorkspaceMembershipBase'
- - type: object
- properties:
- user_task_list:
- $ref: '#/components/schemas/UserTaskListResponse'
- description: >-
- The user's "My Tasks" in the workspace.
- readOnly: true
- is_active:
- type: boolean
- readOnly: true
- description: >-
- Reflects if this user still a member of the workspace.
- is_admin:
- type: boolean
- readOnly: true
- description: >-
- Reflects if this user is an admin of the workspace.
- is_guest:
- type: boolean
- readOnly: true
- description: >-
- Reflects if this user is a guest of the workspace.
- vacation_dates:
- type: object
- readOnly: true
- nullable: true
- description: >-
- Contains keys `start_on` and `end_on` for the vacation dates for the
- user in this workspace.
- If `start_on` is null, the entire `vacation_dates` object will be
- null.
- If `end_on` is before today, the entire `vacation_dates` object will
- be null.
- properties:
- start_on:
- description: The day on which the user's vacation in this workspace
- starts. This is a date with `YYYY-MM-DD` format.
- type: string
- example: '2022-11-05'
- end_on:
- description: The day on which the user's vacation in this workspace
- ends, or null if there is no end date. This is a date with `YYYY-MM-DD`
- format.
- nullable: true
- type: string
- example: '2022-11-07'
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- WorkspaceRemoveUserRequest:
- type: object
- description: A user identification object for specification with the addUser/removeUser
- endpoints.
- properties:
- user:
- description: >-
- A string identifying a user. This can either be the string "me", an email,
- or the gid of a user.
- type: string
- example: '12345'
- WorkspaceRequest:
- $ref: '#/components/schemas/WorkspaceBase'
- WorkspaceResponse:
- allOf:
- - $ref: '#/components/schemas/WorkspaceBase'
- - type: object
- properties:
- email_domains:
- description: The email domains that are associated with this workspace.
- type: array
- items:
- type: string
- format: uri
- example:
- - asana.com
- is_organization:
- description: Whether the workspace is an *organization*.
- type: boolean
- example: false
- GoalMembershipBase:
- $ref: '#/components/schemas/GoalMembershipCompact'
- GoalMembershipCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- description: This object represents a user's connection to a goal.
- x-docs-overrides:
- properties.resource_type.example: goal_membership
- properties:
- member:
- $ref: '#/components/schemas/MemberCompact'
- goal:
- $ref: '#/components/schemas/GoalCompact'
- is_commenter:
- type: boolean
- description: Describes if the member is comment only in goal.
- example: false
- is_editor:
- type: boolean
- description: Describes if the member is editor in goal.
- example: false
- GoalMembershipResponse:
- $ref: '#/components/schemas/GoalMembershipBase'
- MembershipRequest:
- type: object
- properties:
- is_active:
- description: >-
- *Optional*. Denotes if a member is active. Applies to all memberships
- type: boolean
- example: true
- is_guest:
- description: >-
- *Optional*. Denotes if a member is a guest. Applies to only `team` memberships.
- type: boolean
- example: true
- is_admin:
- description: >-
- *Optional*. Denotes if a member is an admin. Applies to only `team` memberships.
- type: boolean
- example: false
- CreateMembershipRequest:
- allOf:
- - $ref: '#/components/schemas/MembershipRequest'
- - type: object
- properties:
- member:
- description: The gid of the user or team
- type: string
- example: 12345
- parent:
- description: The gid of the `portfolio`, `team`, `project`, or `goal`
- type: string
- example: true
- MembershipResponse:
- anyOf:
- - $ref: '#/components/schemas/ProjectMembershipResponse'
- - $ref: '#/components/schemas/PortfolioMembershipResponse'
- - $ref: '#/components/schemas/TeamMembershipResponse'
- - $ref: '#/components/schemas/GoalMembershipResponse'
- - $ref: '#/components/schemas/WorkspaceMembershipResponse'
- UpdateTimeTrackingEntryRequest:
- type: object
- properties:
- duration_minutes:
- description: >-
- *Optional*. Time in minutes tracked by the entry
- type: integer
- example: 12
- entered_on:
- description: >-
- *Optional*. The day that this entry is logged on. Defaults to today if
- no day specified
- type: string
- format: date
- example: '2023-03-19'
- CreateTimeTrackingEntryRequest:
- type: object
- properties:
- duration_minutes:
- description: >-
- Time in minutes tracked by the entry. Must be greater than 0
- type: integer
- example: 12
- entered_on:
- description: >-
- *Optional*. The day that this entry is logged on. Defaults to today if
- not specified
- type: string
- format: date
- example: '2023-03-19'
- TimeTrackingEntryCompact:
- allOf:
- - $ref: '#/components/schemas/AsanaResource'
- - type: object
- properties:
- duration_minutes:
- description: >-
- Time in minutes tracked by the entry.
- type: integer
- example: 12
- entered_on:
- description: >-
- The day that this entry is logged on.
- type: string
- format: date
- example: '2015-03-14'
- created_by:
- $ref: '#/components/schemas/UserCompact'
- readOnly: true
- TimeTrackingEntryBase:
- allOf:
- - $ref: '#/components/schemas/TimeTrackingEntryCompact'
- - type: object
- properties:
- task:
- $ref: '#/components/schemas/TaskCompact'
- readOnly: true
- created_at:
- description: The time at which this resource was created.
- type: string
- format: date-time
- readOnly: true
- example: '2012-02-22T02:06:58.147Z'
- securitySchemes:
- personalAccessToken:
- type: http
- description: >-
- A personal access token allows access to the api for the user who
- created it. This should be kept a secret and be treated like a
- password.
- scheme: bearer
- oauth2:
- type: oauth2
- description: >-
- We require that applications designed to access the Asana API on behalf
- of multiple users implement OAuth 2.0.
-
- Asana supports the Authorization Code Grant flow.
- flows:
- authorizationCode:
- authorizationUrl: https://app.asana.com/-/oauth_authorize
- tokenUrl: https://app.asana.com/-/oauth_token
- refreshUrl: https://app.asana.com/-/oauth_token
- scopes:
- default: >-
- Provides access to all endpoints documented in our API reference.
- If no scopes are requested, this scope is assumed by default.
- openid: >-
- Provides access to OpenID Connect ID tokens and the OpenID Connect
- user info endpoint.
- email: >-
- Provides access to the user’s email through the OpenID Connect
- user info endpoint.
- profile: >-
- Provides access to the user’s name and profile photo through the
- OpenID Connect user info endpoint.
-paths:
- /attachments/{attachment_gid}:
- parameters:
- - $ref: '#/components/parameters/attachment_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get an attachment
- description: Get the full record for a single attachment.
- tags:
- - Attachments
- operationId: getAttachment
- responses:
- 200:
- description: Successfully retrieved the record for a single attachment.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/AttachmentResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 424:
- $ref: '#/components/responses/TooManyRequests'
- 500:
- $ref: '#/components/responses/InternalServerError'
- 501:
- $ref: '#/components/responses/BadGateway'
- 503:
- $ref: '#/components/responses/ServiceUnavailable'
- 504:
- $ref: '#/components/responses/GatewayTimeout'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Attachment result = client.attachments.getAttachment(attachmentGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.attachments.getAttachment(attachmentGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.attachments.get_attachment(attachment_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- attachments->getAttachment($attachment_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.attachments.get_attachment(attachment_gid: 'attachment_gid',
- param: "value", param: "value", options: {pretty: true})
- delete:
- summary: Delete an attachment
- description: |-
- Deletes a specific, existing attachment.
-
- Returns an empty data record.
- tags:
- - Attachments
- operationId: deleteAttachment
- responses:
- 200:
- description: Successfully deleted the specified attachment.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.attachments.deleteAttachment(attachmentGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.attachments.deleteAttachment(attachmentGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.attachments.delete_attachment(attachment_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- attachments->deleteAttachment($attachment_gid, array('opt_pretty'
- => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.attachments.delete_attachment(attachment_gid: 'attachment_gid',
- options: {pretty: true})
- /attachments:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get attachments from an object
- description: >-
- Returns the compact records for all attachments on the object.
-
-
- There are three possible `parent` values for this request: `project`, `project_brief`,
- and `task`.
- For a project, an attachment refers to a file uploaded to the "Key resources"
- section in the project
- Overview. For a project brief, an attachment refers to inline files in the
- project brief itself. For
- a task, an attachment refers to a file directly associated to that task.
-
-
- Note that within the Asana app, inline images in the task description do not
- appear in the index of image
- thumbnails nor as stories in the task. However, requests made to `GET /attachments`
- for a task will return
- all of the images in the task, including inline images.
- tags:
- - Attachments
- operationId: getAttachmentsForObject
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - name: parent
- required: true
- in: query
- description: >-
- Globally unique identifier for object to fetch statuses from. Must be
- a GID
- for a `project`, `project_brief`, or `task`.
- schema:
- type: string
- example: '159874'
- responses:
- 200:
- description: >-
- Successfully retrieved the specified object's attachments.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/AttachmentCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.attachments.getAttachmentsForObject(parent)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.attachments.getAttachmentsForObject({param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.attachments.get_attachments_for_object({'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- attachments->getAttachmentsForObject(array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.attachments.get_attachments_for_object(parent: ''parent_example'',
- param: "value", param: "value", options: {pretty: true})
- post:
- summary: Upload an attachment
- description: |-
- Upload an attachment.
-
- This method uploads an attachment on an object and returns the compact
- record for the created attachment object. This is possible by either:
-
- - Providing the URL of the external resource being attached, or
- - Downloading the file content first and then uploading it as any other attachment. Note that it is not possible to attach
- files from third party services such as Dropbox, Box, Vimeo & Google Drive via the API
-
- The 100MB size limit on attachments in Asana is enforced on this endpoint.
-
- This endpoint expects a multipart/form-data encoded request containing the full contents of the file to be uploaded.
-
- Requests made should follow the HTTP/1.1 specification that line
- terminators are of the form `CRLF` or `\r\n` outlined
- [here](http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01#Basic-Rules) in order for the server to reliably and properly handle the request.
- tags:
- - Attachments
- operationId: createAttachmentForObject
- requestBody:
- description: |-
- 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"`.
- required: true
- content:
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/AttachmentRequest'
- responses:
- 200:
- description: Successfully uploaded the attachment to the parent object.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/AttachmentResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Attachment result = client.attachments.createAttachmentForObject(file,
- parent, url, name)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.attachments.create_attachment_for_object({'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- attachments->createAttachmentForObject(array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.attachments.create_attachment_for_object(field: "value",
- field: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/audit_log_events:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/audit_log_start_at'
- - $ref: '#/components/parameters/audit_log_end_at'
- - $ref: '#/components/parameters/audit_log_event_type'
- - $ref: '#/components/parameters/audit_log_actor_type'
- - $ref: '#/components/parameters/audit_log_actor_gid'
- - $ref: '#/components/parameters/audit_log_resource_gid'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get audit log events
- description: >-
- Retrieve the audit log events that have been captured in your domain.
-
-
- This endpoint will return a list of [AuditLogEvent](/reference/audit-log-api)
- objects,
- sorted by creation time in ascending order. Note that the Audit Log API captures
- events
- from October 8th, 2021 and later. Queries for events before this date will
- not return
- results.
-
-
- There are a number of query parameters (below) that can be used to filter
- the set of
- [AuditLogEvent](/reference/audit-log-api) objects that are returned in the
- response. Any
- combination of query parameters is valid. When no filters are provided, all
- of the events
- that have been captured in your domain will match.
-
-
- The list of events will always be [paginated](/docs/pagination). The default
- limit
- is 1000 events. The next set of events can be retrieved using the `offset`
- from the
- previous response. If there are no events that match the provided filters
- in your domain, the endpoint will return `null` for the `next_page` field.
- Querying
- again with the same filters may return new events if they were captured after
- the
- last request. Once a response includes a `next_page` with an `offset`, subsequent
- requests can be made with the latest `offset` to poll for new events that
- match
- the provided filters.
-
-
- *Note: If the filters you provided match events in your domain and `next_page`
- is
- present in the response, we will continue to send `next_page` on subsequent
- requests
- even when there are no more events that match the filters. This was put in
- place so
- that you can implement an audit log stream that will return future events
- that match
- these filters. If you are not interested in future events that match the filters
- you
- have defined, you can rely on checking empty `data` response for the end of
- current
- events that match your filters.*
-
-
- When no `offset` is provided, the response will begin with the oldest events
- that match the provided filters. It is important to note that
- [AuditLogEvent](/reference/audit-log-api) objects will be permanently deleted
- from our systems
- after 90 days. If you wish to keep a permanent record of these events, we
- recommend using a
- SIEM tool to ingest and store these logs.
- tags:
- - Audit log API
- operationId: getAuditLogEvents
- responses:
- 200:
- description: >-
- AuditLogEvents were successfully retrieved.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/AuditLogEvent'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.auditlogapi.getAuditLogEvents(workspaceGid,
- resourceGid, actorGid, actorType, eventType, endAt, startAt)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.auditlogapi.getAuditLogEvents(workspaceGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.audit_log_api.get_audit_log_events(workspace_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- auditlogapi->getAuditLogEvents($workspace_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.audit_log_api.get_audit_log_events(workspace_gid: 'workspace_gid',
- param: "value", param: "value", options: {pretty: true})
- /batch:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Submit parallel requests
- description: |-
- Make multiple requests in parallel to Asana's API.
- tags:
- - Batch API
- operationId: createBatchRequest
- requestBody:
- description: >-
- The requests to batch together via the Batch API.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/BatchRequest'
- responses:
- 200:
- description: Successfully completed the requested batch API operations.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/BatchResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.batchapi.createBatchRequest()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.batchapi.createBatchRequest({field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.batch_api.create_batch_request({'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- batchapi->createBatchRequest(array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.batch_api.create_batch_request(field: "value", field:
- "value", options: {pretty: true})
- /projects/{project_gid}/custom_field_settings:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get a project's custom fields
- description: >-
- Returns a list of all of the custom fields settings on a project, in
- compact form. Note that, as in all queries to collections which return
- compact representation, `opt_fields` can be used to
- include more data than is returned in the compact representation. See the
- [getting started guide on input/output
- options](https://developers.asana.com/docs/#input-output-options)
- for more information.
- tags:
- - Custom field settings
- operationId: getCustomFieldSettingsForProject
- responses:
- 200:
- description: >-
- Successfully retrieved custom field settings objects for a project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/CustomFieldSettingResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.customfieldsettings.getCustomFieldSettingsForProject(projectGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfieldsettings.getCustomFieldSettingsForProject(projectGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_field_settings.get_custom_field_settings_for_project(project_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfieldsettings->getCustomFieldSettingsForProject($project_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_field_settings.get_custom_field_settings_for_project(project_gid:
- 'project_gid', param: "value", param: "value", options: {pretty: true})
- /portfolios/{portfolio_gid}/custom_field_settings:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get a portfolio's custom fields
- description: >-
- Returns a list of all of the custom fields settings on a portfolio, in
- compact form.
- tags:
- - Custom field settings
- operationId: getCustomFieldSettingsForPortfolio
- responses:
- 200:
- description: >-
- Successfully retrieved custom field settings objects for a portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/CustomFieldSettingResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.customfieldsettings.getCustomFieldSettingsForPortfolio(portfolioGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfieldsettings.getCustomFieldSettingsForPortfolio(portfolioGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_field_settings.get_custom_field_settings_for_portfolio(portfolio_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfieldsettings->getCustomFieldSettingsForPortfolio($portfolio_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_field_settings.get_custom_field_settings_for_portfolio(portfolio_gid:
- 'portfolio_gid', param: "value", param: "value", options: {pretty: true})
- /custom_fields:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- post:
- summary: Create a custom field
- description: |-
- 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.
- tags:
- - Custom fields
- operationId: createCustomField
- requestBody:
- description: The custom field object to create.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CustomFieldRequest'
- responses:
- 201:
- description: Custom field successfully created.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CustomFieldResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- CustomField result = client.customfields.createCustomField()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfields.createCustomField({field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_fields.create_custom_field({'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfields->createCustomField(array('field' =>
- 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_fields.create_custom_field(field: "value", field:
- "value", options: {pretty: true})
- /custom_fields/{custom_field_gid}:
- parameters:
- - $ref: '#/components/parameters/custom_field_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a custom field
- description: |-
- Get the complete definition of a custom field’s metadata.
-
- Since custom fields can be defined for one of a number of types, and
- these types have different data and behaviors, there are fields that are
- relevant to a particular type. For instance, as noted above, enum_options
- is only relevant for the enum type and defines the set of choices that
- the enum could represent. The examples below show some of these
- type-specific custom field definitions.
- tags:
- - Custom fields
- operationId: getCustomField
- responses:
- 200:
- description: >-
- Successfully retrieved the complete definition of a custom field’s
- metadata.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CustomFieldResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- CustomField result = client.customfields.getCustomField(customFieldGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfields.getCustomField(customFieldGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_fields.get_custom_field(custom_field_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfields->getCustomField($custom_field_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_fields.get_custom_field(custom_field_gid: 'custom_field_gid',
- param: "value", param: "value", options: {pretty: true})
- put:
- summary: Update a custom field
- description: >-
- 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.
- tags:
- - Custom fields
- operationId: updateCustomField
- requestBody:
- description: The custom field object with all updated properties.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CustomFieldRequest'
- responses:
- 200:
- description: The custom field was successfully updated.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CustomFieldResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- CustomField result = client.customfields.updateCustomField(customFieldGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfields.updateCustomField(customFieldGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_fields.update_custom_field(custom_field_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfields->updateCustomField($custom_field_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_fields.update_custom_field(custom_field_gid:
- 'custom_field_gid', field: "value", field: "value", options: {pretty:
- true})
- delete:
- summary: Delete a custom field
- description: >-
- A specific, existing custom field can be deleted by making a DELETE
- request on the URL for that custom field.
-
- Locked custom fields can only be deleted by the user who locked the field.
-
- Returns an empty data record.
- tags:
- - Custom fields
- operationId: deleteCustomField
- responses:
- 200:
- description: The custom field was successfully deleted.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.customfields.deleteCustomField(customFieldGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfields.deleteCustomField(customFieldGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_fields.delete_custom_field(custom_field_gid,
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfields->deleteCustomField($custom_field_gid,
- array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_fields.delete_custom_field(custom_field_gid:
- 'custom_field_gid', options: {pretty: true})
- /workspaces/{workspace_gid}/custom_fields:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get a workspace's custom fields
- description: >-
- Returns a list of the compact representation of all of the custom fields
- in a workspace.
- tags:
- - Custom fields
- operationId: getCustomFieldsForWorkspace
- responses:
- 200:
- description: >-
- Successfully retrieved all custom fields for the given workspace.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/CustomFieldResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.customfields.getCustomFieldsForWorkspace(workspaceGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfields.getCustomFieldsForWorkspace(workspaceGid, {param:
- "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_fields.get_custom_fields_for_workspace(workspace_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfields->getCustomFieldsForWorkspace($workspace_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_fields.get_custom_fields_for_workspace(workspace_gid:
- 'workspace_gid', param: "value", param: "value", options: {pretty: true})
- /custom_fields/{custom_field_gid}/enum_options:
- parameters:
- - $ref: '#/components/parameters/custom_field_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- post:
- summary: Create an enum option
- description: >-
- 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.
- tags:
- - Custom fields
- operationId: createEnumOptionForCustomField
- requestBody:
- description: The enum option object to create.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EnumOptionRequest'
- responses:
- 201:
- description: Custom field enum option successfully created.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EnumOption'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.customfields.createEnumOptionForCustomField(customFieldGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfields.createEnumOptionForCustomField(customFieldGid, {field:
- "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_fields.create_enum_option_for_custom_field(custom_field_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfields->createEnumOptionForCustomField($custom_field_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_fields.create_enum_option_for_custom_field(custom_field_gid:
- 'custom_field_gid', field: "value", field: "value", options: {pretty:
- true})
- /custom_fields/{custom_field_gid}/enum_options/insert:
- parameters:
- - $ref: '#/components/parameters/custom_field_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Reorder a custom field's enum
- description: >-
- 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.
- tags:
- - Custom fields
- operationId: insertEnumOptionForCustomField
- requestBody:
- description: The enum option object to create.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EnumOptionInsertRequest'
- responses:
- 200:
- description: Custom field enum option successfully reordered.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EnumOption'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.customfields.insertEnumOptionForCustomField(customFieldGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfields.insertEnumOptionForCustomField(customFieldGid, {field:
- "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_fields.insert_enum_option_for_custom_field(custom_field_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfields->insertEnumOptionForCustomField($custom_field_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_fields.insert_enum_option_for_custom_field(custom_field_gid:
- 'custom_field_gid', field: "value", field: "value", options: {pretty:
- true})
- /enum_options/{enum_option_gid}:
- parameters:
- - name: enum_option_gid
- in: path
- required: true
- description: >-
- Globally unique identifier for the enum option.
- schema:
- type: string
- example: '124578'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- put:
- summary: Update an enum option
- description: >-
- 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.
- tags:
- - Custom fields
- operationId: updateEnumOption
- requestBody:
- description: The enum option object to update
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EnumOptionRequest'
- responses:
- 200:
- description: Successfully updated the specified custom field enum.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EnumOption'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.customfields.updateEnumOption(enumOptionGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.customfields.updateEnumOption(enumOptionGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.custom_fields.update_enum_option(enum_option_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- customfields->updateEnumOption($enum_option_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.custom_fields.update_enum_option(enum_option_gid: 'enum_option_gid',
- field: "value", field: "value", options: {pretty: true})
- /events:
- parameters:
- - name: resource
- in: query
- required: true
- description: >-
- A resource ID to subscribe to. The resource can be a task or project.
- schema:
- type: string
- example: '12345'
- - name: sync
- in: query
- required: false
- description: >-
- A sync token received from the last request, or none on first sync.
- Events will be returned from the point in time that the sync token was
- generated.
-
- *Note: On your first request, omit the sync token. The response will
- be the same as for an expired sync token, and will include a new valid
- sync token.If the sync token is too old (which may happen from time to
- time) the API will return a `412 Precondition Failed` error, and
- include a fresh sync token in the response.*
- schema:
- type: string
- example: de4774f6915eae04714ca93bb2f5ee81
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get events on a resource
- description: |-
- Returns the full record for all events that have occurred since the sync
- token was created.
-
- A `GET` request to the endpoint `/[path_to_resource]/events` can be made in
- lieu of including the resource ID in the data for the request.
-
- Asana limits a single sync token to 100 events. If more than 100 events exist
- for a given resource, `has_more: true` will be returned in the response, indicating
- that there are more events to pull.
-
- *Note: The resource returned will be the resource that triggered the
- event. This may be different from the one that the events were requested
- for. For example, a subscription to a project will contain events for
- tasks contained within the project.*
- tags:
- - Events
- operationId: getEvents
- responses:
- 200:
- description: Successfully retrieved events.
- content:
- application/json:
- schema:
- type: object
- description: >-
- The full record for all events that have occurred since the sync
- token was
- created.
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/EventResponse'
- sync:
- description: A sync token to be used with the next call to the
- /events endpoint.
- type: string
- example: de4774f6915eae04714ca93bb2f5ee81
- has_more:
- description: Indicates whether there are more events to pull.
- type: boolean
- example: true
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.events.getEvents(sync, resource)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.events.getEvents({param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.events.get_events({'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- events->getEvents(array('param' => 'value', 'param'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.events.get_events(resource: ''resource_example'',
- param: "value", param: "value", options: {pretty: true})
- /goal_relationships/{goal_relationship_gid}:
- parameters:
- - $ref: '#/components/parameters/goal_relationship_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a goal relationship
- description: |-
- Returns the complete updated goal relationship record for a single goal relationship.
- tags:
- - Goal relationships
- operationId: getGoalRelationship
- responses:
- 200:
- description: Successfully retrieved the record for the goal relationship.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalRelationshipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goalrelationships.getGoalRelationship(goalRelationshipGid)
- .option("pretty", true)
- .execute();
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goal_relationships.get_goal_relationship(goal_relationship_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goalrelationships->getGoalRelationship($goal_relationship_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goal_relationships.get_goal_relationship(goal_relationship_gid:
- 'goal_relationship_gid', param: "value", param: "value", options: {pretty:
- true})
- put:
- summary: Update a goal relationship
- description: |-
- 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.
- tags:
- - Goal relationships
- operationId: updateGoalRelationship
- requestBody:
- description: The updated fields for the goal relationship.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalRelationshipRequest'
- responses:
- 200:
- description: Successfully updated the goal relationship.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalRelationshipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goalrelationships.updateGoalRelationship(goalRelationshipGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goal_relationships.update_goal_relationship(goal_relationship_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goalrelationships->updateGoalRelationship($goal_relationship_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goal_relationships.update_goal_relationship(goal_relationship_gid:
- 'goal_relationship_gid', field: "value", field: "value", options: {pretty:
- true})
- /goal_relationships:
- get:
- summary: Get goal relationships
- description: |-
- Returns compact goal relationship records.
- tags:
- - Goal relationships
- operationId: getGoalRelationships
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - name: supported_goal
- required: true
- in: query
- description: Globally unique identifier for the supported goal in the goal
- relationship.
- schema:
- type: string
- example: '12345'
- - name: resource_subtype
- in: query
- description: If provided, filter to goal relationships with a given resource_subtype.
- schema:
- type: string
- example: subgoal
- responses:
- 200:
- description: Successfully retrieved the requested goal relationships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/GoalRelationshipCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.goalrelationships.getGoalRelationships(resourceSubtype,
- supportedGoal)
- .option("pretty", true)
- .execute();
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goal_relationships.get_goal_relationships({'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goalrelationships->getGoalRelationships(array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goal_relationships.get_goal_relationships(supported_goal:
- ''supported_goal_example'', param: "value", param: "value",
- options: {pretty: true})
- /goals/{goal_gid}/addSupportingRelationship:
- parameters:
- - $ref: '#/components/parameters/goal_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add a supporting goal relationship
- description: |-
- Creates a goal relationship by adding a supporting resource to a given goal.
-
- Returns the newly created goal relationship record.
- tags:
- - Goal relationships
- operationId: addSupportingRelationship
- requestBody:
- description: The supporting resource to be added to the goal
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalAddSupportingRelationshipRequest'
- responses:
- 200:
- description: Successfully created the goal relationship.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalRelationshipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goalrelationships.addSupportingRelationship(goalGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goal_relationships.add_supporting_relationship(goal_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goalrelationships->addSupportingRelationship($goal_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goal_relationships.add_supporting_relationship(goal_gid:
- 'goal_gid', field: "value", field: "value", options: {pretty: true})
- /goals/{goal_gid}/removeSupportingRelationship:
- parameters:
- - $ref: '#/components/parameters/goal_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Removes a supporting goal relationship
- description: |-
- Removes a goal relationship for a given parent goal.
- tags:
- - Goal relationships
- operationId: removeSupportingRelationship
- requestBody:
- description: The supporting resource to be removed from the goal
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalRemoveSupportingRelationshipRequest'
- responses:
- 200:
- description: Successfully removed the goal relationship.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goalrelationships.removeSupportingRelationship(goalGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goal_relationships.remove_supporting_relationship(goal_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goalrelationships->removeSupportingRelationship($goal_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goal_relationships.remove_supporting_relationship(goal_gid:
- 'goal_gid', field: "value", field: "value", options: {pretty: true})
- /goals/{goal_gid}:
- parameters:
- - $ref: '#/components/parameters/goal_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a goal
- description: Returns the complete goal record for a single goal.
- operationId: getGoal
- tags:
- - Goals
- responses:
- 200:
- description: Successfully retrieved the record for a single goal.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goals.getGoal(goalGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.getGoal(goalGid, {param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.get_goal(goal_gid, {'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->getGoal($goal_gid, array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.get_goal(goal_gid: 'goal_gid', param: "value",
- param: "value", options: {pretty: true})
- put:
- summary: Update a goal
- description: |-
- 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.
- tags:
- - Goals
- operationId: updateGoal
- requestBody:
- description: The updated fields for the goal.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalRequest'
- responses:
- 200:
- description: Successfully updated the goal.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goals.updateGoal(goalGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.updateGoal(goalGid, {field: "value", field: "value", pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.update_goal(goal_gid, {'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->updateGoal($goal_gid, array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.update_goal(goal_gid: 'goal_gid', field: "value",
- field: "value", options: {pretty: true})
- delete:
- summary: Delete a goal
- description: |-
- A specific, existing goal can be deleted by making a DELETE request on the URL for that goal.
-
- Returns an empty data record.
- tags:
- - Goals
- operationId: deleteGoal
- responses:
- 200:
- description: Successfully deleted the specified goal.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goals.deleteGoal(goalGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.deleteGoal(goalGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.delete_goal(goal_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->deleteGoal($goal_gid, array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.delete_goal(goal_gid: 'goal_gid', options: {pretty:
- true})
- /goals:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get goals
- description: >-
- Returns compact goal records.
- tags:
- - Goals
- operationId: getGoals
- parameters:
- - name: portfolio
- in: query
- description: Globally unique identifier for supporting portfolio.
- schema:
- type: string
- example: '159874'
- - name: project
- in: query
- description: Globally unique identifier for supporting project.
- schema:
- type: string
- example: '512241'
- - name: is_workspace_level
- in: query
- description: Filter to goals with is_workspace_level set to query value.
- Must be used with the workspace parameter.
- schema:
- type: boolean
- example: false
- - name: team
- in: query
- description: Globally unique identifier for the team.
- schema:
- type: string
- example: '31326'
- - name: workspace
- in: query
- description: Globally unique identifier for the workspace.
- schema:
- type: string
- example: '31326'
- - name: time_periods
- in: query
- description: Globally unique identifiers for the time periods.
- schema:
- type: array
- items:
- type: string
- example: 221693,506165
- responses:
- 200:
- description: >-
- Successfully retrieved the requested goals.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/GoalCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.goals.getGoals(timePeriods, workspace,
- team, isWorkspaceLevel, project, portfolio)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.getGoals({param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.get_goals({'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->getGoals(array('param' => 'value', 'param'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.get_goals(param: "value", param: "value", options:
- {pretty: true})
- post:
- summary: Create a goal
- description: |-
- Creates a new goal in a workspace or team.
-
- Returns the full record of the newly created goal.
- tags:
- - Goals
- operationId: createGoal
- requestBody:
- description: The goal to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalRequest'
- responses:
- 201:
- description: Successfully created a new goal.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goals.createGoal()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.createGoal({field: "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.create_goal({'field': 'value', 'field': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->createGoal(array('field' => 'value', 'field'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.create_goal(field: "value", field: "value", options:
- {pretty: true})
- /goals/{goal_gid}/setMetric:
- parameters:
- - $ref: '#/components/parameters/goal_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Create a goal metric
- description: >-
- Creates and adds a goal metric to a specified goal. Note that this replaces
- an existing goal metric if one already exists.
- tags:
- - Goals
- operationId: createGoalMetric
- requestBody:
- description: The goal metric to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalMetricRequest'
- responses:
- 200:
- description: Successfully created a new goal metric.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goals.createGoalMetric(goalGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.createGoalMetric(goalGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.create_goal_metric(goal_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->createGoalMetric($goal_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.create_goal_metric(goal_gid: 'goal_gid', field:
- "value", field: "value", options: {pretty: true})
- /goals/{goal_gid}/setMetricCurrentValue:
- parameters:
- - $ref: '#/components/parameters/goal_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Update a goal metric
- description: |-
- 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.
- tags:
- - Goals
- operationId: updateGoalMetric
- requestBody:
- description: The updated fields for the goal metric.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalMetricCurrentValueRequest'
- responses:
- 200:
- description: Successfully updated the goal metric.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goals.updateGoalMetric(goalGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.updateGoalMetric(goalGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.update_goal_metric(goal_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->updateGoalMetric($goal_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.update_goal_metric(goal_gid: 'goal_gid', field:
- "value", field: "value", options: {pretty: true})
- /goals/{goal_gid}/addFollowers:
- parameters:
- - $ref: '#/components/parameters/goal_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add a collaborator to a goal
- description: >-
- 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.
- tags:
- - Goals
- operationId: addFollowers
- requestBody:
- description: The followers to be added as collaborators
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskAddFollowersRequest'
- responses:
- 200:
- description: Successfully added users as collaborators.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goals.addFollowers(goalGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.addFollowers(goalGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.add_followers(goal_gid, {'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->addFollowers($goal_gid, array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.add_followers(goal_gid: 'goal_gid', field: "value",
- field: "value", options: {pretty: true})
- /goals/{goal_gid}/removeFollowers:
- parameters:
- - $ref: '#/components/parameters/goal_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove a collaborator from a goal
- description: "Removes followers from a goal. Returns the goal the followers\
- \ were removed from.\nEach goal can be associated with zero or more followers\
- \ in the system.\nRequests to add/remove followers, if successful, will return\
- \ the complete updated goal record, described above."
- tags:
- - Goals
- operationId: removeFollowers
- requestBody:
- description: The followers to be removed as collaborators
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskAddFollowersRequest'
- responses:
- 200:
- description: Successfully removed users as collaborators.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/GoalResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.goals.removeFollowers(goalGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.removeFollowers(goalGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.remove_followers(goal_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->removeFollowers($goal_gid, array('field' =>
- 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.remove_followers(goal_gid: 'goal_gid', field:
- "value", field: "value", options: {pretty: true})
- /goals/{goal_gid}/parentGoals:
- parameters:
- - $ref: '#/components/parameters/goal_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get parent goals from a goal
- description: Returns a compact representation of all of the parent goals of
- a goal.
- tags:
- - Goals
- operationId: getParentGoalsForGoal
- responses:
- 200:
- description: Successfully retrieved the specified goal's parent goals.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/GoalCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.goals.getParentGoalsForGoal(goalGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.goals.getParentGoalsForGoal(goalGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.goals.get_parent_goals_for_goal(goal_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- goals->getParentGoalsForGoal($goal_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.goals.get_parent_goals_for_goal(goal_gid: 'goal_gid',
- param: "value", param: "value", options: {pretty: true})
- /jobs/{job_gid}:
- parameters:
- - $ref: '#/components/parameters/job_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a job by id
- description: |-
- Returns the full record for a job.
- tags:
- - Jobs
- operationId: getJob
- responses:
- 200:
- description: Successfully retrieved Job.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/JobResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Job result = client.jobs.getJob(jobGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.jobs.getJob(jobGid, {param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.jobs.get_job(job_gid, {'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- jobs->getJob($job_gid, array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.jobs.get_job(job_gid: 'job_gid', param: "value", param:
- "value", options: {pretty: true})
- /memberships:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get multiple memberships
- description: >-
- Returns compact `goal_membership`, `team_membership`, `project_membership`,
- `portfolio_membership`,
- or `workspace_membership` records. The possible types
- for `parent` in this request are `project`, `portfolio`, `team`, `goal`,
- and `workspace`. An additional member (user GID or team GID) can be passed
- in
- to filter to a specific membership.
- If a `parent` param is not provided, a `member`, `resource_subtype`, and `workspace`
- param must be provided.
- tags:
- - Memberships
- operationId: getMemberships
- parameters:
- - name: parent
- in: query
- description: >-
- Globally unique identifier for `project`, `portfolio`,
- `team`, `goal`, and `workspace`.
- schema:
- type: string
- example: '159874'
- - name: member
- in: query
- description: Globally unique identifier for `team` or `user`.
- schema:
- type: string
- example: '1061493'
- - name: resource_subtype
- in: query
- schema:
- type: string
- example: team_membership
- description: >-
- The resource_subtype to filter on.
- Must be provided with `member` and `workspace` if `parent` is not provided.
- Valid values include `team_membership`, `workspace_membership`, `portfolio_membership`
- - name: workspace
- in: query
- schema:
- type: string
- example: '75642'
- description: >-
- The workspace to filter on.
- Must be provided with `member` and `resource_subtype` if `parent` is not
- provided.
- - name: limit
- in: query
- description: Pagination limit for the request.
- schema:
- type: integer
- example: 50
- - name: offset
- in: query
- description: >-
- Offset token.
- An offset to the next page returned by the API. A pagination request
- will return an offset token, which can be used as an input parameter to
- the next request. If an offset is not passed in, the API will return
- the first page of results.
- 'Note: You can only pass in an offset that was returned to you via a
- previously paginated request.'
- example: eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9
- schema:
- type: string
- responses:
- 200:
- description: >-
- Successfully retrieved the requested membership.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/MembershipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.memberships.get_memberships({'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- memberships->getMemberships(array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.memberships.get_memberships(parent: ''parent_example'',
- param: "value", param: "value", options: {pretty: true})
- post:
- summary: Create a membership
- description: |-
- Creates a new membership in a `team`, `project`, `goal`, or `portfolio`.
- `Teams` or `users` can be a member of `goals`. `Project`, `team`, and
- `portfolios` have users as members.
-
- Returns the full record of the newly created membership.
- tags:
- - Memberships
- operationId: createMembership
- requestBody:
- description: The updated fields for the membership.
- required: false
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CreateMembershipRequest'
- responses:
- 200:
- description: >-
- Successfully created the requested membership.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/MembershipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.memberships.create_membership({'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- memberships->createMembership(array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.memberships.create_membership(field: "value", field:
- "value", options: {pretty: true})
- /memberships/{membership_gid}:
- parameters:
- - $ref: '#/components/parameters/membership_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- delete:
- summary: Delete a membership
- description: |-
- A specific, existing membership can be deleted by making a `DELETE` request
- on the URL for that membership.
-
- Returns an empty data record.
- tags:
- - Memberships
- operationId: deleteMembership
- responses:
- 200:
- description: >-
- Successfully deleted the requested membership.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.memberships.delete_membership(membership_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- memberships->deleteMembership($membership_gid, array('opt_pretty'
- => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.memberships.delete_membership(membership_gid: 'membership_gid',
- options: {pretty: true})
- put:
- summary: Update a membership
- description: >-
- 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 `project`, `portfolio`,
- `team`, and `goals` can be updated.
- tags:
- - Memberships
- operationId: updateMembership
- requestBody:
- description: The updated fields for the membership.
- required: false
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/MembershipRequest'
- responses:
- 200:
- description: >-
- Successfully updated the requested membership.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/MembershipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.memberships.update_membership(membership_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- memberships->updateMembership($membership_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.memberships.update_membership(membership_gid: 'membership_gid',
- field: "value", field: "value", options: {pretty: true})
- /organization_exports:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- post:
- summary: Create an organization export request
- description: >-
- This method creates a request to export an Organization. Asana will
- complete the export at some point after you create the request.
- tags:
- - Organization exports
- operationId: createOrganizationExport
- requestBody:
- description: The organization to export.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/OrganizationExportRequest'
- responses:
- 201:
- description: Successfully created organization export request.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/OrganizationExportResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- OrganizationExport result = client.organizationexports.createOrganizationExport()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.organizationexports.createOrganizationExport({field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.organization_exports.create_organization_export({'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- organizationexports->createOrganizationExport(array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.organization_exports.create_organization_export(field:
- "value", field: "value", options: {pretty: true})
- /organization_exports/{organization_export_gid}:
- parameters:
- - $ref: '#/components/parameters/organization_export_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get details on an org export request
- description: >-
- Returns details of a previously-requested Organization export.
- tags:
- - Organization exports
- operationId: getOrganizationExport
- responses:
- 200:
- description: Successfully retrieved organization export object.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/OrganizationExportResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- OrganizationExport result = client.organizationexports.getOrganizationExport(organizationExportGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.organizationexports.getOrganizationExport(organizationExportGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.organization_exports.get_organization_export(organization_export_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- organizationexports->getOrganizationExport($organization_export_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.organization_exports.get_organization_export(organization_export_gid:
- 'organization_export_gid', param: "value", param: "value", options:
- {pretty: true})
- /portfolio_memberships:
- parameters:
- - $ref: '#/components/parameters/portfolio_query_param'
- - $ref: '#/components/parameters/workspace_query_param'
- - $ref: '#/components/parameters/user_query_param'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get multiple portfolio memberships
- description: >-
- Returns a list of portfolio memberships in compact representation. You must
- specify `portfolio`, `portfolio` and `user`, or `workspace` and `user`.
- tags:
- - Portfolio memberships
- operationId: getPortfolioMemberships
- responses:
- 200:
- description: Successfully retrieved portfolio memberships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/PortfolioMembershipCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.portfoliomemberships.getPortfolioMemberships(user,
- workspace, portfolio)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfoliomemberships.getPortfolioMemberships({param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolio_memberships.get_portfolio_memberships({'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfoliomemberships->getPortfolioMemberships(array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolio_memberships.get_portfolio_memberships(param:
- "value", param: "value", options: {pretty: true})
- /portfolio_memberships/{portfolio_membership_gid}:
- parameters:
- - $ref: '#/components/parameters/portfolio_membership_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a portfolio membership
- description: >-
- Returns the complete portfolio record for a single portfolio membership.
- tags:
- - Portfolio memberships
- operationId: getPortfolioMembership
- responses:
- 200:
- description: >-
- Successfully retrieved the requested portfolio membership.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioMembershipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- PortfolioMembership result = client.portfoliomemberships.getPortfolioMembership(portfolioMembershipGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfoliomemberships.getPortfolioMembership(portfolioMembershipGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolio_memberships.get_portfolio_membership(portfolio_membership_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfoliomemberships->getPortfolioMembership($portfolio_membership_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolio_memberships.get_portfolio_membership(portfolio_membership_gid:
- 'portfolio_membership_gid', param: "value", param: "value", options:
- {pretty: true})
- /portfolios/{portfolio_gid}/portfolio_memberships:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/user_query_param'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get memberships from a portfolio
- description: >-
- Returns the compact portfolio membership records for the portfolio.
- tags:
- - Portfolio memberships
- operationId: getPortfolioMembershipsForPortfolio
- responses:
- 200:
- description: >-
- Successfully retrieved the requested portfolio's memberships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/PortfolioMembershipCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.portfoliomemberships.getPortfolioMembershipsForPortfolio(portfolioGid,
- user)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfoliomemberships.getPortfolioMembershipsForPortfolio(portfolioGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolio_memberships.get_portfolio_memberships_for_portfolio(portfolio_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfoliomemberships->getPortfolioMembershipsForPortfolio($portfolio_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolio_memberships.get_portfolio_memberships_for_portfolio(portfolio_gid:
- 'portfolio_gid', param: "value", param: "value", options: {pretty: true})
- /portfolios:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get multiple portfolios
- description: >-
- Returns a list of the portfolios in compact representation that are
- owned by the current API user.
- tags:
- - Portfolios
- operationId: getPortfolios
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - name: workspace
- in: query
- required: true
- description: >-
- The workspace or organization to filter portfolios on.
- schema:
- type: string
- example: '1331'
- - name: owner
- in: query
- required: false
- description: >-
- The user who owns the portfolio. Currently, API users can only get a
- list of portfolios that they themselves own, unless
- the request is made from a Service Account. In the case of a
- Service Account, if this parameter is specified, then all
- portfolios owned by this parameter are returned.
- Otherwise, all portfolios across the workspace are returned.
- schema:
- type: string
- example: '14916'
- responses:
- 200:
- description: Successfully retrieved portfolios.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/PortfolioCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.portfolios.getPortfolios(owner, workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.getPortfolios({param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.get_portfolios({'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->getPortfolios(array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.get_portfolios(workspace: ''workspace_example'',
- owner: ''owner_example'', param: "value", param: "value",
- options: {pretty: true})
- post:
- summary: Create a portfolio
- description: |-
- 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.
- tags:
- - Portfolios
- operationId: createPortfolio
- requestBody:
- description: The portfolio to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioRequest'
- responses:
- 201:
- description: Successfully created portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Portfolio result = client.portfolios.createPortfolio()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.createPortfolio({field: "value", field: "value", pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.create_portfolio({'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->createPortfolio(array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.create_portfolio(field: "value", field: "value",
- options: {pretty: true})
- /portfolios/{portfolio_gid}:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a portfolio
- description: Returns the complete portfolio record for a single portfolio.
- tags:
- - Portfolios
- operationId: getPortfolio
- responses:
- 200:
- description: Successfully retrieved the requested portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Portfolio result = client.portfolios.getPortfolio(portfolioGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.getPortfolio(portfolioGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.get_portfolio(portfolio_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->getPortfolio($portfolio_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.get_portfolio(portfolio_gid: 'portfolio_gid',
- param: "value", param: "value", options: {pretty: true})
- put:
- summary: Update a portfolio
- description: |-
- 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.
- tags:
- - Portfolios
- operationId: updatePortfolio
- requestBody:
- description: The updated fields for the portfolio.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioRequest'
- responses:
- 200:
- description: Successfully updated the portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Portfolio result = client.portfolios.updatePortfolio(portfolioGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.updatePortfolio(portfolioGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.update_portfolio(portfolio_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->updatePortfolio($portfolio_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.update_portfolio(portfolio_gid: 'portfolio_gid',
- field: "value", field: "value", options: {pretty: true})
- delete:
- summary: Delete a portfolio
- description: |-
- An existing portfolio can be deleted by making a DELETE request on
- the URL for that portfolio.
-
- Returns an empty data record.
- tags:
- - Portfolios
- operationId: deletePortfolio
- responses:
- 200:
- description: Successfully deleted the specified portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.portfolios.deletePortfolio(portfolioGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.deletePortfolio(portfolioGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.delete_portfolio(portfolio_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->deletePortfolio($portfolio_gid, array('opt_pretty'
- => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.delete_portfolio(portfolio_gid: 'portfolio_gid',
- options: {pretty: true})
- /portfolios/{portfolio_gid}/items:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get portfolio items
- description: >-
- Get a list of the items in compact form in a portfolio.
- tags:
- - Portfolios
- operationId: getItemsForPortfolio
- responses:
- 200:
- description: Successfully retrieved the requested portfolio's items.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.portfolios.getItemsForPortfolio(portfolioGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.getItemsForPortfolio(portfolioGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.get_items_for_portfolio(portfolio_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->getItemsForPortfolio($portfolio_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.get_items_for_portfolio(portfolio_gid: 'portfolio_gid',
- param: "value", param: "value", options: {pretty: true})
- /portfolios/{portfolio_gid}/addItem:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add a portfolio item
- description: >-
- Add an item to a portfolio.
-
- Returns an empty data block.
- tags:
- - Portfolios
- operationId: addItemForPortfolio
- requestBody:
- description: Information about the item being inserted.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioAddItemRequest'
- responses:
- 200:
- description: Successfully added the item to the portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.portfolios.addItemForPortfolio(portfolioGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.addItemForPortfolio(portfolioGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.add_item_for_portfolio(portfolio_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->addItemForPortfolio($portfolio_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.add_item_for_portfolio(portfolio_gid: 'portfolio_gid',
- field: "value", field: "value", options: {pretty: true})
- /portfolios/{portfolio_gid}/removeItem:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove a portfolio item
- description: >-
- Remove an item from a portfolio.
-
- Returns an empty data block.
- tags:
- - Portfolios
- operationId: removeItemForPortfolio
- requestBody:
- description: Information about the item being removed.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioRemoveItemRequest'
- responses:
- 200:
- description: Successfully removed the item from the portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.portfolios.removeItemForPortfolio(portfolioGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.removeItemForPortfolio(portfolioGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.remove_item_for_portfolio(portfolio_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->removeItemForPortfolio($portfolio_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.remove_item_for_portfolio(portfolio_gid:
- 'portfolio_gid', field: "value", field: "value", options: {pretty: true})
- /portfolios/{portfolio_gid}/addCustomFieldSetting:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- post:
- summary: Add a custom field to a portfolio
- description: >-
- Custom fields are associated with portfolios by way of custom field
- settings. This method creates a setting for the portfolio.
- tags:
- - Portfolios
- operationId: addCustomFieldSettingForPortfolio
- requestBody:
- description: Information about the custom field setting.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/AddCustomFieldSettingRequest'
- responses:
- 200:
- description: Successfully added the custom field to the portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CustomFieldSettingResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- CustomFieldSetting result = client.portfolios.addCustomFieldSettingForPortfolio(portfolioGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.addCustomFieldSettingForPortfolio(portfolioGid, {field:
- "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.add_custom_field_setting_for_portfolio(portfolio_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->addCustomFieldSettingForPortfolio($portfolio_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.add_custom_field_setting_for_portfolio(portfolio_gid:
- 'portfolio_gid', field: "value", field: "value", options: {pretty: true})
- /portfolios/{portfolio_gid}/removeCustomFieldSetting:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- post:
- summary: Remove a custom field from a portfolio
- description: >-
- Removes a custom field setting from a portfolio.
- tags:
- - Portfolios
- operationId: removeCustomFieldSettingForPortfolio
- requestBody:
- description: Information about the custom field setting being removed.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/RemoveCustomFieldSettingRequest'
- responses:
- 200:
- description: Successfully removed the custom field from the portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.portfolios.removeCustomFieldSettingForPortfolio(portfolioGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.removeCustomFieldSettingForPortfolio(portfolioGid,
- {field: "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.remove_custom_field_setting_for_portfolio(portfolio_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->removeCustomFieldSettingForPortfolio($portfolio_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.remove_custom_field_setting_for_portfolio(portfolio_gid:
- 'portfolio_gid', field: "value", field: "value", options: {pretty: true})
- /portfolios/{portfolio_gid}/addMembers:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add users to a portfolio
- description: >-
- Adds the specified list of users as members of the portfolio.
-
- Returns the updated portfolio record.
- tags:
- - Portfolios
- operationId: addMembersForPortfolio
- requestBody:
- description: Information about the members being added.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/AddMembersRequest'
- responses:
- 200:
- description: Successfully added members to the portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Portfolio result = client.portfolios.addMembersForPortfolio(portfolioGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.addMembersForPortfolio(portfolioGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.add_members_for_portfolio(portfolio_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->addMembersForPortfolio($portfolio_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.add_members_for_portfolio(portfolio_gid:
- 'portfolio_gid', field: "value", field: "value", options: {pretty: true})
- /portfolios/{portfolio_gid}/removeMembers:
- parameters:
- - $ref: '#/components/parameters/portfolio_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove users from a portfolio
- description: >-
- Removes the specified list of users from members of the portfolio.
-
- Returns the updated portfolio record.
- tags:
- - Portfolios
- operationId: removeMembersForPortfolio
- requestBody:
- description: Information about the members being removed.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/RemoveMembersRequest'
- responses:
- 200:
- description: Successfully removed the members from the portfolio.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/PortfolioResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Portfolio result = client.portfolios.removeMembersForPortfolio(portfolioGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.portfolios.removeMembersForPortfolio(portfolioGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.portfolios.remove_members_for_portfolio(portfolio_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- portfolios->removeMembersForPortfolio($portfolio_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.portfolios.remove_members_for_portfolio(portfolio_gid:
- 'portfolio_gid', field: "value", field: "value", options: {pretty: true})
- /project_briefs/{project_brief_gid}:
- parameters:
- - $ref: '#/components/parameters/project_brief_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a project brief
- description: Get the full record for a project brief.
- tags:
- - Project briefs
- operationId: getProjectBrief
- responses:
- 200:
- description: Successfully retrieved the record for a project brief.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectBriefResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 424:
- $ref: '#/components/responses/TooManyRequests'
- 500:
- $ref: '#/components/responses/InternalServerError'
- 501:
- $ref: '#/components/responses/BadGateway'
- 503:
- $ref: '#/components/responses/ServiceUnavailable'
- 504:
- $ref: '#/components/responses/GatewayTimeout'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projectbriefs.getProjectBrief(projectBriefGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectbriefs.getProjectBrief(projectBriefGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_briefs.get_project_brief(project_brief_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectbriefs->getProjectBrief($project_brief_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_briefs.get_project_brief(project_brief_gid:
- 'project_brief_gid', param: "value", param: "value", options: {pretty:
- true})
- put:
- summary: Update a project brief
- description: |-
- 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.
- tags:
- - Project briefs
- operationId: updateProjectBrief
- requestBody:
- description: The updated fields for the project brief.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectBriefRequest'
- responses:
- 200:
- description: Successfully updated the project brief.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectBriefResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projectbriefs.updateProjectBrief(projectBriefGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectbriefs.updateProjectBrief(projectBriefGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_briefs.update_project_brief(project_brief_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectbriefs->updateProjectBrief($project_brief_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_briefs.update_project_brief(project_brief_gid:
- 'project_brief_gid', field: "value", field: "value", options: {pretty:
- true})
- delete:
- summary: Delete a project brief
- description: |-
- Deletes a specific, existing project brief.
-
- Returns an empty data record.
- tags:
- - Project briefs
- operationId: deleteProjectBrief
- responses:
- 200:
- description: Successfully deleted the specified project brief.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projectbriefs.deleteProjectBrief(projectBriefGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectbriefs.deleteProjectBrief(projectBriefGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_briefs.delete_project_brief(project_brief_gid,
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectbriefs->deleteProjectBrief($project_brief_gid,
- array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_briefs.delete_project_brief(project_brief_gid:
- 'project_brief_gid', options: {pretty: true})
- /projects/{project_gid}/project_briefs:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Create a project brief
- description: |-
- Creates a new project brief.
-
- Returns the full record of the newly created project brief.
- tags:
- - Project briefs
- operationId: createProjectBrief
- requestBody:
- description: The project brief to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectBriefRequest'
- responses:
- 201:
- description: Successfully created a new project brief.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectBriefResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projectbriefs.createProjectBrief(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectbriefs.createProjectBrief(projectGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_briefs.create_project_brief(project_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectbriefs->createProjectBrief($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_briefs.create_project_brief(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /project_memberships/{project_membership_gid}:
- parameters:
- - $ref: '#/components/parameters/project_membership_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a project membership
- description: >-
- Returns the complete project record for a single project membership.
- tags:
- - Project memberships
- operationId: getProjectMembership
- responses:
- 200:
- description: >-
- Successfully retrieved the requested project membership.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectMembershipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- ProjectMembership result = client.projectmemberships.getProjectMembership(projectMembershipGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectmemberships.getProjectMembership(projectMembershipGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_memberships.get_project_membership(project_membership_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectmemberships->getProjectMembership($project_membership_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_memberships.get_project_membership(project_membership_gid:
- 'project_membership_gid', param: "value", param: "value", options: {pretty:
- true})
- /projects/{project_gid}/project_memberships:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/user_query_param'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get memberships from a project
- description: >-
- Returns the compact project membership records for the project.
- tags:
- - Project memberships
- operationId: getProjectMembershipsForProject
- responses:
- 200:
- description: >-
- Successfully retrieved the requested project's memberships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectMembershipCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.projectmemberships.getProjectMembershipsForProject(projectGid,
- user)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectmemberships.getProjectMembershipsForProject(projectGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_memberships.get_project_memberships_for_project(project_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectmemberships->getProjectMembershipsForProject($project_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_memberships.get_project_memberships_for_project(project_gid:
- 'project_gid', param: "value", param: "value", options: {pretty: true})
- /project_statuses/{project_status_gid}:
- parameters:
- - $ref: '#/components/parameters/project_status_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a project status
- description: |-
- *Deprecated: new integrations should prefer the `/status_updates/{status_gid}` route.*
-
- Returns the complete record for a single status update.
- tags:
- - Project statuses
- operationId: getProjectStatus
- responses:
- 200:
- description: Successfully retrieved the specified project's status updates.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectStatusResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- ProjectStatus result = client.projectstatuses.getProjectStatus(projectStatusGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectstatuses.getProjectStatus(projectStatusGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_statuses.get_project_status(project_status_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectstatuses->getProjectStatus($project_status_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_statuses.get_project_status(project_status_gid:
- 'project_status_gid', param: "value", param: "value", options: {pretty:
- true})
- delete:
- summary: Delete a project status
- description: |-
- *Deprecated: new integrations should prefer the `/status_updates/{status_gid}` route.*
-
- Deletes a specific, existing project status update.
-
- Returns an empty data record.
- tags:
- - Project statuses
- operationId: deleteProjectStatus
- responses:
- 200:
- description: Successfully deleted the specified project status.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projectstatuses.deleteProjectStatus(projectStatusGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectstatuses.deleteProjectStatus(projectStatusGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_statuses.delete_project_status(project_status_gid,
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectstatuses->deleteProjectStatus($project_status_gid,
- array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_statuses.delete_project_status(project_status_gid:
- 'project_status_gid', options: {pretty: true})
- /projects/{project_gid}/project_statuses:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get statuses from a project
- description: |-
- *Deprecated: new integrations should prefer the `/status_updates` route.*
-
- Returns the compact project status update records for all updates on the project.
- tags:
- - Project statuses
- operationId: getProjectStatusesForProject
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- responses:
- 200:
- description: Successfully retrieved the specified project's status updates.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectStatusCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.projectstatuses.getProjectStatusesForProject(projectGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectstatuses.getProjectStatusesForProject(projectGid, {param:
- "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_statuses.get_project_statuses_for_project(project_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectstatuses->getProjectStatusesForProject($project_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_statuses.get_project_statuses_for_project(project_gid:
- 'project_gid', param: "value", param: "value", options: {pretty: true})
- post:
- summary: Create a project status
- description: |-
- *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.
- tags:
- - Project statuses
- operationId: createProjectStatusForProject
- requestBody:
- description: The project status to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectStatusRequest'
- responses:
- 201:
- description: Successfully created a new story.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectStatusResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- ProjectStatus result = client.projectstatuses.createProjectStatusForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projectstatuses.createProjectStatusForProject(projectGid, {field:
- "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_statuses.create_project_status_for_project(project_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projectstatuses->createProjectStatusForProject($project_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_statuses.create_project_status_for_project(project_gid:
- 'project_gid', field: "value", field: "value", options: {pretty: true})
- /project_templates/{project_template_gid}:
- parameters:
- - $ref: '#/components/parameters/project_template_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a project template
- description: Returns the complete project template record for a single project
- template.
- tags:
- - Project templates
- operationId: getProjectTemplate
- responses:
- 200:
- description: Successfully retrieved the requested project template.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectTemplateResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projecttemplates.getProjectTemplate(projectTemplateGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projecttemplates.getProjectTemplate(projectTemplateGid, {param:
- "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_templates.get_project_template(project_template_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projecttemplates->getProjectTemplate($project_template_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_templates.get_project_template(project_template_gid:
- 'project_template_gid', param: "value", param: "value", options: {pretty:
- true})
- /project_templates:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get multiple project templates
- description: >-
- Returns the compact project template records for all project templates in
- the given team or workspace.
- tags:
- - Project templates
- operationId: getProjectTemplates
- parameters:
- - $ref: '#/components/parameters/workspace_query_param'
- - $ref: '#/components/parameters/team_query_param'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- responses:
- 200:
- description: Successfully retrieved the requested team's or workspace's
- project templates.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectTemplateCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.projecttemplates.getProjectTemplates(team,
- workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projecttemplates.getProjectTemplates({param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_templates.get_project_templates({'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projecttemplates->getProjectTemplates(array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_templates.get_project_templates(param: "value",
- param: "value", options: {pretty: true})
- /teams/{team_gid}/project_templates:
- parameters:
- - $ref: '#/components/parameters/team_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a team's project templates
- description: >-
- Returns the compact project template records for all project templates in
- the team.
- tags:
- - Project templates
- operationId: getProjectTemplatesForTeam
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- responses:
- 200:
- description: Successfully retrieved the requested team's project templates.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectTemplateCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.projecttemplates.getProjectTemplatesForTeam(teamGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projecttemplates.getProjectTemplatesForTeam(teamGid, {param:
- "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_templates.get_project_templates_for_team(team_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projecttemplates->getProjectTemplatesForTeam($team_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_templates.get_project_templates_for_team(team_gid:
- 'team_gid', param: "value", param: "value", options: {pretty: true})
- /project_templates/{project_template_gid}/instantiateProject:
- parameters:
- - $ref: '#/components/parameters/project_template_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Instantiate a project from a project template
- description: >-
- 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](/reference/getprojecttemplate). 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](/reference/workspaces) parameter._
- tags:
- - Project templates
- operationId: instantiateProject
- requestBody:
- description: >-
- 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.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectTemplateInstantiateProjectRequest'
- responses:
- 201:
- description: Successfully created the job to handle project instantiation.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/JobResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Job result = client.projecttemplates.instantiateProject(projectTemplateGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projecttemplates.instantiateProject(projectTemplateGid, {field:
- "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.project_templates.instantiate_project(project_template_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projecttemplates->instantiateProject($project_template_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.project_templates.instantiate_project(project_template_gid:
- 'project_template_gid', field: "value", field: "value", options: {pretty:
- true})
- /projects:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get multiple projects
- description: >-
- Returns the compact project records for some filtered set of projects.
- Use one or more of the parameters provided to filter the projects
- returned.
-
- *Note: This endpoint may timeout for large domains. Try filtering by team!*
- tags:
- - Projects
- operationId: getProjects
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - name: workspace
- in: query
- description: >-
- The workspace or organization to filter projects on.
- schema:
- type: string
- example: '1331'
- - name: team
- in: query
- description: The team to filter projects on.
- schema:
- type: string
- example: '14916'
- - $ref: '#/components/parameters/archived_query_param'
- responses:
- 200:
- description: Successfully retrieved projects.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.projects.getProjects(archived, team, workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.getProjects({param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.get_projects({'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->getProjects(array('param' => 'value', 'param'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.get_projects(param: "value", param: "value",
- options: {pretty: true})
- post:
- summary: Create a project
- description: |-
- 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.
- tags:
- - Projects
- operationId: createProject
- requestBody:
- description: The project to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectRequest'
- responses:
- 201:
- description: Successfully retrieved projects.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.createProject()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.createProject({field: "value", field: "value", pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.create_project({'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->createProject(array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.create_project(field: "value", field: "value",
- options: {pretty: true})
- /projects/{project_gid}:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a project
- description: Returns the complete project record for a single project.
- tags:
- - Projects
- operationId: getProject
- responses:
- 200:
- description: Successfully retrieved the requested project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.getProject(projectGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.getProject(projectGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.get_project(project_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->getProject($project_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.get_project(project_gid: 'project_gid', param:
- "value", param: "value", options: {pretty: true})
- put:
- summary: Update a project
- description: |-
- 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.
- tags:
- - Projects
- operationId: updateProject
- requestBody:
- description: The updated fields for the project.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectRequest'
- responses:
- 200:
- description: Successfully updated the project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.updateProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.updateProject(projectGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.update_project(project_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->updateProject($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.update_project(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- delete:
- summary: Delete a project
- description: |-
- A specific, existing project can be deleted by making a DELETE request on
- the URL for that project.
-
- Returns an empty data record.
- tags:
- - Projects
- operationId: deleteProject
- responses:
- 200:
- description: Successfully deleted the specified project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projects.deleteProject(projectGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.deleteProject(projectGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.delete_project(project_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->deleteProject($project_gid, array('opt_pretty'
- => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.delete_project(project_gid: 'project_gid',
- options: {pretty: true})
- /projects/{project_gid}/duplicate:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Duplicate a project
- description: >-
- Creates and returns a job that will asynchronously handle the duplication.
- tags:
- - Projects
- operationId: duplicateProject
- requestBody:
- description: >-
- Describes the duplicate's name and the elements that will be duplicated.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectDuplicateRequest'
- responses:
- 201:
- description: Successfully created the job to handle duplication.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/JobResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Job result = client.projects.duplicateProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.duplicateProject(projectGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.duplicate_project(project_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->duplicateProject($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.duplicate_project(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/projects:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get projects a task is in
- description: >-
- Returns a compact representation of all of the projects the task is in.
- tags:
- - Projects
- operationId: getProjectsForTask
- responses:
- 200:
- description: >-
- Successfully retrieved the projects for the given task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.projects.getProjectsForTask(taskGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.getProjectsForTask(taskGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.get_projects_for_task(task_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->getProjectsForTask($task_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.get_projects_for_task(task_gid: 'task_gid',
- param: "value", param: "value", options: {pretty: true})
- /teams/{team_gid}/projects:
- parameters:
- - $ref: '#/components/parameters/team_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a team's projects
- description: >-
- Returns the compact project records for all projects in the team.
- tags:
- - Projects
- operationId: getProjectsForTeam
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - $ref: '#/components/parameters/archived_query_param'
- responses:
- 200:
- description: Successfully retrieved the requested team's projects.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.projects.getProjectsForTeam(teamGid, archived)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.getProjectsForTeam(teamGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.get_projects_for_team(team_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->getProjectsForTeam($team_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.get_projects_for_team(team_gid: 'team_gid',
- param: "value", param: "value", options: {pretty: true})
- post:
- summary: Create a project in a team
- description: |-
- Creates a project shared with the given team.
-
- Returns the full record of the newly created project.
- tags:
- - Projects
- operationId: createProjectForTeam
- requestBody:
- description: The new project to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectRequest'
- responses:
- 201:
- description: Successfully created the specified project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.createProjectForTeam(teamGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.createProjectForTeam(teamGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.create_project_for_team(team_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->createProjectForTeam($team_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.create_project_for_team(team_gid: 'team_gid',
- field: "value", field: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/projects:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get all projects in a workspace
- description: >-
- Returns the compact project records for all projects in the workspace.
-
- *Note: This endpoint may timeout for large domains. Prefer the
- `/teams/{team_gid}/projects` endpoint.*
- tags:
- - Projects
- operationId: getProjectsForWorkspace
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - $ref: '#/components/parameters/archived_query_param'
- responses:
- 200:
- description: Successfully retrieved the requested workspace's projects.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/ProjectCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.projects.getProjectsForWorkspace(workspaceGid,
- archived)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.getProjectsForWorkspace(workspaceGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.get_projects_for_workspace(workspace_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->getProjectsForWorkspace($workspace_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.get_projects_for_workspace(workspace_gid: 'workspace_gid',
- param: "value", param: "value", options: {pretty: true})
- post:
- summary: Create a project in a workspace
- description: |-
- 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.
- tags:
- - Projects
- operationId: createProjectForWorkspace
- requestBody:
- description: The new project to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectRequest'
- responses:
- 201:
- description: >-
- Successfully created a new project in the specified workspace.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.createProjectForWorkspace(workspaceGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.createProjectForWorkspace(workspaceGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.create_project_for_workspace(workspace_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->createProjectForWorkspace($workspace_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.create_project_for_workspace(workspace_gid:
- 'workspace_gid', field: "value", field: "value", options: {pretty: true})
- /projects/{project_gid}/addCustomFieldSetting:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- post:
- summary: Add a custom field to a project
- description: >-
- Custom fields are associated with projects by way of custom field
- settings. This method creates a setting for the project.
- tags:
- - Projects
- operationId: addCustomFieldSettingForProject
- requestBody:
- description: Information about the custom field setting.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/AddCustomFieldSettingRequest'
- responses:
- 200:
- description: Successfully added the custom field to the project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CustomFieldSettingResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- CustomFieldSetting result = client.projects.addCustomFieldSettingForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.addCustomFieldSettingForProject(projectGid, {field:
- "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.add_custom_field_setting_for_project(project_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->addCustomFieldSettingForProject($project_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.add_custom_field_setting_for_project(project_gid:
- 'project_gid', field: "value", field: "value", options: {pretty: true})
- /projects/{project_gid}/removeCustomFieldSetting:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- post:
- summary: Remove a custom field from a project
- description: >-
- Removes a custom field setting from a project.
- tags:
- - Projects
- operationId: removeCustomFieldSettingForProject
- requestBody:
- description: Information about the custom field setting being removed.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/RemoveCustomFieldSettingRequest'
- responses:
- 200:
- description: Successfully removed the custom field from the project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projects.removeCustomFieldSettingForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.removeCustomFieldSettingForProject(projectGid, {field:
- "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.remove_custom_field_setting_for_project(project_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->removeCustomFieldSettingForProject($project_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.remove_custom_field_setting_for_project(project_gid:
- 'project_gid', field: "value", field: "value", options: {pretty: true})
- /projects/{project_gid}/task_counts:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get task count of a project
- description: >-
- Get an object that holds task count fields. **All fields are excluded by default**.
- You must
- [opt in](/docs/inputoutput-options) using `opt_fields` to get any information
- from this endpoint.
-
-
- This endpoint has an additional [rate limit](/docs/rate-limits) and each field
- counts especially high
- against our [cost limits](/docs/rate-limits#cost-limits).
-
-
- Milestones are just tasks, so they are included in the `num_tasks`, `num_incomplete_tasks`,
- and
- `num_completed_tasks` counts.
- tags:
- - Projects
- operationId: getTaskCountsForProject
- responses:
- 200:
- description: Successfully retrieved the requested project's task counts.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskCountResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.projects.getTaskCountsForProject(projectGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.getTaskCountsForProject(projectGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.get_task_counts_for_project(project_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->getTaskCountsForProject($project_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.get_task_counts_for_project(project_gid: 'project_gid',
- param: "value", param: "value", options: {pretty: true})
- /projects/{project_gid}/addMembers:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add users to a project
- description: >-
- 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.
- tags:
- - Projects
- operationId: addMembersForProject
- requestBody:
- description: Information about the members being added.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/AddMembersRequest'
- responses:
- 200:
- description: Successfully added members to the project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.addMembersForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.addMembersForProject(projectGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.add_members_for_project(project_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->addMembersForProject($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.add_members_for_project(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /projects/{project_gid}/removeMembers:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove users from a project
- description: >-
- Removes the specified list of users from members of the project.
-
- Returns the updated project record.
- tags:
- - Projects
- operationId: removeMembersForProject
- requestBody:
- description: Information about the members being removed.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/RemoveMembersRequest'
- responses:
- 200:
- description: Successfully removed the members from the project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.removeMembersForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.removeMembersForProject(projectGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.remove_members_for_project(project_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->removeMembersForProject($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.remove_members_for_project(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /projects/{project_gid}/addFollowers:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add followers to a project
- description: >-
- 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.
- tags:
- - Projects
- operationId: addFollowersForProject
- requestBody:
- description: Information about the followers being added.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/AddFollowersRequest'
- responses:
- 200:
- description: Successfully added followers to the project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.addFollowersForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.addFollowersForProject(projectGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.add_followers_for_project(project_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->addFollowersForProject($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.add_followers_for_project(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /projects/{project_gid}/removeFollowers:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove followers from a project
- description: >-
- Removes the specified list of users from following the project, this will
- not affect project membership status.
-
- Returns the updated project record.
- tags:
- - Projects
- operationId: removeFollowersForProject
- requestBody:
- description: Information about the followers being removed.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/RemoveFollowersRequest'
- responses:
- 200:
- description: Successfully removed followers from the project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Project result = client.projects.removeFollowersForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.removeFollowersForProject(projectGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.remove_followers_for_project(project_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->removeFollowersForProject($project_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.remove_followers_for_project(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /projects/{project_gid}/saveAsTemplate:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Create a project template from a project
- description: |-
- 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](https://forum.asana.com/t/a-new-api-for-project-templates/156432).
- tags:
- - Projects
- operationId: projectSaveAsTemplate
- requestBody:
- description: >-
- Describes the inputs used for creating a project template, such as the resulting
- project template's name,
- which team it should be created in.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectSaveAsTemplateRequest'
- responses:
- 201:
- description: Successfully created the job to handle project template creation.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/JobResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Job result = client.projects.projectSaveAsTemplate(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.projects.projectSaveAsTemplate(projectGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.projects.project_save_as_template(project_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- projects->projectSaveAsTemplate($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.projects.project_save_as_template(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /sections/{section_gid}:
- parameters:
- - $ref: '#/components/parameters/section_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a section
- description: >-
- Returns the complete record for a single section.
- tags:
- - Sections
- operationId: getSection
- responses:
- 200:
- description: Successfully retrieved section.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/SectionResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Section result = client.sections.getSection(sectionGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.sections.getSection(sectionGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.sections.get_section(section_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- sections->getSection($section_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.sections.get_section(section_gid: 'section_gid', param:
- "value", param: "value", options: {pretty: true})
- put:
- summary: Update a section
- description: |-
- 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.
- tags:
- - Sections
- operationId: updateSection
- requestBody:
- description: The section to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/SectionRequest'
- responses:
- 200:
- description: Successfully updated the specified section.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/SectionResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Section result = client.sections.updateSection(sectionGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.sections.updateSection(sectionGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.sections.update_section(section_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- sections->updateSection($section_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.sections.update_section(section_gid: 'section_gid',
- field: "value", field: "value", options: {pretty: true})
- delete:
- summary: Delete a section
- description: |-
- A specific, existing section can be deleted by making a DELETE request on
- the URL for that section.
-
- Note that sections must be empty to be deleted.
-
- The last remaining section cannot be deleted.
-
- Returns an empty data block.
- tags:
- - Sections
- operationId: deleteSection
- responses:
- 200:
- description: Successfully deleted the specified section.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.sections.deleteSection(sectionGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.sections.deleteSection(sectionGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.sections.delete_section(section_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- sections->deleteSection($section_gid, array('opt_pretty'
- => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.sections.delete_section(section_gid: 'section_gid',
- options: {pretty: true})
- /projects/{project_gid}/sections:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get sections in a project
- description: >-
- Returns the compact records for all sections in the specified project.
- tags:
- - Sections
- operationId: getSectionsForProject
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- responses:
- 200:
- description: Successfully retrieved sections in project.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/SectionCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.sections.getSectionsForProject(projectGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.sections.getSectionsForProject(projectGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.sections.get_sections_for_project(project_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- sections->getSectionsForProject($project_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.sections.get_sections_for_project(project_gid: 'project_gid',
- param: "value", param: "value", options: {pretty: true})
- post:
- summary: Create a section in a project
- description: >-
- Creates a new section in a project.
-
- Returns the full record of the newly created section.
- tags:
- - Sections
- operationId: createSectionForProject
- requestBody:
- description: The section to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/SectionRequest'
- responses:
- 201:
- description: Successfully created the specified section.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/SectionResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Section result = client.sections.createSectionForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.sections.createSectionForProject(projectGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.sections.create_section_for_project(project_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- sections->createSectionForProject($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.sections.create_section_for_project(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /sections/{section_gid}/addTask:
- parameters:
- - $ref: '#/components/parameters/section_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add task to section
- description: |-
- 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).
- tags:
- - Sections
- operationId: addTaskForSection
- requestBody:
- description: The task and optionally the insert location.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/SectionTaskInsertRequest'
- responses:
- 200:
- description: Successfully added the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.sections.addTaskForSection(sectionGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.sections.addTaskForSection(sectionGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.sections.add_task_for_section(section_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- sections->addTaskForSection($section_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.sections.add_task_for_section(section_gid: 'section_gid',
- field: "value", field: "value", options: {pretty: true})
- /projects/{project_gid}/sections/insert:
- parameters:
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Move or Insert sections
- description: |-
- 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.
- tags:
- - Sections
- operationId: insertSectionForProject
- requestBody:
- description: The section's move action.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ProjectSectionInsertRequest'
- responses:
- 200:
- description: Successfully moved the specified section.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.sections.insertSectionForProject(projectGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.sections.insertSectionForProject(projectGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.sections.insert_section_for_project(project_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- sections->insertSectionForProject($project_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.sections.insert_section_for_project(project_gid: 'project_gid',
- field: "value", field: "value", options: {pretty: true})
- /status_updates/{status_gid}:
- parameters:
- - $ref: '#/components/parameters/status_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a status update
- description: >-
- Returns the complete record for a single status update.
- tags:
- - Status updates
- operationId: getStatus
- responses:
- 200:
- description: Successfully retrieved the specified object's status updates.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/StatusUpdateResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.statusupdates.getStatus(statusGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.statusupdates.getStatus(statusGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.status_updates.get_status(status_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- statusupdates->getStatus($status_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.status_updates.get_status(status_gid: 'status_gid',
- param: "value", param: "value", options: {pretty: true})
- delete:
- summary: Delete a status update
- description: |-
- Deletes a specific, existing status update.
-
- Returns an empty data record.
- tags:
- - Status updates
- operationId: deleteStatus
- responses:
- 200:
- description: Successfully deleted the specified status.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.statusupdates.deleteStatus(statusGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.statusupdates.deleteStatus(statusGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.status_updates.delete_status(status_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- statusupdates->deleteStatus($status_gid, array('opt_pretty'
- => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.status_updates.delete_status(status_gid: 'status_gid',
- options: {pretty: true})
- /status_updates:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get status updates from an object
- description: >-
- Returns the compact status update records for all updates on the object.
- tags:
- - Status updates
- operationId: getStatusesForObject
- parameters:
- - name: parent
- required: true
- in: query
- description: >-
- Globally unique identifier for object to fetch statuses from. Must be
- a GID
- for a project, portfolio, or goal.
- schema:
- type: string
- example: '159874'
- - name: created_since
- in: query
- description: |-
- Only return statuses that have been created since the given time.
- schema:
- type: string
- format: date-time
- example: '2012-02-22T02:06:58.158Z'
- responses:
- 200:
- description: Successfully retrieved the specified object's status updates.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/StatusUpdateCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.statusupdates.getStatusesForObject(createdSince,
- parent)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.statusupdates.getStatusesForObject({param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.status_updates.get_statuses_for_object({'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- statusupdates->getStatusesForObject(array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.status_updates.get_statuses_for_object(parent: ''parent_example'',
- param: "value", param: "value", options: {pretty: true})
- post:
- summary: Create a status update
- description: >-
- Creates a new status update on an object.
-
- Returns the full record of the newly created status update.
- tags:
- - Status updates
- operationId: createStatusForObject
- requestBody:
- description: The status update to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/StatusUpdateRequest'
- responses:
- 201:
- description: Successfully created a new status update.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/StatusUpdateResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.statusupdates.createStatusForObject()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.statusupdates.createStatusForObject({field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.status_updates.create_status_for_object({'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- statusupdates->createStatusForObject(array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.status_updates.create_status_for_object(field: "value",
- field: "value", options: {pretty: true})
- /stories/{story_gid}:
- parameters:
- - $ref: '#/components/parameters/story_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a story
- description: Returns the full record for a single story.
- tags:
- - Stories
- operationId: getStory
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- responses:
- 200:
- description: Successfully retrieved the specified story.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/StoryResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Story result = client.stories.getStory(storyGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.stories.getStory(storyGid, {param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.stories.get_story(story_gid, {'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- stories->getStory($story_gid, array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.stories.get_story(story_gid: 'story_gid', param: "value",
- param: "value", options: {pretty: true})
- put:
- summary: Update a story
- description: >-
- 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.
- tags:
- - Stories
- operationId: updateStory
- requestBody:
- description: The comment story to update.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/StoryRequest'
- responses:
- 200:
- description: Successfully retrieved the specified story.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/StoryResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Story result = client.stories.updateStory(storyGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.stories.updateStory(storyGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.stories.update_story(story_gid, {'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- stories->updateStory($story_gid, array('field' =>
- 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.stories.update_story(story_gid: 'story_gid', field:
- "value", field: "value", options: {pretty: true})
- delete:
- summary: Delete a story
- description: |-
- Deletes a story. A user can only delete stories they have created.
-
- Returns an empty data record.
- tags:
- - Stories
- operationId: deleteStory
- responses:
- 200:
- description: Successfully deleted the specified story.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.stories.deleteStory(storyGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.stories.deleteStory(storyGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.stories.delete_story(story_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- stories->deleteStory($story_gid, array('opt_pretty'
- => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.stories.delete_story(story_gid: 'story_gid', options:
- {pretty: true})
- /tasks/{task_gid}/stories:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get stories from a task
- description: >-
- Returns the compact records for all stories on the task.
- tags:
- - Stories
- operationId: getStoriesForTask
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- responses:
- 200:
- description: Successfully retrieved the specified task's stories.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- items:
- $ref: '#/components/schemas/StoryCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.stories.getStoriesForTask(taskGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.stories.getStoriesForTask(taskGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.stories.get_stories_for_task(task_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- stories->getStoriesForTask($task_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.stories.get_stories_for_task(task_gid: 'task_gid', param:
- "value", param: "value", options: {pretty: true})
- post:
- summary: Create a story on a task
- description: |-
- 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.
- tags:
- - Stories
- operationId: createStoryForTask
- requestBody:
- description: The story to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/StoryRequest'
- responses:
- 201:
- description: Successfully created a new story.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/StoryResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Story result = client.stories.createStoryForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.stories.createStoryForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.stories.create_story_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- stories->createStoryForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.stories.create_story_for_task(task_gid: 'task_gid',
- field: "value", field: "value", options: {pretty: true})
- /tags:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get multiple tags
- description: >-
- Returns the compact tag records for some filtered set of tags.
- Use one or more of the parameters provided to filter the tags returned.
- tags:
- - Tags
- operationId: getTags
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - name: workspace
- in: query
- description: >-
- The workspace to filter tags on.
- schema:
- type: string
- example: '1331'
- responses:
- 200:
- description: Successfully retrieved the specified set of tags.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TagCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tags.getTags(workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tags.getTags({param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tags.get_tags({'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tags->getTags(array('param' => 'value', 'param' =>
- 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tags.get_tags(param: "value", param: "value", options:
- {pretty: true})
- post:
- summary: Create a tag
- description: |-
- 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.
- tags:
- - Tags
- operationId: createTag
- requestBody:
- description: The tag to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TagRequest'
- responses:
- 201:
- description: Successfully created the newly specified tag.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TagResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Tag result = client.tags.createTag()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tags.createTag({field: "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tags.create_tag({'field': 'value', 'field': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tags->createTag(array('field' => 'value', 'field'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tags.create_tag(field: "value", field: "value", options:
- {pretty: true})
- /tags/{tag_gid}:
- parameters:
- - $ref: '#/components/parameters/tag_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get a tag
- description: Returns the complete tag record for a single tag.
- tags:
- - Tags
- operationId: getTag
- responses:
- 200:
- description: Successfully retrieved the specified tag.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TagResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Tag result = client.tags.getTag(tagGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tags.getTag(tagGid, {param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tags.get_tag(tag_gid, {'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tags->getTag($tag_gid, array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tags.get_tag(tag_gid: 'tag_gid', param: "value", param:
- "value", options: {pretty: true})
- put:
- summary: Update a tag
- description: |-
- 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.
- tags:
- - Tags
- operationId: updateTag
- responses:
- 200:
- description: Successfully updated the specified tag.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TagResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Tag result = client.tags.updateTag(tagGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tags.updateTag(tagGid, {field: "value", field: "value", pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tags.update_tag(tag_gid, {'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tags->updateTag($tag_gid, array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tags.update_tag(tag_gid: 'tag_gid', field: "value",
- field: "value", options: {pretty: true})
- delete:
- summary: Delete a tag
- description: |-
- A specific, existing tag can be deleted by making a DELETE request on
- the URL for that tag.
-
- Returns an empty data record.
- tags:
- - Tags
- operationId: deleteTag
- responses:
- 200:
- description: Successfully deleted the specified tag.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tags.deleteTag(tagGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tags.deleteTag(tagGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tags.delete_tag(tag_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tags->deleteTag($tag_gid, array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tags.delete_tag(tag_gid: 'tag_gid', options: {pretty:
- true})
- /tasks/{task_gid}/tags:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get a task's tags
- description: >-
- Get a compact representation of all of the tags the task has.
- tags:
- - Tags
- operationId: getTagsForTask
- responses:
- 200:
- description: >-
- Successfully retrieved the tags for the given task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TagCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tags.getTagsForTask(taskGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tags.getTagsForTask(taskGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tags.get_tags_for_task(task_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tags->getTagsForTask($task_gid, array('param' =>
- 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tags.get_tags_for_task(task_gid: 'task_gid', param:
- "value", param: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/tags:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get tags in a workspace
- description: >-
- Returns the compact tag records for some filtered set of tags.
- Use one or more of the parameters provided to filter the tags returned.
- tags:
- - Tags
- operationId: getTagsForWorkspace
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- responses:
- 200:
- description: Successfully retrieved the specified set of tags.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TagCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tags.getTagsForWorkspace(workspaceGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tags.getTagsForWorkspace(workspaceGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tags.get_tags_for_workspace(workspace_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tags->getTagsForWorkspace($workspace_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tags.get_tags_for_workspace(workspace_gid: 'workspace_gid',
- param: "value", param: "value", options: {pretty: true})
- post:
- summary: Create a tag in a workspace
- description: |-
- 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.
- tags:
- - Tags
- operationId: createTagForWorkspace
- requestBody:
- description: The tag to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TagResponse'
- responses:
- 201:
- description: Successfully created the newly specified tag.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TagResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Tag result = client.tags.createTagForWorkspace(workspaceGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tags.createTagForWorkspace(workspaceGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tags.create_tag_for_workspace(workspace_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tags->createTagForWorkspace($workspace_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tags.create_tag_for_workspace(workspace_gid: 'workspace_gid',
- field: "value", field: "value", options: {pretty: true})
- /tasks:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get multiple tasks
- description: >-
- Returns the compact task records for some filtered set of tasks. Use one
- or more of the parameters provided to filter the tasks returned. You must
- specify a `project` or `tag` if you do not specify `assignee` and
- `workspace`.
-
-
- For more complex task retrieval, use
- [workspaces/{workspace_gid}/tasks/search](/reference/searchtasksforworkspace).
- tags:
- - Tasks
- operationId: getTasks
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - name: assignee
- in: query
- description: >-
- The assignee to filter tasks on. If searching for unassigned tasks, assignee.any
- = null can be specified.
-
- *Note: If you specify `assignee`, you must also specify the
- `workspace` to filter on.*
- schema:
- type: string
- x-env-variable: assignee
- example: '14641'
- - name: project
- in: query
- description: >-
- The project to filter tasks on.
- schema:
- type: string
- example: '321654'
- x-env-variable: project
- - name: section
- in: query
- description: >-
- The section to filter tasks on.
- schema:
- type: string
- example: '321654'
- x-env-variable: section
- - name: workspace
- in: query
- description: >-
- The workspace to filter tasks on.
-
- *Note: If you specify `workspace`, you must also specify the
- `assignee` to filter on.*
- schema:
- type: string
- example: '321654'
- x-env-variable: workspace
- - name: completed_since
- in: query
- description: >-
- Only return tasks that are either incomplete or that have been
- completed since this time.
- schema:
- type: string
- format: date-time
- example: '2012-02-22T02:06:58.158Z'
- - name: modified_since
- in: query
- description: |-
- Only return tasks that have been modified since the given time.
-
- *Note: A task is considered “modified” if any of its properties
- change, or associations between it and other objects are modified
- (e.g. a task being added to a project). A task is not considered
- modified just because another object it is associated with (e.g. a
- subtask) is modified. Actions that count as modifying the task
- include assigning, renaming, completing, and adding stories.*
- schema:
- type: string
- format: date-time
- example: '2012-02-22T02:06:58.158Z'
- responses:
- 200:
- description: Successfully retrieved requested tasks.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.getTasks(modifiedSince, completedSince,
- workspace, section, project, assignee)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getTasks({param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_tasks({'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getTasks(array('param' => 'value', 'param'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_tasks(param: "value", param: "value", options:
- {pretty: true})
- post:
- summary: Create a task
- description: |-
- 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.
- tags:
- - Tasks
- operationId: createTask
- requestBody:
- description: The task to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskRequest'
- responses:
- 201:
- description: Successfully created a new task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Task result = client.tasks.createTask()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.createTask({field: "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.create_task({'field': 'value', 'field': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->createTask(array('field' => 'value', 'field'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.create_task(field: "value", field: "value", options:
- {pretty: true})
- /tasks/{task_gid}:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a task
- description: Returns the complete task record for a single task.
- tags:
- - Tasks
- operationId: getTask
- responses:
- 200:
- description: Successfully retrieved the specified task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Task result = client.tasks.getTask(taskGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getTask(taskGid, {param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_task(task_gid, {'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getTask($task_gid, array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_task(task_gid: 'task_gid', param: "value",
- param: "value", options: {pretty: true})
- put:
- summary: Update a task
- description: |-
- 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.
- tags:
- - Tasks
- operationId: updateTask
- requestBody:
- description: The task to update.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskRequest'
- responses:
- 200:
- description: Successfully updated the specified task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Task result = client.tasks.updateTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.updateTask(taskGid, {field: "value", field: "value", pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.update_task(task_gid, {'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->updateTask($task_gid, array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.update_task(task_gid: 'task_gid', field: "value",
- field: "value", options: {pretty: true})
- delete:
- summary: Delete a task
- description: |-
- A specific, existing task can be deleted by making a DELETE request on
- the URL for that task. Deleted tasks go into the “trash” of the user
- making the delete request. Tasks can be recovered from the trash within a
- period of 30 days; afterward they are completely removed from the system.
-
- Returns an empty data record.
- tags:
- - Tasks
- operationId: deleteTask
- responses:
- 200:
- description: Successfully deleted the specified task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.deleteTask(taskGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.deleteTask(taskGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.delete_task(task_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->deleteTask($task_gid, array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.delete_task(task_gid: 'task_gid', options: {pretty:
- true})
- /tasks/{task_gid}/duplicate:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Duplicate a task
- description: >-
- Creates and returns a job that will asynchronously handle the duplication.
- tags:
- - Tasks
- operationId: duplicateTask
- requestBody:
- description: >-
- Describes the duplicate's name and the fields that will be duplicated.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskDuplicateRequest'
- responses:
- 201:
- description: Successfully created the job to handle duplication.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/JobResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Job result = client.tasks.duplicateTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.duplicateTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.duplicate_task(task_gid, {'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->duplicateTask($task_gid, array('field' =>
- 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.duplicate_task(task_gid: 'task_gid', field: "value",
- field: "value", options: {pretty: true})
- /projects/{project_gid}/tasks:
- parameters:
- - $ref: '#/components/parameters/completed_since'
- - $ref: '#/components/parameters/project_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get tasks from a project
- description: >-
- Returns the compact task records for all tasks within the given project,
- ordered by their priority within the project. Tasks can exist in more
- than one project at a time.
- tags:
- - Tasks
- operationId: getTasksForProject
- responses:
- 200:
- description: Successfully retrieved the requested project's tasks.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.getTasksForProject(projectGid, completedSince)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getTasksForProject(projectGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_tasks_for_project(project_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getTasksForProject($project_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_tasks_for_project(project_gid: 'project_gid',
- param: "value", param: "value", options: {pretty: true})
- /sections/{section_gid}/tasks:
- parameters:
- - $ref: '#/components/parameters/section_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get tasks from a section
- description: >-
- *Board view only*: Returns the compact section records for all tasks
- within the given section.
- tags:
- - Tasks
- operationId: getTasksForSection
- responses:
- 200:
- description: >-
- Successfully retrieved the section's tasks.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.getTasksForSection(sectionGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getTasksForSection(sectionGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_tasks_for_section(section_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getTasksForSection($section_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_tasks_for_section(section_gid: 'section_gid',
- param: "value", param: "value", options: {pretty: true})
- /tags/{tag_gid}/tasks:
- parameters:
- - $ref: '#/components/parameters/tag_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get tasks from a tag
- description: >-
- Returns the compact task records for all tasks with the given tag. Tasks
- can have more than one tag at a time.
- tags:
- - Tasks
- operationId: getTasksForTag
- responses:
- 200:
- description: >-
- Successfully retrieved the tasks associated with the specified tag.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.getTasksForTag(tagGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getTasksForTag(tagGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_tasks_for_tag(tag_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getTasksForTag($tag_gid, array('param' =>
- 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_tasks_for_tag(tag_gid: 'tag_gid', param: "value",
- param: "value", options: {pretty: true})
- /user_task_lists/{user_task_list_gid}/tasks:
- parameters:
- - $ref: '#/components/parameters/completed_since'
- - $ref: '#/components/parameters/user_task_list_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get tasks from a user task list
- description: >-
- Returns the compact list of tasks in a user’s My Tasks list.
-
- *Note: Access control is enforced for this endpoint as with
- all Asana API endpoints, meaning a user’s private tasks will be
- filtered out if the API-authenticated user does not have access
- to them.*
-
- *Note: Both complete and incomplete tasks are returned by
- default unless they are filtered out (for example, setting
- `completed_since=now` will return only incomplete tasks, which
- is the default view for “My Tasks” in Asana.)*
- tags:
- - Tasks
- operationId: getTasksForUserTaskList
- responses:
- 200:
- description: >-
- Successfully retrieved the user task list's tasks.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.getTasksForUserTaskList(userTaskListGid,
- completedSince)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getTasksForUserTaskList(userTaskListGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_tasks_for_user_task_list(user_task_list_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getTasksForUserTaskList($user_task_list_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_tasks_for_user_task_list(user_task_list_gid:
- 'user_task_list_gid', param: "value", param: "value", options: {pretty:
- true})
- /tasks/{task_gid}/subtasks:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get subtasks from a task
- description: >-
- Returns a compact representation of all of the subtasks of a task.
- tags:
- - Tasks
- operationId: getSubtasksForTask
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- responses:
- 200:
- description: Successfully retrieved the specified task's subtasks.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.getSubtasksForTask(taskGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getSubtasksForTask(taskGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_subtasks_for_task(task_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getSubtasksForTask($task_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_subtasks_for_task(task_gid: 'task_gid', param:
- "value", param: "value", options: {pretty: true})
- post:
- summary: Create a subtask
- description: >-
- Creates a new subtask and adds it to the parent task. Returns the full
- record for the newly created subtask.
- tags:
- - Tasks
- operationId: createSubtaskForTask
- requestBody:
- description: The new subtask to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskRequest'
- responses:
- 201:
- description: Successfully created the specified subtask.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Task result = client.tasks.createSubtaskForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.createSubtaskForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.create_subtask_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->createSubtaskForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.create_subtask_for_task(task_gid: 'task_gid',
- field: "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/setParent:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Set the parent of a task
- description: >-
- 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.
- tags:
- - Tasks
- operationId: setParentForTask
- requestBody:
- description: The new parent of the subtask.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskSetParentRequest'
- responses:
- 200:
- description: Successfully changed the parent of the specified subtask.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Task result = client.tasks.setParentForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.setParentForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.set_parent_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->setParentForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.set_parent_for_task(task_gid: 'task_gid', field:
- "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/dependencies:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get dependencies from a task
- description: >-
- Returns the compact representations of all of the dependencies of a task.
- tags:
- - Tasks
- operationId: getDependenciesForTask
- responses:
- 200:
- description: Successfully retrieved the specified task's dependencies.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.getDependenciesForTask(taskGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getDependenciesForTask(taskGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_dependencies_for_task(task_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getDependenciesForTask($task_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_dependencies_for_task(task_gid: 'task_gid',
- param: "value", param: "value", options: {pretty: true})
- /tasks/{task_gid}/addDependencies:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Set dependencies for a task
- description: >-
- 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*.
- tags:
- - Tasks
- operationId: addDependenciesForTask
- requestBody:
- description: The list of tasks to set as dependencies.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ModifyDependenciesRequest'
- responses:
- 200:
- description: Successfully set the specified dependencies on the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.addDependenciesForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.addDependenciesForTask(taskGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.add_dependencies_for_task(task_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->addDependenciesForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.add_dependencies_for_task(task_gid: 'task_gid',
- field: "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/removeDependencies:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Unlink dependencies from a task
- description: Unlinks a set of dependencies from this task.
- tags:
- - Tasks
- operationId: removeDependenciesForTask
- requestBody:
- description: The list of tasks to unlink as dependencies.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ModifyDependenciesRequest'
- responses:
- 200:
- description: >-
- Successfully unlinked the dependencies from the specified task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.removeDependenciesForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.removeDependenciesForTask(taskGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.remove_dependencies_for_task(task_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->removeDependenciesForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.remove_dependencies_for_task(task_gid: 'task_gid',
- field: "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/dependents:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get dependents from a task
- description: >-
- Returns the compact representations of all of the dependents of a task.
- tags:
- - Tasks
- operationId: getDependentsForTask
- responses:
- 200:
- description: >-
- Successfully retrieved the specified dependents of the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.getDependentsForTask(taskGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.getDependentsForTask(taskGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.get_dependents_for_task(task_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->getDependentsForTask($task_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.get_dependents_for_task(task_gid: 'task_gid',
- param: "value", param: "value", options: {pretty: true})
- /tasks/{task_gid}/addDependents:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Set dependents for a task
- description: >-
- 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*.
- tags:
- - Tasks
- operationId: addDependentsForTask
- requestBody:
- description: The list of tasks to add as dependents.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ModifyDependentsRequest'
- responses:
- 200:
- description: >-
- Successfully set the specified dependents on the given task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.addDependentsForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.addDependentsForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.add_dependents_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->addDependentsForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.add_dependents_for_task(task_gid: 'task_gid',
- field: "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/removeDependents:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Unlink dependents from a task
- description: >-
- Unlinks a set of dependents from this task.
- tags:
- - Tasks
- operationId: removeDependentsForTask
- requestBody:
- description: The list of tasks to remove as dependents.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/ModifyDependentsRequest'
- responses:
- 200:
- description: >-
- Successfully unlinked the specified tasks as dependents.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 402:
- $ref: '#/components/responses/PaymentRequired'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.removeDependentsForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.removeDependentsForTask(taskGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.remove_dependents_for_task(task_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->removeDependentsForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.remove_dependents_for_task(task_gid: 'task_gid',
- field: "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/addProject:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add a project to a task
- description: |-
- 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.
-
- Returns an empty data block.
- tags:
- - Tasks
- operationId: addProjectForTask
- requestBody:
- description: The project to add the task to.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskAddProjectRequest'
- responses:
- 200:
- description: >-
- Successfully added the specified project to the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.addProjectForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.addProjectForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.add_project_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->addProjectForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.add_project_for_task(task_gid: 'task_gid', field:
- "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/removeProject:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove a project from a task
- description: |-
- 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.
- tags:
- - Tasks
- operationId: removeProjectForTask
- requestBody:
- description: The project to remove the task from.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskRemoveProjectRequest'
- responses:
- 200:
- description: >-
- Successfully removed the specified project from the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.removeProjectForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.removeProjectForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.remove_project_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->removeProjectForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.remove_project_for_task(task_gid: 'task_gid',
- field: "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/addTag:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add a tag to a task
- description: >-
- Adds a tag to a task. Returns an empty data block.
- tags:
- - Tasks
- operationId: addTagForTask
- requestBody:
- description: The tag to add to the task.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskAddTagRequest'
- responses:
- 200:
- description: >-
- Successfully added the specified tag to the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.addTagForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.addTagForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.add_tag_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->addTagForTask($task_gid, array('field' =>
- 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.add_tag_for_task(task_gid: 'task_gid', field:
- "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/removeTag:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove a tag from a task
- description: >-
- Removes a tag from a task. Returns an empty data block.
- tags:
- - Tasks
- operationId: removeTagForTask
- requestBody:
- description: The tag to remove from the task.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskRemoveTagRequest'
- responses:
- 200:
- description: >-
- Successfully removed the specified tag from the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.tasks.removeTagForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.removeTagForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.remove_tag_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->removeTagForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.remove_tag_for_task(task_gid: 'task_gid', field:
- "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/addFollowers:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add followers to a task
- description: >-
- 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.
- tags:
- - Tasks
- operationId: addFollowersForTask
- requestBody:
- description: The followers to add to the task.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskAddFollowersRequest'
- responses:
- 200:
- description: >-
- Successfully added the specified followers to the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Task result = client.tasks.addFollowersForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.addFollowersForTask(taskGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.add_followers_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->addFollowersForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.add_followers_for_task(task_gid: 'task_gid', field:
- "value", field: "value", options: {pretty: true})
- /tasks/{task_gid}/removeFollowers:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove followers from a task
- description: >-
- Removes each of the specified followers from the task if they are
- following. Returns the complete, updated record for the affected task.
- tags:
- - Tasks
- operationId: removeFollowerForTask
- requestBody:
- description: The followers to remove from the task.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskRemoveFollowersRequest'
- responses:
- 200:
- description: >-
- Successfully removed the specified followers from the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TaskResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Task result = client.tasks.removeFollowerForTask(taskGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.removeFollowerForTask(taskGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.remove_follower_for_task(task_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->removeFollowerForTask($task_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.remove_follower_for_task(task_gid: 'task_gid',
- field: "value", field: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/tasks/search:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - name: text
- in: query
- description: >-
- Performs full-text search on both task name and description
- schema:
- type: string
- example: Bug
- - name: resource_subtype
- in: query
- description: >-
- Filters results by the task's resource_subtype
- schema:
- type: string
- enum:
- - default_task
- - milestone
- default: milestone
- - name: assignee.any
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: assignee.not
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: portfolios.any
- in: query
- description: >-
- Comma-separated list of portfolio IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: projects.any
- in: query
- description: >-
- Comma-separated list of project IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: projects.not
- in: query
- description: >-
- Comma-separated list of project IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: projects.all
- in: query
- description: >-
- Comma-separated list of project IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: sections.any
- in: query
- description: >-
- Comma-separated list of section or column IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: sections.not
- in: query
- description: >-
- Comma-separated list of section or column IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: sections.all
- in: query
- description: >-
- Comma-separated list of section or column IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: tags.any
- in: query
- description: >-
- Comma-separated list of tag IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: tags.not
- in: query
- description: >-
- Comma-separated list of tag IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: tags.all
- in: query
- description: >-
- Comma-separated list of tag IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: teams.any
- in: query
- description: >-
- Comma-separated list of team IDs
- schema:
- type: string
- example: 12345,23456,34567
- - name: followers.not
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: created_by.any
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: created_by.not
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: assigned_by.any
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: assigned_by.not
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: liked_by.not
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: commented_on_by.not
- in: query
- description: >-
- Comma-separated list of user identifiers
- schema:
- type: string
- example: 12345,23456,34567
- - name: due_on.before
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: due_on.after
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: due_on
- in: query
- description: >-
- ISO 8601 date string or `null`
- schema:
- type: string
- format: date
- nullable: true
- example: '2019-09-15'
- - name: due_at.before
- in: query
- description: >-
- ISO 8601 datetime string
- schema:
- type: string
- format: date-time
- example: '2019-04-15T01:01:46.055Z'
- - name: due_at.after
- in: query
- description: >-
- ISO 8601 datetime string
- schema:
- type: string
- format: date-time
- example: '2019-04-15T01:01:46.055Z'
- - name: start_on.before
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: start_on.after
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: start_on
- in: query
- description: >-
- ISO 8601 date string or `null`
- schema:
- type: string
- format: date
- nullable: true
- example: '2019-09-15'
- - name: created_on.before
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: created_on.after
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: created_on
- in: query
- description: >-
- ISO 8601 date string or `null`
- schema:
- type: string
- format: date
- nullable: true
- example: '2019-09-15'
- - name: created_at.before
- in: query
- description: >-
- ISO 8601 datetime string
- schema:
- type: string
- format: date-time
- example: '2019-04-15T01:01:46.055Z'
- - name: created_at.after
- in: query
- description: >-
- ISO 8601 datetime string
- schema:
- type: string
- format: date-time
- example: '2019-04-15T01:01:46.055Z'
- - name: completed_on.before
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: completed_on.after
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: completed_on
- in: query
- description: >-
- ISO 8601 date string or `null`
- schema:
- type: string
- format: date
- nullable: true
- example: '2019-09-15'
- - name: completed_at.before
- in: query
- description: >-
- ISO 8601 datetime string
- schema:
- type: string
- format: date-time
- example: '2019-04-15T01:01:46.055Z'
- - name: completed_at.after
- in: query
- description: >-
- ISO 8601 datetime string
- schema:
- type: string
- format: date-time
- example: '2019-04-15T01:01:46.055Z'
- - name: modified_on.before
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: modified_on.after
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: modified_on
- in: query
- description: >-
- ISO 8601 date string or `null`
- schema:
- type: string
- format: date
- nullable: true
- example: '2019-09-15'
- - name: modified_at.before
- in: query
- description: >-
- ISO 8601 datetime string
- schema:
- type: string
- format: date-time
- example: '2019-04-15T01:01:46.055Z'
- - name: modified_at.after
- in: query
- description: >-
- ISO 8601 datetime string
- schema:
- type: string
- format: date-time
- example: '2019-04-15T01:01:46.055Z'
- - name: is_blocking
- in: query
- description: >-
- Filter to incomplete tasks with dependents
- schema:
- type: boolean
- example: false
- - name: is_blocked
- in: query
- description: >-
- Filter to tasks with incomplete dependencies
- schema:
- type: boolean
- example: false
- - name: has_attachment
- in: query
- description: >-
- Filter to tasks with attachments
- schema:
- type: boolean
- example: false
- - name: completed
- in: query
- description: >-
- Filter to completed tasks
- schema:
- type: boolean
- example: false
- - name: is_subtask
- in: query
- description: >-
- Filter to subtasks
- schema:
- type: boolean
- example: false
- - name: sort_by
- in: query
- description: >-
- One of `due_date`, `created_at`, `completed_at`, `likes`, or
- `modified_at`, defaults to `modified_at`
- schema:
- type: string
- enum:
- - due_date
- - created_at
- - completed_at
- - likes
- - modified_at
- default: modified_at
- example: likes
- - name: sort_ascending
- in: query
- description: >-
- Default `false`
- schema:
- type: boolean
- default: false
- example: true
- get:
- summary: Search tasks in a workspace
- description: >-
- To mirror the functionality of the Asana web app's advanced search feature,
- the Asana API has a task search endpoint that allows you to build complex
- filters to find and retrieve the exact data you need.
-
- #### Premium access
-
- Like the Asana web product's advance search feature, this search endpoint
- will
- only be available to premium Asana users. A user is premium if any of the
- following is true:
-
-
- - The workspace in which the search is being performed is a premium workspace
- - The user is a member of a premium team inside the workspace
-
-
- Even if a user is only a member of a premium team inside a non-premium
- workspace, search will allow them to find data anywhere in the workspace,
- not just inside the premium team. Making a search request using credentials
- of a non-premium user will result in a `402 Payment Required` error.
-
- #### Pagination
-
- Search results are not stable; repeating the same query multiple times may
- return the data in a different order, even if the data do not change. Because
- of this, the traditional [pagination](https://developers.asana.com/docs/#pagination)
- available elsewhere in the Asana API is not available here. However, you can
- paginate manually by sorting the search results by their creation time and
- then
- modifying each subsequent query to exclude data you have already seen. Page
- sizes
- are limited to a maximum of 100 items, and can be specified by the `limit`
- query parameter.
-
- #### Eventual consistency
-
- Changes in Asana (regardless of whether they’re made though the web product
- or the API) are forwarded to our search infrastructure to be indexed. This
- process can take between 10 and 60 seconds to complete under normal operation,
- and longer during some production incidents. Making a change to a task that
- would alter its presence in a particular search query will not be reflected
- immediately. This is also true of the advanced search feature in the web product.
-
- #### Rate limits
-
- You may receive a `429 Too Many Requests` response if you hit any of our
- [rate limits](https://developers.asana.com/docs/#rate-limits).
-
- #### Custom field parameters
-
- | Parameter name | Custom field type | Accepted type |
-
- |---|---|---|
-
- | custom_fields.{gid}.is_set | All | Boolean |
-
- | custom_fields.{gid}.value | Text | String |
-
- | custom_fields.{gid}.value | Number | Number |
-
- | custom_fields.{gid}.value | Enum | Enum option ID |
-
- | custom_fields.{gid}.starts_with | Text only | String |
-
- | custom_fields.{gid}.ends_with | Text only | String |
-
- | custom_fields.{gid}.contains | Text only | String |
-
- | custom_fields.{gid}.less_than | Number only | Number |
-
- | custom_fields.{gid}.greater_than | Number only | Number |
-
-
-
- For example, if the gid of the custom field is 12345, these query parameter
- to
- find tasks where it is set would be `custom_fields.12345.is_set=true`. To
- match
- an exact value for an enum custom field, use the gid of the desired enum option
- and not the name of the enum option: `custom_fields.12345.value=67890`.
-
-
- **Not Supported**: searching for multiple exact matches of a custom field,
- searching for multi-enum custom field
-
-
- *Note: If you specify `projects.any` and `sections.any`, you will receive
- tasks for the project **and** tasks for the section. If you're looking for
- only tasks in a section, omit the `projects.any` from the request.*
- tags:
- - Tasks
- operationId: searchTasksForWorkspace
- responses:
- 200:
- description: >-
- Successfully retrieved the section's tasks.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TaskCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.tasks.searchTasksForWorkspace(workspaceGid,
- sortAscending, sortBy, isSubtask, completed, hasAttachment, isBlocked,
- isBlocking, modifiedAtAfter, modifiedAtBefore, dueOn, modifiedOn, modifiedOnAfter,
- modifiedOnBefore, completedAtAfter, completedAtBefore, completedOn,
- completedOnAfter, completedOnBefore, createdAtAfter, dueOnAfter, createdAtBefore,
- createdOn, createdOnAfter, createdOnBefore, startOn, startOnAfter, startOnBefore,
- dueAtAfter, dueAtBefore, dueOnBefore, commentedOnByNot, likedByNot,
- assignedByNot, assignedByAny, createdByNot, createdByAny, followersNot,
- teamsAny, tagsAll, tagsNot, tagsAny, sectionsAll, sectionsNot, sectionsAny,
- projectsAll, projectsNot, projectsAny, portfoliosAny, assigneeNot, assigneeAny,
- resourceSubtype, text)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.tasks.searchTasksForWorkspace(workspaceGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.tasks.search_tasks_for_workspace(workspace_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- tasks->searchTasksForWorkspace($workspace_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.tasks.search_tasks_for_workspace(workspace_gid: 'workspace_gid',
- param: "value", param: "value", options: {pretty: true})
- /team_memberships/{team_membership_gid}:
- parameters:
- - $ref: '#/components/parameters/team_membership_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a team membership
- description: >-
- Returns the complete team membership record for a single team membership.
- tags:
- - Team memberships
- operationId: getTeamMembership
- responses:
- 200:
- description: >-
- Successfully retrieved the requested team membership.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamMembershipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.teammemberships.getTeamMembership(teamMembershipGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teammemberships.getTeamMembership(teamMembershipGid, {param:
- "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.team_memberships.get_team_membership(team_membership_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teammemberships->getTeamMembership($team_membership_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.team_memberships.get_team_membership(team_membership_gid:
- 'team_membership_gid', param: "value", param: "value", options: {pretty:
- true})
- /team_memberships:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get team memberships
- description: >-
- Returns compact team membership records.
- tags:
- - Team memberships
- operationId: getTeamMemberships
- parameters:
- - name: team
- in: query
- description: Globally unique identifier for the team.
- schema:
- type: string
- example: '159874'
- - name: user
- in: query
- description: >-
- A string identifying a user. This can either be the string "me", an
- email, or the gid of a user.
- This parameter must be used with the workspace parameter.
- schema:
- type: string
- example: '512241'
- - name: workspace
- in: query
- description: >-
- Globally unique identifier for the workspace. This parameter must be
- used with the user parameter.
- schema:
- type: string
- example: '31326'
- responses:
- 200:
- description: >-
- Successfully retrieved the requested team memberships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TeamMembershipCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.teammemberships.getTeamMemberships(workspace,
- user, team)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teammemberships.getTeamMemberships({param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.team_memberships.get_team_memberships({'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teammemberships->getTeamMemberships(array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.team_memberships.get_team_memberships(param: "value",
- param: "value", options: {pretty: true})
- /teams/{team_gid}/team_memberships:
- parameters:
- - $ref: '#/components/parameters/team_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get memberships from a team
- description: >-
- Returns the compact team memberships for the team.
- tags:
- - Team memberships
- operationId: getTeamMembershipsForTeam
- responses:
- 200:
- description: >-
- Successfully retrieved the requested team's memberships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TeamMembershipCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.teammemberships.getTeamMembershipsForTeam(teamGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teammemberships.getTeamMembershipsForTeam(teamGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.team_memberships.get_team_memberships_for_team(team_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teammemberships->getTeamMembershipsForTeam($team_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.team_memberships.get_team_memberships_for_team(team_gid:
- 'team_gid', param: "value", param: "value", options: {pretty: true})
- /users/{user_gid}/team_memberships:
- parameters:
- - $ref: '#/components/parameters/user_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get memberships from a user
- description: >-
- Returns the compact team membership records for the user.
- tags:
- - Team memberships
- operationId: getTeamMembershipsForUser
- parameters:
- - name: workspace
- description: >-
- Globally unique identifier for the workspace.
- in: query
- schema:
- type: string
- example: '31326'
- required: true
- responses:
- 200:
- description: >-
- Successfully retrieved the requested users's memberships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TeamMembershipCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.teammemberships.getTeamMembershipsForUser(userGid,
- workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teammemberships.getTeamMembershipsForUser(userGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.team_memberships.get_team_memberships_for_user(user_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teammemberships->getTeamMembershipsForUser($user_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.team_memberships.get_team_memberships_for_user(user_gid:
- 'user_gid', workspace: ''workspace_example'', param: "value",
- param: "value", options: {pretty: true})
- /teams:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- post:
- summary: Create a team
- description: |-
- Creates a team within the current workspace.
- tags:
- - Teams
- operationId: createTeam
- requestBody:
- description: The team to create.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamRequest'
- responses:
- 201:
- description: Successfully created a new team.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Team result = client.teams.createTeam()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teams.createTeam({field: "value", field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.teams.create_team({'field': 'value', 'field': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teams->createTeam(array('field' => 'value', 'field'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.teams.create_team(field: "value", field: "value", options:
- {pretty: true})
- put:
- summary: Update a team
- description: |-
- Updates a team within the current workspace.
- tags:
- - Teams
- operationId: updateTeam
- requestBody:
- description: The team to update.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamRequest'
- responses:
- 200:
- description: Successfully updated the team.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Team result = client.teams.updateTeam()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.teams.update_team({'field': 'value', 'field': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teams->updateTeam(array('field' => 'value', 'field'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.teams.update_team(field: "value", field: "value", options:
- {pretty: true})
- /teams/{team_gid}:
- parameters:
- - $ref: '#/components/parameters/team_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get a team
- description: Returns the full record for a single team.
- tags:
- - Teams
- operationId: getTeam
- responses:
- 200:
- description: Successfully retrieved the record for a single team.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Team result = client.teams.getTeam(teamGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teams.getTeam(teamGid, {param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.teams.get_team(team_gid, {'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teams->getTeam($team_gid, array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.teams.get_team(team_gid: 'team_gid', param: "value",
- param: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/teams:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get teams in a workspace
- description: >-
- Returns the compact records for all teams in the workspace visible to
- the authorized user.
- tags:
- - Teams
- operationId: getTeamsForWorkspace
- responses:
- 200:
- description: >-
- Returns the team records for all teams in the organization or
- workspace accessible to the authenticated user.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TeamCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.teams.getTeamsForWorkspace(workspaceGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teams.getTeamsForWorkspace(workspaceGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.teams.get_teams_for_workspace(workspace_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teams->getTeamsForWorkspace($workspace_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.teams.get_teams_for_workspace(workspace_gid: 'workspace_gid',
- param: "value", param: "value", options: {pretty: true})
- /users/{user_gid}/teams:
- parameters:
- - $ref: '#/components/parameters/user_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - name: organization
- in: query
- description: The workspace or organization to filter teams on.
- required: true
- schema:
- type: string
- example: '1331'
- get:
- summary: Get teams for a user
- description: >-
- Returns the compact records for all teams to which the given user is assigned.
- tags:
- - Teams
- operationId: getTeamsForUser
- responses:
- 200:
- description: >-
- Returns the team records for all teams in the organization or
- workspace to which the given user is assigned.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TeamCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.teams.getTeamsForUser(userGid, organization)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teams.getTeamsForUser(userGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.teams.get_teams_for_user(user_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teams->getTeamsForUser($user_gid, array('param' =>
- 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.teams.get_teams_for_user(user_gid: 'user_gid', organization:
- ''organization_example'', param: "value", param: "value",
- options: {pretty: true})
- /teams/{team_gid}/addUser:
- parameters:
- - $ref: '#/components/parameters/team_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add a user to a team
- description: >-
- 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.
- tags:
- - Teams
- operationId: addUserForTeam
- requestBody:
- description: The user to add to the team.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamAddUserRequest'
- responses:
- 200:
- description: >-
- Successfully added user to the team.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamMembershipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.teams.addUserForTeam(teamGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teams.addUserForTeam(teamGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.teams.add_user_for_team(team_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teams->addUserForTeam($team_gid, array('field' =>
- 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.teams.add_user_for_team(team_gid: 'team_gid', field:
- "value", field: "value", options: {pretty: true})
- /teams/{team_gid}/removeUser:
- parameters:
- - $ref: '#/components/parameters/team_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove a user from a team
- description: >-
- The user making this call must be a member of the team in order to remove
- themselves or others.
- tags:
- - Teams
- operationId: removeUserForTeam
- requestBody:
- description: The user to remove from the team.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TeamRemoveUserRequest'
- responses:
- 204:
- description: >-
- Returns an empty data record
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.teams.removeUserForTeam(teamGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.teams.removeUserForTeam(teamGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.teams.remove_user_for_team(team_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- teams->removeUserForTeam($team_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.teams.remove_user_for_team(team_gid: 'team_gid', field:
- "value", field: "value", options: {pretty: true})
- /time_periods/{time_period_gid}:
- parameters:
- - $ref: '#/components/parameters/time_period_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a time period
- description: Returns the full record for a single time period.
- operationId: getTimePeriod
- tags:
- - Time periods
- responses:
- 200:
- description: Successfully retrieved the record for a single time period.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TimePeriodResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.timeperiods.getTimePeriod(timePeriodGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.timeperiods.getTimePeriod(timePeriodGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.time_periods.get_time_period(time_period_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- timeperiods->getTimePeriod($time_period_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.time_periods.get_time_period(time_period_gid: 'time_period_gid',
- param: "value", param: "value", options: {pretty: true})
- /time_periods:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get time periods
- description: >-
- Returns compact time period records.
- tags:
- - Time periods
- operationId: getTimePeriods
- parameters:
- - name: start_on
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: end_on
- in: query
- description: >-
- ISO 8601 date string
- schema:
- type: string
- format: date
- example: '2019-09-15'
- - name: workspace
- in: query
- required: true
- description: Globally unique identifier for the workspace.
- schema:
- type: string
- example: '31326'
- responses:
- 200:
- description: >-
- Successfully retrieved the requested time periods.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TimePeriodCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.timeperiods.getTimePeriods(endOn,
- startOn, workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.timeperiods.getTimePeriods({param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.time_periods.get_time_periods({'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- timeperiods->getTimePeriods(array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.time_periods.get_time_periods(workspace: ''workspace_example'',
- param: "value", param: "value", options: {pretty: true})
- /tasks/{task_gid}/time_tracking_entries:
- parameters:
- - $ref: '#/components/parameters/task_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- summary: Get time tracking entries for a task
- description: Returns time tracking entries for a given task.
- tags:
- - Time tracking entries
- operationId: getTimeTrackingEntriesForTask
- responses:
- 200:
- description: Successfully retrieved the requested time tracking entries.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/TimeTrackingEntryCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- post:
- summary: Create a time tracking entry
- description: |-
- Creates a time tracking entry on a given task.
-
- Returns the record of the newly created time tracking entry.
- operationId: createTimeTrackingEntry
- tags:
- - Time tracking entries
- requestBody:
- description: Information about the time tracking entry.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/CreateTimeTrackingEntryRequest'
- responses:
- 201:
- description: Successfully created a time tracking entry for the task.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TimeTrackingEntryBase'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /time_tracking_entries/{time_tracking_entry_gid}:
- parameters:
- - $ref: '#/components/parameters/time_tracking_entry_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a time tracking entry
- description: Returns the complete time tracking entry record for a single time
- tracking entry.
- tags:
- - Time tracking entries
- operationId: getTimeTrackingEntry
- responses:
- 200:
- description: Successfully retrieved the requested time tracking entry.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TimeTrackingEntryBase'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- put:
- summary: Update a time tracking entry
- description: |-
- 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.
- tags:
- - Time tracking entries
- operationId: updateTimeTrackingEntry
- requestBody:
- description: The updated fields for the time tracking entry.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/UpdateTimeTrackingEntryRequest'
- responses:
- 200:
- description: Successfully updated the time tracking entry.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/TimeTrackingEntryBase'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- delete:
- summary: Delete a time tracking entry
- description: |-
- A specific, existing time tracking entry can be deleted by making a `DELETE` request on
- the URL for that time tracking entry.
-
- Returns an empty data record.
- tags:
- - Time tracking entries
- operationId: delete time tracking entry
- responses:
- 200:
- description: Successfully deleted the specified time tracking entry.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- /workspaces/{workspace_gid}/typeahead:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - name: resource_type
- in: query
- description: >-
- The type of values the typeahead should return. You can choose from one
- of the following: `custom_field`, `project`, `project_template`,
- `portfolio`, `tag`, `task`, and `user`. Note that unlike in the names
- of endpoints, the types listed here are in singular form (e.g. `task`).
- Using multiple types is not yet supported.
- required: true
- schema:
- type: string
- enum:
- - custom_field
- - project
- - project_template
- - portfolio
- - tag
- - task
- - user
- default: user
- - name: type
- in: query
- description: >-
- *Deprecated: new integrations should prefer the resource_type field.*
- required: false
- schema:
- type: string
- enum:
- - custom_field
- - portfolio
- - project
- - tag
- - task
- - user
- default: user
- - name: query
- in: query
- description: >-
- The string that will be used to search for relevant objects. If an
- empty string is passed in, the API will return results.
- schema:
- type: string
- example: Greg
- - name: count
- in: query
- description: >-
- The number of results to return. The default is 20 if this parameter is
- omitted, with a minimum of 1 and a maximum of 100. If there are fewer
- results found than requested, all will be returned.
- schema:
- type: integer
- example: 20
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get objects via typeahead
- description: |-
- Retrieves objects in the workspace based via an auto-completion/typeahead
- search algorithm. This feature is meant to provide results quickly, so do
- not rely on this API to provide extremely accurate search results. The
- result set is limited to a single page of results with a maximum size, so
- you won’t be able to fetch large numbers of results.
-
- The typeahead search API provides search for objects from a single
- workspace. This endpoint should be used to query for objects when
- creating an auto-completion/typeahead search feature. This API is meant
- to provide results quickly and should not be relied upon for accurate or
- exhaustive search results. The results sets are limited in size and
- cannot be paginated.
-
- Queries return a compact representation of each object which is typically
- the gid and name fields. Interested in a specific set of fields or all of
- the fields?! Of course you are. Use field selectors to manipulate what
- data is included in a response.
-
- Resources with type `user` are returned in order of most contacted to
- least contacted. This is determined by task assignments, adding the user
- to projects, and adding the user as a follower to tasks, messages,
- etc.
-
- Resources with type `project` are returned in order of recency. This is
- determined when the user visits the project, is added to the project, and
- completes tasks in the project.
-
- Resources with type `task` are returned with priority placed on tasks
- the user is following, but no guarantee on the order of those tasks.
-
- Resources with type `project_template` are returned with priority
- placed on favorited project templates.
-
- Leaving the `query` string empty or omitted will give you results, still
- following the resource ordering above. This could be used to list users or
- projects that are relevant for the requesting user's api token.
- tags:
- - Typeahead
- operationId: typeaheadForWorkspace
- responses:
- 200:
- description: >-
- Successfully retrieved objects via a typeahead search algorithm.
- content:
- application/json:
- schema:
- type: object
- description: >-
- A generic list of objects, such as those returned by the typeahead
- search
- endpoint.
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/AsanaNamedResource'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.typeahead.typeaheadForWorkspace(workspaceGid,
- count, query, type, resourceType)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.typeahead.typeaheadForWorkspace(workspaceGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.typeahead.typeahead_for_workspace(workspace_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- typeahead->typeaheadForWorkspace($workspace_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.typeahead.typeahead_for_workspace(workspace_gid: 'workspace_gid',
- resource_type: ''resource_type_example'', param: "value",
- param: "value", options: {pretty: true})
- /user_task_lists/{user_task_list_gid}:
- parameters:
- - $ref: '#/components/parameters/user_task_list_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a user task list
- description: >-
- Returns the full record for a user task list.
- tags:
- - User task lists
- operationId: getUserTaskList
- responses:
- 200:
- description: >-
- Successfully retrieved the user task list.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/UserTaskListResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- UserTaskList result = client.usertasklists.getUserTaskList(userTaskListGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.usertasklists.getUserTaskList(userTaskListGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.user_task_lists.get_user_task_list(user_task_list_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- usertasklists->getUserTaskList($user_task_list_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.user_task_lists.get_user_task_list(user_task_list_gid:
- 'user_task_list_gid', param: "value", param: "value", options: {pretty:
- true})
- /users/{user_gid}/user_task_list:
- parameters:
- - $ref: '#/components/parameters/user_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - name: workspace
- in: query
- required: true
- description: >-
- The workspace in which to get the user task list.
- schema:
- type: string
- example: '1234'
- get:
- summary: Get a user's task list
- description: >-
- Returns the full record for a user's task list.
- tags:
- - User task lists
- operationId: getUserTaskListForUser
- responses:
- 200:
- description: >-
- Successfully retrieved the user's task list.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/UserTaskListResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- UserTaskList result = client.usertasklists.getUserTaskListForUser(userGid,
- workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.usertasklists.getUserTaskListForUser(userGid, {param: "value",
- param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.user_task_lists.get_user_task_list_for_user(user_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- usertasklists->getUserTaskListForUser($user_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.user_task_lists.get_user_task_list_for_user(user_gid:
- 'user_gid', workspace: ''workspace_example'', param: "value",
- param: "value", options: {pretty: true})
- /users:
- parameters:
- - name: workspace
- in: query
- description: >-
- The workspace or organization ID to filter users on.
- schema:
- type: string
- example: '1331'
- - name: team
- in: query
- description: >-
- The team ID to filter users on.
- schema:
- type: string
- example: '15627'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get multiple users
- description: >-
- Returns the user records for all users in all workspaces and
- organizations accessible to the authenticated user. Accepts an optional
- workspace ID parameter.
-
- Results are sorted by user ID.
- tags:
- - Users
- operationId: getUsers
- responses:
- 200:
- description: >-
- Successfully retrieved the requested user records.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.users.getUsers(team, workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.users.getUsers({param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.users.get_users({'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- users->getUsers(array('param' => 'value', 'param'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.users.get_users(param: "value", param: "value", options:
- {pretty: true})
- /users/{user_gid}:
- parameters:
- - $ref: '#/components/parameters/user_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a user
- description: >-
- Returns the full user record for the single user with the provided ID.
- tags:
- - Users
- operationId: getUser
- responses:
- 200:
- description: Returns the user specified.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/UserResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- User result = client.users.getUser(userGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.users.getUser(userGid, {param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.users.get_user(user_gid, {'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- users->getUser($user_gid, array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.users.get_user(user_gid: 'user_gid', param: "value",
- param: "value", options: {pretty: true})
- /users/{user_gid}/favorites:
- parameters:
- - $ref: '#/components/parameters/user_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - name: resource_type
- in: query
- required: true
- description: >-
- The resource type of favorites to be returned.
- schema:
- type: string
- enum:
- - portfolio
- - project
- - tag
- - task
- - user
- - project_template
- default: project
- - name: workspace
- in: query
- required: true
- description: >-
- The workspace in which to get favorites.
- schema:
- type: string
- example: '1234'
- get:
- summary: Get a user's favorites
- description: >-
- Returns all of a user's favorites in the given workspace, of the given type.
-
- Results are given in order (The same order as Asana's sidebar).
- tags:
- - Users
- operationId: getFavoritesForUser
- responses:
- 200:
- description: Returns the specified user's favorites.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/AsanaNamedResource'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.users.getFavoritesForUser(userGid,
- workspace, resourceType)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.users.getFavoritesForUser(userGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.users.get_favorites_for_user(user_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- users->getFavoritesForUser($user_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.users.get_favorites_for_user(user_gid: 'user_gid', resource_type:
- ''resource_type_example'', workspace: ''workspace_example'',
- param: "value", param: "value", options: {pretty: true})
- /teams/{team_gid}/users:
- parameters:
- - $ref: '#/components/parameters/team_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get users in a team
- description: >-
- Returns the compact records for all users that are members of the team.
-
- Results are sorted alphabetically and limited to 2000. For more results
- use the `/users` endpoint.
- tags:
- - Users
- operationId: getUsersForTeam
- responses:
- 200:
- description: >-
- Returns the user records for all the members of the team, including
- guests and limited access users
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.users.getUsersForTeam(teamGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.users.getUsersForTeam(teamGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.users.get_users_for_team(team_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- users->getUsersForTeam($team_gid, array('param' =>
- 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.users.get_users_for_team(team_gid: 'team_gid', param:
- "value", param: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/users:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/offset'
- get:
- summary: >-
- Get users in a workspace or organization
- description: >-
- Returns the compact records for all users in the specified workspace or
- organization.
-
- Results are sorted alphabetically and limited to 2000. For more results
- use the `/users` endpoint.
- tags:
- - Users
- operationId: getUsersForWorkspace
- responses:
- 200:
- description: Return the users in the specified workspace or org.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/UserCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.users.getUsersForWorkspace(workspaceGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.users.getUsersForWorkspace(workspaceGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.users.get_users_for_workspace(workspace_gid, {'param':
- 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- users->getUsersForWorkspace($workspace_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.users.get_users_for_workspace(workspace_gid: 'workspace_gid',
- param: "value", param: "value", options: {pretty: true})
- /webhooks:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: >-
- Get multiple webhooks
- description: >-
- Get the compact representation of all webhooks your app has registered
- for the authenticated user in the given workspace.
- tags:
- - Webhooks
- operationId: getWebhooks
- parameters:
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- - name: workspace
- in: query
- required: true
- description: >-
- The workspace to query for webhooks in.
- schema:
- type: string
- example: '1331'
- - name: resource
- in: query
- description: Only return webhooks for the given resource.
- schema:
- type: string
- example: '51648'
- responses:
- 200:
- description: Successfully retrieved the requested webhooks.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/WebhookResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.webhooks.getWebhooks(resource, workspace)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.webhooks.getWebhooks({param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.webhooks.get_webhooks({'param': 'value', 'param': 'value'},
- opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- webhooks->getWebhooks(array('param' => 'value', 'param'
- => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.webhooks.get_webhooks(workspace: ''workspace_example'',
- param: "value", param: "value", options: {pretty: true})
- post:
- summary: >-
- Establish a webhook
- description: |-
- 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 " \
- -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
- }
- }
- ```
- tags:
- - Webhooks
- operationId: createWebhook
- requestBody:
- description: The webhook workspace and target.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WebhookRequest'
- responses:
- 201:
- description: Successfully created the requested webhook.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WebhookResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Webhook result = client.webhooks.createWebhook()
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.webhooks.createWebhook({field: "value", field: "value", pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.webhooks.create_webhook({'field': 'value', 'field':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- webhooks->createWebhook(array('field' => 'value',
- 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.webhooks.create_webhook(field: "value", field: "value",
- options: {pretty: true})
- /webhooks/{webhook_gid}:
- parameters:
- - $ref: '#/components/parameters/webhook_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: >-
- Get a webhook
- description: >-
- Returns the full record for the given webhook.
- tags:
- - Webhooks
- operationId: getWebhook
- responses:
- 200:
- description: Successfully retrieved the requested webhook.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WebhookResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Webhook result = client.webhooks.getWebhook(webhookGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.webhooks.getWebhook(webhookGid, {param: "value", param: "value",
- opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.webhooks.get_webhook(webhook_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- webhooks->getWebhook($webhook_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.webhooks.get_webhook(webhook_gid: 'webhook_gid', param:
- "value", param: "value", options: {pretty: true})
- put:
- summary: >-
- Update a webhook
- description: >-
- 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.
- tags:
- - Webhooks
- operationId: updateWebhook
- requestBody:
- description: The updated filters for the webhook.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WebhookUpdateRequest'
- responses:
- 200:
- description: Successfully updated the webhook.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WebhookResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Webhook result = client.webhooks.updateWebhook(webhookGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.webhooks.updateWebhook(webhookGid, {field: "value", field: "value",
- pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.webhooks.update_webhook(webhook_gid, {'field': 'value',
- 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- webhooks->updateWebhook($webhook_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.webhooks.update_webhook(webhook_gid: 'webhook_gid',
- field: "value", field: "value", options: {pretty: true})
- delete:
- summary: Delete a webhook
- description: >-
- This method *permanently* removes a webhook. Note that it may be possible
- to receive a request that was already in flight after deleting the
- webhook, but no further requests will be issued.
- tags:
- - Webhooks
- operationId: deleteWebhook
- responses:
- 200:
- description: Successfully retrieved the requested webhook.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.webhooks.deleteWebhook(webhookGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.webhooks.deleteWebhook(webhookGid)
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.webhooks.delete_webhook(webhook_gid, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- webhooks->deleteWebhook($webhook_gid, array('opt_pretty'
- => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.webhooks.delete_webhook(webhook_gid: 'webhook_gid',
- options: {pretty: true})
- /workspace_memberships/{workspace_membership_gid}:
- parameters:
- - $ref: '#/components/parameters/workspace_membership_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a workspace membership
- description: >-
- Returns the complete workspace record for a single workspace membership.
- tags:
- - Workspace memberships
- operationId: getWorkspaceMembership
- responses:
- 200:
- description: >-
- Successfully retrieved the requested workspace membership.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WorkspaceMembershipResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.workspacememberships.getWorkspaceMembership(workspaceMembershipGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.workspacememberships.getWorkspaceMembership(workspaceMembershipGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.workspace_memberships.get_workspace_membership(workspace_membership_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- workspacememberships->getWorkspaceMembership($workspace_membership_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.workspace_memberships.get_workspace_membership(workspace_membership_gid:
- 'workspace_membership_gid', param: "value", param: "value", options:
- {pretty: true})
- /users/{user_gid}/workspace_memberships:
- parameters:
- - $ref: '#/components/parameters/user_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get workspace memberships for a user
- description: >-
- Returns the compact workspace membership records for the user.
- tags:
- - Workspace memberships
- operationId: getWorkspaceMembershipsForUser
- responses:
- 200:
- description: >-
- Successfully retrieved the requested user's workspace memberships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/WorkspaceMembershipCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.workspacememberships.getWorkspaceMembershipsForUser(userGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.workspacememberships.getWorkspaceMembershipsForUser(userGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.workspace_memberships.get_workspace_memberships_for_user(user_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- workspacememberships->getWorkspaceMembershipsForUser($user_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.workspace_memberships.get_workspace_memberships_for_user(user_gid:
- 'user_gid', param: "value", param: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/workspace_memberships:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/user_query_param'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get the workspace memberships for a workspace
- description: >-
- Returns the compact workspace membership records for the workspace.
- tags:
- - Workspace memberships
- operationId: getWorkspaceMembershipsForWorkspace
- responses:
- 200:
- description: >-
- Successfully retrieved the requested workspace's memberships.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/WorkspaceMembershipCompact'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.workspacememberships.getWorkspaceMembershipsForWorkspace(workspaceGid,
- user)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.workspacememberships.getWorkspaceMembershipsForWorkspace(workspaceGid,
- {param: "value", param: "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.workspace_memberships.get_workspace_memberships_for_workspace(workspace_gid,
- {'param': 'value', 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- workspacememberships->getWorkspaceMembershipsForWorkspace($workspace_gid,
- array('param' => 'value', 'param' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.workspace_memberships.get_workspace_memberships_for_workspace(workspace_gid:
- 'workspace_gid', param: "value", param: "value", options: {pretty: true})
- /workspaces:
- parameters:
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- - $ref: '#/components/parameters/limit'
- - $ref: '#/components/parameters/offset'
- get:
- summary: Get multiple workspaces
- description: >-
- Returns the compact records for all workspaces visible to the
- authorized user.
- tags:
- - Workspaces
- operationId: getWorkspaces
- responses:
- 200:
- description: Return all workspaces visible to the authorized user.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/WorkspaceCompact'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- List result = client.workspaces.getWorkspaces()
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.workspaces.getWorkspaces({param: "value", param: "value", opt_pretty:
- true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.workspaces.get_workspaces({'param': 'value', 'param':
- 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- workspaces->getWorkspaces(array('param' => 'value',
- 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.workspaces.get_workspaces(param: "value", param: "value",
- options: {pretty: true})
- /workspaces/{workspace_gid}:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- get:
- summary: Get a workspace
- description: >-
- Returns the full workspace record for a single workspace.
- tags:
- - Workspaces
- operationId: getWorkspace
- responses:
- 200:
- description: Return the full workspace record.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WorkspaceResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Workspace result = client.workspaces.getWorkspace(workspaceGid)
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.workspaces.getWorkspace(workspaceGid, {param: "value", param:
- "value", opt_pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.workspaces.get_workspace(workspace_gid, {'param': 'value',
- 'param': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- workspaces->getWorkspace($workspace_gid, array('param'
- => 'value', 'param' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.workspaces.get_workspace(workspace_gid: 'workspace_gid',
- param: "value", param: "value", options: {pretty: true})
- put:
- summary: Update a workspace
- description: >-
- 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.
- tags:
- - Workspaces
- operationId: updateWorkspace
- requestBody:
- description: The workspace object with all updated properties.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WorkspaceRequest'
- responses:
- 200:
- description: Update for the workspace was successful.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WorkspaceResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- Workspace result = client.workspaces.updateWorkspace(workspaceGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.workspaces.updateWorkspace(workspaceGid, {field: "value", field:
- "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.workspaces.update_workspace(workspace_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- workspaces->updateWorkspace($workspace_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.workspaces.update_workspace(workspace_gid: 'workspace_gid',
- field: "value", field: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/addUser:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Add a user to a workspace or organization
- description: >-
- 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.
- tags:
- - Workspaces
- operationId: addUserForWorkspace
- requestBody:
- description: The user to add to the workspace.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WorkspaceAddUserRequest'
- responses:
- 200:
- description: >-
- The user was added successfully to the workspace or organization.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/UserBaseResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.workspaces.addUserForWorkspace(workspaceGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.workspaces.addUserForWorkspace(workspaceGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.workspaces.add_user_for_workspace(workspace_gid, {'field':
- 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- workspaces->addUserForWorkspace($workspace_gid, array('field'
- => 'value', 'field' => 'value'), array('opt_pretty' => 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.workspaces.add_user_for_workspace(workspace_gid: 'workspace_gid',
- field: "value", field: "value", options: {pretty: true})
- /workspaces/{workspace_gid}/removeUser:
- parameters:
- - $ref: '#/components/parameters/workspace_path_gid'
- - $ref: '#/components/parameters/pretty'
- - $ref: '#/components/parameters/fields'
- post:
- summary: Remove a user from a workspace or organization
- description: >-
- 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.
- tags:
- - Workspaces
- operationId: removeUserForWorkspace
- requestBody:
- description: The user to remove from the workspace.
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/WorkspaceRemoveUserRequest'
- responses:
- 204:
- description: >-
- The user was removed successfully to the workspace or organization.
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- $ref: '#/components/schemas/EmptyResponse'
- 400:
- $ref: '#/components/responses/BadRequest'
- 401:
- $ref: '#/components/responses/Unauthorized'
- 403:
- $ref: '#/components/responses/Forbidden'
- 404:
- $ref: '#/components/responses/NotFound'
- 500:
- $ref: '#/components/responses/InternalServerError'
- x-readme:
- code-samples:
- - language: java
- install: >-
- com.asanaasana1.0.0
- code: >-
- import com.asana.Client;
-
-
- Client client = Client.accessToken("PERSONAL_ACCESS_TOKEN");
-
-
- JsonElement result = client.workspaces.removeUserForWorkspace(workspaceGid)
- .data("field", "value")
- .data("field", "value")
- .option("pretty", true)
- .execute();
- - language: node
- install: npm install asana
- code: >-
- const asana = require('asana');
-
-
- const client = asana.Client.create().useAccessToken('PERSONAL_ACCESS_TOKEN');
-
-
- client.workspaces.removeUserForWorkspace(workspaceGid, {field: "value",
- field: "value", pretty: true})
- .then((result) => {
- console.log(result);
- });
- - language: python
- install: pip install asana
- code: >-
- import asana
-
-
- client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
-
-
- result = client.workspaces.remove_user_for_workspace(workspace_gid,
- {'field': 'value', 'field': 'value'}, opt_pretty=True)
- - language: php
- install: composer require asana/asana
- code: >-
- workspaces->removeUserForWorkspace($workspace_gid,
- array('field' => 'value', 'field' => 'value'), array('opt_pretty' =>
- 'true'))
- - language: ruby
- install: gem install asana
- code: >-
- require 'asana'
-
-
- client = Asana::Client.new do |c|
- c.authentication :access_token, 'PERSONAL_ACCESS_TOKEN'
- end
-
-
- result = client.workspaces.remove_user_for_workspace(workspace_gid:
- 'workspace_gid', field: "value", field: "value", options: {pretty: true})
diff --git a/openapi.yaml b/openapi.yaml
new file mode 100644
index 0000000..0bf0cc6
--- /dev/null
+++ b/openapi.yaml
@@ -0,0 +1,3630 @@
+openapi: 3.0.3
+info:
+ title: Asana Plugin
+ description: A plugin that allows the user to interact with Asana using ChatGPT.
+ termsOfService: https://asana.com/terms
+ license:
+ name: Apache 2.0
+ url: http://www.apache.org/licenses/LICENSE-2.0.html
+ version: 1.0.0
+servers:
+ - url: https://app.asana.com/api/1.0
+paths:
+ /projects:
+ post:
+ summary: Create a project
+ description: |-
+ 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.
+ tags:
+ - Projects
+ operationId: createProject
+ requestBody:
+ description: The project to create.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/ProjectRequest"
+ responses:
+ "201":
+ description: Successfully retrieved projects.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/ProjectResponse"
+ /projects/{project_gid}:
+ get:
+ summary: Get a project
+ description: Returns the complete project record for a single project.
+ tags:
+ - Projects
+ operationId: getProject
+ parameters:
+ - name: project_gid
+ in: path
+ description: >-
+ Globally unique identifier for the project.
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Successfully retrieved the requested project.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/ProjectResponse"
+ /projects/{project_gid}/duplicate:
+ post:
+ summary: Duplicate a project
+ description: >-
+ Creates and returns a job that will asynchronously handle the duplication.
+ tags:
+ - Projects
+ operationId: duplicateProject
+ parameters:
+ - name: project_gid
+ in: path
+ description: >-
+ Globally unique identifier for the project.
+ required: true
+ schema:
+ type: string
+ requestBody:
+ description: >-
+ Describes the duplicate's name and the elements that will be duplicated.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/ProjectDuplicateRequest"
+ responses:
+ "201":
+ description: Successfully created the job to handle duplication.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/JobResponse"
+ /projects/{project_gid}/sections:
+ get:
+ summary: Get sections in a project
+ description: >-
+ Returns the compact records for all sections in the specified project.
+ tags:
+ - Sections
+ operationId: getSectionsForProject
+ parameters:
+ - name: project_gid
+ in: path
+ description: >-
+ Globally unique identifier for the project.
+ required: true
+ schema:
+ type: string
+ - name: limit
+ in: query
+ description: >-
+ Results per page. The number of objects to return per page. The value must be between 1 and 100.
+ schema:
+ type: integer
+ minimum: 0
+ maximum: 100
+ - name: offset
+ in: query
+ description: >-
+ Offset token.
+
+ An offset to the next page returned by the API. A pagination request
+ will return an offset token, which can be used as an input parameter to
+ the next request. If an offset is not passed in, the API will return
+ the first page of results.
+
+ 'Note: You can only pass in an offset that was returned to you via a
+ previously paginated request.'
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Successfully retrieved sections in project.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: "#/components/schemas/SectionCompact"
+ post:
+ summary: Create a section in a project
+ description: >-
+ Creates a new section in a project. Returns the full record of the newly created section.
+ tags:
+ - Sections
+ operationId: createSectionForProject
+ parameters:
+ - name: project_gid
+ in: path
+ description: >-
+ Globally unique identifier for the project.
+ required: true
+ schema:
+ type: string
+ example: "1331"
+ requestBody:
+ description: The section to create.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/SectionRequest"
+ responses:
+ "201":
+ description: Successfully created the specified section.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/SectionResponse"
+ /projects/{project_gid}/sections/insert:
+ post:
+ summary: Move or Insert sections
+ description: |-
+ 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.
+ tags:
+ - Sections
+ operationId: insertSectionForProject
+ parameters:
+ - name: project_gid
+ in: path
+ description: >-
+ Globally unique identifier for the project.
+ required: true
+ schema:
+ type: string
+ requestBody:
+ description: The section's move action.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/ProjectSectionInsertRequest"
+ responses:
+ "200":
+ description: Successfully moved the specified section.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ description: >-
+ An empty object. Some endpoints do not return an object on success. The
+ success is conveyed through a 2-- status code and returning an empty
+ object.
+ /projects/{project_gid}/tasks:
+ get:
+ summary: Get tasks from a project
+ description: >-
+ Returns the compact task records for all tasks within the given project,
+ ordered by their priority within the project. Tasks can exist in more
+ than one project at a time.
+ tags:
+ - Tasks
+ operationId: getTasksForProject
+ parameters:
+ - name: project_gid
+ in: path
+ description: >-
+ Globally unique identifier for the project.
+ required: true
+ schema:
+ type: string
+ - name: completed_since
+ in: query
+ required: false
+ description: >
+ Only return tasks that are either incomplete or that have
+ been completed since this time. Accepts a date-time string or
+ the keyword *now*.
+ schema:
+ type: string
+ - name: limit
+ in: query
+ description: >-
+ Results per page. The number of objects to return per page. The value must be between 1 and 100.
+ schema:
+ type: integer
+ minimum: 0
+ maximum: 100
+ - name: offset
+ in: query
+ description: >-
+ Offset token.
+
+ An offset to the next page returned by the API. A pagination request
+ will return an offset token, which can be used as an input parameter to
+ the next request. If an offset is not passed in, the API will return
+ the first page of results.
+
+ 'Note: You can only pass in an offset that was returned to you via a
+ previously paginated request.'
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Successfully retrieved the requested project's tasks.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: "#/components/schemas/TaskCompact"
+ /sections/{section_gid}:
+ get:
+ summary: Get a section
+ description: >-
+ Returns the complete record for a single section.
+ tags:
+ - Sections
+ operationId: getSection
+ parameters:
+ - name: section_gid
+ in: path
+ required: true
+ description: The globally unique identifier for the section.
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Successfully retrieved section.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/SectionResponse"
+ /sections/{section_gid}/addTask:
+ post:
+ summary: Add task to section
+ description: |-
+ 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).
+ tags:
+ - Sections
+ operationId: addTaskForSection
+ parameters:
+ - name: section_gid
+ in: path
+ required: true
+ description: The globally unique identifier for the section.
+ schema:
+ type: string
+ requestBody:
+ description: The task and optionally the insert location.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/SectionTaskInsertRequest"
+ responses:
+ "200":
+ description: Successfully added the task.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ description: >-
+ An empty object. Some endpoints do not return an object on success. The
+ success is conveyed through a 2-- status code and returning an empty
+ object.
+ /stories/{story_gid}:
+ get:
+ summary: Get a story
+ description: Returns the full record for a single story.
+ tags:
+ - Stories
+ operationId: getStory
+ parameters:
+ - name: story_gid
+ in: path
+ description: Globally unique identifier for the story.
+ required: true
+ schema:
+ type: string
+ - name: limit
+ in: query
+ description: >-
+ Results per page. The number of objects to return per page. The value must be between 1 and 100.
+ schema:
+ type: integer
+ minimum: 0
+ maximum: 100
+ - name: offset
+ in: query
+ description: >-
+ An offset to the next page returned by the API. A pagination request
+ will return an offset token, which can be used as an input parameter to
+ the next request. If an offset is not passed in, the API will return
+ the first page of results.
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Successfully retrieved the specified story.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/StoryResponse"
+ /tasks:
+ get:
+ summary: Get multiple tasks
+ description: >-
+ Returns the compact task records for some filtered set of tasks. Use one
+ or more of the parameters provided to filter the tasks returned. You must
+ specify a `project` or `tag` if you do not specify `assignee` and
+ `workspace`.
+ tags:
+ - Tasks
+ operationId: getTasks
+ parameters:
+ - name: limit
+ in: query
+ description: >-
+ Results per page. The number of objects to return per page. The value must be between 1 and 100.
+ schema:
+ type: integer
+ minimum: 0
+ maximum: 100
+ - name: offset
+ in: query
+ description: >-
+ An offset to the next page returned by the API. A pagination request
+ will return an offset token, which can be used as an input parameter to
+ the next request. If an offset is not passed in, the API will return
+ the first page of results.
+ example: eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9
+ schema:
+ type: string
+ - name: assignee
+ in: query
+ description: >-
+ The assignee to filter tasks on. If searching for unassigned tasks, assignee.any
+ = null can be specified.
+
+ *Note: If you specify `assignee`, you must also specify the
+ `workspace` to filter on.*
+ schema:
+ type: string
+ example: "14641"
+ - name: project
+ in: query
+ description: >-
+ The project to filter tasks on.
+ schema:
+ type: string
+ example: "321654"
+ - name: section
+ in: query
+ description: >-
+ The section to filter tasks on.
+ schema:
+ type: string
+ example: "321654"
+ - name: workspace
+ in: query
+ description: >-
+ The workspace to filter tasks on.
+
+ *Note: If you specify `workspace`, you must also specify the
+ `assignee` to filter on.*
+ schema:
+ type: string
+ example: "321654"
+ - name: completed_since
+ in: query
+ description: >-
+ Only return tasks that are either incomplete or that have been
+ completed since this time.
+ schema:
+ type: string
+ format: date-time
+ example: "2012-02-22T02:06:58.158Z"
+ - name: modified_since
+ in: query
+ description: |-
+ Only return tasks that have been modified since the given time.
+
+ *Note: A task is considered “modified” if any of its properties
+ change, or associations between it and other objects are modified
+ (e.g. a task being added to a project). A task is not considered
+ modified just because another object it is associated with (e.g. a
+ subtask) is modified. Actions that count as modifying the task
+ include assigning, renaming, completing, and adding stories.*
+ schema:
+ type: string
+ format: date-time
+ example: "2012-02-22T02:06:58.158Z"
+ responses:
+ "200":
+ description: Successfully retrieved requested tasks.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: "#/components/schemas/TaskCompact"
+ post:
+ summary: Create a task
+ description: |-
+ 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.
+ tags:
+ - Tasks
+ operationId: createTask
+ requestBody:
+ description: The task to create.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/TaskRequest"
+ responses:
+ "201":
+ description: Successfully created a new task.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/TaskResponse"
+ /tasks/{task_gid}:
+ get:
+ summary: Get a task
+ description: Returns the complete task record for a single task.
+ tags:
+ - Tasks
+ operationId: getTask
+ parameters:
+ - name: task_gid
+ in: path
+ required: true
+ description: The task to operate on.
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Successfully retrieved the specified task.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/TaskResponse"
+ put:
+ summary: Update a task
+ description: |-
+ 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.
+ tags:
+ - Tasks
+ operationId: updateTask
+ parameters:
+ - name: task_gid
+ in: path
+ required: true
+ description: The task to operate on.
+ schema:
+ type: string
+ requestBody:
+ description: The task to update.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/TaskRequest"
+ responses:
+ "200":
+ description: Successfully updated the specified task.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/TaskResponse"
+ /tasks/{task_gid}/duplicate:
+ post:
+ summary: Duplicate a task
+ description: >-
+ Creates and returns a job that will asynchronously handle the duplication.
+ tags:
+ - Tasks
+ operationId: duplicateTask
+ parameters:
+ - name: task_gid
+ in: path
+ required: true
+ description: The task to operate on.
+ schema:
+ type: string
+ requestBody:
+ description: >-
+ Describes the duplicate's name and the fields that will be duplicated.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/TaskDuplicateRequest"
+ responses:
+ "201":
+ description: Successfully created the job to handle duplication.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/JobResponse"
+ /tasks/{task_gid}/stories:
+ get:
+ summary: Get stories from a task
+ description: >-
+ Returns the compact records for all stories on the task.
+ tags:
+ - Stories
+ operationId: getStoriesForTask
+ parameters:
+ - name: task_gid
+ in: path
+ required: true
+ description: The task to operate on.
+ schema:
+ type: string
+ - name: limit
+ in: query
+ description: >-
+ Results per page. The number of objects to return per page. The value must be between 1 and 100.
+ schema:
+ type: integer
+ minimum: 0
+ maximum: 100
+ - name: offset
+ in: query
+ description: >-
+ Offset token.
+
+ An offset to the next page returned by the API. A pagination request
+ will return an offset token, which can be used as an input parameter to
+ the next request. If an offset is not passed in, the API will return
+ the first page of results.
+
+ 'Note: You can only pass in an offset that was returned to you via a
+ previously paginated request.'
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Successfully retrieved the specified task's stories.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ items:
+ $ref: "#/components/schemas/StoryCompact"
+ post:
+ summary: Create a story on a task
+ description: |-
+ 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.
+ tags:
+ - Stories
+ operationId: createStoryForTask
+ parameters:
+ - name: task_gid
+ in: path
+ required: true
+ description: The task to operate on.
+ schema:
+ type: string
+ requestBody:
+ description: The story to create.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/StoryRequest"
+ responses:
+ "201":
+ description: Successfully created a new story.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/StoryResponse"
+ /users/{user_gid}:
+ get:
+ tags:
+ - Users
+ summary: Get a user
+ description: >-
+ Returns the full user record for the single user with the provided ID.
+ operationId: getUser
+ parameters:
+ - name: user_gid
+ in: path
+ description: >-
+ A string identifying a user. This can either be the string "me", an email,
+ or the gid of a user.
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Returns the user specified.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/UserResponse"
+ /workspaces/{workspace_gid}/projects:
+ get:
+ summary: Get all projects in a workspace
+ description: >-
+ Returns the compact project records for all projects in the workspace.
+
+ *Note: This endpoint may timeout for large domains. Prefer the
+ `/teams/{team_gid}/projects` endpoint.*
+ tags:
+ - Projects
+ operationId: getProjectsForWorkspace
+ parameters:
+ - name: workspace_gid
+ in: path
+ description: >-
+ Globally unique identifier for the workspace or organization.
+ required: true
+ schema:
+ type: string
+ - name: limit
+ in: query
+ description: >-
+ Results per page. The number of objects to return per page. The value must be between 1 and 100.
+ schema:
+ type: integer
+ minimum: 0
+ maximum: 100
+ - name: offset
+ in: query
+ description: >-
+ An offset to the next page returned by the API. A pagination request
+ will return an offset token, which can be used as an input parameter to
+ the next request. If an offset is not passed in, the API will return
+ the first page of results.
+ schema:
+ type: string
+ - name: archived
+ in: query
+ description: >-
+ Only return projects whose `archived` field takes on the value of
+ this parameter.
+ schema:
+ type: boolean
+ responses:
+ "200":
+ description: Successfully retrieved the requested workspace's projects.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: "#/components/schemas/ProjectCompact"
+ post:
+ summary: Create a project in a workspace
+ description: |-
+ 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.
+ tags:
+ - Projects
+ operationId: createProjectForWorkspace
+ parameters:
+ - name: workspace_gid
+ in: path
+ description: >-
+ Globally unique identifier for the workspace or organization.
+ required: true
+ schema:
+ type: string
+ requestBody:
+ description: The new project to create.
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/ProjectRequest"
+ responses:
+ "201":
+ description: >-
+ Successfully created a new project in the specified workspace.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ $ref: "#/components/schemas/ProjectResponse"
+ /workspaces/{workspace_gid}/typeahead:
+ get:
+ summary: Get objects via typeahead
+ description: |-
+ Retrieves objects in the workspace based via an auto-completion/typeahead
+ search algorithm.
+ tags:
+ - Typeahead
+ operationId: typeaheadForWorkspace
+ parameters:
+ - name: workspace_gid
+ in: path
+ description: >-
+ Globally unique identifier for the workspace or organization.
+ required: true
+ schema:
+ type: string
+ example: "12345"
+ - name: resource_type
+ in: query
+ description: >-
+ The type of values the typeahead should return. You can choose from one
+ of the following: `custom_field`, `project`, `project_template`,
+ `portfolio`, `tag`, `task`, and `user`.
+ required: true
+ schema:
+ type: string
+ enum:
+ - custom_field
+ - project
+ - project_template
+ - portfolio
+ - tag
+ - task
+ - user
+ default: user
+ - name: type
+ in: query
+ description: >-
+ *Deprecated: new integrations should prefer the resource_type field.*
+ required: false
+ schema:
+ type: string
+ enum:
+ - custom_field
+ - portfolio
+ - project
+ - tag
+ - task
+ - user
+ default: user
+ - name: query
+ in: query
+ description: >-
+ The string that will be used to search for relevant objects. If an
+ empty string is passed in, the API will return results.
+ schema:
+ type: string
+ example: Greg
+ - name: count
+ in: query
+ description: >-
+ The number of results to return. The default is 20 if this parameter is
+ omitted, with a minimum of 1 and a maximum of 100. If there are fewer
+ results found than requested, all will be returned.
+ schema:
+ type: integer
+ example: 20
+ responses:
+ "200":
+ description: >-
+ Successfully retrieved objects via a typeahead search algorithm.
+ content:
+ application/json:
+ schema:
+ type: object
+ description: >-
+ A generic list of objects, such as those returned by the typeahead
+ search
+ endpoint.
+ properties:
+ data:
+ type: array
+ items:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: typeahead
+ name:
+ description: The name of the object.
+ type: string
+ example: Bug Task
+components:
+ schemas:
+ CustomFieldCompact:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: task
+ name:
+ description: The name of the custom field.
+ type: string
+ example: Status
+ resource_subtype:
+ description: >
+ The type of the custom field. Must be one of the given values.
+ type: string
+ example: text
+ enum:
+ - text
+ - enum
+ - multi_enum
+ - number
+ - date
+ - people
+ type:
+ description: >-
+ *Deprecated: new integrations should prefer the resource_subtype
+ field.* The type of the custom field. Must be one of the given
+ values.
+ type: string
+ readOnly: true
+ enum:
+ - text
+ - enum
+ - multi_enum
+ - number
+ enum_options:
+ 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](/reference/createenumoptionforcustomfield).
+ type: array
+ items:
+ $ref: "#/components/schemas/EnumOption"
+ enabled:
+ description: >-
+ *Conditional*. Determines if the custom field is enabled or not.
+ type: boolean
+ example: true
+ date_value:
+ 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`.
+ type: object
+ properties:
+ date:
+ type: string
+ description: >-
+ A string representing the date in YYYY-MM-DD format.
+ example: "2024-08-23"
+ date_time:
+ type: string
+ description: >-
+ A string representing the date in ISO 8601 format. If no time
+ value
+ is selected, the value of `date-time` will be `null`.
+ example: "2024-08-23T22:00:00.000Z"
+ enum_value:
+ allOf:
+ - $ref: "#/components/schemas/EnumOption"
+ - type: object
+ description: >-
+ *Conditional*. Only relevant for custom fields of type
+ `enum`. This object is the chosen value of an `enum` custom
+ field.
+ multi_enum_values:
+ description: >-
+ *Conditional*. Only relevant for custom fields of type
+ `multi_enum`. This object is the chosen values of a `multi_enum` custom
+ field.
+ type: array
+ items:
+ $ref: "#/components/schemas/EnumOption"
+ number_value:
+ description: >-
+ *Conditional*. This number is the value of a `number` custom field.
+ type: number
+ example: 5.2
+ text_value:
+ description: >-
+ *Conditional*. This string is the value of a `text` custom field.
+ type: string
+ example: Some Value
+ display_value:
+ 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.
+ type: string
+ readOnly: true
+ example: blue
+ nullable: true
+ CustomFieldResponse:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: custom_field
+ name:
+ description: The name of the custom field.
+ type: string
+ example: Status
+ resource_subtype:
+ description: >
+ The type of the custom field. Must be one of the given values.
+ type: string
+ example: text
+ enum:
+ - text
+ - enum
+ - multi_enum
+ - number
+ - date
+ - people
+ type:
+ description: >
+ *Deprecated: new integrations should prefer the resource_subtype
+ field.* The type of the custom field. Must be one of the given
+ values.
+ type: string
+ readOnly: true
+ enum:
+ - text
+ - enum
+ - multi_enum
+ - number
+ enum_options:
+ 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](/reference/createenumoptionforcustomfield).
+ type: array
+ items:
+ $ref: "#/components/schemas/EnumOption"
+ enabled:
+ description: >-
+ *Conditional*. Determines if the custom field is enabled or not.
+ type: boolean
+ example: true
+ date_value:
+ 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`.
+ type: object
+ properties:
+ date:
+ type: string
+ description: >-
+ A string representing the date in YYYY-MM-DD format.
+ example: "2024-08-23"
+ date_time:
+ type: string
+ description: >-
+ A string representing the date in ISO 8601 format. If no time
+ value
+ is selected, the value of `date-time` will be `null`.
+ example: "2024-08-23T22:00:00.000Z"
+ enum_value:
+ allOf:
+ - $ref: "#/components/schemas/EnumOption"
+ - type: object
+ description: >-
+ *Conditional*. Only relevant for custom fields of type
+ `enum`. This object is the chosen value of an `enum` custom
+ field.
+ multi_enum_values:
+ description: >-
+ *Conditional*. Only relevant for custom fields of type
+ `multi_enum`. This object is the chosen values of a `multi_enum` custom
+ field.
+ type: array
+ items:
+ $ref: "#/components/schemas/EnumOption"
+ number_value:
+ description: >-
+ *Conditional*. This number is the value of a `number` custom field.
+ type: number
+ example: 5.2
+ text_value:
+ description: >-
+ *Conditional*. This string is the value of a `text` custom field.
+ type: string
+ example: Some Value
+ display_value:
+ 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.
+ type: string
+ readOnly: true
+ example: blue
+ nullable: true
+ description:
+ description: >-
+ [Opt
+ In](/docs/inputoutput-options).
+ The description of the custom field.
+ type: string
+ example: Development team priority
+ precision:
+ 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.
+
+ For 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%.
+
+ The identifier format will always have a precision of 0.
+ type: integer
+ example: 2
+ format:
+ description: >-
+ The format of this custom field.
+ type: string
+ enum:
+ - currency
+ - identifier
+ - percentage
+ - custom
+ - none
+ example: custom
+ currency_code:
+ description: >-
+ ISO 4217 currency code to format this custom field. This will be
+ null if the `format` is not `currency`.
+ type: string
+ nullable: true
+ example: EUR
+ custom_label:
+ description: >-
+ This is the string that appears next to the custom field value.
+ This will be null if the `format` is not `custom`.
+ type: string
+ nullable: true
+ example: gold pieces
+ custom_label_position:
+ 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`.
+ type: string
+ enum:
+ - prefix
+ - suffix
+ example: suffix
+ is_global_to_workspace:
+ 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.
+ type: boolean
+ example: true
+ readOnly: true
+ has_notifications_enabled:
+ description: >-
+ *Conditional*. This flag describes whether a follower of a task
+ with this field should receive inbox notifications from changes
+ to this field.
+ type: boolean
+ example: true
+ asana_created_field:
+ description: >-
+ *Conditional*. A unique identifier to associate this field with the
+ template source of truth.
+ type: string
+ readOnly: true
+ nullable: true
+ 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
+ example: priority
+ created_by:
+ $ref: "#/components/schemas/UserCompact"
+ people_value:
+ description: >-
+ *Conditional*. Only relevant for custom fields of type `people`.
+ This array of [compact user](/reference/users) objects reflects the
+ values
+ of a `people` custom field.
+ type: array
+ items:
+ $ref: "#/components/schemas/UserCompact"
+ CustomFieldSettingResponse:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: custom_field_setting
+ project:
+ allOf:
+ - $ref: "#/components/schemas/ProjectCompact"
+ - type: object
+ description: >-
+ *Deprecated: new integrations should prefer the `parent`
+ field.* The id of the project that this custom field settings
+ refers to.
+ readOnly: true
+ is_important:
+ 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.
+ type: boolean
+ readOnly: true
+ example: false
+ parent:
+ allOf:
+ - $ref: "#/components/schemas/ProjectCompact"
+ - type: object
+ 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.
+ readOnly: true
+ custom_field:
+ allOf:
+ - $ref: "#/components/schemas/CustomFieldResponse"
+ - type: object
+ description: >-
+ The custom field that is applied to the `parent`.
+ readOnly: true
+ EnumOption:
+ type: object
+ description: >-
+ Enum options are the possible values which an enum custom field can
+ adopt. An enum custom field must contain at least 1 enum option but no
+ more than 500.
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: enum_option
+ name:
+ description: The name of the enum option.
+ type: string
+ example: Low
+ enabled:
+ description: >-
+ Whether or not the enum option is a selectable value for the
+ custom field.
+ type: boolean
+ example: true
+ color:
+ description: >-
+ The color of the enum option. Defaults to ‘none’.
+ type: string
+ example: blue
+ JobResponse:
+ type: object
+ properties:
+ resource_subtype:
+ description: >-
+ The subtype of this resource. Different subtypes retain many of the
+ same fields and behavior, but may render differently in Asana or
+ represent resources with different semantic meaning.
+ type: string
+ readOnly: true
+ status:
+ description: >-
+ The current status of this job. The value is one of: `not_started`,
+ `in_progress`, `succeeded`, or `failed`.
+ type: string
+ enum:
+ - not_started
+ - in_progress
+ - succeeded
+ - failed
+ readOnly: true
+ new_project:
+ $ref: "#/components/schemas/ProjectCompact"
+ new_task:
+ $ref: "#/components/schemas/TaskCompact"
+ new_project_template:
+ $ref: "#/components/schemas/ProjectTemplateCompact"
+ Like:
+ type: object
+ description: >-
+ An object to represent a user's like.
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the object, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ user:
+ $ref: "#/components/schemas/UserCompact"
+ Preview:
+ type: object
+ description: >-
+ A collection of rich text that will be displayed as a preview to another
+ app.
+
+ This is read-only except for a small group of whitelisted apps.
+ readOnly: true
+ properties:
+ fallback:
+ description:
+ Some fallback text to display if unable to display the full
+ preview.
+ type: string
+ footer:
+ description: Text to display in the footer.
+ type: string
+ header:
+ description: Text to display in the header.
+ type: string
+ header_link:
+ description: Where the header will link to.
+ type: string
+ html_text:
+ description: HTML formatted text for the body of the preview.
+ type: string
+ text:
+ description: Text for the body of the preview.
+ type: string
+ title:
+ description: Text to display as the title.
+ type: string
+ title_link:
+ description: Where to title will link to.
+ type: string
+ ProjectBriefCompact:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: project_brief
+ ProjectCompact:
+ type: object
+ description: >-
+ A *project* represents a prioritized list of tasks in Asana or a board
+ with columns of tasks represented as cards. It exists in a single
+ workspace or organization and is accessible to a subset of users in
+ that workspace or organization, depending on its permissions.
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: project
+ name:
+ description: >-
+ Name of the project. This is generally a short sentence fragment
+ that fits on a line in the UI for maximum readability. However, it
+ can be longer.
+ type: string
+ example: Stuff to buy
+ ProjectDuplicateRequest:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ description: The name of the new project.
+ type: string
+ team:
+ description: >-
+ Sets the team of the new project. If team is not defined,
+ the new project will be in the same team as the the
+ original project.
+ type: string
+ include:
+ description: >-
+ The elements that will be duplicated to the new project.
+ Tasks are always included.
+ type: string
+ enum:
+ - members
+ - notes
+ - forms
+ - task_notes
+ - task_assignee
+ - task_subtasks
+ - task_attachments
+ - task_dates
+ - task_dependencies
+ - task_followers
+ - task_tags
+ - task_projects
+ schedule_dates:
+ description: >-
+ A dictionary of options to auto-shift dates.
+ `task_dates` must be included to use this option.
+ Requires either `start_on` or `due_on`, but not both.
+ type: object
+ required:
+ - should_skip_weekends
+ properties:
+ should_skip_weekends:
+ description: >-
+ Determines if the auto-shifted dates should skip weekends.
+ type: boolean
+ due_on:
+ description: >-
+ Sets the last due date in the duplicated project to the given
+ date. The rest of the due dates will be offset by the same amount
+ as the due dates in the original project.
+ type: string
+ start_on:
+ description: >-
+ Sets the first start date in the duplicated project to the given
+ date. The rest of the start dates will be offset by the same amount
+ as the start dates in the original project.
+ type: string
+ ProjectResponse:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: project
+ name:
+ description: >-
+ Name of the project. This is generally a short sentence fragment
+ that fits on a line in the UI for maximum readability. However, it
+ can be longer.
+ type: string
+ example: Stuff to buy
+ archived:
+ description: >-
+ True if the project is archived, false if not. Archived projects
+ do not show in the UI by default and may be treated differently
+ for queries.
+ type: boolean
+ example: false
+ color:
+ description: Color of the project.
+ type: string
+ nullable: true
+ enum:
+ - dark-pink
+ - dark-green
+ - dark-blue
+ - dark-red
+ - dark-teal
+ - dark-brown
+ - dark-orange
+ - dark-purple
+ - dark-warm-gray
+ - light-pink
+ - light-green
+ - light-blue
+ - light-red
+ - light-teal
+ - light-brown
+ - light-orange
+ - light-purple
+ - light-warm-gray
+ example: light-green
+ created_at:
+ description: The time at which this resource was created.
+ type: string
+ format: date-time
+ readOnly: true
+ example: "2012-02-22T02:06:58.147Z"
+ current_status:
+ $ref: "#/components/schemas/ProjectStatusResponse"
+ current_status_update:
+ $ref: "#/components/schemas/StatusUpdateCompact"
+ custom_field_settings:
+ description: Array of Custom Field Settings (in compact form).
+ readOnly: true
+ type: array
+ items:
+ $ref: "#/components/schemas/CustomFieldSettingResponse"
+ default_view:
+ description: The default view (list, board, calendar, or timeline) of
+ a project.
+ type: string
+ enum:
+ - list
+ - board
+ - calendar
+ - timeline
+ example: calendar
+ due_date:
+ description: >-
+ *Deprecated: new integrations should prefer the `due_on` field.*
+ type: string
+ nullable: true
+ format: date-time
+ example: "2019-09-15T02:06:58.147Z"
+ due_on:
+ description: >-
+ The day on which this project is due. This takes a date with
+ format YYYY-MM-DD.
+ type: string
+ nullable: true
+ format: date-time
+ example: "2019-09-15T02:06:58.147Z"
+ html_notes:
+ description: >-
+ [Opt In](/docs/inputoutput-options).
+ The notes of the project with formatting as HTML.
+ type: string
+ example: These are things we need to purchase.
+ members:
+ description: Array of users who are members of this project.
+ type: array
+ items:
+ $ref: "#/components/schemas/UserCompact"
+ readOnly: true
+ modified_at:
+ description: >-
+ The time at which this project was last modified.
+
+ *Note: This does not currently reflect any changes in
+ associations such as tasks or comments that may have been added or
+ removed from the project.*
+ type: string
+ readOnly: true
+ format: date-time
+ example: "2012-02-22T02:06:58.147Z"
+ notes:
+ description: >-
+ Free-form textual information associated with the
+ project (ie., its description).
+ type: string
+ example: These are things we need to purchase.
+ public:
+ description: >-
+ True if the project is public to its team.
+ type: boolean
+ example: false
+ start_on:
+ description: >-
+ The day on which work for this project begins, or null if the
+ project has no start date. This takes a date with `YYYY-MM-DD`
+ format. *Note: `due_on` or `due_at` must be present in the
+ request when setting or unsetting the `start_on` parameter.
+ Additionally, `start_on` and `due_on` cannot be the same date.*
+ type: string
+ nullable: true
+ format: date
+ example: "2019-09-14"
+ workspace:
+ allOf:
+ - $ref: "#/components/schemas/WorkspaceCompact"
+ - type: object
+ readOnly: true
+ description: >-
+ *Create-only*. The workspace or organization this project is
+ associated with. Once created, projects cannot be moved to a
+ different workspace. This attribute can only be specified at
+ creation time.
+ custom_fields:
+ description: Array of Custom Fields.
+ readOnly: true
+ type: array
+ items:
+ $ref: "#/components/schemas/CustomFieldCompact"
+ completed:
+ description: >-
+ True if the project is currently marked complete, false if not.
+ type: boolean
+ readOnly: true
+ example: false
+ completed_at:
+ description: >-
+ The time at which this project was completed, or null if the project
+ is not completed.
+ type: string
+ format: date-time
+ readOnly: true
+ nullable: true
+ example: "2012-02-22T02:06:58.147Z"
+ completed_by:
+ $ref: "#/components/schemas/UserCompact"
+ followers:
+ description: >-
+ Array of users following this project. Followers are a subset
+ of members who have opted in to receive "tasks added"
+ notifications for a project.
+ type: array
+ items:
+ $ref: "#/components/schemas/UserCompact"
+ readOnly: true
+ owner:
+ $ref: "#/components/schemas/UserCompact"
+ team:
+ $ref: "#/components/schemas/TeamCompact"
+ icon:
+ description: >-
+ The icon for a project.
+ type: string
+ nullable: true
+ enum:
+ - list
+ - board
+ - timeline
+ - calendar
+ - rocket
+ - people
+ - graph
+ - star
+ - bug
+ - light_bulb
+ - globe
+ - gear
+ - notebook
+ - computer
+ - check
+ - target
+ - html
+ - megaphone
+ - chat_bubbles
+ - briefcase
+ - page_layout
+ - mountain_flag
+ - puzzle
+ - presentation
+ - line_and_symbols
+ - speed_dial
+ - ribbon
+ - shoe
+ - shopping_basket
+ - map
+ - ticket
+ - coins
+ example: chat_bubbles
+ permalink_url:
+ type: string
+ readOnly: true
+ description: >-
+ A url that points directly to the object within Asana.
+ example: https://app.asana.com/0/resource/123456789/list
+ project_brief:
+ allOf:
+ - $ref: "#/components/schemas/ProjectBriefCompact"
+ - type: object
+ description: >-
+ [Opt In](/docs/inputoutput-options).
+ The project brief associated with this project.
+ nullable: true
+ created_from_template:
+ allOf:
+ - $ref: "#/components/schemas/ProjectTemplateCompact"
+ - type: object
+ description: >-
+ [Opt In](/docs/inputoutput-options).
+ The project template from which this project was created. If the
+ project was
+ not created from a template, this field will be null.
+ nullable: true
+ ProjectRequest:
+ type: object
+ properties:
+ name:
+ description: >-
+ Name of the project. This is generally a short sentence fragment
+ that fits on a line in the UI for maximum readability. However, it
+ can be longer.
+ type: string
+ example: Stuff to buy
+ archived:
+ description: >-
+ True if the project is archived, false if not. Archived projects
+ do not show in the UI by default and may be treated differently
+ for queries.
+ type: boolean
+ example: false
+ color:
+ description: Color of the project.
+ type: string
+ nullable: true
+ enum:
+ - dark-pink
+ - dark-green
+ - dark-blue
+ - dark-red
+ - dark-teal
+ - dark-brown
+ - dark-orange
+ - dark-purple
+ - dark-warm-gray
+ - light-pink
+ - light-green
+ - light-blue
+ - light-red
+ - light-teal
+ - light-brown
+ - light-orange
+ - light-purple
+ - light-warm-gray
+ example: light-green
+ current_status:
+ $ref: "#/components/schemas/ProjectStatusResponse"
+ current_status_update:
+ $ref: "#/components/schemas/StatusUpdateCompact"
+ default_view:
+ description: The default view (list, board, calendar, or timeline) of
+ a project.
+ type: string
+ enum:
+ - list
+ - board
+ - calendar
+ - timeline
+ example: calendar
+ due_date:
+ description: >-
+ *Deprecated: new integrations should prefer the `due_on` field.*
+ type: string
+ nullable: true
+ format: date-time
+ example: "2019-09-15T02:06:58.147Z"
+ due_on:
+ description: >-
+ The day on which this project is due. This takes a date with
+ format YYYY-MM-DD.
+ type: string
+ nullable: true
+ format: date-time
+ example: "2019-09-15T02:06:58.147Z"
+ html_notes:
+ description: >-
+ [Opt In](/docs/inputoutput-options).
+ The notes of the project with formatting as HTML.
+ type: string
+ example: These are things we need to purchase.
+ notes:
+ description: >-
+ Free-form textual information associated with the
+ project (ie., its description).
+ type: string
+ example: These are things we need to purchase.
+ public:
+ description: >-
+ True if the project is public to its team.
+ type: boolean
+ example: false
+ start_on:
+ description: >-
+ The day on which work for this project begins, or null if the
+ project has no start date. This takes a date with `YYYY-MM-DD`
+ format. *Note: `due_on` or `due_at` must be present in the
+ request when setting or unsetting the `start_on` parameter.
+ Additionally, `start_on` and `due_on` cannot be the same date.*
+ type: string
+ nullable: true
+ format: date
+ example: "2019-09-14"
+ custom_fields:
+ description: >-
+ An object where each key is a Custom Field GID and each value is
+ an enum GID, string, number, or object.
+ type: object
+ additionalProperties:
+ type: string
+ description: >-
+ "{custom_field_gid}" => Value (Can be text, number, etc.)
+ example:
+ "5678904321": On Hold
+ "4578152156": Not Started
+ followers:
+ description: >-
+ *Create-only*. Comma separated string of users. Followers
+ are a subset of members who have opted in to receive "tasks
+ added" notifications for a project.
+ type: string
+ example: 12345,23456
+ owner:
+ description: >-
+ The current owner of the project, may be null.
+ nullable: true
+ type: string
+ example: "12345"
+ team:
+ description: >-
+ The team that this project is shared with.
+ type: string
+ example: "12345"
+ ProjectSectionInsertRequest:
+ type: object
+ properties:
+ project:
+ description: The project in which to reorder the given section.
+ type: string
+ section:
+ description: The section to reorder.
+ type: string
+ before_section:
+ description: >-
+ Insert the given section immediately before the section
+ specified by this parameter.
+ type: string
+ after_section:
+ description: >-
+ Insert the given section immediately after the section
+ specified by this parameter.
+ type: string
+ required:
+ - project
+ - section
+ ProjectStatusResponse:
+ type: object
+ required:
+ - text
+ - color
+ properties:
+ text:
+ description: The text content of the status update.
+ type: string
+ example: The project is moving forward according to plan...
+ html_text:
+ description: >-
+ [Opt
+ In](/docs/inputoutput-options).
+ The text content of the status update with formatting as HTML.
+ type: string
+ example: >-
+ The project is moving forward according to
+ plan...
+ color:
+ description: The color associated with the status update.
+ type: string
+ enum:
+ - green
+ - yellow
+ - red
+ - blue
+ author:
+ $ref: "#/components/schemas/UserCompact"
+ created_at:
+ description: The time at which this resource was created.
+ type: string
+ format: date-time
+ readOnly: true
+ example: "2012-02-22T02:06:58.147Z"
+ created_by:
+ $ref: "#/components/schemas/UserCompact"
+ modified_at:
+ description: >-
+ The time at which this project status was last modified.
+
+ *Note: This does not currently reflect any changes in
+ associations such as comments that may have been added or
+ removed from the project status.*
+ type: string
+ format: date-time
+ readOnly: true
+ example: "2012-02-22T02:06:58.147Z"
+ ProjectTemplateCompact:
+ type: object
+ description: >-
+ A *project template* is an object that allows new projects to be created
+ with a predefined setup, which may include tasks, sections, Rules, etc.
+ It simplifies the process of running a workflow that involves a similar
+ set of work every time.
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: project_template
+ name:
+ description: >-
+ Name of the project template.
+ type: string
+ example: Packing list
+ StatusUpdateCompact:
+ type: object
+ description: >-
+ A *status update* is an update on the progress of a particular
+ project, portfolio, or goal, and is sent out to all of its parent's
+ followers when created. These
+ updates include both text describing the update and a `status_type`
+ intended to represent the overall state of the project.
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: status_update
+ title:
+ description: The title of the status update.
+ type: string
+ example: Status Update - Jun 15
+ resource_subtype:
+ type: string
+ description: >-
+ The subtype of this resource. Different subtypes retain many of
+ the same fields and behavior, but may render differently in Asana
+ or represent resources with different semantic meaning.
+
+ The `resource_subtype`s for `status` objects represent the type of
+ their parent.
+ enum:
+ - project_status_update
+ - portfolio_status_update
+ - goal_status_update
+ example: project_status_update
+ readOnly: true
+ SectionCompact:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ name:
+ description: >-
+ The name of the section (i.e. the text displayed as the section
+ header).
+ type: string
+ SectionTaskInsertRequest:
+ type: object
+ properties:
+ task:
+ description: The task to add to this section.
+ type: string
+ insert_before:
+ description: >-
+ An existing task within this section before which the added
+ task should be inserted. Cannot be provided together with
+ insert_after.
+ type: string
+ insert_after:
+ description: >-
+ An existing task within this section after which the added
+ task should be inserted. Cannot be provided together with
+ insert_before.
+ type: string
+ required:
+ - task
+ SectionResponse:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ name:
+ description: >-
+ The name of the section (i.e. the text displayed as the section
+ header).
+ type: string
+ created_at:
+ description: The time at which this resource was created.
+ type: string
+ format: date-time
+ readOnly: true
+ project:
+ $ref: "#/components/schemas/ProjectCompact"
+ projects:
+ description: >-
+ *Deprecated - please use project instead*
+ type: array
+ readOnly: true
+ items:
+ $ref: "#/components/schemas/ProjectCompact"
+ SectionRequest:
+ type: object
+ properties:
+ name:
+ description: >-
+ The text to be displayed as the section name. This cannot be
+ an empty string.
+ type: string
+ insert_before:
+ description: >-
+ An existing section within this project before which the added
+ section should be inserted. Cannot be provided together with
+ insert_after.
+ type: string
+ insert_after:
+ description: >-
+ An existing section within this project after which the added
+ section should be inserted. Cannot be provided together with
+ insert_before.
+ type: string
+ required:
+ - project
+ - name
+ StoryCompact:
+ type: object
+ description: >-
+ A story represents an activity associated with an object in the Asana
+ system.
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ created_at:
+ description: The time at which this resource was created.
+ type: string
+ format: date-time
+ readOnly: true
+ created_by:
+ $ref: "#/components/schemas/UserCompact"
+ resource_subtype:
+ description: >-
+ The subtype of this resource. Different subtypes retain many of the
+ same fields and behavior, but may render differently in Asana or
+ represent resources with different semantic meaning.
+ type: string
+ readOnly: true
+ text:
+ description: >-
+ *Create-only*. Human-readable text for the story or comment.
+
+ This will not include the name of the creator.
+
+ *Note: This is not guaranteed to be stable for a given type of
+ story. For example, text for a reassignment may not always say
+ “assigned to …” as the text for a story can both be edited and
+ change based on the language settings of the user making the
+ request.*
+
+ Use the `resource_subtype` property to discover the action that
+ created the story.
+ type: string
+ StoryRequest:
+ type: object
+ description: >-
+ A story represents an activity associated with an object in the Asana
+ system.
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ created_at:
+ description: The time at which this resource was created.
+ type: string
+ format: date-time
+ readOnly: true
+ resource_subtype:
+ description: >-
+ The subtype of this resource. Different subtypes retain many of the
+ same fields and behavior, but may render differently in Asana or
+ represent resources with different semantic meaning.
+ type: string
+ readOnly: true
+ text:
+ description: The plain text of the comment to add. Cannot be used with
+ html_text.
+ type: string
+ html_text:
+ description: >-
+ [Opt In](/docs/inputoutput-options).
+ HTML formatted text for a comment. This will not include the name
+ of the creator.
+ type: string
+ is_pinned:
+ description: >-
+ *Conditional*. Whether the story should be pinned on the
+ resource.
+ type: boolean
+ sticker_name:
+ description: >-
+ The name of the sticker in this story. `null` if there is no sticker.
+ type: string
+ enum:
+ - green_checkmark
+ - people_dancing
+ - dancing_unicorn
+ - heart
+ - party_popper
+ - people_waving_flags
+ - splashing_narwhal
+ - trophy
+ - yeti_riding_unicorn
+ - celebrating_people
+ - determined_climbers
+ - phoenix_spreading_love
+ StoryResponse:
+ type: object
+ description: >-
+ A story represents an activity associated with an object in the Asana
+ system.
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ created_at:
+ description: The time at which this resource was created.
+ type: string
+ format: date-time
+ readOnly: true
+ resource_subtype:
+ description: >-
+ The subtype of this resource. Different subtypes retain many of the
+ same fields and behavior, but may render differently in Asana or
+ represent resources with different semantic meaning.
+ type: string
+ readOnly: true
+ text:
+ description: The plain text of the comment to add. Cannot be used with
+ html_text.
+ type: string
+ html_text:
+ description: >-
+ [Opt In](/docs/inputoutput-options).
+ HTML formatted text for a comment. This will not include the name
+ of the creator.
+ type: string
+ is_pinned:
+ description: >-
+ *Conditional*. Whether the story should be pinned on the
+ resource.
+ type: boolean
+ example: false
+ sticker_name:
+ description: >-
+ The name of the sticker in this story. `null` if there is no sticker.
+ type: string
+ enum:
+ - green_checkmark
+ - people_dancing
+ - dancing_unicorn
+ - heart
+ - party_popper
+ - people_waving_flags
+ - splashing_narwhal
+ - trophy
+ - yeti_riding_unicorn
+ - celebrating_people
+ - determined_climbers
+ - phoenix_spreading_love
+ created_by:
+ $ref: "#/components/schemas/UserCompact"
+ type:
+ type: string
+ enum:
+ - comment
+ - system
+ readOnly: true
+ is_editable:
+ description: >-
+ *Conditional*. Whether the text of the story can be edited
+ after creation.
+ type: boolean
+ readOnly: true
+ is_edited:
+ description: >-
+ *Conditional*. Whether the text of the story has been edited
+ after creation.
+ type: boolean
+ readOnly: true
+ hearted:
+ description: >-
+ *Deprecated - please use likes instead*
+
+ *Conditional*. True if the story is hearted by the authorized
+ user, false if not.
+ type: boolean
+ readOnly: true
+ hearts:
+ description: |-
+ *Deprecated - please use likes instead*
+
+ *Conditional*. Array of likes for users who have hearted this story.
+ type: array
+ items:
+ $ref: "#/components/schemas/Like"
+ readOnly: true
+ num_hearts:
+ description: |-
+ *Deprecated - please use likes instead*
+
+ *Conditional*. The number of users who have hearted this story.
+ type: integer
+ readOnly: true
+ liked:
+ description: >-
+ *Conditional*. True if the story is liked by the authorized
+ user, false if not.
+ type: boolean
+ readOnly: true
+ likes:
+ description: >-
+ *Conditional*. Array of likes for users who have liked this story.
+ type: array
+ items:
+ $ref: "#/components/schemas/Like"
+ readOnly: true
+ num_likes:
+ description: >-
+ *Conditional*. The number of users who have liked this story.
+ type: integer
+ readOnly: true
+ previews:
+ description: >-
+ *Conditional*. A collection of previews to be displayed in the
+ story.
+
+
+ *Note: This property only exists for comment stories.*
+ type: array
+ items:
+ $ref: "#/components/schemas/Preview"
+ readOnly: true
+ old_name:
+ description: >-
+ *Conditional*'
+ type: string
+ new_name:
+ description: >-
+ *Conditional*
+ type: string
+ readOnly: true
+ old_dates:
+ $ref: "#/components/schemas/StoryResponseDates"
+ new_dates:
+ $ref: "#/components/schemas/StoryResponseDates"
+ old_resource_subtype:
+ description: >-
+ *Conditional*
+ type: string
+ readOnly: true
+ new_resource_subtype:
+ description: >-
+ *Conditional*
+ type: string
+ readOnly: true
+ example: milestone
+ story:
+ allOf:
+ - $ref: "#/components/schemas/StoryCompact"
+ - type: object
+ readOnly: true
+ assignee:
+ allOf:
+ - $ref: "#/components/schemas/UserCompact"
+ - type: object
+ readOnly: true
+ follower:
+ allOf:
+ - $ref: "#/components/schemas/UserCompact"
+ - type: object
+ readOnly: true
+ old_section:
+ allOf:
+ - $ref: "#/components/schemas/SectionCompact"
+ - type: object
+ readOnly: true
+ new_section:
+ allOf:
+ - $ref: "#/components/schemas/SectionCompact"
+ - type: object
+ readOnly: true
+ task:
+ allOf:
+ - $ref: "#/components/schemas/TaskCompact"
+ - type: object
+ readOnly: true
+ project:
+ allOf:
+ - $ref: "#/components/schemas/ProjectCompact"
+ - type: object
+ readOnly: true
+ tag:
+ allOf:
+ - $ref: "#/components/schemas/TagCompact"
+ - type: object
+ readOnly: true
+ custom_field:
+ allOf:
+ - $ref: "#/components/schemas/CustomFieldCompact"
+ - type: object
+ readOnly: true
+ old_text_value:
+ type: string
+ readOnly: true
+ new_text_value:
+ type: string
+ readOnly: true
+ old_number_value:
+ type: integer
+ readOnly: true
+ new_number_value:
+ type: integer
+ readOnly: true
+ old_enum_value:
+ allOf:
+ - $ref: "#/components/schemas/EnumOption"
+ - type: object
+ readOnly: true
+ new_enum_value:
+ allOf:
+ - $ref: "#/components/schemas/EnumOption"
+ - type: object
+ - readOnly: true
+ old_date_value:
+ allOf:
+ - $ref: "#/components/schemas/StoryResponseDates"
+ - description: >-
+ *Conditional*. The old value of a date custom field story.
+ readOnly: true
+ new_date_value:
+ allOf:
+ - $ref: "#/components/schemas/StoryResponseDates"
+ - description: >-
+ *Conditional* The new value of a date custom field story.
+ readOnly: true
+ old_people_value:
+ description: >-
+ *Conditional*. The old value of a people custom field story.
+ type: array
+ items:
+ $ref: "#/components/schemas/UserCompact"
+ readOnly: true
+ new_people_value:
+ description: >-
+ *Conditional*. The new value of a people custom field story.
+ type: array
+ items:
+ $ref: "#/components/schemas/UserCompact"
+ readOnly: true
+ old_multi_enum_values:
+ description: >-
+ *Conditional*. The old value of a multi-enum custom field story.
+ type: array
+ items:
+ $ref: "#/components/schemas/EnumOption"
+ readOnly: true
+ new_multi_enum_values:
+ description: >-
+ *Conditional*. The new value of a multi-enum custom field story.
+ type: array
+ items:
+ $ref: "#/components/schemas/EnumOption"
+ readOnly: true
+ new_approval_status:
+ description: >-
+ *Conditional*. The new value of approval status.
+ type: string
+ readOnly: true
+ example: approved
+ old_approval_status:
+ description: >-
+ *Conditional*. The old value of approval status.
+ type: string
+ readOnly: true
+ example: pending
+ duplicate_of:
+ allOf:
+ - $ref: "#/components/schemas/TaskCompact"
+ - type: object
+ readOnly: true
+ duplicated_from:
+ allOf:
+ - $ref: "#/components/schemas/TaskCompact"
+ - type: object
+ readOnly: true
+ dependency:
+ allOf:
+ - $ref: "#/components/schemas/TaskCompact"
+ - type: object
+ readOnly: true
+ source:
+ description: >-
+ The component of the Asana product the user used to trigger the
+ story.
+ type: string
+ enum:
+ - web
+ - email
+ - mobile
+ - api
+ - unknown
+ readOnly: true
+ target:
+ allOf:
+ - $ref: "#/components/schemas/TaskCompact"
+ - type: object
+ readOnly: true
+ description: >-
+ The object this story is associated with. Currently may only be
+ a
+ task.
+ StoryResponseDates:
+ description: >-
+ *Conditional*
+ type: object
+ readOnly: true
+ properties:
+ start_on:
+ description: >-
+ The day on which work for this goal begins, or null if the
+ goal has no start date. This takes a date with `YYYY-MM-DD`
+ format, and cannot be set unless there is an accompanying due date.
+ type: string
+ format: date
+ nullable: true
+ due_at:
+ description: >-
+ The UTC date and time on which this task is due, or null if the
+ task has no due time. This takes an ISO 8601 date string in UTC
+ and should not be used together with `due_on`.
+ type: string
+ format: date-time
+ nullable: true
+ due_on:
+ description: >-
+ The localized day on which this goal is due. This takes a
+ date with format `YYYY-MM-DD`.
+ type: string
+ format: date
+ TagCompact:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: task
+ name:
+ description: >-
+ Name of the tag. This is generally a short sentence fragment that
+ fits on a line in the UI for maximum readability. However, it can
+ be longer.
+ type: string
+ example: Stuff to buy
+ TaskCompact:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: task
+ name:
+ description: The name of the task.
+ type: string
+ example: Bug Task
+ resource_subtype:
+ type: string
+ description: >-
+ The subtype of this resource. Different subtypes retain many of
+ the same fields and behavior, but may render differently in Asana
+ or represent resources with different semantic meaning.
+
+ The resource_subtype `milestone` represent a single moment in
+ time. This means tasks with this subtype cannot have a start_date.
+ enum:
+ - default_task
+ - milestone
+ - section
+ - approval
+ example: default_task
+ TaskDuplicateRequest:
+ type: object
+ properties:
+ name:
+ description: The name of the new task.
+ type: string
+ example: New Task Name
+ include:
+ description: The fields that will be duplicated to the new task.
+ type: string
+ enum:
+ - notes
+ - assignee
+ - subtasks
+ - attachments
+ - tags
+ - followers
+ - projects
+ - dates
+ - dependencies
+ - parent
+ TaskResponse:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: task
+ name:
+ description: The name of the task.
+ type: string
+ example: Bug Task
+ resource_subtype:
+ type: string
+ description: >-
+ The subtype of this resource. Different subtypes retain many of
+ the same fields and behavior, but may render differently in Asana
+ or represent resources with different semantic meaning.
+
+ The resource_subtype `milestone` represent a single moment in
+ time. This means tasks with this subtype cannot have a start_date.
+ enum:
+ - default_task
+ - milestone
+ - section
+ - approval
+ example: default_task
+ approval_status:
+ type: string
+ description: >-
+ *Conditional* Reflects the approval status of this task. This
+ field is kept in sync with `completed`, meaning `pending`
+ translates to false while `approved`, `rejected`, and
+ `changes_requested` translate to true. If you set completed
+ to true, this field will be set to `approved`.
+ enum:
+ - pending
+ - approved
+ - rejected
+ - changes_requested
+ example: pending
+ assignee_status:
+ description: >-
+ *Deprecated* Scheduling status of this task for the user it is assigned
+ to.
+ This field can only be set if the assignee is non-null.
+ Setting this field to "inbox" or "upcoming" inserts it at the top
+ of the section, while the other options will insert at the bottom.
+ type: string
+ enum:
+ - today
+ - upcoming
+ - later
+ - new
+ - inbox
+ example: upcoming
+ completed:
+ description: >-
+ True if the task is currently marked complete, false if not.
+ type: boolean
+ example: false
+ completed_at:
+ description: >-
+ The time at which this task was completed, or null if the task is
+ incomplete.
+ type: string
+ format: date-time
+ readOnly: true
+ nullable: true
+ example: "2012-02-22T02:06:58.147Z"
+ completed_by:
+ allOf:
+ - $ref: "#/components/schemas/UserCompact"
+ - type: object
+ readOnly: true
+ created_at:
+ description: The time at which this resource was created.
+ type: string
+ format: date-time
+ readOnly: true
+ example: "2012-02-22T02:06:58.147Z"
+ dependencies:
+ description: >-
+ [OptIn](/docs/inputoutput-options).
+ Array of resources referencing tasks that this task depends on.
+ The objects contain only the gid of the dependency.
+ type: array
+ items:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: task
+ readOnly: true
+ dependents:
+ description: >-
+ [OptIn](/docs/inputoutput-options).
+ Array of resources referencing tasks that depend on this task. The
+ objects contain only the ID of the dependent.
+ type: array
+ items:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: task
+ readOnly: true
+ due_at:
+ description: >-
+ The UTC date and time on which this task is due, or null if the
+ task has no due time. This takes an ISO 8601 date string in UTC
+ and should not be used together with `due_on`.
+ type: string
+ format: date
+ example: "2019-09-15"
+ nullable: true
+ due_on:
+ description: >-
+ The localized date on which this task is due, or null if the task
+ has no due date. This takes a date with `YYYY-MM-DD` format and
+ should not be used together with `due_at`.
+ type: string
+ format: date
+ example: "2019-09-15"
+ nullable: true
+ external:
+ description: >-
+ *OAuth Required*. *Conditional*. This field is returned only
+ if external values are set or included by using [Opt In]
+ (/docs/inputoutput-options).
+
+ The external field allows you to store app-specific metadata on
+ tasks, including a gid that can be used to retrieve tasks and a
+ data blob that can store app-specific character strings. Note that
+ you will need to authenticate with Oauth to access or modify this
+ data. Once an external gid is set, you can use the notation
+ `external:custom_gid` to reference your object anywhere in the API
+ where you may use the original object gid. See the page on Custom
+ External Data for more details.
+ type: object
+ properties:
+ gid:
+ type: string
+ example: "1234"
+ data:
+ type: string
+ example: A blob of information.
+ example:
+ gid: my_gid
+ data: A blob of information
+ html_notes:
+ description: >-
+ [Opt
+ In](/docs/inputoutput-options).
+ The notes of the text with formatting as HTML.
+ type: string
+ example: >-
+ Mittens really likes the stuff from
+ Humboldt.
+ hearted:
+ description: >-
+ *Deprecated - please use liked instead* True if the task is
+ hearted by the authorized user, false if not.
+ type: boolean
+ example: true
+ readOnly: true
+ hearts:
+ description: >-
+ *Deprecated - please use likes instead* Array of likes for users
+ who have hearted this task.
+ type: array
+ items:
+ $ref: "#/components/schemas/Like"
+ readOnly: true
+ is_rendered_as_separator:
+ description: >-
+ [Opt In](/docs/inputoutput-options).
+ In some contexts tasks can be rendered as a visual separator;
+ for instance, subtasks can appear similar to
+ [sections](/reference/sections) without being true
+ `section` objects. If a `task` object is rendered this way in any
+ context it will have the property `is_rendered_as_separator` set
+ to `true`.
+ type: boolean
+ example: false
+ readOnly: true
+ liked:
+ description: >-
+ True if the task is liked by the authorized user, false if not.
+ type: boolean
+ example: true
+ likes:
+ description: Array of likes for users who have liked this task.
+ type: array
+ items:
+ $ref: "#/components/schemas/Like"
+ readOnly: true
+ memberships:
+ description: >-
+ *Create-only*. Array of projects this task is associated with
+ and the section it is in. At task creation time, this array can be
+ used to add the task to specific sections. After task creation,
+ these associations can be modified using the `addProject` and
+ `removeProject` endpoints. Note that over time, more types of
+ memberships may be added to this property.
+ type: array
+ readOnly: true
+ items:
+ type: object
+ properties:
+ project:
+ $ref: "#/components/schemas/ProjectCompact"
+ section:
+ $ref: "#/components/schemas/SectionCompact"
+ modified_at:
+ description: |-
+ The time at which this task was last modified.
+
+ *Note: This does not currently reflect any changes in
+ associations such as projects or comments that may have been
+ added or removed from the task.*
+ type: string
+ format: date-time
+ readOnly: true
+ example: "2012-02-22T02:06:58.147Z"
+ notes:
+ description: >-
+ Free-form textual information associated with the
+ task (i.e. its description).
+ type: string
+ example: Mittens really likes the stuff from Humboldt.
+ num_hearts:
+ description: >-
+ *Deprecated - please use likes instead* The number of users who
+ have hearted this task.
+ type: integer
+ example: 5
+ readOnly: true
+ num_likes:
+ description: The number of users who have liked this task.
+ type: integer
+ example: 5
+ readOnly: true
+ num_subtasks:
+ description: >
+ [Opt
+ In](/docs/inputoutput-options).
+ The number of subtasks on this task.
+ type: integer
+ example: 3
+ readOnly: true
+ start_at:
+ description: >-
+ Date and time on which work begins for the task, or null if the task
+ has no start time. This takes an ISO 8601 date string in UTC
+ and should not be used together with `start_on`.
+
+ *Note: `due_at` must be present in the request when
+ setting or unsetting the `start_at` parameter.*
+ type: string
+ nullable: true
+ format: date
+ example: "2019-09-14"
+ start_on:
+ description: >-
+ The day on which work begins for the task , or null if the task
+ has no start date. This takes a date with `YYYY-MM-DD` format and
+ should not be used together with `start_at`.
+
+ *Note: `due_on` or `due_at` must be present in the request when
+ setting or unsetting the `start_on` parameter.*
+ type: string
+ nullable: true
+ format: date
+ example: "2019-09-14"
+ actual_time_minutes:
+ description: >-
+ This value represents the sum of all the Time Tracking entries in
+ the Actual Time field on a given Task. It is represented as a nullable
+ long value.
+ type: number
+ example: 200
+ readOnly: true
+ nullable: true
+ assignee:
+ allOf:
+ - $ref: "#/components/schemas/UserCompact"
+ - type: object
+ nullable: true
+ assignee_section:
+ allOf:
+ - $ref: "#/components/schemas/SectionCompact"
+ - type: object
+ nullable: true
+ - description: >-
+ The *assignee section* is a subdivision of a project that groups
+ tasks together in the assignee's "My Tasks" list. It can either
+ be a
+ header above a list of tasks in a list view or a column in a board
+ view of "My Tasks."
+
+ The `assignee_section` property will be returned in the response
+ only
+ if the request was sent by the user who is the assignee of the
+ task.
+ Note that you can only write to `assignee_section` with the gid
+ of an
+ existing section visible in the user's "My Tasks" list.
+ custom_fields:
+ description: >-
+ Array of custom field values applied to the task. These
+ represent the custom field values recorded on this project for a
+ particular custom field. For example, these custom field values
+ will contain an `enum_value` property for custom fields of type
+ `enum`, a `text_value` property for custom fields of type
+ `text`, and so on. Please note that the `gid` returned on each
+ custom field value *is identical* to the `gid` of the custom field,
+ which allows referencing the custom field metadata through the
+ `/custom_fields/custom_field-gid` endpoint.
+ type: array
+ items:
+ $ref: "#/components/schemas/CustomFieldResponse"
+ readOnly: true
+ followers:
+ description: Array of users following this task.
+ type: array
+ readOnly: true
+ items:
+ $ref: "#/components/schemas/UserCompact"
+ parent:
+ allOf:
+ - $ref: "#/components/schemas/TaskCompact"
+ - type: object
+ readOnly: true
+ description: >-
+ The parent of this task, or `null` if this is not a subtask.
+ This property cannot be modified using a PUT request but you
+ can change it with the `setParent` endpoint. You can create
+ subtasks by using the subtasks endpoint.
+ nullable: true
+ projects:
+ description: >-
+ *Create-only.* Array of projects this task is associated with.
+ At task creation time, this array can be used to add the task to
+ many projects at once. After task creation, these associations can
+ be modified using the addProject and removeProject endpoints.
+ type: array
+ readOnly: true
+ items:
+ $ref: "#/components/schemas/ProjectCompact"
+ tags:
+ description: >-
+ Array of tags associated with this task. In order to change tags on
+ an
+ existing task use `addTag` and `removeTag`.
+ type: array
+ readOnly: true
+ items:
+ $ref: "#/components/schemas/TagCompact"
+ example:
+ - gid: "59746"
+ name: Grade A
+ workspace:
+ allOf:
+ - $ref: "#/components/schemas/WorkspaceCompact"
+ - type: object
+ readOnly: true
+ description: >-
+ *Create-only*. The workspace this task is associated with.
+ Once created, task cannot be moved to a different workspace.
+ This attribute can only be specified at creation time.
+ permalink_url:
+ type: string
+ readOnly: true
+ description: >-
+ A url that points directly to the object within Asana.
+ example: https://app.asana.com/0/resource/123456789/list
+ TaskRequest:
+ type: object
+ properties:
+ name:
+ description: The name of the task.
+ type: string
+ example: Bug Task
+ resource_subtype:
+ type: string
+ description: >-
+ The subtype of this resource. Different subtypes retain many of
+ the same fields and behavior, but may render differently in Asana
+ or represent resources with different semantic meaning.
+
+ The resource_subtype `milestone` represent a single moment in
+ time. This means tasks with this subtype cannot have a start_date.
+ enum:
+ - default_task
+ - milestone
+ - section
+ - approval
+ example: default_task
+ approval_status:
+ type: string
+ description: >-
+ *Conditional* Reflects the approval status of this task. This
+ field is kept in sync with `completed`, meaning `pending`
+ translates to false while `approved`, `rejected`, and
+ `changes_requested` translate to true. If you set completed
+ to true, this field will be set to `approved`.
+ enum:
+ - pending
+ - approved
+ - rejected
+ - changes_requested
+ example: pending
+ assignee_status:
+ description: >-
+ *Deprecated* Scheduling status of this task for the user it is assigned
+ to.
+ This field can only be set if the assignee is non-null.
+ Setting this field to "inbox" or "upcoming" inserts it at the top
+ of the section, while the other options will insert at the bottom.
+ type: string
+ enum:
+ - today
+ - upcoming
+ - later
+ - new
+ - inbox
+ example: upcoming
+ completed:
+ description: >-
+ True if the task is currently marked complete, false if not.
+ type: boolean
+ example: false
+ due_at:
+ description: >-
+ The UTC date and time on which this task is due, or null if the
+ task has no due time. This takes an ISO 8601 date string in UTC
+ and should not be used together with `due_on`.
+ type: string
+ format: date
+ example: "2019-09-15"
+ nullable: true
+ due_on:
+ description: >-
+ The localized date on which this task is due, or null if the task
+ has no due date. This takes a date with `YYYY-MM-DD` format and
+ should not be used together with `due_at`.
+ type: string
+ format: date
+ example: "2019-09-15"
+ nullable: true
+ external:
+ description: >-
+ *OAuth Required*. *Conditional*. This field is returned only
+ if external values are set or included by using [Opt In]
+ (/docs/inputoutput-options).
+
+ The external field allows you to store app-specific metadata on
+ tasks, including a gid that can be used to retrieve tasks and a
+ data blob that can store app-specific character strings. Note that
+ you will need to authenticate with Oauth to access or modify this
+ data. Once an external gid is set, you can use the notation
+ `external:custom_gid` to reference your object anywhere in the API
+ where you may use the original object gid. See the page on Custom
+ External Data for more details.
+ type: object
+ properties:
+ gid:
+ type: string
+ example: "1234"
+ data:
+ type: string
+ example: A blob of information.
+ example:
+ gid: my_gid
+ data: A blob of information
+ html_notes:
+ description: >-
+ [Opt
+ In](/docs/inputoutput-options).
+ The notes of the text with formatting as HTML.
+ type: string
+ example: >-
+ Mittens really likes the stuff from
+ Humboldt.
+ liked:
+ description: >-
+ True if the task is liked by the authorized user, false if not.
+ type: boolean
+ example: true
+ notes:
+ description: >-
+ Free-form textual information associated with the
+ task (i.e. its description).
+ type: string
+ example: Mittens really likes the stuff from Humboldt.
+ start_at:
+ description: >-
+ Date and time on which work begins for the task, or null if the task
+ has no start time. This takes an ISO 8601 date string in UTC
+ and should not be used together with `start_on`.
+
+ *Note: `due_at` must be present in the request when
+ setting or unsetting the `start_at` parameter.*
+ type: string
+ nullable: true
+ format: date
+ example: "2019-09-14"
+ start_on:
+ description: >-
+ The day on which work begins for the task , or null if the task
+ has no start date. This takes a date with `YYYY-MM-DD` format and
+ should not be used together with `start_at`.
+
+ *Note: `due_on` or `due_at` must be present in the request when
+ setting or unsetting the `start_on` parameter.*
+ type: string
+ nullable: true
+ format: date
+ example: "2019-09-14"
+ assignee_section:
+ nullable: true
+ type: string
+ description: >-
+ The *assignee section* is a subdivision of a project that groups
+ tasks together in the assignee's "My Tasks" list. It can either be
+ a
+ header above a list of tasks in a list view or a column in a board
+ view of "My Tasks."
+
+ The `assignee_section` property will be returned in the response only
+ if the request was sent by the user who is the assignee of the task.
+ Note that you can only write to `assignee_section` with the gid of
+ an
+ existing section visible in the user's "My Tasks" list.
+ example: "12345"
+ custom_fields:
+ description: >-
+ An object where each key is a Custom Field GID and each value is
+ an enum GID, string, number, object, or array.
+ type: object
+ additionalProperties:
+ type: string
+ description: >-
+ "{custom_field_gid}" => Value (Can be text, number, etc.)
+ example:
+ "5678904321": On Hold
+ "4578152156": Not Started
+ followers:
+ type: array
+ description: >-
+ *Create-Only* An array of strings identifying users. These can
+ either be the string "me", an email, or the gid of a user. In
+ order to change followers on an existing task use `addFollowers`
+ and `removeFollowers`.
+ items:
+ type: string
+ description: >-
+ Gid of a user.
+ example:
+ - "12345"
+ projects:
+ type: array
+ description: >-
+ *Create-Only* Array of project gids. In order to change projects on
+ an
+ existing task use `addProject` and `removeProject`.
+ items:
+ type: string
+ description: >-
+ Gid of a project.
+ example:
+ - "12345"
+ tags:
+ type: array
+ description: >-
+ *Create-Only* Array of tag gids. In order to change tags on an
+ existing task use `addTag` and `removeTag`.
+ items:
+ type: string
+ description: >-
+ Gid of a tag.
+ example:
+ - "12345"
+ TeamCompact:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: task
+ name:
+ description: The name of the team.
+ type: string
+ example: Marketing
+ UserCompact:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: user
+ name:
+ type: string
+ description: >-
+ *Read-only except when same user as requester*. The user’s name.
+ example: Greg Sanchez
+ UserResponse:
+ type: object
+ properties:
+ gid:
+ description: Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: user
+ name:
+ type: string
+ description: >-
+ *Read-only except when same user as requester*. The user’s name.
+ example: Greg Sanchez
+ email:
+ type: string
+ format: email
+ readOnly: true
+ description: The user's email address.
+ example: gsanchez@example.com
+ photo:
+ type: object
+ nullable: true
+ properties:
+ image_21x21:
+ type: string
+ format: uri
+ example: https://...
+ image_27x27:
+ type: string
+ format: uri
+ example: https://...
+ image_36x36:
+ type: string
+ format: uri
+ example: https://...
+ image_60x60:
+ type: string
+ format: uri
+ example: https://...
+ image_128x128:
+ type: string
+ format: uri
+ example: https://...
+ image_1024x1024:
+ type: string
+ format: uri
+ example: https://...
+ readOnly: true
+ description: >-
+ A map of the user’s profile photo in various sizes, or null if no
+ photo is set. Sizes provided are 21, 27, 36, 60, 128, and 1024. All
+ images are in PNG format, except for 1024 (which is in JPEG format).
+ example:
+ image_21x21: https://...
+ image_27x27: https://...
+ image_36x36: https://...
+ image_60x60: https://...
+ image_128x128: https://...
+ image_1024x1024: https://...
+ workspaces:
+ description: |-
+ Workspaces and organizations this user may access.
+
+ Note: The API will only return workspaces and organizations that
+ also contain the authenticated user.
+ readOnly: true
+ type: array
+ items:
+ type: object
+ properties:
+ gid:
+ description: Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: workspace
+ name:
+ description: The name of the workspace.
+ type: string
+ example: My Company Workspace
+ WorkspaceCompact:
+ type: object
+ properties:
+ gid:
+ description: >-
+ Globally unique identifier of the resource, as a string.
+ type: string
+ readOnly: true
+ example: "12345"
+ resource_type:
+ description: The base type of this resource.
+ type: string
+ readOnly: true
+ example: workspace
+ name:
+ description: The name of the workspace.
+ type: string
+ example: My Company Workspace
+ securitySchemes:
+ personal_access_token:
+ type: http
+ description: >-
+ A personal access token allows access to the api for the user who
+ created it. This should be kept a secret and be treated like a
+ password.
+ scheme: bearer
+ oauth2:
+ type: oauth2
+ description: >-
+ We require that applications designed to access the Asana API on behalf
+ of multiple users implement OAuth 2.0.
+ Asana supports the Authorization Code Grant flow.
+ flows:
+ authorizationCode:
+ authorizationUrl: https://app.asana.com/-/oauth_authorize
+ tokenUrl: https://app.asana.com/-/oauth_token
+ refreshUrl: https://app.asana.com/-/oauth_token
+ scopes:
+ default: >-
+ Provides access to all endpoints documented in our API reference.
+ If no scopes are requested, this scope is assumed by default.
+ openid: >-
+ Provides access to OpenID Connect ID tokens and the OpenID Connect
+ user info endpoint.
+ email: >-
+ Provides access to the user’s email through the OpenID Connect
+ user info endpoint.
+ profile: >-
+ Provides access to the user’s name and profile photo through the
+ OpenID Connect user info endpoint.
+security:
+ - personal_access_token: []
+ - oauth2: []
+tags:
+ - name: Projects
+ description: |-
+ A project represents a prioritized list of tasks in Asana or a board
+ with columns of tasks represented as cards. A project exists in a single
+ workspace or organization and is accessible to a subset of users in that
+ workspace or organization, depending on its permissions.
+
+ Projects in organizations are shared with a single team. Currently, the team
+ of a project cannot be changed via the API. Non-organization
+ workspaces do not have teams and so you should not specify the team of
+ project in a regular workspace.
+
+ Followers of a project are a subset of the members of that project.
+ Followers of a project will receive all updates including tasks
+ created, added and removed from that project. Members of the project
+ have access to and will receive status updates of the project. Adding
+ followers to a project will add them as members if they are not
+ already, removing followers from a project will not affect membership.
+
+ **Note:** You can use certain project endpoints to operate on
+ [user task lists](/reference/user-task-lists) ([My Tasks](https://asana.com/guide/help/fundamentals/my-tasks))
+ by substituting the `{project_gid}` with the `{user_task_list_gid}`. For example, you can perform
+ operations on the custom fields of a user task list by using the following
+ projects endpoints: [Add a custom field to a project](/reference/addcustomfieldsettingforproject),
+ [Remove a custom field from a project](/reference/removecustomfieldsettingforproject) and
+ [Get a project's custom fields](/reference/getcustomfieldsettingsforproject)
+ - name: Tasks
+ description: |-
+ The task is the basic object around which many operations in Asana are
+ centered. In the Asana application, multiple tasks populate the
+ middle pane according to some view parameters, and the set of selected
+ tasks determines the more detailed information presented in the
+ details pane.
+
+ Sections are unique in that they will be included in the `memberships`
+ field of task objects returned in the API when the task is within a
+ section. They can also be used to manipulate the ordering of a task
+ within a project.
+
+ [Queries](/reference/gettasks)
+ return a [compact representation of each task object](/reference/tasks). To
+ retrieve *all* fields or *specific set* of the fields, use
+ [field selectors](/docs/inputoutput-options) to manipulate what data is included in a response.
+ - name: Sections
+ description: >-
+ A section is a subdivision of a project that groups tasks together.
+ It can either be a header above a list of tasks in a list view or a
+ column in a board view of a project.
+
+
+ Sections are largely a shared idiom in Asana’s API for both list and
+ board views of a project regardless of the project’s layout.
+
+
+ The ‘memberships’ property when [getting a task](/reference/gettask)
+ will return the information for the section or the column under
+ ‘section’ in the response.
+ - name: Stories
+ description: >-
+ *See [our forum post](https://forum.asana.com/t/no-more-parsing-story-text-new-fields-on-stories/42924)
+ for more info on when conditional fields are returned.*
+
+
+ A story represents an activity associated with an object in the
+ Asana system. Stories are generated by the system whenever users take
+ actions such as creating or assigning tasks, or moving tasks between
+ projects. "Comments" are also a form of user-generated story.
+ - name: Typeahead
+ description: >-
+ The typeahead search API provides search for objects from a single
+ workspace.
+ - name: Users
+ description: >-
+ A user object represents an account in Asana that can be given access to
+ various workspaces, projects, and tasks.
+externalDocs:
+ description: API Reference
+ url: https://developers.asana.com/reference