Event

trigger.asana_event
TriggerBusiness appsconnection requiredruns in-engine

Registers an Asana webhook on publish and starts one run per delivered event, verified against Asana's X-Hook-Signature.

Start a run when Asana reports a change to a task, project or workspace.

Connection

Required
Yes — the node will not save without one
Auth type
Bearer token
Providers
Asana
Secret shape
the Asana personal access token, or an OAuth access token
Resolved by
config.connection_id, else node.connection_id
Note
An OAuth token needs the webhooks:write scope (webhooks:read to reconcile). Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a public https URL — Asana refuses a target it cannot reach, and answers 403 for hostnames like localhost.

Configuration

3 fields, 2 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
workspace
Gid of the workspace the resource belongs to. Asana requires it to list webhooks, which is how publishing finds and clears a subscription an earlier half-finished publish left behind.
stringYes—matches ^\d+$1201234567890123
resource
Gid of the resource to watch — a task, project, workspace, portfolio or team. A project reports events for the tasks inside it; a workspace, portfolio, team or goal REQUIRES filters below.
stringYes—matches ^\d+$1209876543210987
filters
Whitelist of events to deliver, as Asana filter objects: [{"resource_type": "task", "action": "changed", "fields": ["due_on"]}]. An event passes if it matches any filter. Leave empty on a task or project to receive everything; Asana refuses a workspace, portfolio, team or goal webhook with no filters.
arrayNo—≤ 50 characters; array of object—

Example configuration

Every value below is the contract’s own example or default — nothing invented.

{
  "resource": "1209876543210987",
  "workspace": "1201234567890123"
}

Output

One shape.

asana event

One flattened Asana event. Asana's events are thin by design — read the full record with an asana.* node when you need it.

Extra keys beyond the ones listed can appear.

FieldTypeExample
action
What happened to the resource: added, changed, removed, deleted or undeleted. Branch on this when one webhook watches several actions.
stringchanged
resource_gid
Gid of the resource the event is about — the task, project or story that changed, which is NOT always the resource the webhook subscribes to (a project webhook reports its tasks).
string12345
resource_type
That resource's Asana type, e.g. task, project, story.
stringtask
resource_name
The resource's name when Asana sent one; empty otherwise. Asana's webhook events are deliberately thin, so treat this as a hint and read the record with an asana.* node when you need its fields.
string—
user_gid
Gid of the user whose action raised the event, or empty when Asana raised it itself (a rule, a recurring task rolling over).
string987654
parent_gid
On added/removed events, the gid of the container the resource was added to or removed from. Empty on every other action.
string—
parent_type
That container's Asana type, e.g. project.
string—
created_at
When Asana recorded the change (ISO 8601, milliseconds).
string2012-02-22T02:06:58.147Z
change_field
On a 'changed' event, the name of the field that changed, e.g. assignee. Empty on every other action.
stringassignee
change
Asana's change block — {field, action, new_value | added_value | removed_value}. Empty on any action other than 'changed'.
object—
payload
The Asana event exactly as delivered, for anything the fields above do not lift out.
object—
{
  "action": "changed",
  "change": {
    "action": "changed",
    "field": "assignee",
    "new_value": {
      "gid": "987654"
    }
  },
  "change_field": "assignee",
  "created_at": "2012-02-22T02:06:58.147Z",
  "parent_gid": "",
  "parent_type": "",
  "payload": {
    "action": "changed",
    "change": {
      "action": "changed",
      "field": "assignee"
    },
    "created_at": "2012-02-22T02:06:58.147Z",
    "resource": {
      "gid": "12345",
      "resource_type": "task"
    },
    "user": {
      "gid": "987654",
      "resource_type": "user"
    }
  },
  "resource_gid": "12345",
  "resource_name": "Ship the release notes",
  "resource_type": "task",
  "user_gid": "987654"
}

Notes

  • Publishing creates the webhook in Asana; unpublishing, disabling or archiving deletes it. A workflow that is off is off at Asana too.
  • Asana confirms the target while the create call is in flight: it POSTs an X-Hook-Secret that Mantle echoes back, and that value signs every later delivery. Asana never reveals it again.
  • Deliveries are verified against X-Hook-Signature before any run starts; an unsigned or mis-signed POST is refused with 401.
  • Asana sends no event id, so a redelivery is deduped on a digest of the event's own fields. Two identical events in the same millisecond would start one run, not two.
  • Asana deletes a webhook after 24 hours with no successful delivery — including of its 8-hourly heartbeat. Publish again to re-register.

See Event run in a workflow.

In a technical demo we add the Asana connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.