# List webhooks

`GET https://api.airtable.com/v0/bases/{baseId}/webhooks`

Lists all webhooks that are registered for a base, along with their statuses.

**Read level permissions are required in order to list webhooks.**

## Requirements

- **Authentication:** [Personal access token](https://airtable.com/developers/web/api/authentication.md#types-of-token), [OAuth integration](https://airtable.com/developers/web/api/authentication.md#types-of-token)
- **Scope:** [webhook:manage](https://airtable.com/developers/web/api/scopes.md#webhook-manage)
- **User role:** Base read-only
- **Billing plans:** All plans

## Path parameters

- `baseId: string`

## Response format

- `webhooks: array<object>` — required

  - `id: string` — required

    An identifier for the webhook (WebhookId).

  - `areNotificationsEnabled: boolean` — required

    Whether or not notifications are enabled for the webhook.

  - `cursorForNextPayload: number` — required

    The cursor associated with the next payload that will be generated.
    This cursor will increase every time a new payload is generated for this webhook.

  - `isHookEnabled: boolean` — required

    Whether or not the webhook is enabled. Webhooks may be turned off automatically such
    as when the specification becomes invalid. [See error codes](https://airtable.com/developers/web/api/model/webhooks-payload.md).

  - `lastSuccessfulNotificationTime: string | null` — required

    An identifier for the created webhook.

  - `notificationUrl: string | null` — required

    The url registered with the webhook. May be null if none was given.

  - `expirationTime: string` — optional

    The time when the webhook expires and is disabled in the ISO format. The webhook will not expire
    if this is null (in the case User API keys are used)

  - `lastNotificationResult: Webhooks-notification | null` — required

  - `specification: object` — required

    The specification registered with the webhook.

    - `options: Webhooks-specification` — required

### Example — Example response

```sh
curl "https://api.airtable.com/v0/bases/{baseId}/webhooks" \
-H "Authorization: Bearer YOUR_TOKEN"
```

```json
{
  "webhooks": [
    {
      "areNotificationsEnabled": false,
      "cursorForNextPayload": 1,
      "expirationTime": "2023-01-20T00:00:00.000Z",
      "id": "ach00000000000000",
      "isHookEnabled": true,
      "lastNotificationResult": null,
      "lastSuccessfulNotificationTime": null,
      "notificationUrl": null,
      "specification": {
        "options": {
          "filters": {
            "dataTypes": [
              "tableData"
            ],
            "recordChangeScope": "tbltp8DGLhqbUmjK1"
          }
        }
      }
    }
  ]
}
```

### Example — Various last notifications

```sh
curl "https://api.airtable.com/v0/bases/{baseId}/webhooks" \
-H "Authorization: Bearer YOUR_TOKEN"
```

```json
{
  "webhooks": [
    {
      "areNotificationsEnabled": true,
      "cursorForNextPayload": 1,
      "expirationTime": "2023-01-20T00:00:00.000Z",
      "id": "ach00000000000000",
      "isHookEnabled": true,
      "lastNotificationResult": {
        "completionTimestamp": "2022-02-01T21:25:05.663Z",
        "durationMs": 2.603,
        "retryNumber": 0,
        "success": true
      },
      "lastSuccessfulNotificationTime": "2022-02-01T21:25:05.663Z",
      "notificationUrl": "https://foo.com/receive-ping",
      "specification": {
        "options": {
          "filters": {
            "dataTypes": [
              "tableData"
            ],
            "recordChangeScope": "tbltp8DGLhqbUmjK1"
          }
        }
      }
    },
    {
      "areNotificationsEnabled": true,
      "cursorForNextPayload": 1,
      "expirationTime": "2023-01-25T00:00:00.000Z",
      "id": "ach00000000000001",
      "isHookEnabled": true,
      "lastNotificationResult": {
        "completionTimestamp": "2022-02-01T21:25:05.663Z",
        "durationMs": 2.603,
        "error": {
          "message": "The HTTP request returned a 503 status code instead of 200 or 204"
        },
        "retryNumber": 0,
        "success": false,
        "willBeRetried": true
      },
      "lastSuccessfulNotificationTime": null,
      "notificationUrl": "https://foo.com/receive-ping",
      "specification": {
        "options": {
          "filters": {
            "dataTypes": [
              "tableData"
            ],
            "recordChangeScope": "tbltp8DGLhqbUmjK1"
          }
        }
      }
    }
  ]
}
```
