API Reference Card
| Detail | Value |
|---|---|
| Base URL | https://app.asana.com/api/1.0 |
| Auth | Personal Access Token (PAT) or OAuth 2.0 |
| Rate limits | Free: ~150 req/min. Premium/Business/Enterprise: ~1,500 req/min |
| Key endpoints | GET /projects/{id}/tasks, GET /tasks/{id}, POST /tasks/{id}/stories, GET /tasks/{id}/subtasks |
| Pagination | Cursor-based via offset token; max 100 items per page |
| Mavera base | https://app.mavera.io/api/v1 |
| Mavera auth | Authorization: Bearer mvra_live_... |
All examples use
ASANA_PAT (a Personal Access Token from Asana Developer Console) and MAVERA_API_KEY. PATs have the same permissions as the user who created them.Prerequisites
Create an Asana Personal Access Token
Go to app.asana.com/0/developer-console → Personal Access Tokens → Create New Token. Copy it immediately — it won’t be shown again.
Identify project GIDs
Every Asana project, task, and user has a GID (global ID). Find project GIDs in the URL:
app.asana.com/0/{project_gid}/... or via GET /projects.Mavera API key
Get your key from Mavera dashboard.
Jobs
| # | Job | Asana Data | Mavera Surface | Output |
|---|---|---|---|---|
| 1 | Campaign Task Tracking → Content Status | Project tasks + custom fields | Mave Agent | Campaign status report |
| 2 | Brief → Generation Automation | Completed brief tasks | Generate | Draft content + Asana attachment |
| 3 | Sprint Retro Notes → Messaging Insights | Task descriptions + comments | Mave Agent | Messaging strategy insights |
Rate Limits & Production Notes
| Plan | Rate Limit | Strategy |
|---|---|---|
| Free | ~150 req/min | 400ms between calls; batch with opt_fields |
| Premium | ~1,500 req/min | Parallel requests OK; respect Retry-After header |
| Business/Enterprise | ~1,500 req/min | Use webhooks for event-driven automation |
- Authentication: PATs inherit user permissions and don’t expire (but can be revoked). For team automations, use a Service Account with OAuth 2.0.
- Pagination: All list endpoints return max 100 items. Follow
next_page.offsetuntil it’s null. - opt_fields: Always specify
opt_fields— Asana returns minimal data by default. Without it, you get onlygidandname. - Webhooks: For the “Brief → Generate” automation, consider Asana webhooks instead of polling. Create a webhook on the project and trigger generation when a task moves to the “Brief Complete” section.
- Idempotency: Check for existing comments before posting duplicate drafts. Search stories for your bot’s marker text.
- Mavera credits: Monitor at Dashboard.