# Listening to updates using webhooks

A great way of building data-driven apps using Felt is by triggering a workflow whenever something changes on a map, like someone drawing a polygon around an area of interest or updating the details on a pin.

Instead of polling by listing annotations, comments or data layers on a fixed interval, a better alternative is to set up a *webhook* where Felt will send a notification any time a map is updated. This allows you to build integrations on top, such as sending a Slack message or performing calculations for the newly-drawn area.

## Requirements

Two things are needed in order to make use of webhooks:

1. A Felt map which will serve as the basis for the webhook. Updates will be sent whenever something on this map changes.
2. A webhook URL where the updates will be sent in the form of `POST` requests.

## Generating a new webhook

Workspace admins can set up webhooks in the [Developers tab of the Workspace Settings page](https://felt.com/maps/latest/developers).

Simply click on `Create a new webhook`, select a map to listen to changes and paste in a webhook URL where the updates will be sent to.

<figure><img src="https://293097899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLlIfNdbm4rCsu755xrdc%2Fuploads%2FSvU8xxYbXRWjdcBdyLqz%2Fimage.png?alt=media&#x26;token=3175c051-45ce-448a-a416-da96580cc548" alt=""><figcaption></figcaption></figure>

## Using your new webhook

In order to use webhooks effectively, a receiving layer must be set up to trigger actions based on the updates sent by the Felt API. Here are some examples of how to set up a webhook using Felt and an external service.

<details>

<summary>Setting up an example webhook using Pipedream</summary>

[Pipedream's RequestBin ](https://pipedream.com/requestbin)is an easy way to collect webhook requests and even run custom code as a result.

1. Create a free Pipedream account
2. On the left-hand sidebar, navigate to `Sources`, then click on `New source` in the top-right corner.
3. Select `HTTP / Webhook`, then `New Requests (Payload Only)`, and give your newly-created source a name.
4. Copy the endpoint URL. It will look like `https://XXX.m.pipedream.net`
5. In Felt, navigate to the [Webhooks tab of your workspace](https://felt.com/maps/latest/webhooks) and click on `Create new webhook`
6. Paste the endpoint URL from Pipedream into the `Webhook URL` text field, select your map in the dropdown and click `Create`.

To test your webhook:

1. Navigate to the Felt map that's linked to the webhook
2. Make any change: add a pin, draw with the marker, change the color of a polygon, update sharing permissions...
3. Back in Pipedream, verify that new events appear for the new source. The payload should look like this:

```json
{
  "body": {
    "attributes": {
      "type": "map:update",
      "updated_at": "2024-04-29T12:16:46",
      "map_id": "Jzjr8gMKSrCOxZ1OSMT49CB"
    }
  }
}
```

4. You may also add configure a script to run using the above input.

</details>

<details>

<summary>Setting up an example webhook using an AWS Lambda</summary>

Serverless functions like AWS Lambda or Google Cloud Functions are an excellent way of triggering code after a map update by setting them to run after a specific HTTP call.

1. In the AWS console, navigate to `Lambda` and click on `Create function`
2. Choose a name and runtime and, under `Advanced Settings`, make sure to check `Enable function URL`
3. Set `Auth type` to `NONE` and click on `Create function`
4. In the next screen, copy the `Function URL`. It should look like `https://{LAMBDA_ID}.lambda-url.{REGION}.on.aws`
5. Continue configuring your Lambda function as usual by editing the code that will run on map updates

In Felt:

1. &#x20;Navigate to the [Webhooks tab of your workspace](https://felt.com/maps/latest/webhooks) and click on `Create new webhook`
2. Paste the function URL from AWS into the `Webhook URL` text field, select your map in the dropdown and click `Create`.

</details>
