## Create **post** `/v1/webhooks` Creates a new webhook endpoint. When events occur (e.g. feedback_record.created), the Hub POSTs a signed payload to the webhook URL. If signing_key is omitted, a key is auto-generated (Standard Webhooks format, whsec_...). See WebhookDeliveryPayload for the payload structure sent to your URL. ### Body Parameters - `url: string` URL to receive webhook POSTs. Must be an HTTP or HTTPS URL. NULL bytes not allowed. - `enabled: optional boolean` Whether the webhook is active (default true) - `event_types: optional array of "feedback_record.created" or "feedback_record.updated" or "feedback_record.deleted" or 3 more` Event types this webhook subscribes to. Each value must be one of WebhookEventType. If empty, the webhook receives all event types. - `"feedback_record.created"` - `"feedback_record.updated"` - `"feedback_record.deleted"` - `"webhook.created"` - `"webhook.updated"` - `"webhook.deleted"` - `signing_key: optional string` Optional. If omitted, a key is auto-generated (whsec_...). Used to sign payloads (Standard Webhooks). When provided, max 255 characters; NULL bytes not allowed. - `tenant_id: optional string` Tenant/organization identifier. NULL bytes not allowed. ### Returns - `id: string` Webhook ID (UUID) - `created_at: string` When the webhook was created - `enabled: boolean` Whether the webhook is active - `signing_key: string` Key used to sign payloads (Standard Webhooks) - `updated_at: string` When the webhook was last updated - `url: string` URL that receives webhook POSTs - `disabled_at: optional string` Read-only. When the webhook was disabled. Omitted when null. Cleared when the webhook is re-enabled via PATCH. - `disabled_reason: optional string` Read-only. Set by the system when the webhook was disabled (e.g. after 410 Gone or max delivery failures). Omitted when null. - `event_types: optional array of "feedback_record.created" or "feedback_record.updated" or "feedback_record.deleted" or 3 more` Event types this webhook subscribes to (empty = all) - `"feedback_record.created"` - `"feedback_record.updated"` - `"feedback_record.deleted"` - `"webhook.created"` - `"webhook.updated"` - `"webhook.deleted"` - `tenant_id: optional string` Tenant/organization identifier ### Example ```http curl http://localhost:8080/v1/webhooks \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $HUB_API_KEY" \ -d '{ "url": "https://example.com/hub-events", "signing_key": "whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "tenant_id": "org-123" }' ```