Registers a webhook endpoint and returns its signing secret.
Requires the webhooks:write ability. It does not require a verified account.
This is the only response on the API that carries secret, apart from the rotate operation. Store it the moment you read it; no later request can retrieve it. It is 64 lowercase hexadecimal characters with no prefix — do not validate it against a prefix and do not split it on a separator.
A URL can be registered once per account, not once per key. Registering a URL that another of your keys already holds is refused with 422 WEBHOOK_ALREADY_EXISTS, and the refusal does not name which key holds it.
The endpoint outlives the API key that created it. Deleting that API key does not delete the endpoint: it is left with no key associated, keeps the same secret, stays in the list and goes on receiving deliveries. Do not re-register it under the replacement key — that is refused with 422 WEBHOOK_ALREADY_EXISTS, because the URL is already registered on the account.
Revoking a compromised API key therefore does not close the endpoints registered with it. Stopping deliveries to an endpoint is its own operation: deactivate it with the update operation, delete it, or rotate its secret. Any key of the account with webhooks:write can do that, including one created afterwards.
An endpoint is created active. is_active is not accepted here; deactivate an endpoint later with the update operation.
Refusals past the shared ones: 422 VALIDATION_FAILED, 422 WEBHOOK_ALREADY_EXISTS — which carries no errors key — and 500 SYSTEM_DATABASE_ERROR.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
