---
title: "Create a webhook source"
method: POST
path: "/webhook-sources"
tags: ["Webhook sources"]
---

# Create a webhook source

`POST /webhook-sources`

Creates an inbound webhook source for a supported provider preset. Requires an API key bound to a live workspace admin or owner with webhooks:write. The ingress URL and signing secret response can be replayed with the same Idempotency-Key for 24 hours; after that the secret is not retrievable. Configure the URL and secret in the external service, then attach a route to deliver its events into a conversation.

## Headers

- `Idempotency-Key` string, required — Idempotency key.

## Request body

- CreateWebhookSourceBody — Inbound webhook source creation request. `provider` names a supported preset (sentry, linear, github, granola, notion, clickup, stripe, calendly); the preset supplies signature verification and event normalization.
  - `display_name` string, nullable — Optional label for the author identity events post as. The source itself keeps the provider's canonical name.
  - `provider` string, required — Inbound provider preset key.
  - `signing_secret` string, nullable — Signing secret the provider will use. Generated when omitted.

## Response `200`

Created inbound webhook source.

- CreateWebhookSourceResponse — Created inbound webhook source. The signing secret is returned exactly once.
  - `data` object, required — Created source with its signing secret.
    - `display_name` string, required — Source display name.
    - `ingress_url` string, required — URL to configure in the external service's webhook settings.
    - `provider` string, required — Provider preset key.
    - `signing_secret` string, required — Signing secret — shown only in this response.
    - `source_id` string, required — Webhook source identifier.
    - `status` string, required — Source status.

## Other responses

- `400` — Bad request.
- `401` — Missing or invalid API key.
- `403` — Forbidden.
- `404` — Not found.
- `409` — Conflict.
- `429` — Rate limit or quota exceeded.
- `500` — Internal server error.

---

[API](https://skmtc.net/ando/apis/ando-public-api.md) · [All operations](https://skmtc.net/ando/apis/ando-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ando/ando-public-api/revisions/0a94056fba48/schema)
