Establish a webhook

Establishing a webhook is a two-part process. First, a simple HTTP POST
request initiates the creation similar to creating any other resource.

Next, in the middle of this request comes the confirmation handshake.
When a webhook is created, we will send a test POST to the target with an
X-Hook-Secret header. The target must respond with a 200 OK or 204 No Content and a matching X-Hook-Secret header to confirm that this
webhook subscription is indeed expected. We strongly recommend storing
this secret to be used to verify future webhook event signatures.

The POST request to create the webhook will then return with the status
of the request. If you do not acknowledge the webhook’s confirmation
handshake it will fail to setup, and you will receive an error in
response to your attempt to create it. This means you need to be able to
receive and complete the webhook while the POST request is in-flight
(in other words, have a server that can handle requests asynchronously).

Invalid hostnames like localhost will receive a 403 Forbidden status code.

# Request
curl -H "Authorization: Bearer <personal_access_token>" \
-X POST https://app.asana.com/api/1.0/webhooks \
-d "resource=8675309" \
-d "target=https://example.com/receive-webhook/7654"
# Handshake sent to https://example.com/
POST /receive-webhook/7654
X-Hook-Secret: b537207f20cbfa02357cf448134da559e8bd39d61597dcd5631b8012eae53e81
# Handshake response sent by example.com
HTTP/1.1 200
X-Hook-Secret: b537207f20cbfa02357cf448134da559e8bd39d61597dcd5631b8012eae53e81
# Response
HTTP/1.1 201
{
  "data": {
    "gid": "43214",
    "resource": {
      "gid": "8675309",
      "name": "Bugs"
    },
    "target": "https://example.com/receive-webhook/7654",
    "active": false,
    "last_success_at": null,
    "last_failure_at": null,
    "last_failure_content": null
  },
  "X-Hook-Secret": "b537207f20cbfa02357cf448134da559e8bd39d61597dcd5631b8012eae53e81"
}
Query Params
array of strings

This endpoint returns a resource which excludes some properties by default. To include those optional properties, set this query parameter to a comma-separated list of the properties you wish to include.

opt_fields
boolean

Provides “pretty” output.
Provides the response in a “pretty” format. In the case of JSON this means doing proper line breaking and indentation to make it readable. This will take extra time and increase the response size so it is advisable only to use this during debugging.

Body Params

The webhook workspace and target.

object
Responses

Response body
object
object

Webhook objects represent the state of an active subscription for a server to be updated with information from Asana. This schema represents the subscription itself, not the objects that are sent to the server. For information on those please refer to the event schema.

string

Globally unique identifier of the resource, as a string.

string

The base type of this resource.

boolean

If true, the webhook will send events - if false it is considered inactive and will not generate events.

object

A generic Asana Resource, containing a globally unique identifier.

uri

The URL to receive the HTTP POST.

date-time

The time at which this resource was created.

date-time

The timestamp when the webhook last received an error when sending an event to the target.

string

The contents of the last error response sent to the webhook when attempting to deliver events to the target.

date-time

The timestamp when the webhook last successfully sent an event to the target.

integer

The number of times the webhook has retried delivery of events to the target (resets after a successful attempt).

date-time

The timestamp after which the webhook will next attempt to deliver an event to the target.

date-time

The timestamp when the webhook will be deleted if there is no successful attempt to deliver events to the target

array of objects

Whitelist of filters to apply to events from this webhook. If a webhook event passes any of the filters the event will be delivered; otherwise no event will be sent to the receiving server.

filters
object
string

The type of the resource which created the event when modified; for example, to filter to changes on regular tasks this field should be set to task.

string

The resource subtype of the resource that the filter applies to. This should be set to the same value as is returned on the resource_subtype field on the resources themselves.

string

The type of change on the resource to pass through the filter. For more information refer to Event.action in the event schema. This can be one of changed, added, removed, deleted, and undeleted depending on the nature of what has occurred on the resource.

array of strings

Conditional. A whitelist of fields for events which will pass the filter when the resource is changed. These can be any combination of the fields on the resources themselves. This field is only valid for action of type changed
Note: Subscriptions created on higher-level resources such as a Workspace, Team, or Portfolio do not support fields.

fields
string

The secret to be used to verify future webhook event signatures.

Language
Credentials
Request
Asana Home
Asana helps you manage projects, focus on what's important, and organize work in one place for seamless collaboration.
© 2023 Asana, Inc.