Use this endpoint to replace all mutable fields on an existing subscription. Because this is a PUT, you must supply every field — any field you omit will be reset to its default value. Address filters and the signing secret are never affected by this operation; use the addresses endpoint to modify filters and the rotate endpoint to issue a new secret.Documentation Index
Fetch the complete documentation index at: https://docs.offthehook.dev/llms.txt
Use this file to discover all available pages before exploring further.
Request
PUT /v1/subscriptions/:id
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer oth_YOUR_API_KEY |
Content-Type | Yes | application/json |
Path parameters
The subscription ID to update. Always starts with
sub_.Body
Replacement webhook delivery target.
Replacement list of event kinds to receive. Must be non-empty.
"enabled" or "disabled".Human-readable label. Pass an empty string to clear it.
Example request
Response
200 OK
Returns the updated subscription resource. The destination.secret field is not present in the response. The filters.addresses array will be empty in the response body (address filters are unaffected by this call — use GET /v1/subscriptions/:id to see current filters).
Response fields
Unique subscription identifier, prefixed with
sub_.Updated delivery target.
destination.secret is not included.The updated list of event kinds.
Contains an empty
addresses array. Your existing address filters remain in place — this endpoint does not modify them.Updated status:
"enabled" or "disabled".Updated human-readable label.
ISO 8601 creation timestamp. Unchanged by updates.
ISO 8601 timestamp of this update.
Errors
| Code | Description |
|---|---|
not_found | No subscription with the given ID exists under your API key. |
invalid_request | A required field is missing, contains an invalid value, or the JSON is malformed. |
ssrf_blocked | The new destination.url resolved to a private or reserved IP range. |
unsupported_event | One or more entries in events are not recognized. |
description_too_long | The description field exceeds the maximum allowed length. |
unauthorized | The Authorization header is missing or the API key is invalid. |