Skip to main content

Signature Verification

Fireblocks cryptographically signs every webhook, allowing you to verify authenticity and integrity.

Signature methods

During migration, both headers are sent with each webhook.

Validating webhooks (JWKS)

How it works

The new signature uses Detached JWS (JSON Web Signature) format: Fireblocks-Webhook-Signature: “[header]..[signature]” The kid (key ID) is embedded in the JWS header, allowing automatic key lookup from the JWKS endpoint. The payload is sent separately in the request body (detached format).

JWKS endpoints

Fireblocks publishes public keys in JWKS format for validating webhook signatures. Use the endpoint that matches your workspace’s environment.

Response format

Caching behavior

The JWKS endpoint returns caching headers to optimize performance:
  • Cache-Control: public, max-age=3600, s-maxage=3600
  • Access-Control-Allow-Origin: *
  • Content-Type: application/json

Code examples (JWKS)

JWKS caching best practices

Cache the JWKS: Most libraries handle this automatically. Respect Cache-Control: JWKS responses include max-age=3600 (1 hour). Refresh accordingly. Handle rotation gracefully: Multiple keys will be present; the kid in the JWS header identifies which key to use.

Common pitfalls


Legacy Static Key Validation

Migration noticeThis method is being replaced by JWKS-based validation. Both headers are sent until March 20th, 2026. New integrations should use JWKS.

How the signature works

Fireblocks signs every webhook event with their private key. The signature is sent in the Fireblocks-Signature HTTP header: Fireblocks-Signature: Base64(RSA512(WEBHOOK_PRIVATE_KEY, SHA512(eventBody))) Breakdown: SHA512(eventBody) — Hash the raw request body with SHA-512
RSA512 Sign — Fireblocks signs the hash with their private RSA key (PKCS#1 v1.5)
Base64 Encode — The signature is base64-encoded for transport
Your job: Verify the signature using Fireblocks’ public key to confirm authenticity.

Public keys by environment

US Mainnet & Testnet

EU & EU2 Mainnet & Testnet

Developer Sandbox

Step-by-step validation process

  1. Extract the signature from the Fireblocks-Signature header
  2. Base64 decode the signature to get raw bytes
  3. Read the raw request body (do NOT parse or modify it)
  4. Hash the body with SHA-512
  5. Verify using RSA PKCS#1 v1.5 with the Fireblocks public key
  6. Accept or reject the webhook based on the verification result

Code examples (Legacy)