mTLS instead of an API key? How Sume authenticates calls

OpenAI's docs list mutual TLS and workload identity federation. Sume authenticates API calls with one API key header and signs webhooks with HMAC.

4 min readSume
All posts

Sume's public API authenticates with an API key, sent either as Authorization: Bearer or x-api-key, exactly one of them. The docs do not describe mTLS or workload identity federation for calls into Sume. Webhooks coming out of Sume are a separate path, signed with HMAC SHA-256 and checked with verifyWebhook.

On the OpenAI side, this post only relies on what the page navigation shows (read 2026-10-01): its API docs list Mutual TLS, Workload identity federation, and X.509 certificates. The snapshot did not include those pages' contents, so nothing more is claimed about how they work. Sume facts are from Authentication.

What does Sume use to identify a caller?

An API key. Sume resolves the workspace, owner, and key metadata from the key, so you do not put workspace_id or user_id in request bodies. Send exactly one credential: a request carrying both Authorization: Bearer and x-api-key is rejected with 401 unauthorized, and neither header wins. Gateways that add their own Authorization header on top of a client that already sends x-api-key are the usual cause.

How are webhooks authenticated instead?

The receiver checks a signature rather than a client certificate. Sume signs the raw body with HMAC SHA-256 over {timestamp}.{raw_body} and sends x-sume-webhook-timestamp and x-sume-webhook-signature: sume-v1=....

Which party proves what, per the Sume docs, read 2026-10-01.
DirectionProofWhere it is documented
Your code calls SumeOne API key headerAuthentication
Sume calls your URLsume-v1 HMAC signature plus timestampVerifying webhooks
Same delivery sent twiceDedupe on job_idWebhooks: receivers must treat job_id as the idempotency key

Where does the signing secret come from?

It is derived for your workspace; read it in the dashboard Webhooks tab or from GET /v1/webhooks/signing-secret with a key that has account:read. It is not the API key. The dashboard shows a fingerprint, and each delivery carries x-sume-webhook-secret-fingerprint, so when verification fails you can compare fingerprints without pasting the secret; see comparing the fingerprint.

What should I check if I need certificate-based identity?

Confirm with Sume's docs and your account contact before designing around it, since the docs reviewed here describe only the key header and the webhook signature. Keep the secret out of source control and rotate it if it may have leaked; rotation signs deliveries with both secrets for 24 hours.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume