docs

Asana

Receive Asana task events in Plural

An Asana webhook delivers Asana tasks into Plural. Each task becomes an issue record in Plural that a workbench can act on.

You can deliver tasks in two ways:

  • Through a relay (recommended). Your own integration receives Asana's webhooks, fetches each task from the Asana API, and forwards the full task to Plural. Plural then sees the task's name, notes, and completion state, so triggers can match on them.
  • Directly from Asana. Point an Asana webhook at the Plural URL. Plural answers Asana's handshake and verifies Asana's signatures, but Asana's events carry only the task ID, so every task is recorded with a placeholder title. See Direct delivery for what that allows.

A task does not start a job by itself. A job starts only when a webhook trigger on a workbench matches the task, and only when the task has just become open: a new open task, or a completed task that was marked incomplete again. Edits to a task that is already open do not start another job, and the same task starts at most one job per workbench in an hour.

What Plural reads from the payload

Plural accepts two payload shapes. Send the full task whenever you can:

json
{
  "task": {
    "gid": "1209876543210",
    "name": "Checkout is down",
    "notes": "500s from the payments service",
    "permalink_url": "https://app.asana.com/0/1201234567890/1209876543210",
    "completed": false
  }
}
  • gid becomes the issue ID. Later payloads with the same gid update the existing record instead of creating a new one.
  • name and notes become the issue title and body. Missing notes are stored as {empty}, and bodies longer than 10,000 characters are truncated.
  • permalink_url becomes the link back to the task.
  • completed sets the status: true is completed, and false or missing is open.

gid, name, and permalink_url are required. A task without them is not recorded.

Plural also accepts Asana's own compact event format, {"events": [...]}. It reads only the first event in the list: