# Configuring the notification webhooks

## Problem

You want to rely on Adyen's webhooks notification system, which is the only way can receive automatic updates about requests that are processed asynchronously (e.g. [iDEAL](https://docs.adyen.com/payment-methods/ideal) transactions or payment modifications — captures, voids, and refunds).

## Solution

You can enable Adyen's notification system in two separate steps:

1. [Configure the notification webhooks](#1.-configure-the-notification-webhooks) on your Adyen's customer area.
2. [Update your Adyen gateway](#2.-update-your-gateway) on Commerce Layer

#### 1. Configure the notification webhooks

To configure the notification system, first you need to access your Adyen's customer area and follow the procedure detailed [here](https://docs.adyen.com/development-resources/webhooks#set-up-notifications-in-your-customer-area). On the *Server configuration* and Security sections, make sure to perform the following actions:

* Copy the `webhook_endpoint_url` you'll get by [fetching the gateway via API](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/adyen_gateways/retrieve) into the `URL` field.
* Select *JSON* as the method.
* Select *TLSv1.2* as the protocol.
* Generate the HMAC key to verify the integrity of notifications and copy it.

{% hint style="warning" %}
Commerce Layer does not support the Adyen webhooks *SOAP* or *HTTP* methods, but the **JSON** one only.
{% endhint %}

#### 2. Update your gateway

Once the notification webhooks are properly configured, you need to update your Adyen gateway and specify you're going to support the asynchronous notifications system.&#x20;

To do that, send a `PATCH` request to the `/api/adyen_gateway/:id` endpoint, setting the `async_api` attribute as `true` and passing the HMAC key you generated in the previous step as the `webhook_endpoint_secret` value.

### Example

{% tabs %}
{% tab title="Request" %}
The following request updates the Adyen gateway identified by the "HGFvfREwAX" ID in order to use the Adyen asynchronous APIs:

```javascript
curl -g -X PATCH \
  'http://yourdomain.commercelayer.io/api/adyen_gateways/HGFvfREwAX' \
  -H 'Accept: application/vnd.api+json' \
  -H 'Authorization: Bearer your-access-token' \
  -H 'Content-Type: application/vnd.api+json' \
  -d '{
  "data": {
    "type": "adyen_gateways",
    "id": "HGFvfREwAX",
    "attributes": {
        async_api: true,
        webhook_endpoint_secret: 'xxxx-yyyy-zzzz'
      }
    }
  }
}'
```

{% endtab %}

{% tab title="Response" %}
On success, the API responds with a `200 OK` status code, returning the updated Adyen gateway object:

```javascript
{
  "data": {
    "id": "HGFvfREwAX",
    "type": "adyen_payments",
    "links": {
      "self": "https://yourdomain.commercelayer.io/api/adyen_gateways/HGFvfREwAX"
    },
    "attributes": {
      "name":"Adyen 01",
      "live_url_prefix":"bdf1c25d-b4e3-4c97-a51c-105e35dcbe27-AdyenDemo",
      "async_api": true,
      "webhook_endpoint_secret": "xxxx-yyyy-zzzz",
      "webhook_endpoint_url":"http://core.commercelayer.dev/webhook_callbacks/adyen_gateways/HGFvfREwAX",
      "created_at": "2018-01-01T12:00:00.000Z",
      "updated_at": "2018-01-01T12:00:00.000Z",
      "reference": null,
      "reference_origin": null,
      "metadata": {}
    },
    "relationships": {
      "order": {
        "links": {...}
      }
    },
    "meta": {
      "mode": "test"
    }
  }
}
```

{% endtab %}
{% endtabs %}

{% hint style="danger" %}
Be sure to enable webhooks on the Adyen dashboard as the very first step, and by the way always before setting the gateway's `async_api` attribute to `true`, otherwise you risk all of your payment modifications failing silently.
{% endhint %}

## More to read

See our documentation if you need more information on how to [fetch](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/adyen_gateways/retrieve) or [update an Adyen gateway](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/adyen_gateways/update).
