All pages

Developer docs

Rotate a webhook signing secret

View as Markdown

Replace a webhook endpoint's signing secret, for example after it was exposed. The new secret is returned once, here. For the next 24 hours every delivery carries two signatures, one with the new secret and one with the previous secret, so the receiver keeps accepting requests while it is updated; after that only the new secret signs. Rotating again within those 24 hours ends the oldest secret at once: only the secret in use at that moment keeps signing beside the new one. The address, events and status do not change. Only the account owner's API keys and connected apps can rotate a secret.

POSThttps://uetr.ai/api/v1/webhooks/{id}/rotate-secret
  • MCP tool: rotate_webhook_secret
  • Access: a key or connection with read and write access
  • Only the account owner's keys and connections

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)YesThe webhook endpoint's id.

Response

FieldTypeRequiredDescription
endpointobjectYes
endpoint.idstring (uuid)Yes
endpoint.urlstringYesThe address's host and a masked path. The full address is never shown.
endpoint.destinationjson, slack, teamsYesjson: signed JSON. slack and teams: a readable message for a Slack or Microsoft Teams incoming webhook.
endpoint.eventsarray of status_changed, final_state, checks_endedYes
endpoint.statuspending, active, pausedYespending: waiting for the account owner to confirm it on the website; until then it receives test events only. active: receiving events. paused: deliveries stopped after sustained failures; a test event that succeeds resumes it.
endpoint.paused_atstring or nullYes
endpoint.created_atstringYes
endpoint.created_bywebsite, apiYeswebsite: added on the website. api: added by an API key or a connected app.
endpoint.api_versionstringYes
signing_secretstringYesThe new secret that signs every delivery, starting whsec_. It is shown only now: store it in the receiver's secret settings.
previous_secret_expires_atstringYesWhen the previous secret stops signing deliveries: 24 hours after the rotation.

Example

curl -X POST "https://uetr.ai/api/v1/webhooks/3b1f8c2e-6a4d-4f5e-9c7b-2d8e1a0f4b6c/rotate-secret" \
  -H "Authorization: Bearer $UETR_API_KEY"

The answer:

{
  "endpoint": {
    "id": "3b1f8c2e-6a4d-4f5e-9c7b-2d8e1a0f4b6c",
    "url": "hooks.slack.com/services/••••",
    "destination": "slack",
    "events": [
      "status_changed"
    ],
    "status": "active",
    "paused_at": null,
    "created_at": "2026-10-14T09:35:00.000Z",
    "created_by": "api",
    "api_version": "2026-10-14"
  },
  "signing_secret": "whsec_BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
  "previous_secret_expires_at": "2026-10-15T09:40:00.000Z"
}

Refusals

Besides the access refusals every call can meet, this call can answer: