> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mavera.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Asana

> 3 production-ready jobs — campaign task tracking to content status reports, brief-to-generation automation, and sprint retro notes to messaging insights

Asana organizes your campaigns, briefs, and retros into structured projects with tasks, custom fields, and attachments. These three jobs pull task data from Asana's REST API into Mavera (Generate, Mave Agent) to automate content production from completed briefs, generate campaign status reports, and extract messaging insights from sprint retrospectives.

***

## 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_...`                                                                 |

<Info>
  All examples use `ASANA_PAT` (a Personal Access Token from [Asana Developer Console](https://app.asana.com/0/developer-console)) and `MAVERA_API_KEY`. PATs have the same permissions as the user who created them.
</Info>

***

## Prerequisites

<Steps>
  <Step title="Create an Asana Personal Access Token">Go to [app.asana.com/0/developer-console](https://app.asana.com/0/developer-console) → Personal Access Tokens → Create New Token. Copy it immediately — it won't be shown again.</Step>
  <Step title="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`.</Step>
  <Step title="Mavera API key">Get your key from [Mavera dashboard](https://app.mavera.io/settings/api-keys).</Step>

  <Step title="Environment variables">
    ```bash theme={"dark"}
    export ASANA_PAT="1/1234567890:abcdef..."
    export MAVERA_API_KEY="mvra_live_xxxxx"
    ```
  </Step>
</Steps>

***

## Jobs

| # | Job                                                               | Asana Data                    | Mavera Surface | Output                           |
| - | ----------------------------------------------------------------- | ----------------------------- | -------------- | -------------------------------- |
| 1 | [Campaign Task Tracking → Content Status](campaign-task-tracking) | Project tasks + custom fields | Mave Agent     | Campaign status report           |
| 2 | [Brief → Generation Automation](brief-generation-automation)      | Completed brief tasks         | Generate       | Draft content + Asana attachment |
| 3 | [Sprint Retro Notes → Messaging Insights](sprint-retro-messaging) | 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           |

<Warning>
  Asana's rate limits are **approximate** — they can vary by endpoint and load. Always read the `Retry-After` header on 429 responses. The header value is in seconds. For production, implement a token-bucket rate limiter and use `opt_fields` on every request to minimize response size and processing time.
</Warning>

**Production checklist:**

* **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.offset` until it's null.
* **opt\_fields**: Always specify `opt_fields` — Asana returns minimal data by default. Without it, you get only `gid` and `name`.
* **Webhooks**: For the "Brief → Generate" automation, consider [Asana webhooks](https://developers.asana.com/docs/webhooks-guide) 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](https://app.mavera.io/settings/usage).

***

<CardGroup cols={3}>
  <Card title="All Integrations" icon="plug" href="/integrations" />

  <Card title="Asana API Docs" icon="list-check" href="https://developers.asana.com/reference/rest-api-reference" />

  <Card title="Brand Voice" icon="microphone" href="/features/brand-voice" />

  <Card title="Mave Agent" icon="brain" href="/features/mave-agent" />

  <Card title="Generate" icon="pen" href="/features/content-generation" />
</CardGroup>
