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
- Category
- Documents & Productivity
- Base URL
https://app.asana.com/api/1.0- Version
- 1.0
- Endpoints
- 167
- OpenAPI
- Specification ↗
- Spec updated
- 2023-03-06
Make a first request
Replace the placeholders; the documentation says exactly where credentials go.
curl -X GET "https://app.asana.com/api/1.0/attachments" \
-H "Accept: application/json" \
-H "X-API-Key: YOUR_API_KEY"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);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
| Method | Path | What it does |
|---|---|---|
| GET | /attachments | Get attachments from an object |
| POST | /attachments | Upload an attachment |
| GET | /attachments/{attachment_gid} | Get an attachment |
| DELETE | /attachments/{attachment_gid} | Delete an attachment |
| POST | /batch | Submit parallel requests |
| POST | /custom_fields | Create 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_options | Create an enum option |
| POST | /custom_fields/{custom_field_gid}/enum_options/insert | Reorder a custom field's enum |
| PUT | /enum_options/{enum_option_gid} | Update an enum option |
| GET | /events | Get events on a resource |
| GET | /goal_relationships | Get goal relationships |
| GET | /goal_relationships/{goal_relationship_gid} | Get a goal relationship |
| PUT | /goal_relationships/{goal_relationship_gid} | Update a goal relationship |
| GET | /goals | Get goals |
| POST | /goals | Create 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}/addFollowers | Add a collaborator to a goal |
| POST | /goals/{goal_gid}/addSupportingRelationship | Add a supporting goal relationship |
| GET | /goals/{goal_gid}/parentGoals | Get parent goals from a goal |
| POST | /goals/{goal_gid}/removeFollowers | Remove a collaborator from a goal |
| POST | /goals/{goal_gid}/removeSupportingRelationship | Removes a supporting goal relationship |
| POST | /goals/{goal_gid}/setMetric | Create a goal metric |
| POST | /goals/{goal_gid}/setMetricCurrentValue | Update a goal metric |
| GET | /jobs/{job_gid} | Get a job by id |
| POST | /organization_exports | Create an organization export request |
| GET | /organization_exports/{organization_export_gid} | Get details on an org export request |
| GET | /portfolio_memberships | Get multiple portfolio memberships |
| GET | /portfolio_memberships/{portfolio_membership_gid} | Get a portfolio membership |
| GET | /portfolios | Get multiple portfolios |
| POST | /portfolios | Create 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}/addCustomFieldSetting | Add a custom field to a portfolio |
| POST | /portfolios/{portfolio_gid}/addItem | Add a portfolio item |
| POST | /portfolios/{portfolio_gid}/addMembers | Add users to a portfolio |
| GET | /portfolios/{portfolio_gid}/custom_field_settings | Get a portfolio's custom fields |
| GET | /portfolios/{portfolio_gid}/items | Get portfolio items |
| GET | /portfolios/{portfolio_gid}/portfolio_memberships | Get memberships from a portfolio |
| POST | /portfolios/{portfolio_gid}/removeCustomFieldSetting | Remove a custom field from a portfolio |
| POST | /portfolios/{portfolio_gid}/removeItem | Remove a portfolio item |
| POST | /portfolios/{portfolio_gid}/removeMembers | Remove 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_templates | Get multiple project templates |
| GET | /project_templates/{project_template_gid} | Get a project template |
| POST | /project_templates/{project_template_gid}/instantiateProject | Instantiate a project from a project template |
| GET | /projects | Get multiple projects |
| POST | /projects | Create 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}/addCustomFieldSetting | Add a custom field to a project |
| POST | /projects/{project_gid}/addFollowers | Add followers to a project |
| POST | /projects/{project_gid}/addMembers | Add users to a project |
| GET | /projects/{project_gid}/custom_field_settings | Get a project's custom fields |
| POST | /projects/{project_gid}/duplicate | Duplicate a project |
| POST | /projects/{project_gid}/project_briefs | Create a project brief |
| GET | /projects/{project_gid}/project_memberships | Get memberships from a project |
| GET | /projects/{project_gid}/project_statuses | Get statuses from a project |
| POST | /projects/{project_gid}/project_statuses | Create a project status |
| POST | /projects/{project_gid}/removeCustomFieldSetting | Remove a custom field from a project |
| POST | /projects/{project_gid}/removeFollowers | Remove followers from a project |
| POST | /projects/{project_gid}/removeMembers | Remove users from a project |
| POST | /projects/{project_gid}/saveAsTemplate | Create a project template from a project |
| GET | /projects/{project_gid}/sections | Get sections in a project |
| POST | /projects/{project_gid}/sections | Create a section in a project |
| POST | /projects/{project_gid}/sections/insert | Move or Insert sections |
| GET | /projects/{project_gid}/task_counts | Get task count of a project |
| GET | /projects/{project_gid}/tasks | Get 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}/addTask | Add task to section |
| GET | /sections/{section_gid}/tasks | Get tasks from a section |
| GET | /status_updates | Get status updates from an object |
| POST | /status_updates | Create 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 | /tags | Get multiple tags |
| POST | /tags | Create 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}/tasks | Get tasks from a tag |
| GET | /tasks | Get multiple tasks |
| POST | /tasks | Create 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.
Similar documents & productivity APIs
Compare alternatives →JIRA
Documents & ProductivityJIRA is a proprietary issue tracking product that allows bug tracking and agile project management
Notion
Documents & ProductivityIntegrate with Notion
DocStruct
Documents & ProductivityAI extraction of invoices, receipts, bank statements & contracts into structured JSON/CSV
ClickUp
Documents & ProductivityClickUp is a robust, cloud-based project management tool for boosting productivity
iLovePDF
Documents & ProductivityConvert, merge, split, extract text and add page numbers for PDFs. Free for 250 documents/month
Airtable
Documents & ProductivityIntegrate with Airtable
Listed from public-apis (MIT), public-apis database (MIT), APIs.guru (CC0).