# Asana

![Asana-Logo-Horizontal-Coral-Black.png](https://assets.relyanceuat.xyz/images/docs/5684902701837/5897371406989.png)
Asana is a SaaS platform for project management. It is designed to help you track, keep projects organized, and hit deadlines.

In order to integrate Asana to Relyance AI, you will need an **Access Token**.

#### In Asana:

1. Login to your Asana account.
2. Navigate to the developer console ([https://app.asana.com/0/developer-console](https://app.asana.com/0/developer-console)).
3. Create a **New Access Token**.
4. Copy the access token to be used in Relyance AI.

![Asana-1.png](https://assets.relyanceuat.xyz/images/docs/5684902701837/5684053626893.png)

#### In the Relyance AI application:

1. Login to your Relyance account.
2. Navigate to the **Settings** Menu in the bottom left-hand side.
3. Select **Integrations**.
4. Click on the **Vendors and Data Stores** filter.
5. Find the **Asana** integration card and click it to open its connections.
6. On the **Authentication** step, pick the method under **Authentication Method**.
7. Choose **Custom** under **Authentication Method**.
8. If this connection will be used for Data Subject Requests, click the **Process DSRs** checkbox.
9. Click on **Enable Data Inspection** if you wish to also scan the underlying data. This may require further permissions.
10. Paste the **Personal Account Token** from the Asana page into the respective field.

![Asana-3.png](https://assets.relyanceuat.xyz/images/docs/5684902701837/5684858500749.png)

11. Click **Authenticate**.
12. At this point, you should see the following result on the Vendor Integrations page:
13. Congratulations, you are now connected to **Asana.**

![Asana-2.png](https://assets.relyanceuat.xyz/images/docs/5684902701837/5684454172429.png)

<!-- failure-modes:begin (generated from the integration catalog; do not hand-edit) -->

## If the connection reports Connected but returns nothing

These are the ways this integration comes back empty without reporting an error. Generated from the integration catalog, so it tracks what the connection actually asks for.

1. **A feature you enabled returns nothing.** Some scopes belong to a feature rather than to the connection: **Data subject requests** needs `users:read`, `workspaces:read`. Turning the feature on after the connection exists does not widen the grant it already holds, so re-authenticate the connection.
2. **A credential rotated at the vendor is not picked up here.** **Access Token** is stored when you save the connection, so regenerating the value at the vendor breaks the next scan until it is re-pasted here. Recording the expiry on the connection means Relyance warns you before it lapses.
3. **Throughput is limited on purpose.** **Maximum Concurrent API Calls** defaults to `45`. Raising it past what the vendor allows produces rate-limit errors that surface as a partial scan; it does not change how much data is collected.

<!-- failure-modes:end -->

<!-- auth-methods:begin (generated from the integration catalog; do not hand-edit) -->

## Authentication methods and fields

Pick one of these under **Authentication Method** on the connection wizard's **Authentication** step. This table is generated from the integration catalog, so it always matches what the form actually asks for.

| Method | Required | Optional |
| --- | --- | --- |
| **Custom** | `Access Token` (secret) | `Maximum Concurrent API Calls` |
| **Access Token with Data Inspection** | `Access Token` (secret) | `White List Project IDs`, `Maximum Concurrent API Calls` |

<!-- auth-methods:end -->

<!-- terraform-examples:begin (generated from the integration catalog; do not hand-edit) -->

## Manage this integration with Terraform

Connections for this integration can be managed as code with the [Relyance Terraform provider](https://registry.terraform.io/providers/Relyance/relyance/latest). Non-secret fields go in `auth.params`; secret fields go in `auth.secrets_wo`, which is write-only — never stored in Terraform state. Rotate secrets by bumping `auth.secrets_wo_version`.

### Access token — Custom

```hcl
resource "relyance_integration_connection" "asana_0" {
  vendor = "asana"
  name   = "<your connection name>"

  auth = {
    method = "access-token-standard"
    params = {
      data_storage_location = "us"
    }
    # Secret fields are write-only: sent to Relyance, never stored in state.
    secrets_wo = {
      ACCOUNT_TOKEN = var.asana_account_token
    }
    secrets_wo_version = 1
  }

  scans = { "data-inspection" = { enabled = true } }
}
```

### Access token — Access Token with Data Inspection

```hcl
resource "relyance_integration_connection" "asana_1" {
  vendor = "asana"
  name   = "<your connection name>"

  auth = {
    method = "access-token-with-data-inspection"
    params = {
      data_storage_location = "us"
    }
    # Secret fields are write-only: sent to Relyance, never stored in state.
    secrets_wo = {
      ACCOUNT_TOKEN = var.asana_account_token
    }
    secrets_wo_version = 1
  }

  scans = { "data-inspection" = { enabled = true } }
}
```

<!-- terraform-examples:end -->
