Destinations
Create, read, change, and delete the addresses in your app that webhooks are delivered to, and manage their signing secrets.
The destination object
{
"id": "01m3m5c2yb7h4s1k9q8r6t3v0w",
"projectId": "01k5ztq3jb9y2a1m9v2xw8e0ha",
"name": "Orders service",
"url": "https://orders.example.com/webhooks/payments",
"urlSecret": false,
"method": "",
"state": "enabled",
"auth": { "kind": "bearer" },
"rateLimit": { "count": 10, "period": "second" },
"maxAttempts": 8,
"timeoutSeconds": 20,
"failing": false,
"failuresInRow": 0,
"failingSince": null,
"createdAt": "2026-10-01T08:32:00Z",
"updatedAt": "2026-10-01T08:32:00Z"
}Fields you send
namestring1 to 100 characters, on one line. Unique among the project’s destinations, ignoring case.
urlstringAn https URL of at most 2,048 characters, without a user name, password, or
#part. Addresses on private networks are refused when we send. WhenurlSecretistrue, leave it empty to keep the address you set before.urlSecretbooleanHide the address when the destination is read, such as when it holds a token.
falseby default.methodstringPOST,PUT, orPATCH. Empty, the default, sends each webhook with the method it was received with.statestringenabled, the default, orpaused. Deliveries for a paused destination wait until it is enabled.auth.kindstringnone, the default,bearer,basic, orheader. See Authentication.auth.tokenstringFor
bearer: the token, at most 4,096 characters, on one line.auth.usernamestringFor
basic: the user name, at most 1,024 characters, without colons.auth.passwordstringFor
basic: the password, at most 1,024 characters.auth.headerstringFor
header: the header’s name. It cannot beHost,Content-Type,Content-Length,User-Agent, awebhook-signing header, any header starting withX-Hooks-, or another header we set.auth.valuestringFor
header: the header’s value, at most 4,096 characters, on one line.rateLimit.countintegerThe most attempts in one period, 1 to 100,000. Leave
rateLimitout, or set it tonull, for no limit.rateLimit.periodstringsecond,minute, the default, orhour.maxAttemptsintegerHow many attempts a delivery gets before it is failed, 1 to 20. 6 when you leave it out.
timeoutSecondsintegerHow long each attempt waits for your app to answer, 1 to 60 seconds. 30 when you leave it out.
Fields we add
idstringThe destination’s ID.
projectIdstringThe project the destination belongs to.
urlstring or nullThe address, or
nullwhenurlSecretistrue.authobjectOnly
kind, andheaderfor theheaderkind. Credentials are never shown.failingbooleantrueafter 3 failed attempts in a row. A successful attempt clears it.failuresInRowintegerHow many attempts in a row have failed.
failingSincestring or nullWhen it started failing.
createdAtstringWhen the destination was created.
updatedAtstringWhen the destination was last changed.
List destinations
/v1/projects/{project}/destinationsReturns the project’s destinations, newest first, a page at a time. See Paging.
Create a destination
/v1/projects/{project}/destinationsSend its fields. Returns 201 with the new destination, which gets its own signing secret. A name already used gets 409 with the code hooks_name_taken, and a project that holds 100 destinations gets 403 with the code hooks_limit_reached.
Read a destination
/v1/projects/{project}/destinations/{destination}Replace a destination
/v1/projects/{project}/destinations/{destination}Send every field, as when you create one. A field you leave out goes back to its default. Leave auth out to keep the credentials you set before.
Delete a destination
/v1/projects/{project}/destinations/{destination}Deletes the destination, its connections, and its deliveries. Returns 204. This cannot be undone.
Read the signing secret
/v1/projects/{project}/destinations/{destination}/secretReturns { "secret": "whsec_…" }. Needs the Edit and resend permission. See Verify deliveries to your app.
Reset the signing secret
/v1/projects/{project}/destinations/{destination}/secretGives the destination a new signing secret, and returns it. Every attempt from then on is signed with it.
Last updated