---
title: "Create webhook"
method: POST
path: "/v1/communities/{communityId}/webhooks"
tags: ["Webhooks"]
---

# Create webhook

`POST /v1/communities/{communityId}/webhooks`

## Request

- Base URL: `https://api.subo.ai`
- URL: `https://api.subo.ai/v1/communities/{communityId}/webhooks`
- Auth: API key in header `X-API-Key`

Register a webhook. Returns the signing secret once — store it immediately, it cannot be retrieved again. Admin role required. Subscribing to `response.submitted` **requires Premium tier or above** — Basic-tier keys receive a `402`.

## Path parameters

- `communityId` string, required

## Request body

- object
  - `url` string, uri, required: HTTPS endpoint that will receive POST requests. Must be `https://` and resolve only to public addresses; loopback, private and link-local addresses are refused with a 400, and re-checked before every delivery.
  - `name` string: Human-readable label for this webhook
  - `events` string[], required: Event types to subscribe to

## Response `201`

Created webhook with signing_secret (shown once — store immediately)

- object
  - `data` WebhookCreated
    - `id` string
    - `community_id` string
    - `name` string, nullable
    - `url` string
    - `events` string[]
    - `secret_prefix` string
    - `is_active` boolean
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable

## Other responses

- `400`: Invalid request body
- `401`: Invalid or missing API key
- `402`: Subscribing to `response.submitted` requires Premium or above
- `403`: Forbidden — the key or user lacks permission for this resource or operation
- `429`: Rate limit exceeded — wait `retry_after` seconds before retrying. The same value appears in the `Retry-After` header.

---

[API](https://skmtc.dev/subo/apis/subo-api.md) · [All operations](https://skmtc.dev/subo/apis/subo-api/llms.txt) · [OpenAPI document](https://skmtc.dev/subo/apis/subo-api/revisions/12eab2ae4505?raw)
