https://app.asana.com/.well-known/ai-plugin.json
{
"schema_version": "v1",
"name_for_human": "Asana",
"name_for_model": "Asana",
"description_for_human": "Create projects and tasks in Asana to plan and organize your work.",
"description_for_model": "Asana creates projects and tasks to help users plan, organize, and manage their work.",
"api": {
"type": "openapi",
"url": "https://app.asana.com/ai-plugin/openapi.json",
"has_user_authentication": true
},
"auth": {
"type": "oauth",
"instructions": "",
"client_url": "https://app.asana.com/-/oauth_authorize",
"scope": "",
"authorization_url": "https://app.asana.com/-/oauth_token",
"authorization_content_type": "application/x-www-form-urlencoded",
"verification_tokens": {
"openai": "edfe2b128a134627beb1573c305da0dd"
}
},
"logo_url": "https://d3ki9tyy5l5ruj.cloudfront.net/obj/df5bcec7e9873dddebdd1328901c287f0f069750/asana-logo-favicon@3x.png",
"legal_info_url": "https://asana.com/terms",
"contact_email": "apps-external@asana.com"
}
https://app.asana.com/ai-plugin/openapi.json
{
"openapi": "3.0.3",
"info": {
"title": "Asana Plugin",
"description": "A plugin that allows the user to interact with Asana using ChatGPT.",
"termsOfService": "https://asana.com/terms",
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "1.0.0"
},
"servers": [
{
"url": "https://app.asana.com/api/1.0"
}
],
"paths": {
"/projects": {
"post": {
"summary": "Create a project",
"description": "Create a new project in a workspace or team.\n\nEvery project is required to be created in a specific workspace or\norganization, and this cannot be changed once set. Note that you can use\nthe `workspace` parameter regardless of whether or not it is an\norganization.",
"tags": [
"Projects"
],
"operationId": "createProject",
"requestBody": {
"description": "The project to create.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/ProjectRequest"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Successfully retrieved projects.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/ProjectResponse"
}
}
}
}
}
}
}
}
},
"/projects/{project_gid}": {
"get": {
"summary": "Get a project",
"description": "Returns the complete project record for a single project.",
"tags": [
"Projects"
],
"operationId": "getProject",
"parameters": [
{
"name": "project_gid",
"in": "path",
"description": "Globally unique identifier for the project.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successfully retrieved the requested project.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/ProjectResponse"
}
}
}
}
}
}
}
}
},
"/projects/{project_gid}/duplicate": {
"post": {
"summary": "Duplicate a project",
"description": "Creates and returns a job that will asynchronously handle the duplication.",
"tags": [
"Projects"
],
"operationId": "duplicateProject",
"parameters": [
{
"name": "project_gid",
"in": "path",
"description": "Globally unique identifier for the project.",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "Describes the duplicate's name and the elements that will be duplicated.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/ProjectDuplicateRequest"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Successfully created the job to handle duplication.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/JobResponse"
}
}
}
}
}
}
}
}
},
"/projects/{project_gid}/sections": {
"get": {
"summary": "Get sections in a project",
"description": "Returns the compact records for all sections in the specified project.",
"tags": [
"Sections"
],
"operationId": "getSectionsForProject",
"parameters": [
{
"name": "project_gid",
"in": "path",
"description": "Globally unique identifier for the project.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"description": "Results per page. The number of objects to return per page. The value must be between 1 and 100.",
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
},
{
"name": "offset",
"in": "query",
"description": "Offset token.\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.'",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successfully retrieved sections in project.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SectionCompact"
}
}
}
}
}
}
}
}
},
"post": {
"summary": "Create a section in a project",
"description": "Creates a new section in a project. Returns the full record of the newly created section.",
"tags": [
"Sections"
],
"operationId": "createSectionForProject",
"parameters": [
{
"name": "project_gid",
"in": "path",
"description": "Globally unique identifier for the project.",
"required": true,
"schema": {
"type": "string"
},
"example": "1331"
}
],
"requestBody": {
"description": "The section to create.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SectionRequest"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Successfully created the specified section.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SectionResponse"
}
}
}
}
}
}
}
}
},
"/projects/{project_gid}/sections/insert": {
"post": {
"summary": "Move or Insert sections",
"description": "Move sections relative to each other. One of\n`before_section` or `after_section` is required.\n\nSections cannot be moved between projects.\n\nReturns an empty data block.",
"tags": [
"Sections"
],
"operationId": "insertSectionForProject",
"parameters": [
{
"name": "project_gid",
"in": "path",
"description": "Globally unique identifier for the project.",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "The section's move action.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/ProjectSectionInsertRequest"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Successfully moved the specified section.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"description": "An empty object. Some endpoints do not return an object on success. The success is conveyed through a 2-- status code and returning an empty object."
}
}
}
}
}
}
}
}
},
"/projects/{project_gid}/tasks": {
"get": {
"summary": "Get tasks from a project",
"description": "Returns the compact task records for all tasks within the given project, ordered by their priority within the project. Tasks can exist in more than one project at a time.",
"tags": [
"Tasks"
],
"operationId": "getTasksForProject",
"parameters": [
{
"name": "project_gid",
"in": "path",
"description": "Globally unique identifier for the project.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "completed_since",
"in": "query",
"required": false,
"description": "Only return tasks that are either incomplete or that have been completed since this time. Accepts a date-time string or the keyword *now*.\n",
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"description": "Results per page. The number of objects to return per page. The value must be between 1 and 100.",
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
},
{
"name": "offset",
"in": "query",
"description": "Offset token.\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.'",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successfully retrieved the requested project's tasks.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TaskCompact"
}
}
}
}
}
}
}
}
}
},
"/sections/{section_gid}": {
"get": {
"summary": "Get a section",
"description": "Returns the complete record for a single section.",
"tags": [
"Sections"
],
"operationId": "getSection",
"parameters": [
{
"name": "section_gid",
"in": "path",
"required": true,
"description": "The globally unique identifier for the section.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successfully retrieved section.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SectionResponse"
}
}
}
}
}
}
}
}
},
"/sections/{section_gid}/addTask": {
"post": {
"summary": "Add task to section",
"description": "Add a task to a specific, existing section. This will remove the task from other sections of the project.\n\nThe task will be inserted at the top of a section unless an insert_before or insert_after parameter is declared.\n\nThis does not work for separators (tasks with the resource_subtype of section).",
"tags": [
"Sections"
],
"operationId": "addTaskForSection",
"parameters": [
{
"name": "section_gid",
"in": "path",
"required": true,
"description": "The globally unique identifier for the section.",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "The task and optionally the insert location.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SectionTaskInsertRequest"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Successfully added the task.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"description": "An empty object. Some endpoints do not return an object on success. The success is conveyed through a 2-- status code and returning an empty object."
}
}
}
}
}
}
}
}
},
"/stories/{story_gid}": {
"get": {
"summary": "Get a story",
"description": "Returns the full record for a single story.",
"tags": [
"Stories"
],
"operationId": "getStory",
"parameters": [
{
"name": "story_gid",
"in": "path",
"description": "Globally unique identifier for the story.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"description": "Results per page. The number of objects to return per page. The value must be between 1 and 100.",
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
},
{
"name": "offset",
"in": "query",
"description": "An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successfully retrieved the specified story.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/StoryResponse"
}
}
}
}
}
}
}
}
},
"/tasks": {
"get": {
"summary": "Get multiple tasks",
"description": "Returns the compact task records for some filtered set of tasks. Use one or more of the parameters provided to filter the tasks returned. You must specify a `project` or `tag` if you do not specify `assignee` and `workspace`.",
"tags": [
"Tasks"
],
"operationId": "getTasks",
"parameters": [
{
"name": "limit",
"in": "query",
"description": "Results per page. The number of objects to return per page. The value must be between 1 and 100.",
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
},
{
"name": "offset",
"in": "query",
"description": "An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results.",
"example": "eyJ0eXAiOJiKV1iQLCJhbGciOiJIUzI1NiJ9",
"schema": {
"type": "string"
}
},
{
"name": "assignee",
"in": "query",
"description": "The assignee to filter tasks on. If searching for unassigned tasks, assignee.any = null can be specified.\n*Note: If you specify `assignee`, you must also specify the `workspace` to filter on.*",
"schema": {
"type": "string"
},
"example": "14641"
},
{
"name": "project",
"in": "query",
"description": "The project to filter tasks on.",
"schema": {
"type": "string"
},
"example": "321654"
},
{
"name": "section",
"in": "query",
"description": "The section to filter tasks on.",
"schema": {
"type": "string"
},
"example": "321654"
},
{
"name": "workspace",
"in": "query",
"description": "The workspace to filter tasks on.\n*Note: If you specify `workspace`, you must also specify the `assignee` to filter on.*",
"schema": {
"type": "string"
},
"example": "321654"
},
{
"name": "completed_since",
"in": "query",
"description": "Only return tasks that are either incomplete or that have been completed since this time.",
"schema": {
"type": "string",
"format": "date-time",
"example": "2012-02-22T02:06:58.158Z"
}
},
{
"name": "modified_since",
"in": "query",
"description": "Only return tasks that have been modified since the given time.\n\n*Note: A task is considered “modified” if any of its properties\nchange, or associations between it and other objects are modified\n(e.g. a task being added to a project). A task is not considered\nmodified just because another object it is associated with (e.g. a\nsubtask) is modified. Actions that count as modifying the task\ninclude assigning, renaming, completing, and adding stories.*",
"schema": {
"type": "string",
"format": "date-time"
},
"example": "2012-02-22T02:06:58.158Z"
}
],
"responses": {
"200": {
"description": "Successfully retrieved requested tasks.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TaskCompact"
}
}
}
}
}
}
}
}
},
"post": {
"summary": "Create a task",
"description": "Creating a new task is as easy as POSTing to the `/tasks` endpoint with a\ndata block containing the fields you’d like to set on the task. Any\nunspecified fields will take on default values.",
"tags": [
"Tasks"
],
"operationId": "createTask",
"requestBody": {
"description": "The task to create.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/TaskRequest"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Successfully created a new task.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/TaskResponse"
}
}
}
}
}
}
}
}
},
"/tasks/{task_gid}": {
"get": {
"summary": "Get a task",
"description": "Returns the complete task record for a single task.",
"tags": [
"Tasks"
],
"operationId": "getTask",
"parameters": [
{
"name": "task_gid",
"in": "path",
"required": true,
"description": "The task to operate on.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successfully retrieved the specified task.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/TaskResponse"
}
}
}
}
}
}
}
},
"put": {
"summary": "Update a task",
"description": "A specific, existing task can be updated by making a PUT request on the\nURL for that task. Only the fields provided in the `data` block will be\nupdated; any unspecified fields will remain unchanged.",
"tags": [
"Tasks"
],
"operationId": "updateTask",
"parameters": [
{
"name": "task_gid",
"in": "path",
"required": true,
"description": "The task to operate on.",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "The task to update.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/TaskRequest"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Successfully updated the specified task.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/TaskResponse"
}
}
}
}
}
}
}
}
},
"/tasks/{task_gid}/duplicate": {
"post": {
"summary": "Duplicate a task",
"description": "Creates and returns a job that will asynchronously handle the duplication.",
"tags": [
"Tasks"
],
"operationId": "duplicateTask",
"parameters": [
{
"name": "task_gid",
"in": "path",
"required": true,
"description": "The task to operate on.",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "Describes the duplicate's name and the fields that will be duplicated.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/TaskDuplicateRequest"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Successfully created the job to handle duplication.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/JobResponse"
}
}
}
}
}
}
}
}
},
"/tasks/{task_gid}/stories": {
"get": {
"summary": "Get stories from a task",
"description": "Returns the compact records for all stories on the task.",
"tags": [
"Stories"
],
"operationId": "getStoriesForTask",
"parameters": [
{
"name": "task_gid",
"in": "path",
"required": true,
"description": "The task to operate on.",
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"description": "Results per page. The number of objects to return per page. The value must be between 1 and 100.",
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
},
{
"name": "offset",
"in": "query",
"description": "Offset token.\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.'",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successfully retrieved the specified task's stories.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"items": {
"$ref": "#/components/schemas/StoryCompact"
}
}
}
}
}
}
}
}
},
"post": {
"summary": "Create a story on a task",
"description": "Adds a story to a task. This endpoint currently only allows for comment\nstories to be created. The comment will be authored by the currently\nauthenticated user, and timestamped when the server receives the request.\n\nReturns the full record for the new story added to the task.",
"tags": [
"Stories"
],
"operationId": "createStoryForTask",
"parameters": [
{
"name": "task_gid",
"in": "path",
"required": true,
"description": "The task to operate on.",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "The story to create.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/StoryRequest"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Successfully created a new story.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/StoryResponse"
}
}
}
}
}
}
}
}
},
"/users/{user_gid}": {
"get": {
"tags": [
"Users"
],
"summary": "Get a user",
"description": "Returns the full user record for the single user with the provided ID.",
"operationId": "getUser",
"parameters": [
{
"name": "user_gid",
"in": "path",
"description": "A string identifying a user. This can either be the string \"me\", an email, or the gid of a user.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Returns the user specified.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/UserResponse"
}
}
}
}
}
}
}
}
},
"/workspaces/{workspace_gid}/projects": {
"get": {
"summary": "Get all projects in a workspace",
"description": "Returns the compact project records for all projects in the workspace.\n*Note: This endpoint may timeout for large domains. Prefer the `/teams/{team_gid}/projects` endpoint.*",
"tags": [
"Projects"
],
"operationId": "getProjectsForWorkspace",
"parameters": [
{
"name": "workspace_gid",
"in": "path",
"description": "Globally unique identifier for the workspace or organization.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"description": "Results per page. The number of objects to return per page. The value must be between 1 and 100.",
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
},
{
"name": "offset",
"in": "query",
"description": "An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results.",
"schema": {
"type": "string"
}
},
{
"name": "archived",
"in": "query",
"description": "Only return projects whose `archived` field takes on the value of this parameter.",
"schema": {
"type": "boolean"
}
}
],
"responses": {
"200": {
"description": "Successfully retrieved the requested workspace's projects.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProjectCompact"
}
}
}
}
}
}
}
}
},
"post": {
"summary": "Create a project in a workspace",
"description": "Creates a project in the workspace.\n\nIf the workspace for your project is an organization, you must also\nsupply a team to share the project with.\n\nReturns the full record of the newly created project.",
"tags": [
"Projects"
],
"operationId": "createProjectForWorkspace",
"parameters": [
{
"name": "workspace_gid",
"in": "path",
"description": "Globally unique identifier for the workspace or organization.",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "The new project to create.",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/ProjectRequest"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Successfully created a new project in the specified workspace.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/ProjectResponse"
}
}
}
}
}
}
}
}
},
"/workspaces/{workspace_gid}/typeahead": {
"get": {
"summary": "Get objects via typeahead",
"description": "Retrieves objects in the workspace based via an auto-completion/typeahead\nsearch algorithm.",
"tags": [
"Typeahead"
],
"operationId": "typeaheadForWorkspace",
"parameters": [
{
"name": "workspace_gid",
"in": "path",
"description": "Globally unique identifier for the workspace or organization.",
"required": true,
"schema": {
"type": "string"
},
"example": "12345"
},
{
"name": "resource_type",
"in": "query",
"description": "The type of values the typeahead should return. You can choose from one of the following: `custom_field`, `project`, `project_template`, `portfolio`, `tag`, `task`, and `user`.",
"required": true,
"schema": {
"type": "string",
"enum": [
"custom_field",
"project",
"project_template",
"portfolio",
"tag",
"task",
"user"
],
"default": "user"
}
},
{
"name": "type",
"in": "query",
"description": "*Deprecated: new integrations should prefer the resource_type field.*",
"required": false,
"schema": {
"type": "string",
"enum": [
"custom_field",
"portfolio",
"project",
"tag",
"task",
"user"
],
"default": "user"
}
},
{
"name": "query",
"in": "query",
"description": "The string that will be used to search for relevant objects. If an empty string is passed in, the API will return results.",
"schema": {
"type": "string"
},
"example": "Greg"
},
{
"name": "count",
"in": "query",
"description": "The number of results to return. The default is 20 if this parameter is omitted, with a minimum of 1 and a maximum of 100. If there are fewer results found than requested, all will be returned.",
"schema": {
"type": "integer"
},
"example": 20
}
],
"responses": {
"200": {
"description": "Successfully retrieved objects via a typeahead search algorithm.",
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "A generic list of objects, such as those returned by the typeahead search endpoint.",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "typeahead"
},
"name": {
"description": "The name of the object.",
"type": "string",
"example": "Bug Task"
}
}
}
}
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"CustomFieldCompact": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "task"
},
"name": {
"description": "The name of the custom field.",
"type": "string",
"example": "Status"
},
"resource_subtype": {
"description": "The type of the custom field. Must be one of the given values.\n",
"type": "string",
"example": "text",
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people"
]
},
"type": {
"description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.",
"type": "string",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number"
]
},
"enum_options": {
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This array specifies the possible values which an `enum` custom field can adopt. To modify the enum options, refer to [working with enum options](/reference/createenumoptionforcustomfield).",
"type": "array",
"items": {
"$ref": "#/components/schemas/EnumOption"
}
},
"enabled": {
"description": "*Conditional*. Determines if the custom field is enabled or not.",
"type": "boolean",
"example": true
},
"date_value": {
"description": "*Conditional*. Only relevant for custom fields of type `date`. This object reflects the chosen date (and optionally, time) value of a `date` custom field. If no date is selected, the value of `date_value` will be `null`.",
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "A string representing the date in YYYY-MM-DD format.",
"example": "2024-08-23"
},
"date_time": {
"type": "string",
"description": "A string representing the date in ISO 8601 format. If no time value is selected, the value of `date-time` will be `null`.",
"example": "2024-08-23T22:00:00.000Z"
}
}
},
"enum_value": {
"allOf": [
{
"$ref": "#/components/schemas/EnumOption"
},
{
"type": "object",
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
}
]
},
"multi_enum_values": {
"description": "*Conditional*. Only relevant for custom fields of type `multi_enum`. This object is the chosen values of a `multi_enum` custom field.",
"type": "array",
"items": {
"$ref": "#/components/schemas/EnumOption"
}
},
"number_value": {
"description": "*Conditional*. This number is the value of a `number` custom field.",
"type": "number",
"example": 5.2
},
"text_value": {
"description": "*Conditional*. This string is the value of a `text` custom field.",
"type": "string",
"example": "Some Value"
},
"display_value": {
"description": "A string representation for the value of the custom field. Integrations that don't require the underlying type should use this field to read values. Using this field will future-proof an app against new custom field types.",
"type": "string",
"readOnly": true,
"example": "blue",
"nullable": true
}
}
},
"CustomFieldResponse": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "custom_field"
},
"name": {
"description": "The name of the custom field.",
"type": "string",
"example": "Status"
},
"resource_subtype": {
"description": "The type of the custom field. Must be one of the given values.\n",
"type": "string",
"example": "text",
"enum": [
"text",
"enum",
"multi_enum",
"number",
"date",
"people"
]
},
"type": {
"description": "*Deprecated: new integrations should prefer the resource_subtype field.* The type of the custom field. Must be one of the given values.\n",
"type": "string",
"readOnly": true,
"enum": [
"text",
"enum",
"multi_enum",
"number"
]
},
"enum_options": {
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This array specifies the possible values which an `enum` custom field can adopt. To modify the enum options, refer to [working with enum options](/reference/createenumoptionforcustomfield).",
"type": "array",
"items": {
"$ref": "#/components/schemas/EnumOption"
}
},
"enabled": {
"description": "*Conditional*. Determines if the custom field is enabled or not.",
"type": "boolean",
"example": true
},
"date_value": {
"description": "*Conditional*. Only relevant for custom fields of type `date`. This object reflects the chosen date (and optionally, time) value of a `date` custom field. If no date is selected, the value of `date_value` will be `null`.",
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "A string representing the date in YYYY-MM-DD format.",
"example": "2024-08-23"
},
"date_time": {
"type": "string",
"description": "A string representing the date in ISO 8601 format. If no time value is selected, the value of `date-time` will be `null`.",
"example": "2024-08-23T22:00:00.000Z"
}
}
},
"enum_value": {
"allOf": [
{
"$ref": "#/components/schemas/EnumOption"
},
{
"type": "object",
"description": "*Conditional*. Only relevant for custom fields of type `enum`. This object is the chosen value of an `enum` custom field."
}
]
},
"multi_enum_values": {
"description": "*Conditional*. Only relevant for custom fields of type `multi_enum`. This object is the chosen values of a `multi_enum` custom field.",
"type": "array",
"items": {
"$ref": "#/components/schemas/EnumOption"
}
},
"number_value": {
"description": "*Conditional*. This number is the value of a `number` custom field.",
"type": "number",
"example": 5.2
},
"text_value": {
"description": "*Conditional*. This string is the value of a `text` custom field.",
"type": "string",
"example": "Some Value"
},
"display_value": {
"description": "A string representation for the value of the custom field. Integrations that don't require the underlying type should use this field to read values. Using this field will future-proof an app against new custom field types.",
"type": "string",
"readOnly": true,
"example": "blue",
"nullable": true
},
"description": {
"description": "[Opt In](/docs/inputoutput-options). The description of the custom field.",
"type": "string",
"example": "Development team priority"
},
"precision": {
"description": "Only relevant for custom fields of type ‘Number’. This field dictates the number of places after the decimal to round to, i.e. 0 is integer values, 1 rounds to the nearest tenth, and so on. Must be between 0 and 6, inclusive.\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",
"none"
],
"example": "custom"
},
"currency_code": {
"description": "ISO 4217 currency code to format this custom field. This will be null if the `format` is not `currency`.",
"type": "string",
"nullable": true,
"example": "EUR"
},
"custom_label": {
"description": "This is the string that appears next to the custom field value. This will be null if the `format` is not `custom`.",
"type": "string",
"nullable": true,
"example": "gold pieces"
},
"custom_label_position": {
"description": "Only relevant for custom fields with `custom` format. This depicts where to place the custom label. This will be null if the `format` is not `custom`.",
"type": "string",
"enum": [
"prefix",
"suffix"
],
"example": "suffix"
},
"is_global_to_workspace": {
"description": "This flag describes whether this custom field is available to every container in the workspace. Before project-specific custom fields, this field was always true.",
"type": "boolean",
"example": true,
"readOnly": true
},
"has_notifications_enabled": {
"description": "*Conditional*. This flag describes whether a follower of a task with this field should receive inbox notifications from changes to this field.",
"type": "boolean",
"example": true
},
"asana_created_field": {
"description": "*Conditional*. A unique identifier to associate this field with the template source of truth.",
"type": "string",
"readOnly": true,
"nullable": true,
"enum": [
"a_v_requirements",
"account_name",
"actionable",
"align_shipping_link",
"align_status",
"allotted_time",
"appointment",
"approval_stage",
"approved",
"article_series",
"board_committee",
"browser",
"campaign_audience",
"campaign_project_status",
"campaign_regions",
"channel_primary",
"client_topic_type",
"complete_by",
"contact",
"contact_email_address",
"content_channels",
"content_channels_needed",
"content_stage",
"content_type",
"contract",
"contract_status",
"cost",
"creation_stage",
"creative_channel",
"creative_needed",
"creative_needs",
"data_sensitivity",
"deal_size",
"delivery_appt",
"delivery_appt_date",
"department",
"department_responsible",
"design_request_needed",
"design_request_type",
"discussion_category",
"do_this_task",
"editorial_content_status",
"editorial_content_tag",
"editorial_content_type",
"effort",
"effort_level",
"est_completion_date",
"estimated_time",
"estimated_value",
"expected_cost",
"external_steps_needed",
"favorite_idea",
"feedback_type",
"financial",
"funding_amount",
"grant_application_process",
"hiring_candidate_status",
"idea_status",
"ids_link",
"ids_patient_link",
"implementation_stage",
"insurance",
"interview_area",
"interview_question_score",
"itero_scan_link",
"job_s_applied_to",
"lab",
"launch_status",
"lead_status",
"localization_language",
"localization_market_team",
"localization_status",
"meeting_minutes",
"meeting_needed",
"minutes",
"mrr",
"must_localize",
"name_of_foundation",
"need_to_follow_up",
"next_appointment",
"next_steps_sales",
"num_people",
"number_of_user_reports",
"office_location",
"onboarding_activity",
"owner",
"participants_needed",
"patient_date_of_birth",
"patient_email",
"patient_phone",
"patient_status",
"phone_number",
"planning_category",
"point_of_contact",
"position",
"post_format",
"prescription",
"priority",
"priority_level",
"product",
"product_stage",
"progress",
"project_size",
"project_status",
"proposed_budget",
"publish_status",
"reason_for_scan",
"referral",
"request_type",
"research_status",
"responsible_department",
"responsible_team",
"risk_assessment_status",
"room_name",
"sales_counterpart",
"sentiment",
"shipping_link",
"social_channels",
"stage",
"status",
"status_design",
"status_of_initiative",
"system_setup",
"task_progress",
"team",
"team_marketing",
"team_responsible",
"time_it_takes_to_complete_tasks",
"timeframe",
"treatment_type",
"type_work_requests_it",
"use_agency",
"user_name",
"vendor_category",
"vendor_type",
"word_count"
],
"example": "priority"
},
"created_by": {
"$ref": "#/components/schemas/UserCompact"
},
"people_value": {
"description": "*Conditional*. Only relevant for custom fields of type `people`. This array of [compact user](/reference/users) objects reflects the values of a `people` custom field.",
"type": "array",
"items": {
"$ref": "#/components/schemas/UserCompact"
}
}
}
},
"CustomFieldSettingResponse": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "custom_field_setting"
},
"project": {
"allOf": [
{
"$ref": "#/components/schemas/ProjectCompact"
},
{
"type": "object",
"description": "*Deprecated: new integrations should prefer the `parent` field.* The id of the project that this custom field settings refers to.",
"readOnly": true
}
]
},
"is_important": {
"description": "`is_important` is used in the Asana web application to determine if this custom field is displayed in the list/grid view of a project or portfolio.",
"type": "boolean",
"readOnly": true,
"example": false
},
"parent": {
"allOf": [
{
"$ref": "#/components/schemas/ProjectCompact"
},
{
"type": "object",
"description": "The parent to which the custom field is applied. This can be a project or portfolio and indicates that the tasks or projects that the parent contains may be given custom field values for this custom field.",
"readOnly": true
}
]
},
"custom_field": {
"allOf": [
{
"$ref": "#/components/schemas/CustomFieldResponse"
},
{
"type": "object",
"description": "The custom field that is applied to the `parent`.",
"readOnly": true
}
]
}
}
},
"EnumOption": {
"type": "object",
"description": "Enum options are the possible values which an enum custom field can adopt. An enum custom field must contain at least 1 enum option but no more than 500.",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "enum_option"
},
"name": {
"description": "The name of the enum option.",
"type": "string",
"example": "Low"
},
"enabled": {
"description": "Whether or not the enum option is a selectable value for the custom field.",
"type": "boolean",
"example": true
},
"color": {
"description": "The color of the enum option. Defaults to ‘none’.",
"type": "string",
"example": "blue"
}
}
},
"JobResponse": {
"type": "object",
"properties": {
"resource_subtype": {
"description": "The subtype of this resource. Different subtypes retain many of the same fields and behavior, but may render differently in Asana or represent resources with different semantic meaning.",
"type": "string",
"readOnly": true
},
"status": {
"description": "The current status of this job. The value is one of: `not_started`, `in_progress`, `succeeded`, or `failed`.",
"type": "string",
"enum": [
"not_started",
"in_progress",
"succeeded",
"failed"
],
"readOnly": true
},
"new_project": {
"$ref": "#/components/schemas/ProjectCompact"
},
"new_task": {
"$ref": "#/components/schemas/TaskCompact"
},
"new_project_template": {
"$ref": "#/components/schemas/ProjectTemplateCompact"
}
}
},
"Like": {
"type": "object",
"description": "An object to represent a user's like.",
"properties": {
"gid": {
"description": "Globally unique identifier of the object, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"user": {
"$ref": "#/components/schemas/UserCompact"
}
}
},
"Preview": {
"type": "object",
"description": "A collection of rich text that will be displayed as a preview to another app.\nThis is read-only except for a small group of whitelisted apps.",
"readOnly": true,
"properties": {
"fallback": {
"description": "Some fallback text to display if unable to display the full preview.",
"type": "string"
},
"footer": {
"description": "Text to display in the footer.",
"type": "string"
},
"header": {
"description": "Text to display in the header.",
"type": "string"
},
"header_link": {
"description": "Where the header will link to.",
"type": "string"
},
"html_text": {
"description": "HTML formatted text for the body of the preview.",
"type": "string"
},
"text": {
"description": "Text for the body of the preview.",
"type": "string"
},
"title": {
"description": "Text to display as the title.",
"type": "string"
},
"title_link": {
"description": "Where to title will link to.",
"type": "string"
}
}
},
"ProjectBriefCompact": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "project_brief"
}
}
},
"ProjectCompact": {
"type": "object",
"description": "A *project* represents a prioritized list of tasks in Asana or a board with columns of tasks represented as cards. It exists in a single workspace or organization and is accessible to a subset of users in that workspace or organization, depending on its permissions.",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "project"
},
"name": {
"description": "Name of the project. This is generally a short sentence fragment that fits on a line in the UI for maximum readability. However, it can be longer.",
"type": "string",
"example": "Stuff to buy"
}
}
},
"ProjectDuplicateRequest": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"description": "The name of the new project.",
"type": "string"
},
"team": {
"description": "Sets the team of the new project. If team is not defined, the new project will be in the same team as the the original project.",
"type": "string"
},
"include": {
"description": "The elements that will be duplicated to the new project. Tasks are always included.",
"type": "string",
"enum": [
"members",
"notes",
"forms",
"task_notes",
"task_assignee",
"task_subtasks",
"task_attachments",
"task_dates",
"task_dependencies",
"task_followers",
"task_tags",
"task_projects"
]
},
"schedule_dates": {
"description": "A dictionary of options to auto-shift dates. `task_dates` must be included to use this option. Requires either `start_on` or `due_on`, but not both.",
"type": "object",
"required": [
"should_skip_weekends"
],
"properties": {
"should_skip_weekends": {
"description": "Determines if the auto-shifted dates should skip weekends.",
"type": "boolean"
},
"due_on": {
"description": "Sets the last due date in the duplicated project to the given date. The rest of the due dates will be offset by the same amount as the due dates in the original project.",
"type": "string"
},
"start_on": {
"description": "Sets the first start date in the duplicated project to the given date. The rest of the start dates will be offset by the same amount as the start dates in the original project.",
"type": "string"
}
}
}
}
},
"ProjectResponse": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "project"
},
"name": {
"description": "Name of the project. This is generally a short sentence fragment that fits on a line in the UI for maximum readability. However, it can be longer.",
"type": "string",
"example": "Stuff to buy"
},
"archived": {
"description": "True if the project is archived, false if not. Archived projects do not show in the UI by default and may be treated differently for queries.",
"type": "boolean",
"example": false
},
"color": {
"description": "Color of the project.",
"type": "string",
"nullable": true,
"enum": [
"dark-pink",
"dark-green",
"dark-blue",
"dark-red",
"dark-teal",
"dark-brown",
"dark-orange",
"dark-purple",
"dark-warm-gray",
"light-pink",
"light-green",
"light-blue",
"light-red",
"light-teal",
"light-brown",
"light-orange",
"light-purple",
"light-warm-gray"
],
"example": "light-green"
},
"created_at": {
"description": "The time at which this resource was created.",
"type": "string",
"format": "date-time",
"readOnly": true,
"example": "2012-02-22T02:06:58.147Z"
},
"current_status": {
"$ref": "#/components/schemas/ProjectStatusResponse"
},
"current_status_update": {
"$ref": "#/components/schemas/StatusUpdateCompact"
},
"custom_field_settings": {
"description": "Array of Custom Field Settings (in compact form).",
"readOnly": true,
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFieldSettingResponse"
}
},
"default_view": {
"description": "The default view (list, board, calendar, or timeline) of a project.",
"type": "string",
"enum": [
"list",
"board",
"calendar",
"timeline"
],
"example": "calendar"
},
"due_date": {
"description": "*Deprecated: new integrations should prefer the `due_on` field.*",
"type": "string",
"nullable": true,
"format": "date-time",
"example": "2019-09-15T02:06:58.147Z"
},
"due_on": {
"description": "The day on which this project is due. This takes a date with format YYYY-MM-DD.",
"type": "string",
"nullable": true,
"format": "date-time",
"example": "2019-09-15T02:06:58.147Z"
},
"html_notes": {
"description": "[Opt In](/docs/inputoutput-options). The notes of the project with formatting as HTML.",
"type": "string",
"example": "<body>These are things we need to purchase.</body>"
},
"members": {
"description": "Array of users who are members of this project.",
"type": "array",
"items": {
"$ref": "#/components/schemas/UserCompact"
},
"readOnly": true
},
"modified_at": {
"description": "The time at which this project was last modified.\n*Note: This does not currently reflect any changes in associations such as tasks or comments that may have been added or removed from the project.*",
"type": "string",
"readOnly": true,
"format": "date-time",
"example": "2012-02-22T02:06:58.147Z"
},
"notes": {
"description": "Free-form textual information associated with the project (ie., its description).",
"type": "string",
"example": "These are things we need to purchase."
},
"public": {
"description": "True if the project is public to its team.",
"type": "boolean",
"example": false
},
"start_on": {
"description": "The day on which work for this project begins, or null if the project has no start date. This takes a date with `YYYY-MM-DD` format. *Note: `due_on` or `due_at` must be present in the request when setting or unsetting the `start_on` parameter. Additionally, `start_on` and `due_on` cannot be the same date.*",
"type": "string",
"nullable": true,
"format": "date",
"example": "2019-09-14"
},
"workspace": {
"allOf": [
{
"$ref": "#/components/schemas/WorkspaceCompact"
},
{
"type": "object",
"readOnly": true,
"description": "*Create-only*. The workspace or organization this project is associated with. Once created, projects cannot be moved to a different workspace. This attribute can only be specified at creation time."
}
]
},
"custom_fields": {
"description": "Array of Custom Fields.",
"readOnly": true,
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFieldCompact"
}
},
"completed": {
"description": "True if the project is currently marked complete, false if not.",
"type": "boolean",
"readOnly": true,
"example": false
},
"completed_at": {
"description": "The time at which this project was completed, or null if the project is not completed.",
"type": "string",
"format": "date-time",
"readOnly": true,
"nullable": true,
"example": "2012-02-22T02:06:58.147Z"
},
"completed_by": {
"$ref": "#/components/schemas/UserCompact"
},
"followers": {
"description": "Array of users following this project. Followers are a subset of members who have opted in to receive \"tasks added\" notifications for a project.",
"type": "array",
"items": {
"$ref": "#/components/schemas/UserCompact"
},
"readOnly": true
},
"owner": {
"$ref": "#/components/schemas/UserCompact"
},
"team": {
"$ref": "#/components/schemas/TeamCompact"
},
"icon": {
"description": "The icon for a project.",
"type": "string",
"nullable": true,
"enum": [
"list",
"board",
"timeline",
"calendar",
"rocket",
"people",
"graph",
"star",
"bug",
"light_bulb",
"globe",
"gear",
"notebook",
"computer",
"check",
"target",
"html",
"megaphone",
"chat_bubbles",
"briefcase",
"page_layout",
"mountain_flag",
"puzzle",
"presentation",
"line_and_symbols",
"speed_dial",
"ribbon",
"shoe",
"shopping_basket",
"map",
"ticket",
"coins"
],
"example": "chat_bubbles"
},
"permalink_url": {
"type": "string",
"readOnly": true,
"description": "A url that points directly to the object within Asana.",
"example": "https://app.asana.com/0/resource/123456789/list"
},
"project_brief": {
"allOf": [
{
"$ref": "#/components/schemas/ProjectBriefCompact"
},
{
"type": "object",
"description": "[Opt In](/docs/inputoutput-options). The project brief associated with this project.",
"nullable": true
}
]
},
"created_from_template": {
"allOf": [
{
"$ref": "#/components/schemas/ProjectTemplateCompact"
},
{
"type": "object",
"description": "[Opt In](/docs/inputoutput-options). The project template from which this project was created. If the project was not created from a template, this field will be null.",
"nullable": true
}
]
}
}
},
"ProjectRequest": {
"type": "object",
"properties": {
"name": {
"description": "Name of the project. This is generally a short sentence fragment that fits on a line in the UI for maximum readability. However, it can be longer.",
"type": "string",
"example": "Stuff to buy"
},
"archived": {
"description": "True if the project is archived, false if not. Archived projects do not show in the UI by default and may be treated differently for queries.",
"type": "boolean",
"example": false
},
"color": {
"description": "Color of the project.",
"type": "string",
"nullable": true,
"enum": [
"dark-pink",
"dark-green",
"dark-blue",
"dark-red",
"dark-teal",
"dark-brown",
"dark-orange",
"dark-purple",
"dark-warm-gray",
"light-pink",
"light-green",
"light-blue",
"light-red",
"light-teal",
"light-brown",
"light-orange",
"light-purple",
"light-warm-gray"
],
"example": "light-green"
},
"current_status": {
"$ref": "#/components/schemas/ProjectStatusResponse"
},
"current_status_update": {
"$ref": "#/components/schemas/StatusUpdateCompact"
},
"default_view": {
"description": "The default view (list, board, calendar, or timeline) of a project.",
"type": "string",
"enum": [
"list",
"board",
"calendar",
"timeline"
],
"example": "calendar"
},
"due_date": {
"description": "*Deprecated: new integrations should prefer the `due_on` field.*",
"type": "string",
"nullable": true,
"format": "date-time",
"example": "2019-09-15T02:06:58.147Z"
},
"due_on": {
"description": "The day on which this project is due. This takes a date with format YYYY-MM-DD.",
"type": "string",
"nullable": true,
"format": "date-time",
"example": "2019-09-15T02:06:58.147Z"
},
"html_notes": {
"description": "[Opt In](/docs/inputoutput-options). The notes of the project with formatting as HTML.",
"type": "string",
"example": "<body>These are things we need to purchase.</body>"
},
"notes": {
"description": "Free-form textual information associated with the project (ie., its description).",
"type": "string",
"example": "These are things we need to purchase."
},
"public": {
"description": "True if the project is public to its team.",
"type": "boolean",
"example": false
},
"start_on": {
"description": "The day on which work for this project begins, or null if the project has no start date. This takes a date with `YYYY-MM-DD` format. *Note: `due_on` or `due_at` must be present in the request when setting or unsetting the `start_on` parameter. Additionally, `start_on` and `due_on` cannot be the same date.*",
"type": "string",
"nullable": true,
"format": "date",
"example": "2019-09-14"
},
"custom_fields": {
"description": "An object where each key is a Custom Field GID and each value is an enum GID, string, number, or object.",
"type": "object",
"additionalProperties": {
"type": "string",
"description": "\"{custom_field_gid}\" => Value (Can be text, number, etc.)"
},
"example": {
"5678904321": "On Hold",
"4578152156": "Not Started"
}
},
"followers": {
"description": "*Create-only*. Comma separated string of users. Followers are a subset of members who have opted in to receive \"tasks added\" notifications for a project.",
"type": "string",
"example": "12345,23456"
},
"owner": {
"description": "The current owner of the project, may be null.",
"nullable": true,
"type": "string",
"example": "12345"
},
"team": {
"description": "The team that this project is shared with.",
"type": "string",
"example": "12345"
}
}
},
"ProjectSectionInsertRequest": {
"type": "object",
"properties": {
"project": {
"description": "The project in which to reorder the given section.",
"type": "string"
},
"section": {
"description": "The section to reorder.",
"type": "string"
},
"before_section": {
"description": "Insert the given section immediately before the section specified by this parameter.",
"type": "string"
},
"after_section": {
"description": "Insert the given section immediately after the section specified by this parameter.",
"type": "string"
}
},
"required": [
"project",
"section"
]
},
"ProjectStatusResponse": {
"type": "object",
"required": [
"text",
"color"
],
"properties": {
"text": {
"description": "The text content of the status update.",
"type": "string",
"example": "The project is moving forward according to plan..."
},
"html_text": {
"description": "[Opt In](/docs/inputoutput-options). The text content of the status update with formatting as HTML.",
"type": "string",
"example": "<body>The project <strong>is</strong> moving forward according to plan...</body>"
},
"color": {
"description": "The color associated with the status update.",
"type": "string",
"enum": [
"green",
"yellow",
"red",
"blue"
]
},
"author": {
"$ref": "#/components/schemas/UserCompact"
},
"created_at": {
"description": "The time at which this resource was created.",
"type": "string",
"format": "date-time",
"readOnly": true,
"example": "2012-02-22T02:06:58.147Z"
},
"created_by": {
"$ref": "#/components/schemas/UserCompact"
},
"modified_at": {
"description": "The time at which this project status was last modified.\n*Note: This does not currently reflect any changes in associations such as comments that may have been added or removed from the project status.*",
"type": "string",
"format": "date-time",
"readOnly": true,
"example": "2012-02-22T02:06:58.147Z"
}
}
},
"ProjectTemplateCompact": {
"type": "object",
"description": "A *project template* is an object that allows new projects to be created with a predefined setup, which may include tasks, sections, Rules, etc. It simplifies the process of running a workflow that involves a similar set of work every time.",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "project_template"
},
"name": {
"description": "Name of the project template.",
"type": "string",
"example": "Packing list"
}
}
},
"StatusUpdateCompact": {
"type": "object",
"description": "A *status update* is an update on the progress of a particular project, portfolio, or goal, and is sent out to all of its parent's followers when created. These updates include both text describing the update and a `status_type` intended to represent the overall state of the project.",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "status_update"
},
"title": {
"description": "The title of the status update.",
"type": "string",
"example": "Status Update - Jun 15"
},
"resource_subtype": {
"type": "string",
"description": "The subtype of this resource. Different subtypes retain many of the same fields and behavior, but may render differently in Asana or represent resources with different semantic meaning.\nThe `resource_subtype`s for `status` objects represent the type of their parent.",
"enum": [
"project_status_update",
"portfolio_status_update",
"goal_status_update"
],
"example": "project_status_update",
"readOnly": true
}
}
},
"SectionCompact": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true
},
"name": {
"description": "The name of the section (i.e. the text displayed as the section header).",
"type": "string"
}
}
},
"SectionTaskInsertRequest": {
"type": "object",
"properties": {
"task": {
"description": "The task to add to this section.",
"type": "string"
},
"insert_before": {
"description": "An existing task within this section before which the added task should be inserted. Cannot be provided together with insert_after.",
"type": "string"
},
"insert_after": {
"description": "An existing task within this section after which the added task should be inserted. Cannot be provided together with insert_before.",
"type": "string"
}
},
"required": [
"task"
]
},
"SectionResponse": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true
},
"name": {
"description": "The name of the section (i.e. the text displayed as the section header).",
"type": "string"
},
"created_at": {
"description": "The time at which this resource was created.",
"type": "string",
"format": "date-time",
"readOnly": true
},
"project": {
"$ref": "#/components/schemas/ProjectCompact"
},
"projects": {
"description": "*Deprecated - please use project instead*",
"type": "array",
"readOnly": true,
"items": {
"$ref": "#/components/schemas/ProjectCompact"
}
}
}
},
"SectionRequest": {
"type": "object",
"properties": {
"name": {
"description": "The text to be displayed as the section name. This cannot be an empty string.",
"type": "string"
},
"insert_before": {
"description": "An existing section within this project before which the added section should be inserted. Cannot be provided together with insert_after.",
"type": "string"
},
"insert_after": {
"description": "An existing section within this project after which the added section should be inserted. Cannot be provided together with insert_before.",
"type": "string"
}
},
"required": [
"project",
"name"
]
},
"StoryCompact": {
"type": "object",
"description": "A story represents an activity associated with an object in the Asana system.",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true
},
"created_at": {
"description": "The time at which this resource was created.",
"type": "string",
"format": "date-time",
"readOnly": true
},
"created_by": {
"$ref": "#/components/schemas/UserCompact"
},
"resource_subtype": {
"description": "The subtype of this resource. Different subtypes retain many of the same fields and behavior, but may render differently in Asana or represent resources with different semantic meaning.",
"type": "string",
"readOnly": true
},
"text": {
"description": "*Create-only*. Human-readable text for the story or comment.\nThis will not include the name of the creator.\n*Note: This is not guaranteed to be stable for a given type of story. For example, text for a reassignment may not always say “assigned to …” as the text for a story can both be edited and change based on the language settings of the user making the request.*\nUse the `resource_subtype` property to discover the action that created the story.",
"type": "string"
}
}
},
"StoryRequest": {
"type": "object",
"description": "A story represents an activity associated with an object in the Asana system.",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true
},
"created_at": {
"description": "The time at which this resource was created.",
"type": "string",
"format": "date-time",
"readOnly": true
},
"resource_subtype": {
"description": "The subtype of this resource. Different subtypes retain many of the same fields and behavior, but may render differently in Asana or represent resources with different semantic meaning.",
"type": "string",
"readOnly": true
},
"text": {
"description": "The plain text of the comment to add. Cannot be used with html_text.",
"type": "string"
},
"html_text": {
"description": "[Opt In](/docs/inputoutput-options). HTML formatted text for a comment. This will not include the name of the creator.",
"type": "string"
},
"is_pinned": {
"description": "*Conditional*. Whether the story should be pinned on the resource.",
"type": "boolean"
},
"sticker_name": {
"description": "The name of the sticker in this story. `null` if there is no sticker.",
"type": "string",
"enum": [
"green_checkmark",
"people_dancing",
"dancing_unicorn",
"heart",
"party_popper",
"people_waving_flags",
"splashing_narwhal",
"trophy",
"yeti_riding_unicorn",
"celebrating_people",
"determined_climbers",
"phoenix_spreading_love"
]
}
}
},
"StoryResponse": {
"type": "object",
"description": "A story represents an activity associated with an object in the Asana system.",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true
},
"created_at": {
"description": "The time at which this resource was created.",
"type": "string",
"format": "date-time",
"readOnly": true
},
"resource_subtype": {
"description": "The subtype of this resource. Different subtypes retain many of the same fields and behavior, but may render differently in Asana or represent resources with different semantic meaning.",
"type": "string",
"readOnly": true
},
"text": {
"description": "The plain text of the comment to add. Cannot be used with html_text.",
"type": "string"
},
"html_text": {
"description": "[Opt In](/docs/inputoutput-options). HTML formatted text for a comment. This will not include the name of the creator.",
"type": "string"
},
"is_pinned": {
"description": "*Conditional*. Whether the story should be pinned on the resource.",
"type": "boolean",
"example": false
},
"sticker_name": {
"description": "The name of the sticker in this story. `null` if there is no sticker.",
"type": "string",
"enum": [
"green_checkmark",
"people_dancing",
"dancing_unicorn",
"heart",
"party_popper",
"people_waving_flags",
"splashing_narwhal",
"trophy",
"yeti_riding_unicorn",
"celebrating_people",
"determined_climbers",
"phoenix_spreading_love"
]
},
"created_by": {
"$ref": "#/components/schemas/UserCompact"
},
"type": {
"type": "string",
"enum": [
"comment",
"system"
],
"readOnly": true
},
"is_editable": {
"description": "*Conditional*. Whether the text of the story can be edited after creation.",
"type": "boolean",
"readOnly": true
},
"is_edited": {
"description": "*Conditional*. Whether the text of the story has been edited after creation.",
"type": "boolean",
"readOnly": true
},
"hearted": {
"description": "*Deprecated - please use likes instead*\n*Conditional*. True if the story is hearted by the authorized user, false if not.",
"type": "boolean",
"readOnly": true
},
"hearts": {
"description": "*Deprecated - please use likes instead*\n\n*Conditional*. Array of likes for users who have hearted this story.",
"type": "array",
"items": {
"$ref": "#/components/schemas/Like"
},
"readOnly": true
},
"num_hearts": {
"description": "*Deprecated - please use likes instead*\n\n*Conditional*. The number of users who have hearted this story.",
"type": "integer",
"readOnly": true
},
"liked": {
"description": "*Conditional*. True if the story is liked by the authorized user, false if not.",
"type": "boolean",
"readOnly": true
},
"likes": {
"description": "*Conditional*. Array of likes for users who have liked this story.",
"type": "array",
"items": {
"$ref": "#/components/schemas/Like"
},
"readOnly": true
},
"num_likes": {
"description": "*Conditional*. The number of users who have liked this story.",
"type": "integer",
"readOnly": true
},
"previews": {
"description": "*Conditional*. A collection of previews to be displayed in the story.\n\n*Note: This property only exists for comment stories.*",
"type": "array",
"items": {
"$ref": "#/components/schemas/Preview"
},
"readOnly": true
},
"old_name": {
"description": "*Conditional*'",
"type": "string"
},
"new_name": {
"description": "*Conditional*",
"type": "string",
"readOnly": true
},
"old_dates": {
"$ref": "#/components/schemas/StoryResponseDates"
},
"new_dates": {
"$ref": "#/components/schemas/StoryResponseDates"
},
"old_resource_subtype": {
"description": "*Conditional*",
"type": "string",
"readOnly": true
},
"new_resource_subtype": {
"description": "*Conditional*",
"type": "string",
"readOnly": true,
"example": "milestone"
},
"story": {
"allOf": [
{
"$ref": "#/components/schemas/StoryCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"assignee": {
"allOf": [
{
"$ref": "#/components/schemas/UserCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"follower": {
"allOf": [
{
"$ref": "#/components/schemas/UserCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"old_section": {
"allOf": [
{
"$ref": "#/components/schemas/SectionCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"new_section": {
"allOf": [
{
"$ref": "#/components/schemas/SectionCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"task": {
"allOf": [
{
"$ref": "#/components/schemas/TaskCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"project": {
"allOf": [
{
"$ref": "#/components/schemas/ProjectCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"tag": {
"allOf": [
{
"$ref": "#/components/schemas/TagCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"custom_field": {
"allOf": [
{
"$ref": "#/components/schemas/CustomFieldCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"old_text_value": {
"type": "string",
"readOnly": true
},
"new_text_value": {
"type": "string",
"readOnly": true
},
"old_number_value": {
"type": "integer",
"readOnly": true
},
"new_number_value": {
"type": "integer",
"readOnly": true
},
"old_enum_value": {
"allOf": [
{
"$ref": "#/components/schemas/EnumOption"
},
{
"type": "object",
"readOnly": true
}
]
},
"new_enum_value": {
"allOf": [
{
"$ref": "#/components/schemas/EnumOption"
},
{
"type": "object"
},
{
"readOnly": true
}
]
},
"old_date_value": {
"allOf": [
{
"$ref": "#/components/schemas/StoryResponseDates"
},
{
"description": "*Conditional*. The old value of a date custom field story."
}
],
"readOnly": true
},
"new_date_value": {
"allOf": [
{
"$ref": "#/components/schemas/StoryResponseDates"
},
{
"description": "*Conditional* The new value of a date custom field story."
}
],
"readOnly": true
},
"old_people_value": {
"description": "*Conditional*. The old value of a people custom field story.",
"type": "array",
"items": {
"$ref": "#/components/schemas/UserCompact"
},
"readOnly": true
},
"new_people_value": {
"description": "*Conditional*. The new value of a people custom field story.",
"type": "array",
"items": {
"$ref": "#/components/schemas/UserCompact"
},
"readOnly": true
},
"old_multi_enum_values": {
"description": "*Conditional*. The old value of a multi-enum custom field story.",
"type": "array",
"items": {
"$ref": "#/components/schemas/EnumOption"
},
"readOnly": true
},
"new_multi_enum_values": {
"description": "*Conditional*. The new value of a multi-enum custom field story.",
"type": "array",
"items": {
"$ref": "#/components/schemas/EnumOption"
},
"readOnly": true
},
"new_approval_status": {
"description": "*Conditional*. The new value of approval status.",
"type": "string",
"readOnly": true,
"example": "approved"
},
"old_approval_status": {
"description": "*Conditional*. The old value of approval status.",
"type": "string",
"readOnly": true,
"example": "pending"
},
"duplicate_of": {
"allOf": [
{
"$ref": "#/components/schemas/TaskCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"duplicated_from": {
"allOf": [
{
"$ref": "#/components/schemas/TaskCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"dependency": {
"allOf": [
{
"$ref": "#/components/schemas/TaskCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"source": {
"description": "The component of the Asana product the user used to trigger the story.",
"type": "string",
"enum": [
"web",
"email",
"mobile",
"api",
"unknown"
],
"readOnly": true
},
"target": {
"allOf": [
{
"$ref": "#/components/schemas/TaskCompact"
},
{
"type": "object",
"readOnly": true,
"description": "The object this story is associated with. Currently may only be a task."
}
]
}
}
},
"StoryResponseDates": {
"description": "*Conditional*",
"type": "object",
"readOnly": true,
"properties": {
"start_on": {
"description": "The day on which work for this goal begins, or null if the goal has no start date. This takes a date with `YYYY-MM-DD` format, and cannot be set unless there is an accompanying due date.",
"type": "string",
"format": "date",
"nullable": true
},
"due_at": {
"description": "The UTC date and time on which this task is due, or null if the task has no due time. This takes an ISO 8601 date string in UTC and should not be used together with `due_on`.",
"type": "string",
"format": "date-time",
"nullable": true
},
"due_on": {
"description": "The localized day on which this goal is due. This takes a date with format `YYYY-MM-DD`.",
"type": "string",
"format": "date"
}
}
},
"TagCompact": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "task"
},
"name": {
"description": "Name of the tag. This is generally a short sentence fragment that fits on a line in the UI for maximum readability. However, it can be longer.",
"type": "string",
"example": "Stuff to buy"
}
}
},
"TaskCompact": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "task"
},
"name": {
"description": "The name of the task.",
"type": "string",
"example": "Bug Task"
},
"resource_subtype": {
"type": "string",
"description": "The subtype of this resource. Different subtypes retain many of the same fields and behavior, but may render differently in Asana or represent resources with different semantic meaning.\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",
"section",
"approval"
],
"example": "default_task"
}
}
},
"TaskDuplicateRequest": {
"type": "object",
"properties": {
"name": {
"description": "The name of the new task.",
"type": "string",
"example": "New Task Name"
},
"include": {
"description": "The fields that will be duplicated to the new task.",
"type": "string",
"enum": [
"notes",
"assignee",
"subtasks",
"attachments",
"tags",
"followers",
"projects",
"dates",
"dependencies",
"parent"
]
}
}
},
"TaskResponse": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "task"
},
"name": {
"description": "The name of the task.",
"type": "string",
"example": "Bug Task"
},
"resource_subtype": {
"type": "string",
"description": "The subtype of this resource. Different subtypes retain many of the same fields and behavior, but may render differently in Asana or represent resources with different semantic meaning.\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",
"section",
"approval"
],
"example": "default_task"
},
"approval_status": {
"type": "string",
"description": "*Conditional* Reflects the approval status of this task. This field is kept in sync with `completed`, meaning `pending` translates to false while `approved`, `rejected`, and `changes_requested` translate to true. If you set completed to true, this field will be set to `approved`.",
"enum": [
"pending",
"approved",
"rejected",
"changes_requested"
],
"example": "pending"
},
"assignee_status": {
"description": "*Deprecated* Scheduling status of this task for the user it is assigned to. This field can only be set if the assignee is non-null. Setting this field to \"inbox\" or \"upcoming\" inserts it at the top of the section, while the other options will insert at the bottom.",
"type": "string",
"enum": [
"today",
"upcoming",
"later",
"new",
"inbox"
],
"example": "upcoming"
},
"completed": {
"description": "True if the task is currently marked complete, false if not.",
"type": "boolean",
"example": false
},
"completed_at": {
"description": "The time at which this task was completed, or null if the task is incomplete.",
"type": "string",
"format": "date-time",
"readOnly": true,
"nullable": true,
"example": "2012-02-22T02:06:58.147Z"
},
"completed_by": {
"allOf": [
{
"$ref": "#/components/schemas/UserCompact"
},
{
"type": "object",
"readOnly": true
}
]
},
"created_at": {
"description": "The time at which this resource was created.",
"type": "string",
"format": "date-time",
"readOnly": true,
"example": "2012-02-22T02:06:58.147Z"
},
"dependencies": {
"description": "[OptIn](/docs/inputoutput-options). Array of resources referencing tasks that this task depends on. The objects contain only the gid of the dependency.",
"type": "array",
"items": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "task"
}
}
},
"readOnly": true
},
"dependents": {
"description": "[OptIn](/docs/inputoutput-options). Array of resources referencing tasks that depend on this task. The objects contain only the ID of the dependent.",
"type": "array",
"items": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "task"
}
}
},
"readOnly": true
},
"due_at": {
"description": "The UTC date and time on which this task is due, or null if the task has no due time. This takes an ISO 8601 date string in UTC and should not be used together with `due_on`.",
"type": "string",
"format": "date",
"example": "2019-09-15",
"nullable": true
},
"due_on": {
"description": "The localized date on which this task is due, or null if the task has no due date. This takes a date with `YYYY-MM-DD` format and should not be used together with `due_at`.",
"type": "string",
"format": "date",
"example": "2019-09-15",
"nullable": true
},
"external": {
"description": "*OAuth Required*. *Conditional*. This field is returned only if external values are set or included by using [Opt In] (/docs/inputoutput-options).\nThe external field allows you to store app-specific metadata on tasks, including a gid that can be used to retrieve tasks and a data blob that can store app-specific character strings. Note that you will need to authenticate with Oauth to access or modify this data. Once an external gid is set, you can use the notation `external:custom_gid` to reference your object anywhere in the API where you may use the original object gid. See the page on Custom External Data for more details.",
"type": "object",
"properties": {
"gid": {
"type": "string",
"example": "1234"
},
"data": {
"type": "string",
"example": "A blob of information."
}
},
"example": {
"gid": "my_gid",
"data": "A blob of information"
}
},
"html_notes": {
"description": "[Opt In](/docs/inputoutput-options). The notes of the text with formatting as HTML.",
"type": "string",
"example": "<body>Mittens <em>really</em> likes the stuff from Humboldt.</body>"
},
"hearted": {
"description": "*Deprecated - please use liked instead* True if the task is hearted by the authorized user, false if not.",
"type": "boolean",
"example": true,
"readOnly": true
},
"hearts": {
"description": "*Deprecated - please use likes instead* Array of likes for users who have hearted this task.",
"type": "array",
"items": {
"$ref": "#/components/schemas/Like"
},
"readOnly": true
},
"is_rendered_as_separator": {
"description": "[Opt In](/docs/inputoutput-options). In some contexts tasks can be rendered as a visual separator; for instance, subtasks can appear similar to [sections](/reference/sections) without being true `section` objects. If a `task` object is rendered this way in any context it will have the property `is_rendered_as_separator` set to `true`.",
"type": "boolean",
"example": false,
"readOnly": true
},
"liked": {
"description": "True if the task is liked by the authorized user, false if not.",
"type": "boolean",
"example": true
},
"likes": {
"description": "Array of likes for users who have liked this task.",
"type": "array",
"items": {
"$ref": "#/components/schemas/Like"
},
"readOnly": true
},
"memberships": {
"description": "*Create-only*. Array of projects this task is associated with and the section it is in. At task creation time, this array can be used to add the task to specific sections. After task creation, these associations can be modified using the `addProject` and `removeProject` endpoints. Note that over time, more types of memberships may be added to this property.",
"type": "array",
"readOnly": true,
"items": {
"type": "object",
"properties": {
"project": {
"$ref": "#/components/schemas/ProjectCompact"
},
"section": {
"$ref": "#/components/schemas/SectionCompact"
}
}
}
},
"modified_at": {
"description": "The time at which this task was last modified.\n\n*Note: This does not currently reflect any changes in\nassociations such as projects or comments that may have been\nadded or removed from the task.*",
"type": "string",
"format": "date-time",
"readOnly": true,
"example": "2012-02-22T02:06:58.147Z"
},
"notes": {
"description": "Free-form textual information associated with the task (i.e. its description).",
"type": "string",
"example": "Mittens really likes the stuff from Humboldt."
},
"num_hearts": {
"description": "*Deprecated - please use likes instead* The number of users who have hearted this task.",
"type": "integer",
"example": 5,
"readOnly": true
},
"num_likes": {
"description": "The number of users who have liked this task.",
"type": "integer",
"example": 5,
"readOnly": true
},
"num_subtasks": {
"description": "[Opt In](/docs/inputoutput-options). The number of subtasks on this task.\n",
"type": "integer",
"example": 3,
"readOnly": true
},
"start_at": {
"description": "Date and time on which work begins for the task, or null if the task has no start time. This takes an ISO 8601 date string in UTC and should not be used together with `start_on`.\n*Note: `due_at` must be present in the request when setting or unsetting the `start_at` parameter.*",
"type": "string",
"nullable": true,
"format": "date",
"example": "2019-09-14"
},
"start_on": {
"description": "The day on which work begins for the task , or null if the task has no start date. This takes a date with `YYYY-MM-DD` format and should not be used together with `start_at`.\n*Note: `due_on` or `due_at` must be present in the request when setting or unsetting the `start_on` parameter.*",
"type": "string",
"nullable": true,
"format": "date",
"example": "2019-09-14"
},
"actual_time_minutes": {
"description": "This value represents the sum of all the Time Tracking entries in the Actual Time field on a given Task. It is represented as a nullable long value.",
"type": "number",
"example": 200,
"readOnly": true,
"nullable": true
},
"assignee": {
"allOf": [
{
"$ref": "#/components/schemas/UserCompact"
},
{
"type": "object",
"nullable": true
}
]
},
"assignee_section": {
"allOf": [
{
"$ref": "#/components/schemas/SectionCompact"
},
{
"type": "object",
"nullable": true
},
{
"description": "The *assignee section* is a subdivision of a project that groups tasks together in the assignee's \"My Tasks\" list. It can either be a header above a list of tasks in a list view or a column in a board view of \"My Tasks.\"\nThe `assignee_section` property will be returned in the response only if the request was sent by the user who is the assignee of the task. Note that you can only write to `assignee_section` with the gid of an existing section visible in the user's \"My Tasks\" list."
}
]
},
"custom_fields": {
"description": "Array of custom field values applied to the task. These represent the custom field values recorded on this project for a particular custom field. For example, these custom field values will contain an `enum_value` property for custom fields of type `enum`, a `text_value` property for custom fields of type `text`, and so on. Please note that the `gid` returned on each custom field value *is identical* to the `gid` of the custom field, which allows referencing the custom field metadata through the `/custom_fields/custom_field-gid` endpoint.",
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFieldResponse"
},
"readOnly": true
},
"followers": {
"description": "Array of users following this task.",
"type": "array",
"readOnly": true,
"items": {
"$ref": "#/components/schemas/UserCompact"
}
},
"parent": {
"allOf": [
{
"$ref": "#/components/schemas/TaskCompact"
},
{
"type": "object",
"readOnly": true,
"description": "The parent of this task, or `null` if this is not a subtask. This property cannot be modified using a PUT request but you can change it with the `setParent` endpoint. You can create subtasks by using the subtasks endpoint.",
"nullable": true
}
]
},
"projects": {
"description": "*Create-only.* Array of projects this task is associated with. At task creation time, this array can be used to add the task to many projects at once. After task creation, these associations can be modified using the addProject and removeProject endpoints.",
"type": "array",
"readOnly": true,
"items": {
"$ref": "#/components/schemas/ProjectCompact"
}
},
"tags": {
"description": "Array of tags associated with this task. In order to change tags on an existing task use `addTag` and `removeTag`.",
"type": "array",
"readOnly": true,
"items": {
"$ref": "#/components/schemas/TagCompact"
},
"example": [
{
"gid": "59746",
"name": "Grade A"
}
]
},
"workspace": {
"allOf": [
{
"$ref": "#/components/schemas/WorkspaceCompact"
},
{
"type": "object",
"readOnly": true,
"description": "*Create-only*. The workspace this task is associated with. Once created, task cannot be moved to a different workspace. This attribute can only be specified at creation time."
}
]
},
"permalink_url": {
"type": "string",
"readOnly": true,
"description": "A url that points directly to the object within Asana.",
"example": "https://app.asana.com/0/resource/123456789/list"
}
}
},
"TaskRequest": {
"type": "object",
"properties": {
"name": {
"description": "The name of the task.",
"type": "string",
"example": "Bug Task"
},
"resource_subtype": {
"type": "string",
"description": "The subtype of this resource. Different subtypes retain many of the same fields and behavior, but may render differently in Asana or represent resources with different semantic meaning.\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",
"section",
"approval"
],
"example": "default_task"
},
"approval_status": {
"type": "string",
"description": "*Conditional* Reflects the approval status of this task. This field is kept in sync with `completed`, meaning `pending` translates to false while `approved`, `rejected`, and `changes_requested` translate to true. If you set completed to true, this field will be set to `approved`.",
"enum": [
"pending",
"approved",
"rejected",
"changes_requested"
],
"example": "pending"
},
"assignee_status": {
"description": "*Deprecated* Scheduling status of this task for the user it is assigned to. This field can only be set if the assignee is non-null. Setting this field to \"inbox\" or \"upcoming\" inserts it at the top of the section, while the other options will insert at the bottom.",
"type": "string",
"enum": [
"today",
"upcoming",
"later",
"new",
"inbox"
],
"example": "upcoming"
},
"completed": {
"description": "True if the task is currently marked complete, false if not.",
"type": "boolean",
"example": false
},
"due_at": {
"description": "The UTC date and time on which this task is due, or null if the task has no due time. This takes an ISO 8601 date string in UTC and should not be used together with `due_on`.",
"type": "string",
"format": "date",
"example": "2019-09-15",
"nullable": true
},
"due_on": {
"description": "The localized date on which this task is due, or null if the task has no due date. This takes a date with `YYYY-MM-DD` format and should not be used together with `due_at`.",
"type": "string",
"format": "date",
"example": "2019-09-15",
"nullable": true
},
"external": {
"description": "*OAuth Required*. *Conditional*. This field is returned only if external values are set or included by using [Opt In] (/docs/inputoutput-options).\nThe external field allows you to store app-specific metadata on tasks, including a gid that can be used to retrieve tasks and a data blob that can store app-specific character strings. Note that you will need to authenticate with Oauth to access or modify this data. Once an external gid is set, you can use the notation `external:custom_gid` to reference your object anywhere in the API where you may use the original object gid. See the page on Custom External Data for more details.",
"type": "object",
"properties": {
"gid": {
"type": "string",
"example": "1234"
},
"data": {
"type": "string",
"example": "A blob of information."
}
},
"example": {
"gid": "my_gid",
"data": "A blob of information"
}
},
"html_notes": {
"description": "[Opt In](/docs/inputoutput-options). The notes of the text with formatting as HTML.",
"type": "string",
"example": "<body>Mittens <em>really</em> likes the stuff from Humboldt.</body>"
},
"liked": {
"description": "True if the task is liked by the authorized user, false if not.",
"type": "boolean",
"example": true
},
"notes": {
"description": "Free-form textual information associated with the task (i.e. its description).",
"type": "string",
"example": "Mittens really likes the stuff from Humboldt."
},
"start_at": {
"description": "Date and time on which work begins for the task, or null if the task has no start time. This takes an ISO 8601 date string in UTC and should not be used together with `start_on`.\n*Note: `due_at` must be present in the request when setting or unsetting the `start_at` parameter.*",
"type": "string",
"nullable": true,
"format": "date",
"example": "2019-09-14"
},
"start_on": {
"description": "The day on which work begins for the task , or null if the task has no start date. This takes a date with `YYYY-MM-DD` format and should not be used together with `start_at`.\n*Note: `due_on` or `due_at` must be present in the request when setting or unsetting the `start_on` parameter.*",
"type": "string",
"nullable": true,
"format": "date",
"example": "2019-09-14"
},
"assignee_section": {
"nullable": true,
"type": "string",
"description": "The *assignee section* is a subdivision of a project that groups tasks together in the assignee's \"My Tasks\" list. It can either be a header above a list of tasks in a list view or a column in a board view of \"My Tasks.\"\nThe `assignee_section` property will be returned in the response only if the request was sent by the user who is the assignee of the task. Note that you can only write to `assignee_section` with the gid of an existing section visible in the user's \"My Tasks\" list.",
"example": "12345"
},
"custom_fields": {
"description": "An object where each key is a Custom Field GID and each value is an enum GID, string, number, object, or array.",
"type": "object",
"additionalProperties": {
"type": "string",
"description": "\"{custom_field_gid}\" => Value (Can be text, number, etc.)"
},
"example": {
"5678904321": "On Hold",
"4578152156": "Not Started"
}
},
"followers": {
"type": "array",
"description": "*Create-Only* An array of strings identifying users. These can either be the string \"me\", an email, or the gid of a user. In order to change followers on an existing task use `addFollowers` and `removeFollowers`.",
"items": {
"type": "string",
"description": "Gid of a user."
},
"example": [
"12345"
]
},
"projects": {
"type": "array",
"description": "*Create-Only* Array of project gids. In order to change projects on an existing task use `addProject` and `removeProject`.",
"items": {
"type": "string",
"description": "Gid of a project."
},
"example": [
"12345"
]
},
"tags": {
"type": "array",
"description": "*Create-Only* Array of tag gids. In order to change tags on an existing task use `addTag` and `removeTag`.",
"items": {
"type": "string",
"description": "Gid of a tag."
},
"example": [
"12345"
]
}
}
},
"TeamCompact": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "task"
},
"name": {
"description": "The name of the team.",
"type": "string",
"example": "Marketing"
}
}
},
"UserCompact": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "user"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user’s name.",
"example": "Greg Sanchez"
}
}
},
"UserResponse": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "user"
},
"name": {
"type": "string",
"description": "*Read-only except when same user as requester*. The user’s name.",
"example": "Greg Sanchez"
},
"email": {
"type": "string",
"format": "email",
"readOnly": true,
"description": "The user's email address.",
"example": "gsanchez@example.com"
},
"photo": {
"type": "object",
"nullable": true,
"properties": {
"image_21x21": {
"type": "string",
"format": "uri",
"example": "https://..."
},
"image_27x27": {
"type": "string",
"format": "uri",
"example": "https://..."
},
"image_36x36": {
"type": "string",
"format": "uri",
"example": "https://..."
},
"image_60x60": {
"type": "string",
"format": "uri",
"example": "https://..."
},
"image_128x128": {
"type": "string",
"format": "uri",
"example": "https://..."
},
"image_1024x1024": {
"type": "string",
"format": "uri",
"example": "https://..."
}
},
"readOnly": true,
"description": "A map of the user’s profile photo in various sizes, or null if no photo is set. Sizes provided are 21, 27, 36, 60, 128, and 1024. All images are in PNG format, except for 1024 (which is in JPEG format).",
"example": {
"image_21x21": "https://...",
"image_27x27": "https://...",
"image_36x36": "https://...",
"image_60x60": "https://...",
"image_128x128": "https://...",
"image_1024x1024": "https://..."
}
},
"workspaces": {
"description": "Workspaces and organizations this user may access.\n\nNote: The API will only return workspaces and organizations that\nalso contain the authenticated user.",
"readOnly": true,
"type": "array",
"items": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "workspace"
},
"name": {
"description": "The name of the workspace.",
"type": "string",
"example": "My Company Workspace"
}
}
}
}
}
},
"WorkspaceCompact": {
"type": "object",
"properties": {
"gid": {
"description": "Globally unique identifier of the resource, as a string.",
"type": "string",
"readOnly": true,
"example": "12345"
},
"resource_type": {
"description": "The base type of this resource.",
"type": "string",
"readOnly": true,
"example": "workspace"
},
"name": {
"description": "The name of the workspace.",
"type": "string",
"example": "My Company Workspace"
}
}
}
},
"securitySchemes": {
"personal_access_token": {
"type": "http",
"description": "A personal access token allows access to the api for the user who created it. This should be kept a secret and be treated like a password.",
"scheme": "bearer"
},
"oauth2": {
"type": "oauth2",
"description": "We require that applications designed to access the Asana API on behalf of multiple users implement OAuth 2.0. Asana supports the Authorization Code Grant flow.",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://app.asana.com/-/oauth_authorize",
"tokenUrl": "https://app.asana.com/-/oauth_token",
"refreshUrl": "https://app.asana.com/-/oauth_token",
"scopes": {
"default": "Provides access to all endpoints documented in our API reference. If no scopes are requested, this scope is assumed by default.",
"openid": "Provides access to OpenID Connect ID tokens and the OpenID Connect user info endpoint.",
"email": "Provides access to the user’s email through the OpenID Connect user info endpoint.",
"profile": "Provides access to the user’s name and profile photo through the OpenID Connect user info endpoint."
}
}
}
}
}
},
"security": [
{
"personal_access_token": []
},
{
"oauth2": []
}
],
"tags": [
{
"name": "Projects",
"description": "A project represents a prioritized list of tasks in Asana or a board\nwith columns of tasks represented as cards. A project exists in a single\nworkspace or organization and is accessible to a subset of users in that\nworkspace or organization, depending on its permissions.\n\nProjects in organizations are shared with a single team. Currently, the team\nof a project cannot be changed via the API. Non-organization\nworkspaces do not have teams and so you should not specify the team of\nproject in a regular workspace.\n\nFollowers of a project are a subset of the members of that project.\nFollowers of a project will receive all updates including tasks\ncreated, added and removed from that project. Members of the project\nhave access to and will receive status updates of the project. Adding\nfollowers to a project will add them as members if they are not\nalready, removing followers from a project will not affect membership.\n\n**Note:** You can use certain project endpoints to operate on\n[user task lists](/reference/user-task-lists) ([My Tasks](https://asana.com/guide/help/fundamentals/my-tasks))\nby substituting the `{project_gid}` with the `{user_task_list_gid}`. For example, you can perform\noperations on the custom fields of a user task list by using the following\nprojects endpoints: [Add a custom field to a project](/reference/addcustomfieldsettingforproject),\n[Remove a custom field from a project](/reference/removecustomfieldsettingforproject) and\n[Get a project's custom fields](/reference/getcustomfieldsettingsforproject)"
},
{
"name": "Tasks",
"description": "The task is the basic object around which many operations in Asana are\ncentered. In the Asana application, multiple tasks populate the\nmiddle pane according to some view parameters, and the set of selected\ntasks determines the more detailed information presented in the\ndetails pane.\n\nSections are unique in that they will be included in the `memberships`\nfield of task objects returned in the API when the task is within a\nsection. They can also be used to manipulate the ordering of a task\nwithin a project.\n\n[Queries](/reference/gettasks)\nreturn a [compact representation of each task object](/reference/tasks). To\nretrieve *all* fields or *specific set* of the fields, use\n[field selectors](/docs/inputoutput-options) to manipulate what data is included in a response."
},
{
"name": "Sections",
"description": "A section is a subdivision of a project that groups tasks together. It can either be a header above a list of tasks in a list view or a column in a board view of a project.\n\nSections are largely a shared idiom in Asana’s API for both list and board views of a project regardless of the project’s layout.\n\nThe ‘memberships’ property when [getting a task](/reference/gettask) will return the information for the section or the column under ‘section’ in the response."
},
{
"name": "Stories",
"description": "*See [our forum post](https://forum.asana.com/t/no-more-parsing-story-text-new-fields-on-stories/42924) for more info on when conditional fields are returned.*\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": "Typeahead",
"description": "The typeahead search API provides search for objects from a single workspace."
},
{
"name": "Users",
"description": "A user object represents an account in Asana that can be given access to various workspaces, projects, and tasks."
}
],
"externalDocs": {
"description": "API Reference",
"url": "https://developers.asana.com/reference"
}
}