{ "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", "CustomTypeResponse", "CustomTypeBase", "CustomTypeCompact", "CustomTypeStatusOptionResponse", "CustomTypeStatusOptionBase", "CustomTypeStatusOptionCompact", "CustomFieldResponse", "CustomFieldCompact", "CustomFieldMembershipCompact", "CustomFieldMembershipResponse", "EnumOption", "EventResponse", "ErrorResponse", "GoalResponse", "GoalCompact", "GoalMembershipCompact", "GoalMembershipBase", "GoalMembershipResponse", "GoalRelationshipResponse", "GoalRelationshipCompact", "GraphExportResponse", "GraphExportCompact", "JobResponse", "JobCompact", "OrganizationExportResponse", "OrganizationExportCompact", "PortfolioMembershipResponse", "PortfolioMembershipCompact", "PortfolioResponse", "PortfolioCompact", "ProjectBriefResponse", "ProjectBriefCompact", "ProjectMembershipCompactResponse", "ProjectMembershipNormalResponse", "ProjectMembershipCompact", "ProjectResponse", "ProjectCompact", "ProjectStatusResponse", "ProjectStatusCompact", "ProjectTemplateCompact", "ProjectTemplateResponse", "RuleTriggerResponse", "ResourceExportResponse", "ResourceExportCompact", "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": "Allocations", "description": "An allocation object represents how much of a resource (e.g. person, team) is dedicated to a specific work object (e.g. project, portfolio) over a specific period of time. The effort value of an allocation object can be a percentage or number of hours." }, { "name": "Access requests", "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval." }, { "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.\n\nThe audit log API allows you to monitor and act upon important security and compliance-related changes. Organizations might use this API endpoint to:\n\n* Set up proactive alerting with a Security Information and Event Management (SIEM) tool like [Splunk](https://asana.com/guide/help/api/splunk)\n* Conduct reactive investigations when a security incident takes place\n* Visualize key domain data in aggregate to identify security trends\n\nNote 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.\n\nOnly [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.\n\nFor 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:\n\n* Modern browsers limit the number of requests that a single web page can\n make at once.\n* Mobile apps will use more battery life to keep the cellular radio on\n when making a series of requests.\n* There is an overhead cost to developing software that can make multiple\n requests in parallel.\n* Some cloud platforms handle parallelism poorly, or disallow it\n entirely.\n\n\nTo make development easier in these use cases, Asana provides a **batch API** that enables developers to perform multiple \u201cactions\u201d by making only a single HTTP request.\n\n#### Making a batch request\n\nTo 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 \u201caction\u201d objects. Each action represents a standard request to an existing endpoint in the Asana API.\n\n**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`.\n\nWhen 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).\n\nThe 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)\n\nThe 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.\n\n#### Rate limiting\n\nThe 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.\n\nIf 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.\n\n#### Restrictions\n\nNot 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:\n\n* Uploading attachments\n* Creating, getting, or deleting organization exports\n* Any SCIM operations\n* 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._\n\nIn 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.\n`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.\n\n#### Characteristics of custom fields\n\n* 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.\n* 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.\n* 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.\n* Tasks have custom field _values_ assigned to them.\n\n#### Types of custom fields\n\nIntegrations using custom fields need to be aware of the six basic types that a custom field can adopt. These types are:\n\n* `text` - an arbitrary, relatively short string of text\n* `number` - a number with a defined level of precision\n* `enum` - a selection of a single option from a defined list of options (i.e., mutually exclusive selections)\n* `multi_enum` - a selection of one or more options from a defined list of options (i.e., mutually inclusive selections)\n* `date` - a reference date with an optional time value\n* `people` - a list of active contributors (i.e., where their relationship to the work is defined in the custom field title)\n\n#### Example use case\n\nConsider 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.\n\nA 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\".\n\nA 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`.\n\n#### Custom fields in the API\n\nThese 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.\n\nText fields are currently limited to 1024 characters. On tasks, their custom field value will have a `text_value` property to represent this field.\n\nNumber 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.\n\n#### Enum fields\n\nEnum 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:\n\n* `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`.\n* `name` - the name of the option (e.g., \"Choice #1\")\n* `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.\n* `color` - a color associated with this choice.\n\nOn 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.\n\n#### Querying an organization for its custom fields\n\nFor 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`.\n\n#### Accessing custom field definitions\n\nThe [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.\n\n#### Associating custom fields with a project or portfolio\n\nA 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).\n\n#### Accessing custom field values on tasks or projects\n\nThe [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.\n\nOf 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.\n\nCustom 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.\n\nCustom fields on projects follow this same pattern.\n\n#### Warning: Program defensively with regards to custom field definitions\n\nAsana 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.\n\nStoring 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.\n\n#### Enabled and disabled values\n\nWhen 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.\n\n_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._\n\nMoving 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.\n\nIn 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.\n\nNote 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.\n\n#### Custom field access control\n\nCustom 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": "Custom types", "description": "A custom type allows distinct categorizations of objects based on their specific purpose or functionality. Structuring objects through a defined custom type provides greater flexibility in work management allowing users to better match the object to their use case" }, { "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.\n\nIn 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).\n\nEstablish 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.\n\nSubsequent requests should always provide the sync token from the immediately preceding call.\n\nSync 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.\n\nWhen 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.\n\nSync tokens always expire after 24 hours, but may expire sooner, depending on load on the service." }, { "name": "Exports", "description": "Exports are a way to download data from Asana. The following types of exports are available:\n* **Graph exports**: Export of data about objects starting from a parent object, such as a team, portfolio, or project.\n* **Resource exports**: Bulk exports of resources such as tasks, teams, and messages for a workspace.\n* **Organization exports**: Exports the complete data of an organization in JSON format. Please refer to [Organization exports](/reference/organization-exports) for more details.\n\n## Graph exports\nA `graph_export` object represents a request to export the\ndata about objects starting from a parent object. Parent object can be a team, portfolio, or project.\n\nTo create an export using this API:\n1. Create a `graph_export` [request](/reference/createGraphExport) and store the ID that is returned.\n2. Request the [jobs](/reference/getjob) endpoint every few minutes, until `status` field contains 'succeeded'.\n3. Download the file located at the URL in the `download_url` field.\n\nExports can take a long time, from several minutes to a few hours for large portfolios.\n\n*Note: Graph exports are only available to accounts of an\n[Enterprise](https://asana.com/enterprise)/Enterprise+ organization.*\n\n## Resource exports\nA `resource_export` object represents a request to bulk export resources for a workspace.\nTo create an export using this API:\n1. Create a `resource_export` [request](/reference/createResourceExport) and store the job ID that is returned.\n2. Request the [jobs](/reference/getjob) endpoint at some interval, until `status` field contains 'succeeded' and a `download_url` is available.\n3. Download the file located at the URL in the `download_url` field.\n\nExports can take a long time, from several minutes to a few hours for large workspaces.\n\n*Note: Resource exports are only available to [Service Accounts](https://asana.com/guide/help/premium/service-accounts)\nfrom an Enterprise+ organization or an organization with the Compliance Management Add-on." }, { "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, a task, 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.\n\nOnly the creator of the duplication process can access the duplication status of the new object.\n\n*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": "Memberships", "description": "A membership object represents the relationship between a team or user and an object in Asana. Currently, the\nsupported types of memberships are for goals, projects, and portfolios. For example, a project membership\ncan be used to add a user to a project." }, { "name": "Organization exports", "description": "An `organization_export` object represents a request to export the complete data of an organization in JSON format.\n\nTo export an organization using this API:\n\n* Create an `organization_export`\n [request](/reference/createorganizationexport)\n and store the ID that is returned.\n* Request the `organization_export` every few minutes, until the\n `state` field contains \u2018finished\u2019.\n* 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\n for large organizations.\n\n\n*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).\nPortfolios have some restrictions on size. Each portfolio has a max of 1500 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.\n\nProjects 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.\n\nFollowers 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.\n\n**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.\n\nPlease 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 \u201ccomment-only\u201d projects in Asana, a user\u2019s 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)*\n\nA project status is an update on the progress of a particular project,\nand is sent out to all project followers when created. These updates\ninclude both text describing the update and a color code intended to\nrepresent the overall state of the project: \"green\" for projects that\nare on track, \"yellow\" for projects at risk, \"red\" for projects that\nare behind, and \"blue\" for projects on hold.\n\nProject 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\nwith a predefined setup, which may include tasks, sections, rules, etc.\nIt simplifies the process of running a workflow that involves a similar\nset of work every time.\n\n\nProject templates in organizations are shared with a single team. Currently, the\nteam of a project template cannot be changed via the API." }, { "name": "Reactions", "description": "A reaction is an object that represents a user's emoji reaction on a status update, comment, task completion, or attachment." }, { "name": "Rules", "description": "[Asana rules](https://help.asana.com/s/article/rules?language=en_US) allow you to automate common patterns\nand workflows in Asana. Rules comprise triggers that will automatically perform actions. For example, you\ncan create a rule to automatically assign a task (action) when a due date is set (trigger).\n\nTo support cross-application workflows, the API supports\n[incoming web requests](https://developers.asana.com/docs/incoming-web-requests) as a generic trigger to\nconnect external applications to Asana through rules. This API allows users to set up workflows outside\nof Asana that can perform operations on data within Asana." }, { "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.\n\nSections are largely a shared idiom in Asana\u2019s API for both list and board views of a project regardless of the project\u2019s layout.\n\nThe \u2018memberships\u2019 property when [getting a task](/reference/gettask) will return the information for the section or the column under \u2018section\u2019 in the response." }, { "name": "SSPM", "description": "SSPM (SaaS Security Posture Management) is a set of APIs which allows centralized inspection and management of a customer's deployed SaaS apps via an SSPM provider." }, { "name": "Status updates", "description": "A status update is an update on the progress of a particular object,\nand is sent out to all followers when created. These updates\ninclude both text describing the update and a `status_type` intended to\nrepresent the overall state of the project. These include: `on_track` for projects that\nare on track, `at_risk` for projects at risk, `off_track` for projects that\nare behind, and `on_hold` for projects on hold.\n\nStatus 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.*\n\nA 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.\n\nTags 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.\n\nSections 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.\n\n[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": "Task templates", "description": "A task template is an object that allows new tasks to be created with a predefined setup, which may include followers, dependencies, custom fields, etc. It simplifies the process of running a workflow that involves a similar set of work every time.\nTask templates are contained within a single project." }, { "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": "Time tracking entries", "description": "Asana\u2019s native time tracking feature allows you to estimate the time needed to complete a task, as well as record the actual time spent." }, { "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.\n\nLike 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.).\n\nFor 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.\n\nAn *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.\n\nOver 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.\nSome 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.\nThe 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 \u201cpretty\u201d output.\nProvides the response in a \u201cpretty\u201d 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.\nThe number of objects to return per page. The value must be between 1 and 100.", "example": 50, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, "offset": { "name": "offset", "in": "query", "description": "Offset token.\nAn 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.\n*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 }, "access_request_gid": { "name": "access_request_gid", "in": "path", "description": "Globally unique identifier for the access request.", "required": true, "schema": { "type": "string" }, "example": "12345", "x-env-variable": "access_request" }, "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" }, "custom_id": { "name": "custom_id", "in": "path", "description": "Generated custom ID for a task.", "required": true, "schema": { "type": "string" }, "example": "EX-1" }, "custom_type_gid": { "name": "custom_type_gid", "in": "path", "description": "Globally unique identifier for the custom type.", "required": true, "schema": { "type": "string" }, "example": "12345" }, "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_query_param": { "name": "project", "in": "query", "description": "Globally unique identifier for the project, which is used as a filter when retrieving all custom types.", "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_update_path_gid": { "name": "status_update_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" }, "rule_trigger_path_gid": { "name": "rule_trigger_gid", "in": "path", "required": true, "description": "The ID of the incoming web request trigger. This value is a path parameter that is automatically generated for the API endpoint.", "schema": { "type": "string" }, "example": "12345", "x-env-variable": "rule" }, "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" }, "target_query_param": { "name": "target", "in": "query", "description": "Globally unique identifier for the target object.", "required": true, "schema": { "type": "string" }, "example": "1331", "x-env-variable": "target" }, "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" }, "task_template_path_gid": { "name": "task_template_gid", "in": "path", "description": "Globally unique identifier for the task template.", "required": true, "schema": { "type": "string" }, "example": "1331", "x-env-variable": "task_template" }, "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.\nRefer 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.\nThis 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*.\n", "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.\n", "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" }, "allocation_path_gid": { "name": "allocation_gid", "in": "path", "description": "Globally unique identifier for the allocation.", "required": true, "schema": { "type": "string" }, "example": "77688", "x-env-variable": "allocation" } }, "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\u2019s 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": { "AllocationBase": { "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": "allocation", "x-insert-after": "gid" }, "start_date": { "type": "string", "format": "date", "description": "The localized day on which the allocation starts.", "example": "2024-02-28" }, "end_date": { "type": "string", "format": "date", "description": "The localized day on which the allocation ends.", "example": "2024-02-28" }, "effort": { "type": "object", "nullable": true, "description": "The amount of time associated with the allocation, represented as a percentage or number of hours", "properties": { "type": { "type": "string", "description": "The units used for tracking effort on an allocation, either \"hours\" or \"percent\".", "enum": [ "hours", "percent" ] }, "value": { "type": "number", "description": "The numeric effort value on the allocation.", "example": 50 } } } } }, "AllocationResponse": { "allOf": [ { "$ref": "#/components/schemas/AllocationBase" }, { "type": "object", "properties": { "assignee": { "allOf": [ { "$ref": "#/components/schemas/UserCompact" }, { "type": "object", "description": "The user or placeholder assigned to the allocation.", "properties": { "name": { "type": "string", "description": "The name of allocation resource.", "example": "Greg Sanchez" } } } ] }, "created_by": { "$ref": "#/components/schemas/UserCompact", "type": "object", "description": "The user who created the allocation." }, "parent": { "$ref": "#/components/schemas/ProjectCompact", "type": "object", "description": "The project the allocation is on." }, "resource_subtype": { "description": "The subtype of the allocation.", "type": "string", "example": "project_allocation" } } } ] }, "AllocationRequest": { "allOf": [ { "$ref": "#/components/schemas/AllocationBase" }, { "type": "object", "properties": { "assignee": { "type": "string", "description": "Globally unique identifier for the user or placeholder assigned to the allocation." }, "parent": { "type": "string", "description": "Globally unique identifier for the project the allocation is on." } } } ] }, "AddCustomFieldSettingRequest": { "type": "object", "required": [ "custom_field" ], "properties": { "custom_field": { "oneOf": [ { "type": "string", "description": "The custom field to associate with this container.", "example": "14916" }, { "$ref": "#/components/schemas/CustomFieldCreateRequest" } ] }, "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": { "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" }, "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": { "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.", "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": "attachment", "x-insert-after": "gid" }, "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", "required": [ "parent" ], "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.\n", "type": "string", "example": "external", "enum": [ "asana", "dropbox", "gdrive", "onedrive", "box", "vimeo", "external" ] }, "file": { "description": "Required for `asana` attachments.\n", "type": "string", "format": "binary" }, "parent": { "description": "Required identifier of the parent task, project, or project_brief, as a string.\n", "type": "string" }, "url": { "description": "The URL of the external resource being attached. Required for attachments of type `external`.\n", "type": "string" }, "name": { "description": "The name of the external resource being attached. Required for attachments of type `external`.\n", "type": "string" }, "connect_to_app": { "description": "*Optional*. Only relevant for external attachments with a parent task.\nA boolean indicating whether the current app should be connected with\nthe attachment for the purposes of showing an app components widget.\nRequires the app to have been added to a project the parent task is in.\nThis property can only be set if an OAuth token is used to authenticate the request.\n\nCriteria for displaying app widget:\n1. An OAuth token must be used to authenticate the request\n2. The app needs to have its `widget_metadata_url` configured in the developer console\n3. The task the attachment is being attached to must be in a project with the app installed", "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.\n*Note:* May be null if the attachment is hosted by [Box](https://www.box.com/) and will be null if the attachment is a Video Message hosted by [Vimeo](https://vimeo.com/). If present, this URL may only be valid for two minutes from the time of retrieval. You should avoid persisting this URL somewhere and just refresh it on demand to ensure you do not keep stale URLs.", "type": "string", "format": "uri", "readOnly": true, "nullable": true, "example": "https://s3.amazonaws.com/assets/123/Screenshot.png" }, "permanent_url": { "description": "A stable URL for accessing the attachment through the Asana web application. This URL redirects to the file download location (e.g., an S3 link) if the user is authenticated and authorized to view the parent object (e.g., a task). Unauthorized users will receive a `403 Forbidden` response. This link is persistent and does not expire, but requires an active session to resolve.", "type": "string", "format": "uri", "readOnly": true, "nullable": true, "example": "https://app.asana.com/app/asana/-/get_asset?asset_id=1234567890" }, "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", "nullable": true, "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.\n\nEvery audit log event is comprised of an `event_type`, `actor`, `resource`, and `context`. Some events will include additional metadata about the event under `details`. See our [currently supported list of events](/docs/audit-log-events#supported-audit-log-events) for more details.", "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": { "$ref": "#/components/schemas/AuditLogEventActor" }, "resource": { "$ref": "#/components/schemas/AuditLogEventResource" }, "details": { "$ref": "#/components/schemas/AuditLogEventDetails" }, "context": { "$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.\nCan 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.\nCan 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.\nOnly 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.\nOnly present if the `api_authentication_method` is `oauth`.", "type": "string" }, "rule_name": { "description": "The name of the automation rule that initiated the event.", "type": "string", "example": "When Task is added to this project" }, "on_behalf_of_user_id": { "description": "The ID of the user who requested a change via support.", "type": "integer", "example": 12345 } } }, "AuditLogEventDetails": { "description": "Event specific details. The schema will vary depending on the `event_type`.", "type": "object", "properties": { "old_value": { "description": "The previous value of the field that was modified in the audited event.", "type": "string", "nullable": true }, "new_value": { "description": "The new value after the modification in the audited event.", "type": "string", "nullable": true }, "group": { "description": "The division or organizational unit where the event occurred. Primarily used to scope role change events (e.g., `user_division_admin_role_changed`), but may appear in other contexts involving group-level changes.", "type": "object", "additionalProperties": true } }, "additionalProperties": true }, "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", "nullable": true, "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\u2019s 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. \u201cPretty\u201d 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` or `multi_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.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.\nThe identifier format will always have a precision of 0.", "type": "integer", "example": 2 }, "format": { "description": "The format of this custom field.", "type": "string", "enum": [ "currency", "identifier", "percentage", "custom", "duration", "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", "nullable": true, "enum": [ "prefix", "suffix", null ], "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", null ], "example": "priority" } } } ] }, "CustomFieldCompact": { "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.\n\nUsers in Asana can [lock custom fields](https://asana.com/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code `403 Forbidden`.", "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": "custom_field", "x-insert-after": "gid" }, "name": { "description": "The name of the custom field.", "type": "string", "example": "Status" }, "type": { "description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n", "type": "string", "readOnly": true, "enum": [ "text", "enum", "multi_enum", "number", "date", "people" ] }, "enum_options": { "description": "*Conditional*. Only relevant for custom fields of type `enum` or `multi_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*. This field applies only to [custom field values](/docs/custom-fields-guide#/accessing-custom-field-values-on-tasks-or-projects) and is not available for [custom field definitions](/docs/custom-fields-guide#/accessing-custom-field-definitions).\nDetermines if the custom field is enabled or not. For more details, see the [Custom Fields documentation](/docs/custom-fields-guide#/enabled-and-disabled-values).", "type": "boolean", "readOnly": true, "example": true }, "representation_type": { "description": "This field tells the type of the custom field.", "type": "string", "example": "number", "readOnly": true, "enum": [ "text", "enum", "multi_enum", "number", "date", "people", "formula", "custom_id" ] }, "id_prefix": { "description": "This field is the unique custom ID string for the custom field.", "type": "string", "nullable": true, "example": "ID" }, "input_restrictions": { "description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.", "type": "array", "items": { "type": "string" }, "example": "task" }, "is_formula_field": { "description": "*Conditional*. This flag describes whether a custom field is a formula custom field.", "type": "boolean", "example": false }, "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", "nullable": true, "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", "nullable": true, "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", "nullable": true, "example": 5.2 }, "text_value": { "description": "*Conditional*. This string is the value of a `text` custom field.", "type": "string", "nullable": true, "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" ] }, "reference_value": { "description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of GIDs reflects the objects to be written to a `reference` custom field. Note that *write* operations will replace existing objects (if any) in the custom field with the objects specified in this array.", "type": "array", "items": { "type": "string", "description": "The GID of an object." }, "example": [ "12345" ] } } } ] }, "CustomFieldCreateRequest": { "allOf": [ { "$ref": "#/components/schemas/CustomFieldRequest" }, { "type": "object", "required": [ "resource_subtype" ], "properties": { "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", "reference" ] } } } ] }, "CustomFieldResponse": { "allOf": [ { "$ref": "#/components/schemas/CustomFieldBase" }, { "type": "object", "properties": { "representation_type": { "description": "This field tells the type of the custom field.", "type": "string", "example": "number", "readOnly": true, "enum": [ "text", "enum", "multi_enum", "number", "date", "people", "formula", "custom_id", "reference" ] }, "id_prefix": { "description": "This field is the unique custom ID string for the custom field.", "type": "string", "nullable": true, "example": "ID" }, "input_restrictions": { "description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.", "type": "array", "items": { "type": "string" }, "example": "task" }, "is_formula_field": { "description": "*Conditional*. This flag describes whether a custom field is a formula custom field.", "type": "boolean", "example": false }, "is_value_read_only": { "description": "*Conditional*. This flag describes whether a custom field is read only.", "type": "boolean", "example": false }, "created_by": { "allOf": [ { "$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" } }, "reference_value": { "description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of objects reflects the values of a `reference` custom field.", "type": "array", "items": { "$ref": "#/components/schemas/AsanaNamedResource" } }, "privacy_setting": { "description": "The privacy setting of the custom field. *Note: Administrators in your organization may restrict the values of `privacy_setting`.*", "type": "string", "enum": [ "public_with_guests", "public", "private" ], "example": "public_with_guests" }, "default_access_level": { "description": "The default access level when inviting new members to the custom field. This isn't applied when the `privacy_setting` is `private`, or the user is a guest. For local fields in a project or portfolio, the user must additionally have permission to modify the container itself.", "type": "string", "enum": [ "admin", "editor", "user" ], "example": "user" }, "resource_subtype": { "description": "The type of the custom field. Must be one of the given values.\n", "type": "string", "readOnly": true, "example": "text", "enum": [ "text", "enum", "multi_enum", "number", "date", "people", "reference" ] } } } ] }, "CustomFieldSettingBase": { "$ref": "#/components/schemas/CustomFieldSettingCompact" }, "CustomFieldSettingCompact": { "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.", "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": "custom_field_setting", "x-insert-after": "gid" } } }, "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 } ] } } } ] }, "CustomTypeBase": { "$ref": "#/components/schemas/CustomTypeCompact" }, "CustomTypeCompact": { "description": "Custom Types extend the types of Asana Objects, currently only Custom Tasks are supported.", "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": "custom_type", "x-insert-after": "gid" }, "name": { "type": "string", "description": "The name of the custom type.", "example": "Bug ticket" } } }, "CustomTypeResponse": { "allOf": [ { "$ref": "#/components/schemas/CustomTypeBase" }, { "type": "object", "properties": { "status_options": { "type": "array", "nullable": true, "description": "The available options for the custom type.", "items": { "$ref": "#/components/schemas/CustomTypeStatusOptionResponse" } } } } ] }, "CustomTypeStatusOptionBase": { "$ref": "#/components/schemas/CustomTypeStatusOptionCompact" }, "CustomTypeStatusOptionCompact": { "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": "custom_type_status_option", "x-insert-after": "gid" }, "name": { "type": "string", "description": "The name of the custom type status option.", "example": "Solution pending" } } }, "CustomTypeStatusOptionResponse": { "allOf": [ { "$ref": "#/components/schemas/CustomTypeStatusOptionBase" }, { "type": "object", "properties": { "completion_state": { "description": "The completion state the custom type status option corresponds to, all custom types must have one \u2018Incomplete\u2019 and \u2018Complete\u2019 status option.", "type": "string", "example": "Incomplete", "nullable": true }, "enabled": { "description": "Whether or not the custom type status option is a selectable value for the custom type.", "type": "boolean", "example": true, "nullable": true }, "color": { "description": "The color associated with the custom type status option. Defaults to \u2018none\u2019.", "type": "string", "example": "blue", "nullable": 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": { "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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.", "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": "enum_option", "x-insert-after": "gid" }, "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\noccur for a wide range of reasons. In all cases, the API should return\nan HTTP Status Code that indicates the nature of the failure,\nwith a response body in JSON format containing additional information.\n\n\nIn the event of a server error the response body will contain an error\nphrase. These phrases are automatically generated using the\n[node-asana-phrase\nlibrary](https://github.com/Asana/node-asana-phrase) and can be used by\nAsana support to quickly look up the incident that caused the server\nerror.", "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\nobserved by an event subscription or delivered asynchronously to\nthe target location of an active webhook.\n\nThe event may be triggered by a different `user` than the\nsubscriber. For example, if user A subscribes to a task and user B\nmodified it, the event's user will be user B. Note: Some events\nare generated by the system, and will have `null` as the user. API\nconsumers should make sure to handle this case.\n\nThe `resource` that triggered the event may be different from the one\nthat the events were requested for or the webhook is subscribed to. For\nexample, a subscription to a project will contain events for tasks\ncontained within the project.\n\n**Note:** pay close attention to the relationship between the fields\n`Event.action` and `Event.change.action`.\n`Event.action` represents the action taken on the resource\nitself, and `Event.change.action` represents how the information\nwithin the resource's fields have been modified.\n\nFor instance, consider these scenarios:\n\n\n* When at task is added to a project, `Event.action` will be\n`added`, `Event.parent` will be an object with the `id` and\n`type` of the project, and there will be no `change` field.\n\n\n* When an assignee is set on the task, `Event.parent` will be\n`null`, `Event.action` will be `changed`,\n`Event.change.action` will be `changed`, and `new_value` will\nbe an object with the user's `id` and `type`.\n\n\n* When a collaborator is added to the task, `Event.parent` will\nbe `null`, `Event.action` will be `changed`,\n`Event.change.action` will be `added`, and `added_value` will be\nan 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 value of the event's `change.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 value of the event's `change.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 value of the event's `change.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/task/portfolio gid to add as supporting work for a goal", "type": "string", "example": "1331" } } }, "GoalBase": { "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": "goal", "x-insert-after": "gid" }, "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 }, "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\u2019s goals) or not. If it isn\u2019t a workspace-level goal, it is a team-level goal, and is associated with the goal\u2019s team.", "example": true }, "liked": { "type": "boolean", "description": "True if the goal is liked by the authorized user, false if not.", "example": false } } }, "GoalCompact": { "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": "goal", "x-insert-after": "gid" }, "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": { "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" }, "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.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.", "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, projects, or tasks, 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", "task_completion", "external" ], "example": "manual" }, "is_custom_weight": { "description": "*Conditional*. Only relevant if `metric.progress_source` is one of `subgoal_progress`, `project_task_completion`, `project_milestone_completion`, or `task_completion`. If true, we use the supporting object's custom weight to calculate the goal's progress. If false, we treat all supporting objects as equally weighted", "type": "boolean", "example": false } } }, "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, task, 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, task, 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": "Defines how much the supporting goal\u2019s progress contributes to the parent goal\u2019s overall progress. When used with automatically calculated [Goal Metrics](/reference/creategoalmetric) (such as `progress_source = subgoal_progress`), this value must be greater than 0 for the subgoal to count toward the parent goal\u2019s progress.\nAccepts a number between 0 and 1 (inclusive). Defaults to `0`.", "type": "number", "example": 0 } } }, "GoalMetricCurrentValueRequest": { "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" }, "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" } } }, "GoalRequestBase": { "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" }, "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 } } } ] }, "GoalRequest": { "allOf": [ { "$ref": "#/components/schemas/GoalRequestBase" }, { "type": "object", "properties": { "followers": { "type": "array", "items": { "type": "string", "description": "The `gid` of a user." }, "example": [ "12345" ] } } } ] }, "GoalUpdateRequest": { "allOf": [ { "$ref": "#/components/schemas/GoalRequestBase" }, { "type": "object", "properties": { "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`.\n*Note* you can only write to this property if `metric` is set.", "example": "green", "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": { "allOf": [ { "$ref": "#/components/schemas/StatusUpdateCompact" }, { "description": "The latest `status_update` posted to this goal.", "nullable": true } ] }, "status": { "type": "string", "readOnly": true, "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`.\n*Note* you can only write to this property if `metric` is set.", "example": "green", "nullable": true } } } ] }, "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": { "description": "A *goal relationship* is an object representing the relationship between a goal and another goal, a project, a task, or a portfolio.", "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": "goal_relationship", "x-insert-after": "gid" }, "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, task, portfolio, or goal." } ] }, "contribution_weight": { "description": "The weight that the supporting resource's progress contributes to the supported goal's progress. This can be 0, 1, or any value in between.", "type": "number", "example": 1.0 } } }, "GoalRelationshipRequest": { "allOf": [ { "$ref": "#/components/schemas/GoalRelationshipBase" }, { "type": "object" } ] }, "GoalRelationshipResponse": { "allOf": [ { "$ref": "#/components/schemas/GoalRelationshipBase" }, { "type": "object" } ] }, "JobBase": { "$ref": "#/components/schemas/JobCompact" }, "JobCompact": { "description": "A *job* is an object representing a process that handles asynchronous work.", "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": "job", "x-insert-after": "gid" }, "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.", "type": "string", "enum": [ "not_started", "in_progress", "succeeded", "failed" ], "readOnly": true, "example": "in_progress" }, "new_project": { "$ref": "#/components/schemas/ProjectCompact" }, "new_task": { "allOf": [ { "$ref": "#/components/schemas/TaskCompact" }, { "type": "object", "nullable": true } ] }, "new_project_template": { "$ref": "#/components/schemas/ProjectTemplateCompact" }, "new_graph_export": { "$ref": "#/components/schemas/GraphExportCompact" }, "new_resource_export": { "$ref": "#/components/schemas/ResourceExportCompact" } } }, "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": { "description": "A *member* object represents either a team or user.", "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": { "type": "string", "description": "The type of the member (team or user)", "example": "user" }, "name": { "type": "string", "description": "The name of the member", "example": "Greg Sanchez" } } }, "MembershipCompact": { "anyOf": [ { "$ref": "#/components/schemas/GoalMembershipCompact" }, { "$ref": "#/components/schemas/ProjectMembershipCompactResponse" }, { "$ref": "#/components/schemas/PortfolioMembershipCompactResponse" }, { "$ref": "#/components/schemas/CustomFieldMembershipCompact" } ] }, "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" ] } }, "NextPage": { "type": "object", "nullable": true, "description": "*Conditional*. This property is only present when a limit query parameter is provided in the request. When making a paginated request, the API will return a number of results as specified by the limit parameter. If more results exist, then the response will contain a next_page attribute, which will include an offset, a relative path attribute, and a full uri attribute. If there are no more pages available, next_page will be null and no offset will be provided. Note that an offset token will expire after some time, as data may have changed.", "properties": { "offset": { "type": "string", "readOnly": true, "description": "Pagination offset for the request.", "example": "eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9" }, "path": { "type": "string", "readOnly": true, "description": "A relative path containing the query parameters to fetch for next_page", "example": "/tasks/12345/attachments?limit=2&offset=eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9" }, "uri": { "type": "string", "format": "uri", "readOnly": true, "description": "A full uri containing the query parameters to fetch for next_page", "example": "https://app.asana.com/api/1.0/tasks/12345/attachments?limit=2&offset=eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9" } } }, "OrganizationExportBase": { "$ref": "#/components/schemas/OrganizationExportCompact" }, "OrganizationExportCompact": { "description": "An *organization_export* object represents a request to export the complete data of an Organization in JSON format.", "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": "organization_export", "x-insert-after": "gid" }, "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 retrieve the full export of the organization\nin JSON format. It will be compressed in a gzip (.gz) container.\n\n*Note: May be null if the export is still in progress or\nfailed. If present, this URL may only be valid for 1 hour from\nthe time of retrieval. You should avoid persisting this URL\nsomewhere and rather refresh on demand to ensure you do not keep\nstale URLs.*", "type": "string", "format": "uri", "readOnly": true, "nullable": true, "example": "https://asana-export-us-east-1.s3.us-east-1.amazonaws.com/2563645399633793/domain_export/7588024658887731/download/ domain_export_2563645399633793_7588024658887731_2023018-201726.json.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256& X-Amz-Content-Sha256=xxxxxxxx&X-Amz-Date=xxxxxxxx&X-Amz-Expires=300&X-Amz-Security-Token=xxxxxxxx& X-Amz-Signature=xxxxxxxx&X-Amz-SignedHeaders=host&x-id=GetObject#_=_" }, "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": { "archived": { "description": "[Opt In](/docs/inputoutput-options). True if the portfolio is archived, false if not. Archived portfolios do not show in the UI by default and may be treated differently for queries.", "type": "boolean", "example": false }, "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" }, "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", "nullable": true, "format": "date", "example": "2019-09-14" }, "due_on": { "description": "The day on which this portfolio is due. This takes a date with format YYYY-MM-DD.", "type": "string", "nullable": true, "format": "date", "example": "2019-09-15" }, "default_access_level": { "description": "The default access level when inviting new members to the portfolio", "type": "string", "enum": [ "admin", "editor", "viewer" ], "example": "viewer" } } } ] }, "PortfolioCompact": { "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.\nPortfolios have some restrictions on size. Each portfolio has a max of 1500 items and, like projects, a max of 20 custom fields.", "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": "portfolio", "x-insert-after": "gid" }, "name": { "description": "The name of the portfolio.", "type": "string", "example": "Bug Portfolio" } } }, "PortfolioMembershipBase": { "$ref": "#/components/schemas/PortfolioMembershipCompact" }, "DeprecatedPortfolioMembershipBase": { "$ref": "#/components/schemas/DeprecatedPortfolioMembershipCompact" }, "DeprecatedPortfolioMembershipResponse": { "$ref": "#/components/schemas/DeprecatedPortfolioMembershipBase" }, "DeprecatedPortfolioMembershipCompact": { "description": "This object determines if a user is a member of a portfolio.", "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": "portfolio_membership", "x-insert-after": "gid" }, "portfolio": { "description": "[Opt In](/docs/inputoutput-options). The portfolio the user is a member of.", "$ref": "#/components/schemas/PortfolioCompact" }, "user": { "$ref": "#/components/schemas/UserCompact" }, "access_level": { "description": "Whether the member has admin, editor, or viewer access to the portfolio. Portfolios do not support commenter access yet.", "type": "string", "enum": [ "admin", "editor", "viewer" ], "readOnly": true, "example": "admin" } } }, "PortfolioMembershipCompact": { "description": "This object determines if a user is a member of a portfolio.", "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": "portfolio_membership", "x-insert-after": "gid" }, "parent": { "description": "The portfolio the user is a member of.", "$ref": "#/components/schemas/PortfolioCompact" }, "member": { "description": "Member can be a user or a team.", "$ref": "#/components/schemas/MemberCompact" }, "access_level": { "description": "Whether the member has admin, editor, or viewer access to the portfolio. Portfolios do not support commenter access yet.", "type": "string", "enum": [ "admin", "editor", "viewer" ], "readOnly": true, "example": "admin" } } }, "PortfolioMembershipCompactResponse": { "allOf": [ { "$ref": "#/components/schemas/PortfolioMembershipCompact" }, { "type": "object", "properties": { "resource_type": { "description": "The base type of this resource.", "type": "string", "example": "membership" }, "resource_subtype": { "description": "Type of the membership.", "type": "string", "example": "portfolio_membership" } } } ] }, "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": { "workspace": { "type": "string", "description": "*Create-only*. The workspace or organization that the portfolio belongs to.", "example": "167589" }, "public": { "description": "*Deprecated:* new integrations use `privacy_setting` instead.", "type": "boolean", "deprecated": true, "example": false } } } ] }, "PortfolioUpdateRequest": { "allOf": [ { "$ref": "#/components/schemas/PortfolioBase" }, { "type": "object", "properties": { "custom_fields": { "description": "An object where each key is the GID of a custom field and its corresponding value is either an enum GID, string, number, or object (depending on the custom field type). See the [custom fields guide](/docs/custom-fields-guide) for details on creating and updating custom field values.", "type": "object", "additionalProperties": { "type": "string", "description": "\"{custom_field_gid}\" => Value (can be text, enum GID, a number, etc.). For date, use format \"YYYY-MM-DD\" (e.g., 2019-09-15). For date-time, use ISO 8601 date string in UTC (e.g., 2019-09-15T02:06:58.147Z)." }, "example": { "5678904321": "On Hold", "4578152156": "Not Started" } } } } ] }, "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": "Full object requires scope: custom_fields:read
Full object requires scope: custom_fields:read
Full object requires scope: attachments:read
Full object requires scope: projects:read, project_sections:read
Full object requires scope: time_tracking_entries:read
Full object requires scope: teams:read
Full object requires scope: time_periods:read
attachments:read\n\nGet the full record for a single attachment.",
"tags": [
"Attachments"
],
"operationId": "getAttachment",
"parameters": [
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"connected_to_app",
"created_at",
"download_url",
"host",
"name",
"parent",
"parent.created_by",
"parent.name",
"parent.resource_subtype",
"permanent_url",
"resource_subtype",
"size",
"view_url"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"connected_to_app",
"created_at",
"download_url",
"host",
"name",
"parent",
"parent.created_by",
"parent.name",
"parent.resource_subtype",
"permanent_url",
"resource_subtype",
"size",
"view_url"
]
}
},
"style": "form",
"explode": false
}
],
"responses": {
"200": {
"description": "Successfully retrieved the record for a single attachment.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"allOf": [
{
"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.",
"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": "attachment",
"x-insert-after": "gid"
},
"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"
}
}
},
{
"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.\n*Note:* May be null if the attachment is hosted by [Box](https://www.box.com/) and will be null if the attachment is a Video Message hosted by [Vimeo](https://vimeo.com/). If present, this URL may only be valid for two minutes from the time of retrieval. You should avoid persisting this URL somewhere and just refresh it on demand to ensure you do not keep stale URLs.",
"type": "string",
"format": "uri",
"readOnly": true,
"nullable": true,
"example": "https://s3.amazonaws.com/assets/123/Screenshot.png"
},
"permanent_url": {
"description": "A stable URL for accessing the attachment through the Asana web application. This URL redirects to the file download location (e.g., an S3 link) if the user is authenticated and authorized to view the parent object (e.g., a task). Unauthorized users will receive a `403 Forbidden` response. This link is persistent and does not expire, but requires an active session to resolve.",
"type": "string",
"format": "uri",
"readOnly": true,
"nullable": true,
"example": "https://app.asana.com/app/asana/-/get_asset?asset_id=1234567890"
},
"host": {
"description": "The service hosting the attachment. Valid values are `asana`, `dropbox`, `gdrive`, `box`, and `vimeo`.",
"type": "string",
"readOnly": true,
"example": "dropbox"
},
"parent": {
"allOf": [
{
"description": "The *task* is the basic object around which many operations in Asana are centered.",
"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"
},
"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.\nThe resource_subtype `milestone` represent a single moment in time. This means tasks with this subtype cannot have a start_date.",
"enum": [
"default_task",
"milestone",
"approval"
],
"example": "default_task"
},
"created_by": {
"type": "object",
"readOnly": true,
"description": "[Opt In](/docs/inputoutput-options). A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource.",
"type": "string",
"example": "1111"
},
"resource_type": {
"description": "The type of resource.",
"type": "string",
"example": "user"
}
}
}
}
},
{
"type": "object",
"nullable": true,
"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
}
}
}
]
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"attachments:read"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "attachments:delete\n\nDeletes a specific, existing attachment.\n\nReturns an empty data record.",
"tags": [
"Attachments"
],
"operationId": "deleteAttachment",
"responses": {
"200": {
"description": "Successfully deleted the specified attachment.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"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."
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"attachments:delete"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "attachments:read\n\nReturns the compact records for all attachments on the object.\nThere 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.\n\nNote 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": [
{
"name": "limit",
"in": "query",
"description": "Results per page.\nThe number of objects to return per page. The value must be between 1 and 100.",
"example": 50,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
{
"name": "offset",
"in": "query",
"description": "Offset token.\nAn 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.\n*Note: You can only pass in an offset that was returned to you via a previously paginated request.*",
"example": "eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9",
"schema": {
"type": "string"
}
},
{
"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"
},
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"connected_to_app",
"created_at",
"download_url",
"host",
"name",
"offset",
"parent",
"parent.created_by",
"parent.name",
"parent.resource_subtype",
"path",
"permanent_url",
"resource_subtype",
"size",
"uri",
"view_url"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"connected_to_app",
"created_at",
"download_url",
"host",
"name",
"offset",
"parent",
"parent.created_by",
"parent.name",
"parent.resource_subtype",
"path",
"permanent_url",
"resource_subtype",
"size",
"uri",
"view_url"
]
}
},
"style": "form",
"explode": false
}
],
"responses": {
"200": {
"description": "Successfully retrieved the specified object's attachments.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"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.",
"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": "attachment",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"next_page": {
"type": "object",
"nullable": true,
"description": "*Conditional*. This property is only present when a limit query parameter is provided in the request. When making a paginated request, the API will return a number of results as specified by the limit parameter. If more results exist, then the response will contain a next_page attribute, which will include an offset, a relative path attribute, and a full uri attribute. If there are no more pages available, next_page will be null and no offset will be provided. Note that an offset token will expire after some time, as data may have changed.",
"properties": {
"offset": {
"type": "string",
"readOnly": true,
"description": "Pagination offset for the request.",
"example": "eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
},
"path": {
"type": "string",
"readOnly": true,
"description": "A relative path containing the query parameters to fetch for next_page",
"example": "/tasks/12345/attachments?limit=2&offset=eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
},
"uri": {
"type": "string",
"format": "uri",
"readOnly": true,
"description": "A full uri containing the query parameters to fetch for next_page",
"example": "https://app.asana.com/api/1.0/tasks/12345/attachments?limit=2&offset=eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
}
}
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"attachments:read"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "attachments:write\n\nUpload an attachment.\n\nThis method uploads an attachment on an object and returns the compact\nrecord for the created attachment object. This is possible by either:\n\n- Providing the URL of the external resource being attached, or\n- Downloading the file content first and then uploading it as any other attachment. Note that it is not possible to attach\nfiles from third party services such as Dropbox, Box, Vimeo & Google Drive via the API\n\nThe 100MB size limit on attachments in Asana is enforced on this endpoint.\n\nThis endpoint expects a multipart/form-data encoded request containing the full contents of the file to be uploaded.\n\nRequests made should follow the HTTP/1.1 specification that line\nterminators are of the form `CRLF` or `\\r\\n` outlined\n[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.\n\nFor file names that contain non-ASCII characters, the file name should be URL-encoded. For example, a file named `r\u00e9sum\u00e9.pdf` should be encoded as\n`r%C3%A9sum%C3%A9.pdf` and the `filename` parameter in the `Content-Disposition` header should be set to the encoded file name.\n\nBelow is an example of a cURL request with the `Content-Disposition` header:\n\n```\nexport ASANA_PAT=\"custom_fields:write\n\nCreates a new custom field in a workspace. Every custom field is required\nto be created in a specific workspace, and this workspace cannot be\nchanged once set.\n\nA custom field\u2019s name must be unique within a workspace and not conflict\nwith names of existing task properties such as `Due Date` or `Assignee`.\nA custom field\u2019s type must be one of `text`, `enum`, `multi_enum`, `number`,\n`date`, or `people`.\n\nReturns the full record of the newly created custom field.",
"tags": [
"Custom fields"
],
"operationId": "createCustomField",
"parameters": [
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"asana_created_field",
"created_by",
"created_by.name",
"currency_code",
"custom_label",
"custom_label_position",
"date_value",
"date_value.date",
"date_value.date_time",
"default_access_level",
"description",
"display_value",
"enabled",
"enum_options",
"enum_options.color",
"enum_options.enabled",
"enum_options.name",
"enum_value",
"enum_value.color",
"enum_value.enabled",
"enum_value.name",
"format",
"has_notifications_enabled",
"id_prefix",
"input_restrictions",
"is_formula_field",
"is_global_to_workspace",
"is_value_read_only",
"multi_enum_values",
"multi_enum_values.color",
"multi_enum_values.enabled",
"multi_enum_values.name",
"name",
"number_value",
"people_value",
"people_value.name",
"precision",
"privacy_setting",
"reference_value",
"reference_value.name",
"representation_type",
"resource_subtype",
"text_value",
"type"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"asana_created_field",
"created_by",
"created_by.name",
"currency_code",
"custom_label",
"custom_label_position",
"date_value",
"date_value.date",
"date_value.date_time",
"default_access_level",
"description",
"display_value",
"enabled",
"enum_options",
"enum_options.color",
"enum_options.enabled",
"enum_options.name",
"enum_value",
"enum_value.color",
"enum_value.enabled",
"enum_value.name",
"format",
"has_notifications_enabled",
"id_prefix",
"input_restrictions",
"is_formula_field",
"is_global_to_workspace",
"is_value_read_only",
"multi_enum_values",
"multi_enum_values.color",
"multi_enum_values.enabled",
"multi_enum_values.name",
"name",
"number_value",
"people_value",
"people_value.name",
"precision",
"privacy_setting",
"reference_value",
"reference_value.name",
"representation_type",
"resource_subtype",
"text_value",
"type"
]
}
},
"style": "form",
"explode": false
}
],
"requestBody": {
"description": "The custom field object to create.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"allOf": [
{
"allOf": [
{
"allOf": [
{
"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.\n\nUsers in Asana can [lock custom fields](https://asana.com/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code `403 Forbidden`.",
"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": "custom_field",
"x-insert-after": "gid"
},
"name": {
"description": "The name of the custom field.",
"type": "string",
"example": "Status"
},
"type": {
"description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people"
]
},
"enum_options": {
"description": "*Conditional*. Only relevant for custom fields of type `enum` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"enabled": {
"description": "*Conditional*. This field applies only to [custom field values](/docs/custom-fields-guide#/accessing-custom-field-values-on-tasks-or-projects) and is not available for [custom field definitions](/docs/custom-fields-guide#/accessing-custom-field-definitions).\nDetermines if the custom field is enabled or not. For more details, see the [Custom Fields documentation](/docs/custom-fields-guide#/enabled-and-disabled-values).",
"type": "boolean",
"readOnly": true,
"example": true
},
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"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",
"nullable": true,
"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": [
{
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
},
{
"type": "object",
"nullable": true,
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
}
]
},
"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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"number_value": {
"description": "*Conditional*. This number is the value of a `number` custom field.",
"type": "number",
"nullable": true,
"example": 5.2
},
"text_value": {
"description": "*Conditional*. This string is the value of a `text` custom field.",
"type": "string",
"nullable": true,
"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
}
}
},
{
"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` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"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.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.\nThe identifier format will always have a precision of 0.",
"type": "integer",
"example": 2
},
"format": {
"description": "The format of this custom field.",
"type": "string",
"enum": [
"currency",
"identifier",
"percentage",
"custom",
"duration",
"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",
"nullable": true,
"enum": [
"prefix",
"suffix",
null
],
"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",
null
],
"example": "priority"
}
}
}
]
},
{
"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"
]
},
"reference_value": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of GIDs reflects the objects to be written to a `reference` custom field. Note that *write* operations will replace existing objects (if any) in the custom field with the objects specified in this array.",
"type": "array",
"items": {
"type": "string",
"description": "The GID of an object."
},
"example": [
"12345"
]
}
}
}
]
},
{
"type": "object",
"required": [
"resource_subtype"
],
"properties": {
"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",
"reference"
]
}
}
}
]
}
}
}
}
}
},
"responses": {
"201": {
"description": "Custom field successfully created.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"allOf": [
{
"allOf": [
{
"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.\n\nUsers in Asana can [lock custom fields](https://asana.com/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code `403 Forbidden`.",
"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": "custom_field",
"x-insert-after": "gid"
},
"name": {
"description": "The name of the custom field.",
"type": "string",
"example": "Status"
},
"type": {
"description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people"
]
},
"enum_options": {
"description": "*Conditional*. Only relevant for custom fields of type `enum` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"enabled": {
"description": "*Conditional*. This field applies only to [custom field values](/docs/custom-fields-guide#/accessing-custom-field-values-on-tasks-or-projects) and is not available for [custom field definitions](/docs/custom-fields-guide#/accessing-custom-field-definitions).\nDetermines if the custom field is enabled or not. For more details, see the [Custom Fields documentation](/docs/custom-fields-guide#/enabled-and-disabled-values).",
"type": "boolean",
"readOnly": true,
"example": true
},
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"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",
"nullable": true,
"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": [
{
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
},
{
"type": "object",
"nullable": true,
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
}
]
},
"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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"number_value": {
"description": "*Conditional*. This number is the value of a `number` custom field.",
"type": "number",
"nullable": true,
"example": 5.2
},
"text_value": {
"description": "*Conditional*. This string is the value of a `text` custom field.",
"type": "string",
"nullable": true,
"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
}
}
},
{
"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` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"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.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.\nThe identifier format will always have a precision of 0.",
"type": "integer",
"example": 2
},
"format": {
"description": "The format of this custom field.",
"type": "string",
"enum": [
"currency",
"identifier",
"percentage",
"custom",
"duration",
"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",
"nullable": true,
"enum": [
"prefix",
"suffix",
null
],
"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",
null
],
"example": "priority"
}
}
}
]
},
{
"type": "object",
"properties": {
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id",
"reference"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"is_value_read_only": {
"description": "*Conditional*. This flag describes whether a custom field is read only.",
"type": "boolean",
"example": false
},
"created_by": {
"allOf": [
{
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
},
{
"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": {
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
}
},
"reference_value": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of objects reflects the values of a `reference` custom field.",
"type": "array",
"items": {
"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"
},
"name": {
"description": "The name of the object.",
"type": "string",
"example": "Bug Task"
}
}
}
},
"privacy_setting": {
"description": "The privacy setting of the custom field. *Note: Administrators in your organization may restrict the values of `privacy_setting`.*",
"type": "string",
"enum": [
"public_with_guests",
"public",
"private"
],
"example": "public_with_guests"
},
"default_access_level": {
"description": "The default access level when inviting new members to the custom field. This isn't applied when the `privacy_setting` is `private`, or the user is a guest. For local fields in a project or portfolio, the user must additionally have permission to modify the container itself.",
"type": "string",
"enum": [
"admin",
"editor",
"user"
],
"example": "user"
},
"resource_subtype": {
"description": "The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"example": "text",
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"reference"
]
}
}
}
]
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"custom_fields:write"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "custom_fields:read\n\nGet the complete definition of a custom field\u2019s metadata.\n\nSince custom fields can be defined for one of a number of types, and\nthese types have different data and behaviors, there are fields that are\nrelevant to a particular type. For instance, as noted above, enum_options\nis only relevant for the enum type and defines the set of choices that\nthe enum could represent. The examples below show some of these\ntype-specific custom field definitions.",
"tags": [
"Custom fields"
],
"operationId": "getCustomField",
"parameters": [
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"asana_created_field",
"created_by",
"created_by.name",
"currency_code",
"custom_label",
"custom_label_position",
"date_value",
"date_value.date",
"date_value.date_time",
"default_access_level",
"description",
"display_value",
"enabled",
"enum_options",
"enum_options.color",
"enum_options.enabled",
"enum_options.name",
"enum_value",
"enum_value.color",
"enum_value.enabled",
"enum_value.name",
"format",
"has_notifications_enabled",
"id_prefix",
"input_restrictions",
"is_formula_field",
"is_global_to_workspace",
"is_value_read_only",
"multi_enum_values",
"multi_enum_values.color",
"multi_enum_values.enabled",
"multi_enum_values.name",
"name",
"number_value",
"people_value",
"people_value.name",
"precision",
"privacy_setting",
"reference_value",
"reference_value.name",
"representation_type",
"resource_subtype",
"text_value",
"type"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"asana_created_field",
"created_by",
"created_by.name",
"currency_code",
"custom_label",
"custom_label_position",
"date_value",
"date_value.date",
"date_value.date_time",
"default_access_level",
"description",
"display_value",
"enabled",
"enum_options",
"enum_options.color",
"enum_options.enabled",
"enum_options.name",
"enum_value",
"enum_value.color",
"enum_value.enabled",
"enum_value.name",
"format",
"has_notifications_enabled",
"id_prefix",
"input_restrictions",
"is_formula_field",
"is_global_to_workspace",
"is_value_read_only",
"multi_enum_values",
"multi_enum_values.color",
"multi_enum_values.enabled",
"multi_enum_values.name",
"name",
"number_value",
"people_value",
"people_value.name",
"precision",
"privacy_setting",
"reference_value",
"reference_value.name",
"representation_type",
"resource_subtype",
"text_value",
"type"
]
}
},
"style": "form",
"explode": false
}
],
"responses": {
"200": {
"description": "Successfully retrieved the complete definition of a custom field\u2019s metadata.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"allOf": [
{
"allOf": [
{
"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.\n\nUsers in Asana can [lock custom fields](https://asana.com/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code `403 Forbidden`.",
"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": "custom_field",
"x-insert-after": "gid"
},
"name": {
"description": "The name of the custom field.",
"type": "string",
"example": "Status"
},
"type": {
"description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people"
]
},
"enum_options": {
"description": "*Conditional*. Only relevant for custom fields of type `enum` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"enabled": {
"description": "*Conditional*. This field applies only to [custom field values](/docs/custom-fields-guide#/accessing-custom-field-values-on-tasks-or-projects) and is not available for [custom field definitions](/docs/custom-fields-guide#/accessing-custom-field-definitions).\nDetermines if the custom field is enabled or not. For more details, see the [Custom Fields documentation](/docs/custom-fields-guide#/enabled-and-disabled-values).",
"type": "boolean",
"readOnly": true,
"example": true
},
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"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",
"nullable": true,
"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": [
{
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
},
{
"type": "object",
"nullable": true,
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
}
]
},
"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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"number_value": {
"description": "*Conditional*. This number is the value of a `number` custom field.",
"type": "number",
"nullable": true,
"example": 5.2
},
"text_value": {
"description": "*Conditional*. This string is the value of a `text` custom field.",
"type": "string",
"nullable": true,
"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
}
}
},
{
"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` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"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.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.\nThe identifier format will always have a precision of 0.",
"type": "integer",
"example": 2
},
"format": {
"description": "The format of this custom field.",
"type": "string",
"enum": [
"currency",
"identifier",
"percentage",
"custom",
"duration",
"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",
"nullable": true,
"enum": [
"prefix",
"suffix",
null
],
"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",
null
],
"example": "priority"
}
}
}
]
},
{
"type": "object",
"properties": {
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id",
"reference"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"is_value_read_only": {
"description": "*Conditional*. This flag describes whether a custom field is read only.",
"type": "boolean",
"example": false
},
"created_by": {
"allOf": [
{
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
},
{
"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": {
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
}
},
"reference_value": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of objects reflects the values of a `reference` custom field.",
"type": "array",
"items": {
"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"
},
"name": {
"description": "The name of the object.",
"type": "string",
"example": "Bug Task"
}
}
}
},
"privacy_setting": {
"description": "The privacy setting of the custom field. *Note: Administrators in your organization may restrict the values of `privacy_setting`.*",
"type": "string",
"enum": [
"public_with_guests",
"public",
"private"
],
"example": "public_with_guests"
},
"default_access_level": {
"description": "The default access level when inviting new members to the custom field. This isn't applied when the `privacy_setting` is `private`, or the user is a guest. For local fields in a project or portfolio, the user must additionally have permission to modify the container itself.",
"type": "string",
"enum": [
"admin",
"editor",
"user"
],
"example": "user"
},
"resource_subtype": {
"description": "The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"example": "text",
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"reference"
]
}
}
}
]
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"custom_fields:read"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "custom_fields:write\n\nA 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\nWhen 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.\nA custom field\u2019s `type` cannot be updated.\nAn enum custom field\u2019s `enum_options` cannot be updated with this endpoint. Instead see \u201cWork With Enum Options\u201d for information on how to update `enum_options`.\nLocked custom fields can only be updated by the user who locked the field.\nReturns the complete updated custom field record.",
"tags": [
"Custom fields"
],
"operationId": "updateCustomField",
"parameters": [
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"asana_created_field",
"created_by",
"created_by.name",
"currency_code",
"custom_label",
"custom_label_position",
"date_value",
"date_value.date",
"date_value.date_time",
"default_access_level",
"description",
"display_value",
"enabled",
"enum_options",
"enum_options.color",
"enum_options.enabled",
"enum_options.name",
"enum_value",
"enum_value.color",
"enum_value.enabled",
"enum_value.name",
"format",
"has_notifications_enabled",
"id_prefix",
"input_restrictions",
"is_formula_field",
"is_global_to_workspace",
"is_value_read_only",
"multi_enum_values",
"multi_enum_values.color",
"multi_enum_values.enabled",
"multi_enum_values.name",
"name",
"number_value",
"people_value",
"people_value.name",
"precision",
"privacy_setting",
"reference_value",
"reference_value.name",
"representation_type",
"resource_subtype",
"text_value",
"type"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"asana_created_field",
"created_by",
"created_by.name",
"currency_code",
"custom_label",
"custom_label_position",
"date_value",
"date_value.date",
"date_value.date_time",
"default_access_level",
"description",
"display_value",
"enabled",
"enum_options",
"enum_options.color",
"enum_options.enabled",
"enum_options.name",
"enum_value",
"enum_value.color",
"enum_value.enabled",
"enum_value.name",
"format",
"has_notifications_enabled",
"id_prefix",
"input_restrictions",
"is_formula_field",
"is_global_to_workspace",
"is_value_read_only",
"multi_enum_values",
"multi_enum_values.color",
"multi_enum_values.enabled",
"multi_enum_values.name",
"name",
"number_value",
"people_value",
"people_value.name",
"precision",
"privacy_setting",
"reference_value",
"reference_value.name",
"representation_type",
"resource_subtype",
"text_value",
"type"
]
}
},
"style": "form",
"explode": false
}
],
"requestBody": {
"description": "The custom field object with all updated properties.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"allOf": [
{
"allOf": [
{
"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.\n\nUsers in Asana can [lock custom fields](https://asana.com/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code `403 Forbidden`.",
"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": "custom_field",
"x-insert-after": "gid"
},
"name": {
"description": "The name of the custom field.",
"type": "string",
"example": "Status"
},
"type": {
"description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people"
]
},
"enum_options": {
"description": "*Conditional*. Only relevant for custom fields of type `enum` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"enabled": {
"description": "*Conditional*. This field applies only to [custom field values](/docs/custom-fields-guide#/accessing-custom-field-values-on-tasks-or-projects) and is not available for [custom field definitions](/docs/custom-fields-guide#/accessing-custom-field-definitions).\nDetermines if the custom field is enabled or not. For more details, see the [Custom Fields documentation](/docs/custom-fields-guide#/enabled-and-disabled-values).",
"type": "boolean",
"readOnly": true,
"example": true
},
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"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",
"nullable": true,
"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": [
{
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
},
{
"type": "object",
"nullable": true,
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
}
]
},
"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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"number_value": {
"description": "*Conditional*. This number is the value of a `number` custom field.",
"type": "number",
"nullable": true,
"example": 5.2
},
"text_value": {
"description": "*Conditional*. This string is the value of a `text` custom field.",
"type": "string",
"nullable": true,
"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
}
}
},
{
"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` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"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.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.\nThe identifier format will always have a precision of 0.",
"type": "integer",
"example": 2
},
"format": {
"description": "The format of this custom field.",
"type": "string",
"enum": [
"currency",
"identifier",
"percentage",
"custom",
"duration",
"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",
"nullable": true,
"enum": [
"prefix",
"suffix",
null
],
"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",
null
],
"example": "priority"
}
}
}
]
},
{
"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"
]
},
"reference_value": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of GIDs reflects the objects to be written to a `reference` custom field. Note that *write* operations will replace existing objects (if any) in the custom field with the objects specified in this array.",
"type": "array",
"items": {
"type": "string",
"description": "The GID of an object."
},
"example": [
"12345"
]
}
}
}
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "The custom field was successfully updated.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"allOf": [
{
"allOf": [
{
"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.\n\nUsers in Asana can [lock custom fields](https://asana.com/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code `403 Forbidden`.",
"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": "custom_field",
"x-insert-after": "gid"
},
"name": {
"description": "The name of the custom field.",
"type": "string",
"example": "Status"
},
"type": {
"description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people"
]
},
"enum_options": {
"description": "*Conditional*. Only relevant for custom fields of type `enum` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"enabled": {
"description": "*Conditional*. This field applies only to [custom field values](/docs/custom-fields-guide#/accessing-custom-field-values-on-tasks-or-projects) and is not available for [custom field definitions](/docs/custom-fields-guide#/accessing-custom-field-definitions).\nDetermines if the custom field is enabled or not. For more details, see the [Custom Fields documentation](/docs/custom-fields-guide#/enabled-and-disabled-values).",
"type": "boolean",
"readOnly": true,
"example": true
},
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"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",
"nullable": true,
"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": [
{
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
},
{
"type": "object",
"nullable": true,
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
}
]
},
"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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"number_value": {
"description": "*Conditional*. This number is the value of a `number` custom field.",
"type": "number",
"nullable": true,
"example": 5.2
},
"text_value": {
"description": "*Conditional*. This string is the value of a `text` custom field.",
"type": "string",
"nullable": true,
"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
}
}
},
{
"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` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"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.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.\nThe identifier format will always have a precision of 0.",
"type": "integer",
"example": 2
},
"format": {
"description": "The format of this custom field.",
"type": "string",
"enum": [
"currency",
"identifier",
"percentage",
"custom",
"duration",
"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",
"nullable": true,
"enum": [
"prefix",
"suffix",
null
],
"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",
null
],
"example": "priority"
}
}
}
]
},
{
"type": "object",
"properties": {
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id",
"reference"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"is_value_read_only": {
"description": "*Conditional*. This flag describes whether a custom field is read only.",
"type": "boolean",
"example": false
},
"created_by": {
"allOf": [
{
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
},
{
"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": {
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
}
},
"reference_value": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of objects reflects the values of a `reference` custom field.",
"type": "array",
"items": {
"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"
},
"name": {
"description": "The name of the object.",
"type": "string",
"example": "Bug Task"
}
}
}
},
"privacy_setting": {
"description": "The privacy setting of the custom field. *Note: Administrators in your organization may restrict the values of `privacy_setting`.*",
"type": "string",
"enum": [
"public_with_guests",
"public",
"private"
],
"example": "public_with_guests"
},
"default_access_level": {
"description": "The default access level when inviting new members to the custom field. This isn't applied when the `privacy_setting` is `private`, or the user is a guest. For local fields in a project or portfolio, the user must additionally have permission to modify the container itself.",
"type": "string",
"enum": [
"admin",
"editor",
"user"
],
"example": "user"
},
"resource_subtype": {
"description": "The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"example": "text",
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"reference"
]
}
}
}
]
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"custom_fields:write"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "custom_fields:read\n\nReturns a list of the compact representation of all of the custom fields in a workspace.",
"tags": [
"Custom fields"
],
"operationId": "getCustomFieldsForWorkspace",
"parameters": [
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"asana_created_field",
"created_by",
"created_by.name",
"currency_code",
"custom_label",
"custom_label_position",
"date_value",
"date_value.date",
"date_value.date_time",
"default_access_level",
"description",
"display_value",
"enabled",
"enum_options",
"enum_options.color",
"enum_options.enabled",
"enum_options.name",
"enum_value",
"enum_value.color",
"enum_value.enabled",
"enum_value.name",
"format",
"has_notifications_enabled",
"id_prefix",
"input_restrictions",
"is_formula_field",
"is_global_to_workspace",
"is_value_read_only",
"multi_enum_values",
"multi_enum_values.color",
"multi_enum_values.enabled",
"multi_enum_values.name",
"name",
"number_value",
"offset",
"path",
"people_value",
"people_value.name",
"precision",
"privacy_setting",
"reference_value",
"reference_value.name",
"representation_type",
"resource_subtype",
"text_value",
"type",
"uri"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"asana_created_field",
"created_by",
"created_by.name",
"currency_code",
"custom_label",
"custom_label_position",
"date_value",
"date_value.date",
"date_value.date_time",
"default_access_level",
"description",
"display_value",
"enabled",
"enum_options",
"enum_options.color",
"enum_options.enabled",
"enum_options.name",
"enum_value",
"enum_value.color",
"enum_value.enabled",
"enum_value.name",
"format",
"has_notifications_enabled",
"id_prefix",
"input_restrictions",
"is_formula_field",
"is_global_to_workspace",
"is_value_read_only",
"multi_enum_values",
"multi_enum_values.color",
"multi_enum_values.enabled",
"multi_enum_values.name",
"name",
"number_value",
"offset",
"path",
"people_value",
"people_value.name",
"precision",
"privacy_setting",
"reference_value",
"reference_value.name",
"representation_type",
"resource_subtype",
"text_value",
"type",
"uri"
]
}
},
"style": "form",
"explode": false
}
],
"responses": {
"200": {
"description": "Successfully retrieved all custom fields for the given workspace.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"allOf": [
{
"allOf": [
{
"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.\n\nUsers in Asana can [lock custom fields](https://asana.com/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code `403 Forbidden`.",
"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": "custom_field",
"x-insert-after": "gid"
},
"name": {
"description": "The name of the custom field.",
"type": "string",
"example": "Status"
},
"type": {
"description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people"
]
},
"enum_options": {
"description": "*Conditional*. Only relevant for custom fields of type `enum` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"enabled": {
"description": "*Conditional*. This field applies only to [custom field values](/docs/custom-fields-guide#/accessing-custom-field-values-on-tasks-or-projects) and is not available for [custom field definitions](/docs/custom-fields-guide#/accessing-custom-field-definitions).\nDetermines if the custom field is enabled or not. For more details, see the [Custom Fields documentation](/docs/custom-fields-guide#/enabled-and-disabled-values).",
"type": "boolean",
"readOnly": true,
"example": true
},
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"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",
"nullable": true,
"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": [
{
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
},
{
"type": "object",
"nullable": true,
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
}
]
},
"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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"number_value": {
"description": "*Conditional*. This number is the value of a `number` custom field.",
"type": "number",
"nullable": true,
"example": 5.2
},
"text_value": {
"description": "*Conditional*. This string is the value of a `text` custom field.",
"type": "string",
"nullable": true,
"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
}
}
},
{
"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` or `multi_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": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
},
"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.\nFor percentage format, this may be unintuitive, as a value of 0.25 has a precision of 0, while a value of 0.251 has a precision of 1. This is due to 0.25 being displayed as 25%.\nThe identifier format will always have a precision of 0.",
"type": "integer",
"example": 2
},
"format": {
"description": "The format of this custom field.",
"type": "string",
"enum": [
"currency",
"identifier",
"percentage",
"custom",
"duration",
"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",
"nullable": true,
"enum": [
"prefix",
"suffix",
null
],
"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",
null
],
"example": "priority"
}
}
}
]
},
{
"type": "object",
"properties": {
"representation_type": {
"description": "This field tells the type of the custom field.",
"type": "string",
"example": "number",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"formula",
"custom_id",
"reference"
]
},
"id_prefix": {
"description": "This field is the unique custom ID string for the custom field.",
"type": "string",
"nullable": true,
"example": "ID"
},
"input_restrictions": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of strings reflects the allowed types of objects that can be written to a `reference` custom field value.",
"type": "array",
"items": {
"type": "string"
},
"example": "task"
},
"is_formula_field": {
"description": "*Conditional*. This flag describes whether a custom field is a formula custom field.",
"type": "boolean",
"example": false
},
"is_value_read_only": {
"description": "*Conditional*. This flag describes whether a custom field is read only.",
"type": "boolean",
"example": false
},
"created_by": {
"allOf": [
{
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
},
{
"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": {
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
}
},
"reference_value": {
"description": "*Conditional*. Only relevant for custom fields of type `reference`. This array of objects reflects the values of a `reference` custom field.",
"type": "array",
"items": {
"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"
},
"name": {
"description": "The name of the object.",
"type": "string",
"example": "Bug Task"
}
}
}
},
"privacy_setting": {
"description": "The privacy setting of the custom field. *Note: Administrators in your organization may restrict the values of `privacy_setting`.*",
"type": "string",
"enum": [
"public_with_guests",
"public",
"private"
],
"example": "public_with_guests"
},
"default_access_level": {
"description": "The default access level when inviting new members to the custom field. This isn't applied when the `privacy_setting` is `private`, or the user is a guest. For local fields in a project or portfolio, the user must additionally have permission to modify the container itself.",
"type": "string",
"enum": [
"admin",
"editor",
"user"
],
"example": "user"
},
"resource_subtype": {
"description": "The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"example": "text",
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people",
"reference"
]
}
}
}
]
}
},
"next_page": {
"type": "object",
"nullable": true,
"description": "*Conditional*. This property is only present when a limit query parameter is provided in the request. When making a paginated request, the API will return a number of results as specified by the limit parameter. If more results exist, then the response will contain a next_page attribute, which will include an offset, a relative path attribute, and a full uri attribute. If there are no more pages available, next_page will be null and no offset will be provided. Note that an offset token will expire after some time, as data may have changed.",
"properties": {
"offset": {
"type": "string",
"readOnly": true,
"description": "Pagination offset for the request.",
"example": "eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
},
"path": {
"type": "string",
"readOnly": true,
"description": "A relative path containing the query parameters to fetch for next_page",
"example": "/tasks/12345/attachments?limit=2&offset=eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
},
"uri": {
"type": "string",
"format": "uri",
"readOnly": true,
"description": "A full uri containing the query parameters to fetch for next_page",
"example": "https://app.asana.com/api/1.0/tasks/12345/attachments?limit=2&offset=eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
}
}
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"custom_fields:read"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "custom_fields:write\n\nCreates an enum option and adds it to this custom field\u2019s 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\u2019s list.\nLocked custom fields can only have enum options added by the user who locked the field.\nReturns the full record of the newly created enum option.",
"tags": [
"Custom fields"
],
"operationId": "createEnumOptionForCustomField",
"parameters": [
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"color",
"enabled",
"name"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"color",
"enabled",
"name"
]
}
},
"style": "form",
"explode": false
}
],
"requestBody": {
"description": "The enum option object to create.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"allOf": [
{
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
},
{
"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"
}
}
}
]
}
}
}
}
}
},
"responses": {
"201": {
"description": "Custom field enum option successfully created.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"custom_fields:write"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "custom_fields:write\n\nMoves a particular enum option to be either before or after another specified enum option in the custom field.\nLocked custom fields can only be reordered by the user who locked the field.",
"tags": [
"Custom fields"
],
"operationId": "insertEnumOptionForCustomField",
"parameters": [
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"color",
"enabled",
"name"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"color",
"enabled",
"name"
]
}
},
"style": "form",
"explode": false
}
],
"requestBody": {
"description": "The enum option object to create.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"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"
}
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Custom field enum option successfully reordered.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"custom_fields:write"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "custom_fields:write\n\nUpdates an existing enum option. Enum custom fields require at least one enabled enum option.\nLocked custom fields can only be updated by the user who locked the field.\nReturns the full record of the updated enum option.",
"tags": [
"Custom fields"
],
"operationId": "updateEnumOption",
"parameters": [
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"color",
"enabled",
"name"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"color",
"enabled",
"name"
]
}
},
"style": "form",
"explode": false
}
],
"requestBody": {
"description": "The enum option object to update",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Successfully updated the specified custom field enum.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"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.\n\nYou can add enum options to a custom field by using the `POST /custom_fields/custom_field_gid/enum_options` endpoint.\n\n**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.\n\nOn 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 \u201ctrashing\u201d the enum option in the Asana web app within the \u201cEdit Fields\u201d 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.\n\nEnum 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.\n\nAn enum options list can be reordered with the `POST /custom_fields/custom_field_gid/enum_options/insert` endpoint.",
"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": "enum_option",
"x-insert-after": "gid"
},
"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"
}
}
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"custom_fields:write"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "goals:read\n\n| Field | \nRequired Scope | \n
|---|---|
time_period | \n time_periods:read | \n
custom_field_settings | \n custom_fields:read | \n
Full object requires scope: teams:read
Full object requires scope: time_periods:read
Full object requires scope: teams:read
Full object requires scope: time_periods:read
goals:read\n\nReturns 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": "task",
"in": "query",
"description": "Globally unique identifier for supporting task.",
"schema": {
"type": "string"
},
"example": "78424"
},
{
"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"
},
{
"name": "limit",
"in": "query",
"description": "Results per page.\nThe number of objects to return per page. The value must be between 1 and 100.",
"example": 50,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
{
"name": "offset",
"in": "query",
"description": "Offset token.\nAn 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.\n*Note: You can only pass in an offset that was returned to you via a previously paginated request.*",
"example": "eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9",
"schema": {
"type": "string"
}
},
{
"name": "opt_fields",
"in": "query",
"description": "This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.",
"required": false,
"example": [
"current_status_update",
"current_status_update.resource_subtype",
"current_status_update.title",
"custom_field_settings",
"custom_field_settings.custom_field",
"custom_field_settings.custom_field.asana_created_field",
"custom_field_settings.custom_field.created_by",
"custom_field_settings.custom_field.created_by.name",
"custom_field_settings.custom_field.currency_code",
"custom_field_settings.custom_field.custom_label",
"custom_field_settings.custom_field.custom_label_position",
"custom_field_settings.custom_field.date_value",
"custom_field_settings.custom_field.date_value.date",
"custom_field_settings.custom_field.date_value.date_time",
"custom_field_settings.custom_field.default_access_level",
"custom_field_settings.custom_field.description",
"custom_field_settings.custom_field.display_value",
"custom_field_settings.custom_field.enabled",
"custom_field_settings.custom_field.enum_options",
"custom_field_settings.custom_field.enum_options.color",
"custom_field_settings.custom_field.enum_options.enabled",
"custom_field_settings.custom_field.enum_options.name",
"custom_field_settings.custom_field.enum_value",
"custom_field_settings.custom_field.enum_value.color",
"custom_field_settings.custom_field.enum_value.enabled",
"custom_field_settings.custom_field.enum_value.name",
"custom_field_settings.custom_field.format",
"custom_field_settings.custom_field.has_notifications_enabled",
"custom_field_settings.custom_field.id_prefix",
"custom_field_settings.custom_field.input_restrictions",
"custom_field_settings.custom_field.is_formula_field",
"custom_field_settings.custom_field.is_global_to_workspace",
"custom_field_settings.custom_field.is_value_read_only",
"custom_field_settings.custom_field.multi_enum_values",
"custom_field_settings.custom_field.multi_enum_values.color",
"custom_field_settings.custom_field.multi_enum_values.enabled",
"custom_field_settings.custom_field.multi_enum_values.name",
"custom_field_settings.custom_field.name",
"custom_field_settings.custom_field.number_value",
"custom_field_settings.custom_field.people_value",
"custom_field_settings.custom_field.people_value.name",
"custom_field_settings.custom_field.precision",
"custom_field_settings.custom_field.privacy_setting",
"custom_field_settings.custom_field.reference_value",
"custom_field_settings.custom_field.reference_value.name",
"custom_field_settings.custom_field.representation_type",
"custom_field_settings.custom_field.resource_subtype",
"custom_field_settings.custom_field.text_value",
"custom_field_settings.custom_field.type",
"custom_field_settings.is_important",
"custom_field_settings.parent",
"custom_field_settings.parent.name",
"custom_field_settings.project",
"custom_field_settings.project.name",
"custom_fields",
"custom_fields.date_value",
"custom_fields.date_value.date",
"custom_fields.date_value.date_time",
"custom_fields.display_value",
"custom_fields.enabled",
"custom_fields.enum_options",
"custom_fields.enum_options.color",
"custom_fields.enum_options.enabled",
"custom_fields.enum_options.name",
"custom_fields.enum_value",
"custom_fields.enum_value.color",
"custom_fields.enum_value.enabled",
"custom_fields.enum_value.name",
"custom_fields.id_prefix",
"custom_fields.input_restrictions",
"custom_fields.is_formula_field",
"custom_fields.multi_enum_values",
"custom_fields.multi_enum_values.color",
"custom_fields.multi_enum_values.enabled",
"custom_fields.multi_enum_values.name",
"custom_fields.name",
"custom_fields.number_value",
"custom_fields.representation_type",
"custom_fields.text_value",
"custom_fields.type",
"default_access_level",
"due_on",
"followers",
"followers.name",
"html_notes",
"is_workspace_level",
"liked",
"likes",
"likes.user",
"likes.user.name",
"metric",
"metric.can_manage",
"metric.currency_code",
"metric.current_display_value",
"metric.current_number_value",
"metric.initial_number_value",
"metric.is_custom_weight",
"metric.precision",
"metric.progress_source",
"metric.resource_subtype",
"metric.target_number_value",
"metric.unit",
"name",
"notes",
"num_likes",
"offset",
"owner",
"owner.name",
"path",
"privacy_setting",
"start_on",
"status",
"team",
"team.name",
"time_period",
"time_period.display_name",
"time_period.end_on",
"time_period.period",
"time_period.start_on",
"uri",
"workspace",
"workspace.name"
],
"schema": {
"type": "array",
"items": {
"type": "string",
"enum": [
"current_status_update",
"current_status_update.resource_subtype",
"current_status_update.title",
"custom_field_settings",
"custom_field_settings.custom_field",
"custom_field_settings.custom_field.asana_created_field",
"custom_field_settings.custom_field.created_by",
"custom_field_settings.custom_field.created_by.name",
"custom_field_settings.custom_field.currency_code",
"custom_field_settings.custom_field.custom_label",
"custom_field_settings.custom_field.custom_label_position",
"custom_field_settings.custom_field.date_value",
"custom_field_settings.custom_field.date_value.date",
"custom_field_settings.custom_field.date_value.date_time",
"custom_field_settings.custom_field.default_access_level",
"custom_field_settings.custom_field.description",
"custom_field_settings.custom_field.display_value",
"custom_field_settings.custom_field.enabled",
"custom_field_settings.custom_field.enum_options",
"custom_field_settings.custom_field.enum_options.color",
"custom_field_settings.custom_field.enum_options.enabled",
"custom_field_settings.custom_field.enum_options.name",
"custom_field_settings.custom_field.enum_value",
"custom_field_settings.custom_field.enum_value.color",
"custom_field_settings.custom_field.enum_value.enabled",
"custom_field_settings.custom_field.enum_value.name",
"custom_field_settings.custom_field.format",
"custom_field_settings.custom_field.has_notifications_enabled",
"custom_field_settings.custom_field.id_prefix",
"custom_field_settings.custom_field.input_restrictions",
"custom_field_settings.custom_field.is_formula_field",
"custom_field_settings.custom_field.is_global_to_workspace",
"custom_field_settings.custom_field.is_value_read_only",
"custom_field_settings.custom_field.multi_enum_values",
"custom_field_settings.custom_field.multi_enum_values.color",
"custom_field_settings.custom_field.multi_enum_values.enabled",
"custom_field_settings.custom_field.multi_enum_values.name",
"custom_field_settings.custom_field.name",
"custom_field_settings.custom_field.number_value",
"custom_field_settings.custom_field.people_value",
"custom_field_settings.custom_field.people_value.name",
"custom_field_settings.custom_field.precision",
"custom_field_settings.custom_field.privacy_setting",
"custom_field_settings.custom_field.reference_value",
"custom_field_settings.custom_field.reference_value.name",
"custom_field_settings.custom_field.representation_type",
"custom_field_settings.custom_field.resource_subtype",
"custom_field_settings.custom_field.text_value",
"custom_field_settings.custom_field.type",
"custom_field_settings.is_important",
"custom_field_settings.parent",
"custom_field_settings.parent.name",
"custom_field_settings.project",
"custom_field_settings.project.name",
"custom_fields",
"custom_fields.date_value",
"custom_fields.date_value.date",
"custom_fields.date_value.date_time",
"custom_fields.display_value",
"custom_fields.enabled",
"custom_fields.enum_options",
"custom_fields.enum_options.color",
"custom_fields.enum_options.enabled",
"custom_fields.enum_options.name",
"custom_fields.enum_value",
"custom_fields.enum_value.color",
"custom_fields.enum_value.enabled",
"custom_fields.enum_value.name",
"custom_fields.id_prefix",
"custom_fields.input_restrictions",
"custom_fields.is_formula_field",
"custom_fields.multi_enum_values",
"custom_fields.multi_enum_values.color",
"custom_fields.multi_enum_values.enabled",
"custom_fields.multi_enum_values.name",
"custom_fields.name",
"custom_fields.number_value",
"custom_fields.representation_type",
"custom_fields.text_value",
"custom_fields.type",
"default_access_level",
"due_on",
"followers",
"followers.name",
"html_notes",
"is_workspace_level",
"liked",
"likes",
"likes.user",
"likes.user.name",
"metric",
"metric.can_manage",
"metric.currency_code",
"metric.current_display_value",
"metric.current_number_value",
"metric.initial_number_value",
"metric.is_custom_weight",
"metric.precision",
"metric.progress_source",
"metric.resource_subtype",
"metric.target_number_value",
"metric.unit",
"name",
"notes",
"num_likes",
"offset",
"owner",
"owner.name",
"path",
"privacy_setting",
"start_on",
"status",
"team",
"team.name",
"time_period",
"time_period.display_name",
"time_period.end_on",
"time_period.period",
"time_period.start_on",
"uri",
"workspace",
"workspace.name"
]
}
},
"style": "form",
"explode": false
}
],
"responses": {
"200": {
"description": "Successfully retrieved the requested goals.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"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": "goal",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "The name of the goal.",
"example": "Grow web traffic by 30%"
},
"owner": {
"allOf": [
{
"description": "A *user* object represents an account in Asana that can be given access to various workspaces, projects, and tasks.",
"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": "user",
"x-insert-after": "gid"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user's name.",
"example": "Greg Sanchez"
}
}
},
{
"type": "object",
"nullable": true
}
]
}
}
}
},
"next_page": {
"type": "object",
"nullable": true,
"description": "*Conditional*. This property is only present when a limit query parameter is provided in the request. When making a paginated request, the API will return a number of results as specified by the limit parameter. If more results exist, then the response will contain a next_page attribute, which will include an offset, a relative path attribute, and a full uri attribute. If there are no more pages available, next_page will be null and no offset will be provided. Note that an offset token will expire after some time, as data may have changed.",
"properties": {
"offset": {
"type": "string",
"readOnly": true,
"description": "Pagination offset for the request.",
"example": "eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
},
"path": {
"type": "string",
"readOnly": true,
"description": "A relative path containing the query parameters to fetch for next_page",
"example": "/tasks/12345/attachments?limit=2&offset=eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
},
"uri": {
"type": "string",
"format": "uri",
"readOnly": true,
"description": "A full uri containing the query parameters to fetch for next_page",
"example": "https://app.asana.com/api/1.0/tasks/12345/attachments?limit=2&offset=eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9"
}
}
}
}
}
}
}
},
"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"
}
},
"security": [
{
"oauth2": [
"goals:read"
]
}
],
"x-readme": {
"code-samples": [
{
"language": "java",
"install": "Full object requires scope: teams:read
Full object requires scope: time_periods:read
Full object requires scope: teams:read
Full object requires scope: time_periods:read
Full object requires scope: teams:read
Full object requires scope: time_periods:read
Full object requires scope: teams:read
Full object requires scope: time_periods:read
Full object requires scope: teams:read
Full object requires scope: time_periods:read