asana

SKILL.md

Asana

Query and manage Asana data via REST API v1.

Auth

Requires ASANA_API_KEY environment variable.

ASANA_TOKEN="$ASANA_API_KEY"

All requests use header: -H "Authorization: Bearer $ASANA_TOKEN"

Base URL: https://app.asana.com/api/1.0

Setup

You need your workspace GID. Find it:

curl -s "https://app.asana.com/api/1.0/workspaces" \
  -H "Authorization: Bearer $ASANA_TOKEN"

List projects in a workspace:

curl -s "https://app.asana.com/api/1.0/projects?workspace=WORKSPACE_GID&opt_fields=name" \
  -H "Authorization: Bearer $ASANA_TOKEN"

Common Queries

My tasks (assigned to me, incomplete):

curl -s "https://app.asana.com/api/1.0/tasks?assignee=me&workspace=WORKSPACE_GID&completed_since=now&opt_fields=name,due_on,projects.name,assignee_section.name" \
  -H "Authorization: Bearer $ASANA_TOKEN"

Tasks in a project (with sections and assignees):

curl -s "https://app.asana.com/api/1.0/tasks?project=PROJECT_GID&completed_since=now&opt_fields=name,due_on,assignee.name,memberships.section.name" \
  -H "Authorization: Bearer $ASANA_TOKEN"

Overdue tasks (my tasks, then filter due_on < today):

curl -s "https://app.asana.com/api/1.0/tasks?assignee=me&workspace=WORKSPACE_GID&completed_since=now&opt_fields=name,due_on,projects.name" \
  -H "Authorization: Bearer $ASANA_TOKEN"
# Filter in code: due_on < today's date

Search tasks (full-text):

curl -s "https://app.asana.com/api/1.0/workspaces/WORKSPACE_GID/tasks/search?text=QUERY&completed=false&opt_fields=name,due_on,assignee.name,projects.name" \
  -H "Authorization: Bearer $ASANA_TOKEN"

Tasks due soon (next 7 days):

curl -s "https://app.asana.com/api/1.0/workspaces/WORKSPACE_GID/tasks/search?due_on.before=YYYY-MM-DD&due_on.after=YYYY-MM-DD&completed=false&assignee.any=me&opt_fields=name,due_on,projects.name" \
  -H "Authorization: Bearer $ASANA_TOKEN"

Create a task:

curl -s -X POST "https://app.asana.com/api/1.0/tasks" \
  -H "Authorization: Bearer $ASANA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"data":{"name":"Task name","projects":["PROJECT_GID"],"assignee":"me","due_on":"YYYY-MM-DD"}}'

Project sections:

curl -s "https://app.asana.com/api/1.0/projects/PROJECT_GID/sections?opt_fields=name" \
  -H "Authorization: Bearer $ASANA_TOKEN"

Get a specific task:

curl -s "https://app.asana.com/api/1.0/tasks/TASK_GID?opt_fields=name,notes,due_on,assignee.name,projects.name,completed" \
  -H "Authorization: Bearer $ASANA_TOKEN"

Key Response Fields (Tasks)

  • name — task title
  • completed — boolean
  • due_on — date string (YYYY-MM-DD) or null
  • assignee.name — who it's assigned to
  • projects[].name — which project(s)
  • memberships[].section.name — which section within a project
  • notes — task description (plain text)

opt_fields

Asana returns minimal data by default. Use opt_fields to request specific fields (comma-separated). Always include the fields you need.

Pagination

Responses may include next_page.uri — follow it for more results. Default limit: 20. Max: 100 (&limit=100).

Rate Limits

1500 requests per minute. Standard Retry-After header on 429s.

Weekly Installs
3
First Seen
10 days ago
Installed on
openclaw3
gemini-cli3
github-copilot3
codex3
kimi-cli3
cursor3