Plugins
Asana
Manage tasks and projects with webhook handshake support.
Authentication
| Type | Default | Details |
|---|---|---|
api_key | ✅ | Personal Access Token |
oauth_2 | Asana OAuth with default scope |
Endpoints
| Path | Risk | Description |
|---|---|---|
tasks.list | read | List tasks. |
tasks.get | read | Get a task. |
tasks.create | write | Create a task. |
tasks.update | write | Update a task. |
tasks.delete | destructive | Delete a task. |
tasks.addToProject | write | Add a task to a project. |
tasks.addComment | write | Post a comment on a task. |
projects.list | read | List projects. |
projects.get | read | Get a project. |
users.me | read | Get the authenticated user. |
tasks.list
List tasks in a workspace.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
workspace | string | ✅ | Workspace GID |
assignee | string | Assignee GID | |
completed_since | string | ISO datetime | |
limit | number | Max results |
Output: AsanaTask[]
tasks.get
Get a single task.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
gid | string | ✅ | Task GID |
Output: AsanaTask
tasks.create
Create a new task.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | ✅ | Task name |
notes | string | Task description | |
assignee | string | Assignee GID | |
due_on | string | Due date (YYYY-MM-DD) | |
projects | string[] | Project GIDs | |
workspace | string | ✅ | Workspace GID |
Output: AsanaTask
tasks.update
Update an existing task.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
gid | string | ✅ | Task GID |
name | string | New name | |
notes | string | New description | |
completed | boolean | Mark complete/incomplete | |
assignee | string | New assignee | |
due_on | string | New due date |
Output: AsanaTask
tasks.delete
Delete a task permanently.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
gid | string | ✅ | Task GID |
Output: { ok: boolean }
tasks.addToProject
Add a task to a project (optionally a section).
Input:
| Field | Type | Required | Description |
|---|---|---|---|
gid | string | ✅ | Task GID |
project | string | ✅ | Project GID |
section | string | Section GID |
Output: { ok: boolean }
tasks.addComment
Post a comment (story) on a task.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
gid | string | ✅ | Task GID |
text | string | ✅ | Comment text |
Output: { gid: string; text: string }
projects.list
List projects in a workspace.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
workspace | string | ✅ | Workspace GID |
archived | boolean | Include archived projects | |
limit | number | Max results |
Output: AsanaProject[]
projects.get
Get a single project.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
gid | string | ✅ | Project GID |
Output: AsanaProject
users.me
Get the authenticated user.
Input: None
Output: AsanaUser
Usage
import { createFabric } from "@fabricorg/integrations";
import { asana } from "@fabricorg/integrations/plugins";
const fabric = createFabric({
plugins: [asana({ apiKey: process.env.ASANA_ACCESS_TOKEN })],
});
// Create a task
const task = await fabric.asana.api.tasks.create({
workspace: "1234567890",
name: "Review PR #42",
due_on: "2026-05-15",
projects: ["0987654321"],
});
// Add a comment
await fabric.asana.api.tasks.addComment({
gid: task.gid,
text: "LGTM, merging now.",
});Webhooks
Asana webhooks require a handshake: the first POST after subscription carries X-Hook-Secret, which must be echoed back before events flow.
| Event | Path | Description |
|---|---|---|
| Handshake | handshake | Initial subscription handshake (echoes secret). |
| Task added | task.added | A task was added to a project. |
| Task changed | task.changed | A task was modified. |
Signature verification
import { verifyAsanaSignature } from "@fabricorg/integrations/plugins";
const valid = verifyAsanaSignature({
rawBody: requestBody,
signatureHeader: headers["x-hook-signature"],
secret: webhookSecret,
});Webhook payload
interface AsanaEvent {
user?: { gid: string };
resource: { gid: string; resource_type: string };
action: "added" | "removed" | "changed" | "deleted" | "undeleted";
created_at: string;
change?: { field: string; action: string };
}Types
interface AsanaTask {
gid: string;
name: string;
notes?: string;
completed?: boolean;
due_on?: string | null;
assignee?: { gid: string; name?: string } | null;
projects?: Array<{ gid: string; name?: string }>;
workspace?: { gid: string; name?: string };
}
interface AsanaProject {
gid: string;
name: string;
workspace?: { gid: string; name?: string };
owner?: { gid: string; name?: string };
}
interface AsanaUser {
gid: string;
name: string;
email?: string;
}