Skip to content

Asana API

by asana.com

API keyHTTPSCORSDocuments & Productivity
Open documentation ↗

Overview

Programmatic access to all data in your asana system

Asana is a documents & productivity API from asana.com. Requests are authenticated with an API key. It is served over HTTPS and allows browser requests (CORS). Its OpenAPI description documents 167 endpoints.

At a glance

Authentication
API key
HTTPS
Yes
CORS
Yes
Base URL
https://app.asana.com/api/1.0
Version
1.0
Endpoints
167
Spec updated
2023-03-06

Make a first request

Replace the placeholders; the documentation says exactly where credentials go.

cURL
curl -X GET "https://app.asana.com/api/1.0/attachments" \
  -H "Accept: application/json" \
  -H "X-API-Key: YOUR_API_KEY"
JavaScript
const response = await fetch("https://app.asana.com/api/1.0/attachments", {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "X-API-Key": "YOUR_API_KEY",
  },
});
const data = await response.json();
console.log(data);
Python
import requests

response = requests.request(
    "GET",
    "https://app.asana.com/api/1.0/attachments",
    headers={
    "Accept": "application/json",
    "X-API-Key": "YOUR_API_KEY",
    },
    timeout=30,
)
print(response.json())

Endpoints

MethodPathWhat it does
GET/attachmentsGet attachments from an object
POST/attachmentsUpload an attachment
GET/attachments/{attachment_gid}Get an attachment
DELETE/attachments/{attachment_gid}Delete an attachment
POST/batchSubmit parallel requests
POST/custom_fieldsCreate a custom field
GET/custom_fields/{custom_field_gid}Get a custom field
PUT/custom_fields/{custom_field_gid}Update a custom field
DELETE/custom_fields/{custom_field_gid}Delete a custom field
POST/custom_fields/{custom_field_gid}/enum_optionsCreate an enum option
POST/custom_fields/{custom_field_gid}/enum_options/insertReorder a custom field's enum
PUT/enum_options/{enum_option_gid}Update an enum option
GET/eventsGet events on a resource
GET/goal_relationshipsGet goal relationships
GET/goal_relationships/{goal_relationship_gid}Get a goal relationship
PUT/goal_relationships/{goal_relationship_gid}Update a goal relationship
GET/goalsGet goals
POST/goalsCreate a goal
GET/goals/{goal_gid}Get a goal
PUT/goals/{goal_gid}Update a goal
DELETE/goals/{goal_gid}Delete a goal
POST/goals/{goal_gid}/addFollowersAdd a collaborator to a goal
POST/goals/{goal_gid}/addSupportingRelationshipAdd a supporting goal relationship
GET/goals/{goal_gid}/parentGoalsGet parent goals from a goal
POST/goals/{goal_gid}/removeFollowersRemove a collaborator from a goal
POST/goals/{goal_gid}/removeSupportingRelationshipRemoves a supporting goal relationship
POST/goals/{goal_gid}/setMetricCreate a goal metric
POST/goals/{goal_gid}/setMetricCurrentValueUpdate a goal metric
GET/jobs/{job_gid}Get a job by id
POST/organization_exportsCreate an organization export request
GET/organization_exports/{organization_export_gid}Get details on an org export request
GET/portfolio_membershipsGet multiple portfolio memberships
GET/portfolio_memberships/{portfolio_membership_gid}Get a portfolio membership
GET/portfoliosGet multiple portfolios
POST/portfoliosCreate a portfolio
GET/portfolios/{portfolio_gid}Get a portfolio
PUT/portfolios/{portfolio_gid}Update a portfolio
DELETE/portfolios/{portfolio_gid}Delete a portfolio
POST/portfolios/{portfolio_gid}/addCustomFieldSettingAdd a custom field to a portfolio
POST/portfolios/{portfolio_gid}/addItemAdd a portfolio item
POST/portfolios/{portfolio_gid}/addMembersAdd users to a portfolio
GET/portfolios/{portfolio_gid}/custom_field_settingsGet a portfolio's custom fields
GET/portfolios/{portfolio_gid}/itemsGet portfolio items
GET/portfolios/{portfolio_gid}/portfolio_membershipsGet memberships from a portfolio
POST/portfolios/{portfolio_gid}/removeCustomFieldSettingRemove a custom field from a portfolio
POST/portfolios/{portfolio_gid}/removeItemRemove a portfolio item
POST/portfolios/{portfolio_gid}/removeMembersRemove users from a portfolio
GET/project_briefs/{project_brief_gid}Get a project brief
PUT/project_briefs/{project_brief_gid}Update a project brief
DELETE/project_briefs/{project_brief_gid}Delete a project brief
GET/project_memberships/{project_membership_gid}Get a project membership
GET/project_statuses/{project_status_gid}Get a project status
DELETE/project_statuses/{project_status_gid}Delete a project status
GET/project_templatesGet multiple project templates
GET/project_templates/{project_template_gid}Get a project template
POST/project_templates/{project_template_gid}/instantiateProjectInstantiate a project from a project template
GET/projectsGet multiple projects
POST/projectsCreate a project
GET/projects/{project_gid}Get a project
PUT/projects/{project_gid}Update a project
DELETE/projects/{project_gid}Delete a project
POST/projects/{project_gid}/addCustomFieldSettingAdd a custom field to a project
POST/projects/{project_gid}/addFollowersAdd followers to a project
POST/projects/{project_gid}/addMembersAdd users to a project
GET/projects/{project_gid}/custom_field_settingsGet a project's custom fields
POST/projects/{project_gid}/duplicateDuplicate a project
POST/projects/{project_gid}/project_briefsCreate a project brief
GET/projects/{project_gid}/project_membershipsGet memberships from a project
GET/projects/{project_gid}/project_statusesGet statuses from a project
POST/projects/{project_gid}/project_statusesCreate a project status
POST/projects/{project_gid}/removeCustomFieldSettingRemove a custom field from a project
POST/projects/{project_gid}/removeFollowersRemove followers from a project
POST/projects/{project_gid}/removeMembersRemove users from a project
POST/projects/{project_gid}/saveAsTemplateCreate a project template from a project
GET/projects/{project_gid}/sectionsGet sections in a project
POST/projects/{project_gid}/sectionsCreate a section in a project
POST/projects/{project_gid}/sections/insertMove or Insert sections
GET/projects/{project_gid}/task_countsGet task count of a project
GET/projects/{project_gid}/tasksGet tasks from a project
GET/sections/{section_gid}Get a section
PUT/sections/{section_gid}Update a section
DELETE/sections/{section_gid}Delete a section
POST/sections/{section_gid}/addTaskAdd task to section
GET/sections/{section_gid}/tasksGet tasks from a section
GET/status_updatesGet status updates from an object
POST/status_updatesCreate a status update
GET/status_updates/{status_gid}Get a status update
DELETE/status_updates/{status_gid}Delete a status update
GET/stories/{story_gid}Get a story
PUT/stories/{story_gid}Update a story
DELETE/stories/{story_gid}Delete a story
GET/tagsGet multiple tags
POST/tagsCreate a tag
GET/tags/{tag_gid}Get a tag
PUT/tags/{tag_gid}Update a tag
DELETE/tags/{tag_gid}Delete a tag
GET/tags/{tag_gid}/tasksGet tasks from a tag
GET/tasksGet multiple tasks
POST/tasksCreate a task
GET/tasks/{task_gid}Get a task

Showing the first 100 of 167 endpoints; the full list is in the documentation.

Questions

Does the Asana API need an API key?

Yes. The Asana API uses API key authentication; the documentation explains how to get credentials.

Can I call the Asana API from the browser?

Yes. The Asana API sends CORS headers, so a web page can call it directly with fetch().

Does the Asana API support HTTPS?

Yes, the Asana API is served over HTTPS.

How many endpoints does the Asana API have?

Its OpenAPI description lists 167 endpoints in version 1.0. The first 100 are shown on this page.

What are alternatives to the Asana API?

Other Documents & Productivity APIs include JIRA, Notion, DocStruct, ClickUp, iLovePDF.

Compare alternatives →

Listed from public-apis (MIT), public-apis database (MIT), APIs.guru (CC0).