Rotate the webhook signing key
const url = 'https://api.katara.com/katara/v1/notification-webhooks/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/rotate';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"version":1}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.katara.com/katara/v1/notification-webhooks/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/rotate \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "version": 1 }'Returns a new secret once, revokes previous keys, and requires renewed ownership verification and explicit review. Already attempted deliveries remain bound to the old key and cannot move to the replacement.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Header Parameters
Section titled “Header Parameters”Required for cookie-authenticated changes. Use the UUID of the account that loaded the application. A different current cookie account returns account_changed before the handler runs. Session bearer and API key clients do not require this header.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Examplegenerated
{ "version": 1}Responses
Section titled “Responses”Current subscription state. Responses are never cached.
object
object
object
32 random bytes encoded as unpadded base64url. Returned once on first create or rotation. Store privately; GET, list and create replay never return it.
Example
{ "subscription": { "mode": "test", "state": "pending" }, "verification_document": { "profile": "katara-notification-ownership/v1" }}Invalid request.
Current owner/admin recipient in a signed-in session required.
Subscription unavailable in the current scope.
Subscription changed or is in an incompatible state.