Asana logo

Asana

Asana

Asana API lets apps read and write tasks, projects, goals, and portfolios — the primary integration entry point for team collaboration.

Visit site ↗Health checked 9h ago
Use it when

Clean resource model: workspace → project → task → subtask

Watch for

Free-tier workspaces restrict some advanced APIs (portfolios, goals require paid plans)

First check

At app.asana.com create a Personal Access Token (simplest for personal use) or register an OAuth App. Send Authorization: Bearer <token>. Official SDKs in Python, JS, etc.

Auth
oauth
CORS
No
HTTPS
Yes
Signup
Required
Latency
693 ms
Protocol
REST
Pricing
freemium

Uptime · 30-day window

Probes: 1Uptime: 100%Avg latency: 693ms
01

About this API

Asana has one of the cleaner API designs among enterprise collaboration tools. The resource model is hierarchical and clear: workspace is the top container, project is a sub-unit, task is the basic work item, subtask decomposes further. Custom fields let enterprises define their own attributes (customer name, priority, alternate due date) — visible in the UI and read/write via API.

Webhooks are the key integration capability — subscribe to resources (e.g. tasks in a project) and Asana POSTs change events to your endpoint. Combined with PATCH endpoints, you can build bidirectional sync: external tool modifies a Linear issue → sync into Asana task; Asana task completes → reverse-update the external system.

Rate limits are two-tier per token: ~150 calls/minute and ~1,500/hour. Bulk imports (initializing thousands of external issues at once) need exponential backoff or batched runs.

02

What you can build

  • 1Sync external issues/tickets into Asana tasks
  • 2Generate progress reports from Asana data
  • 3Trigger webhooks to mirror task changes elsewhere
  • 4Schedule task creation automations
  • 5Read project status for internal team tools
03

Strengths & limitations

Strengths

  • Clean resource model: workspace → project → task → subtask
  • Webhooks subscribe to task-level changes
  • Custom fields API persists enterprise-specific data

Limitations

  • Free-tier workspaces restrict some advanced APIs (portfolios, goals require paid plans)
  • Per-minute and per-hour rate limits — batch syncs need backoff
04

Example request

Generic template — replace <endpoint> with the real path from the docs.
curl https://asana.com/support/<endpoint> \
  -H "Authorization: Bearer $ACCESS_TOKEN"
05

Getting started

At app.asana.com create a Personal Access Token (simplest for personal use) or register an OAuth App. Send Authorization: Bearer <token>. Official SDKs in Python, JS, etc.

06

FAQ

Are API calls free?+

The API itself is free; some advanced resources (portfolios, goals) require a paid workspace plan.

How do I subscribe to task changes?+

Call webhooks.create against a resource (e.g. a project gid). Asana sends a handshake request first to validate the endpoint.

How should I manage tokens?+

PATs suit personal scripts. For team distribution use an OAuth App so users can revoke and tokens auto-refresh.

07

Technical details

CORS: NoHTTPS: YesSignup: YesOpen source: No
Auth type
oauth
Pricing
freemium
Protocols
REST
SDKs
python, javascript, ruby, go, java
Response time
693 ms
Last health check
5/12/2026, 7:36:56 AM
08

Endpoints

Parsed from the OpenAPI spec. Showing 12 of 167 non-deprecated endpoints.

GET
/attachmentsAttachments

Get attachments from an object

parent:query*
POST
/attachmentsAttachments

Upload an attachment

DELETE
/attachments/{attachment_gid}Attachments

Delete an attachment

GET
/attachments/{attachment_gid}Attachments

Get an attachment

POST
/batchBatch API

Submit parallel requests

POST
/custom_fieldsCustom fields

Create a custom field

DELETE
/custom_fields/{custom_field_gid}Custom fields

Delete a custom field

GET
/custom_fields/{custom_field_gid}Custom fields

Get a custom field

PUT
/custom_fields/{custom_field_gid}Custom fields

Update a custom field

POST
/custom_fields/{custom_field_gid}/enum_optionsCustom fields

Create an enum option

POST
/custom_fields/{custom_field_gid}/enum_options/insertCustom fields

Reorder a custom field's enum

PUT
/enum_options/{enum_option_gid}Custom fields

Update an enum option

enum_option_gid:path*

155 more endpoints not shown. See the OpenAPI spec for the full list.

09

Tags

10

Alternatives to consider

Different providers solving similar problems. Picked by category, auth, pricing, and tag overlap.