API Reference / Endpoints / Platform
Create a webhook destination
/v1/webhooksRegister an HTTPS endpoint for async completion events.
POST
/v1/webhooksAuth: API keyBilling: FreeBehavior: SyncScopes: webhooks:manage
POSTSyncjsonwebhooks:manage
When to use it
Use this before you rely on event-driven completion. It lets you replace polling with signed callbacks to your own infrastructure.
Behavior on success
Returns a completed payload on the normal success path.
Integration shape
Authorization model
webhooks:manage
Request format
json
Polling pattern
No polling required on the normal success path.
Request
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | HTTPS destination that will receive POST deliveries. |
events | string[] | Yes | Non-empty array of event names or `*` for all supported events. |
description | string | Optional | Optional dashboard-facing description up to 500 characters. |
Example request
POST /v1/webhooks
const response = await fetch('https://prod-backup-backend.wubble.ai/v1/webhooks', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.WUBBLE_API_KEY}`,
'Idempotency-Key': crypto.randomUUID(),
'Content-Type': 'application/json',
},
body: JSON.stringify({
"url": "https://example.com/api/wubble/webhooks",
"events": [
"music.instrumental.completed",
"sound_effects.generated"
],
"description": "Primary production receiver"
}),
});
const payload = await response.json();
console.log(payload);Example response
Response shapejson
{
"success": true,
"data": {
"webhook_id": "wh_123",
"url": "https://example.com/api/wubble/webhooks",
"events": [
"music.instrumental.completed",
"sound_effects.generated"
],
"description": "Primary production receiver",
"secret": "whsec_please_store_this_once",
"is_active": true,
"created_at": "2026-05-12T12:00:00.000Z"
}
}Implementation notes
Only HTTPS destinations are allowed.
The backend applies SSRF protection and rejects unsafe targets such as localhost or private network addresses.
Production guidance
Pair this route with idempotency on POST requests and either request polling or webhooks whenever the response is asynchronous.
Was this page helpful?