---
title: "Create a webhook"
method: POST
path: "/v1/webhooks"
tags: ["Webhooks"]
---

# Create a webhook

`POST /v1/webhooks`

Creates a new webhook listening to workspace events.

## Request body

- object
  - `name` string, required — A friendly name for the webhook.
  - `targetUrl` string, uri, required — The URL of the webhook. It must be a publicly accessible URL using the HTTP or HTTPS protocol.
  - `subscribedEvents` object[], required — The events the webhook is subscribed to, with optional filters.
    - `eventType` 'person.created' | 'person.updated' | 'person.deleted' | 'person.groups_updated' | 'person.workspace_interaction_metadata_updated' | 'company.created' | 'company.updated' | 'company.deleted' | 'company.groups_updated' | 'object.created' | 'object.updated' | 'object.deleted' | 'note.created' | 'note.updated' | 'note.deleted' | 'reminder.created' | 'reminder.updated' | 'reminder.deleted' | 'reminder.triggered', required
    - `filter` object
      - `groupId` string
      - `objectType` string
      - `path` string[]
      - `value` string

## Response `200`

The created webhook.

- object
  - `data` WebhookWithSigningSecret, required — A webhook with a visible signing secret.
    - `id` string, required
    - `name` string, required — A friendly name for the webhook.
    - `targetUrl` string, uri, required — The URL of the webhook.
    - `subscribedEvents` object[], required — The events the webhook is subscribed to, with optional filters. For more information on how to use filters, see the [create webhook documentation](/api-reference/webhooks/create-a-webhook).
      - `eventType` string, required
      - `filter` object
        - `groupId` string
        - `objectType` string
        - `path` string[]
        - `value` string
    - `status` 'active' | 'inactive', required — The status of the webhook.
    - `createdAt` string, date-time, required — The date and time the webhook was created.
    - `signingSecret` string, required — The signing secret of the webhook.
  - `deprecations` string[]

## Other responses

- `400` — The request was unacceptable, often due to missing an invalid parameter.
- `401` — No valid API key provided.
- `403` — The API key doesn’t have permissions to perform the request.
- `404` — The requested resource doesn’t exist.
- `422` — The request was unacceptable, often due to missing or invalid parameters.
- `429` — Too many requests hit the API too quickly. We recommend an exponential backoff of your requests.
- `500` — Something went wrong on our end.
- `503` — The server is overloaded or down for maintenance.

---

[API](https://skmtc.dev/folk/apis/folk-external-api.md) · [All operations](https://skmtc.dev/folk/apis/folk-external-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/folk/folk-external-api/revisions/8ecbf0ccd00a/schema)
