Rotate the signing secret

Overview

Replace the signing secret with a new one.

Use this on a schedule, or if the secret may have been exposed. Update your verifier before the next delivery.

You'll need the subscription id.

Returns the new secret and the new hmac_secret_fingerprint. The old one stops working immediately.

Prerequisites

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/partner/webhooks/{webhookSubscriptionId}/rotate-secret

Authentication

Partner token

  • Only partner users can call it; other tokens get 403.
  • Only your own partner's subscriptions: any other id, including another partner's, gets 404.

Rate limit

This endpoint has no rate limit.

Request parameters

ParameterInTypeRequiredDescription
webhookSubscriptionIdpathintegerYesThe subscription's id, from List your webhooks.

Request body

None.

Request payload

None. Send no body.

Response body

The payload is inside data.

FieldTypeDescription
dataobjectThe subscription, with the new secret.
data.idintegerThe subscription's id (webhookSubscriptionId).
data.partner_company_idintegerYour partner id.
data.labelstringYour name for the subscription.
data.webhook_urlstringWhere deliveries are sent.
data.eventsarray of strings or nullThe event filter. null: all immediate events. Always null on a batch subscription.
data.payload_modestringfull (the review, who did it, and the history entry) or minimal (event name and ids only). Always full on a batch subscription.
data.delivery_kindstringimmediate (each event as it happens) or batch (one cache_invalidation ping per location per interval).
data.batch_interval_hoursinteger or nullHours between batches: 1, 2, 4, 6 or 12. null on an immediate subscription.
data.delivery_labelstringThe delivery type in words: immediate, hourly batch or every N hours.
data.last_batch_dispatched_atstring or nullWhen the last batch was sent (ISO 8601). Set to the creation time for a new batch subscription; null on an immediate one.
data.is_activebooleanWhether deliveries are being sent.
data.hmac_secret_fingerprintstringThe first 16 characters of the SHA-256 hash of the signing secret, so you can tell which secret is current. The secret itself is never returned here.
data.last_succeeded_atstring or nullWhen a delivery last succeeded (ISO 8601), or null.
data.last_failed_atstring or nullWhen a delivery last failed (ISO 8601), or null.
data.last_failure_reasonstring or nullWhy the last delivery failed, or null.
data.consecutive_failure_countintegerFailed deliveries in a row since the last success.
data.created_atstringWhen the subscription was created (ISO 8601).
data.updated_atstringWhen it last changed (ISO 8601).
data.hmac_secretstringThe new signing secret. Shown here once; store it now.
data.hmac_secret_warningstringA reminder that the previous secret no longer works.

Response payload

{
  "data": {
    "data": {
      "id": 3,
      "partner_company_id": 5,
      "label": "Production webhook",
      "webhook_url": "https://partner.example.com/hooks/sau",
      "events": [
        "review_pull_connected",
        "review_pull_disconnected",
        "usage.limit_reached"
      ],
      "payload_mode": "full",
      "delivery_kind": "immediate",
      "batch_interval_hours": null,
      "delivery_label": "immediate",
      "last_batch_dispatched_at": null,
      "is_active": true,
      "hmac_secret_fingerprint": "9c1d4e2a7b3f6058",
      "last_succeeded_at": "2026-06-16T10:27:30+00:00",
      "last_failed_at": null,
      "last_failure_reason": null,
      "consecutive_failure_count": 0,
      "created_at": "2026-06-16T10:23:23+00:00",
      "updated_at": "2026-06-20T09:00:00+00:00",
      "hmac_secret": "<hmac-secret>",
      "hmac_secret_warning": "Store this value securely — it will not be shown again. Update your verifier immediately; the previous secret is no longer accepted."
    }
  }
}

Examples

Success payload

See Response payload.

Error payload

403 Not a Partner token

{
  "message": "Only partner-admin users can manage webhook subscriptions.",
  "status": "error",
  "errors": []
}

404 Subscription not found

{
  "message": "Subscription not found.",
  "status": "error",
  "errors": []
}
StatusMeaning
200The secret was replaced; store hmac_secret now.
401The token is missing, expired or invalid.
403The token isn't a Partner token.
404No subscription with this id belongs to your partner.
500Unexpected server error.

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/partner/webhooks/3/rotate-secret" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?