Lost a webhook signing secret? Gemini shows it once, Sume re-reads
Gemini static webhooks return the signing secret once at creation. Sume's secret can be read again from the dashboard or GET /v1/webhooks/signing-secret.

If you lose a Sume webhook signing secret, read it again: open the Webhooks tab of the dashboard and use Reveal, or call GET /v1/webhooks/signing-secret with an API key that carries account:read. The Gemini API's static webhooks, by contrast, are described as returning the signing secret only once at creation.
Sume facts are from Webhooks, read 2026-10-01.
Where do I find the Sume signing secret?
Two places: the dashboard page /dashboard/webhooks (Reveal, then copy), or the API endpoint above. The docs say the value is derived for your workspace, so it is yours rather than a shared platform value, and suggest storing it as SUME_COM_WEBHOOK_SIGNING_SECRET.
curl https://api.sume.com/v1/webhooks/signing-secret \
-H "Authorization: Bearer $SUME_API_KEY"Is there one secret per webhook?
No. Job webhooks and run webhooks share that one workspace secret, so a single verifier covers both. Sume registers callbacks per job, so there is no per-webhook secret to lose.
| Aspect | Gemini static webhook | Sume |
|---|---|---|
| Shown at creation only | Yes, as written | No; re-readable |
| Scope | Per static webhook | One per workspace |
| Retrieval | Not covered | Dashboard Reveal or GET /v1/webhooks/signing-secret |
| API permission | Not covered | account:read |
How do I know which secret signed a delivery?
Every delivery carries x-sume-webhook-secret-fingerprint, and the receipt repeats it as webhook_delivery.signing_secret_fingerprint. If a signature does not verify, compare that fingerprint with the one shown beside the secret in the dashboard. Neither side has to send the secret itself.
During a rotation the signature header can carry one sume-v1= entry per live secret, newest first. Accept the delivery if any entry matches.
What should I do after reading the secret?
Put it in your secrets manager, not in source control, and make your verifier refuse to run with an empty value. The delivery debugging steps are in this guide.
Sources
Related posts
More in Developers
- Gemini thin webhook payload vs Sume: artifact URLs in the body
Gemini webhooks send a snapshot with pointers to results. A Sume job.completed webhook already carries the media.sume.com artifact URL, so no second fetch.
- GPT Image 2 input_fidelity: omit it; Sume returns 400
OpenAI says to omit input_fidelity for gpt-image-2 because inputs run at high fidelity. Sume lists no such field and rejects unlisted parameters with 400.
- GPT Image moderation_blocked vs Sume content_policy_rejected
OpenAI returns moderation_blocked with moderation_details. On Sume, policy refusals are grouped under content_policy_rejected. What to read and when to retry.
- GPT Image revised_prompt: what a Sume images response returns
OpenAI returns revised_prompt on the image generation call. A Sume POST /v1/images response has data[].url and usage, with no revised prompt field.
Written by Sume