# Webhooks ## List `client.webhooks.list(WebhookListParamsquery?, RequestOptionsoptions?): WebhookListResponse` **get** `/v1/webhooks` Lists webhook endpoints with optional filters and pagination ### Parameters - `query: WebhookListParams` - `cursor?: string` Omit for the first page. For the next page, use the exact value from the previous response's next_cursor. Opaque (base64-encoded); keyset pagination. - `enabled?: boolean` Filter by enabled status - `limit?: number` Number of results to return (max 1000) - `tenant_id?: string` Filter by tenant ID. NULL bytes not allowed. ### Returns - `WebhookListResponse` - `data: Array` List of webhooks (signing_key omitted for security) - `id: string` Webhook ID (UUID) - `created_at: string` When the webhook was created - `enabled: boolean` Whether the webhook is active - `updated_at: string` When the webhook was last updated - `url: string` URL that receives webhook POSTs - `disabled_at?: string | null` Read-only. When the webhook was disabled. Omitted when null. - `disabled_reason?: string | null` Read-only. Set by the system when the webhook was disabled. Omitted when null. - `event_types?: Array<"feedback_record.created" | "feedback_record.updated" | "feedback_record.deleted" | 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?: string` Tenant/organization identifier - `limit: number` Limit used in query - `next_cursor?: string` Opaque cursor for the next page (keyset paging). Present only when there may be more results. Use as the cursor query param for the next page. - `offset?: number` Offset used in query (present when offset-based; omitted when using cursor) - `total?: number` Total count matching filters (present when offset-based; omitted when using cursor) ### Example ```typescript import FormbricksHub from '@formbricks/hub'; const client = new FormbricksHub({ apiKey: process.env['HUB_API_KEY'], // This is the default and can be omitted }); const webhooks = await client.webhooks.list(); console.log(webhooks.data); ``` ## Create `client.webhooks.create(WebhookCreateParamsbody, RequestOptionsoptions?): WebhookCreateResponse` **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. ### Parameters - `body: WebhookCreateParams` - `url: string` URL to receive webhook POSTs. Must be an HTTP or HTTPS URL. NULL bytes not allowed. - `enabled?: boolean` Whether the webhook is active (default true) - `event_types?: Array<"feedback_record.created" | "feedback_record.updated" | "feedback_record.deleted" | 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?: 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?: string` Tenant/organization identifier. NULL bytes not allowed. ### Returns - `WebhookCreateResponse` - `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?: string | null` Read-only. When the webhook was disabled. Omitted when null. Cleared when the webhook is re-enabled via PATCH. - `disabled_reason?: string | null` 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?: Array<"feedback_record.created" | "feedback_record.updated" | "feedback_record.deleted" | 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?: string` Tenant/organization identifier ### Example ```typescript import FormbricksHub from '@formbricks/hub'; const client = new FormbricksHub({ apiKey: process.env['HUB_API_KEY'], // This is the default and can be omitted }); const webhook = await client.webhooks.create({ url: 'https://example.com/hub-events', enabled: true, event_types: ['feedback_record.created', 'feedback_record.updated', 'feedback_record.deleted'], }); console.log(webhook.id); ``` ## Retrieve `client.webhooks.retrieve(stringid, RequestOptionsoptions?): WebhookRetrieveResponse` **get** `/v1/webhooks/{id}` Retrieves a single webhook endpoint by its UUID. signing_key is omitted for security. ### Parameters - `id: string` ### Returns - `WebhookRetrieveResponse` Webhook data for GET and LIST responses; signing_key is omitted for security - `id: string` Webhook ID (UUID) - `created_at: string` When the webhook was created - `enabled: boolean` Whether the webhook is active - `updated_at: string` When the webhook was last updated - `url: string` URL that receives webhook POSTs - `disabled_at?: string | null` Read-only. When the webhook was disabled. Omitted when null. - `disabled_reason?: string | null` Read-only. Set by the system when the webhook was disabled. Omitted when null. - `event_types?: Array<"feedback_record.created" | "feedback_record.updated" | "feedback_record.deleted" | 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?: string` Tenant/organization identifier ### Example ```typescript import FormbricksHub from '@formbricks/hub'; const client = new FormbricksHub({ apiKey: process.env['HUB_API_KEY'], // This is the default and can be omitted }); const webhook = await client.webhooks.retrieve('018e1234-5678-9abc-def0-123456789abc'); console.log(webhook.id); ``` ## Update `client.webhooks.update(stringid, WebhookUpdateParamsbody, RequestOptionsoptions?): WebhookUpdateResponse` **patch** `/v1/webhooks/{id}` Updates specific fields of a webhook endpoint ### Parameters - `id: string` - `body: WebhookUpdateParams` - `enabled?: boolean` Enable or disable the webhook - `event_types?: Array<"feedback_record.created" | "feedback_record.updated" | "feedback_record.deleted" | 3 more>` New list of event types (use empty array to clear). Each value must be one of WebhookEventType. - `"feedback_record.created"` - `"feedback_record.updated"` - `"feedback_record.deleted"` - `"webhook.created"` - `"webhook.updated"` - `"webhook.deleted"` - `signing_key?: string` New signing key. NULL bytes not allowed. - `tenant_id?: string | null` Omit or send null to leave unchanged. Send empty string to clear (store as null). - `url?: string` New webhook URL. Must be an HTTP or HTTPS URL. NULL bytes not allowed. ### Returns - `WebhookUpdateResponse` Webhook data for GET and LIST responses; signing_key is omitted for security - `id: string` Webhook ID (UUID) - `created_at: string` When the webhook was created - `enabled: boolean` Whether the webhook is active - `updated_at: string` When the webhook was last updated - `url: string` URL that receives webhook POSTs - `disabled_at?: string | null` Read-only. When the webhook was disabled. Omitted when null. - `disabled_reason?: string | null` Read-only. Set by the system when the webhook was disabled. Omitted when null. - `event_types?: Array<"feedback_record.created" | "feedback_record.updated" | "feedback_record.deleted" | 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?: string` Tenant/organization identifier ### Example ```typescript import FormbricksHub from '@formbricks/hub'; const client = new FormbricksHub({ apiKey: process.env['HUB_API_KEY'], // This is the default and can be omitted }); const webhook = await client.webhooks.update('018e1234-5678-9abc-def0-123456789abc'); console.log(webhook.id); ``` ## Delete `client.webhooks.delete(stringid, RequestOptionsoptions?): void` **delete** `/v1/webhooks/{id}` Permanently deletes a webhook endpoint. It will no longer receive events. ### Parameters - `id: string` ### Example ```typescript import FormbricksHub from '@formbricks/hub'; const client = new FormbricksHub({ apiKey: process.env['HUB_API_KEY'], // This is the default and can be omitted }); await client.webhooks.delete('018e1234-5678-9abc-def0-123456789abc'); ```