Skip to main content
Finosu sends an HTTP POST containing the event envelope. Read the original request body as bytes before JSON middleware changes it.

Get your signing secret

Finosu provides the endpoint’s signing secret when it is created or rotated. Store it in a secret manager or server environment variable. It is not your API key and must not appear in browser code or logs.

Request headers

The signature covers the timestamp and raw body, not the other headers. Verify company and environment using the signed body and use its id for event-level deduplication. If using a header identifier, confirm it matches the body or store it alongside the verified event identity. A bearer token does not replace signature verification.

Verify the signature

  1. Extract t and v1 from X-Finosu-Signature.
  2. Reject malformed headers and timestamps outside your tolerance. Five minutes is a suggested receiver policy, not a sender-enforced setting. Check both old and future timestamps and keep your server clock synchronized.
  3. Compute HMAC-SHA256 using the signing secret’s UTF-8 bytes as the key. The signed message is the ASCII timestamp, a period, and the original request-body bytes. Do not base64-decode the secret or parse/re-serialize the JSON before verifying.
  4. Compare the hexadecimal digest in constant time. Only then parse and process the JSON.
Save the following standard-library verifier as verification.py. The quickstart imports this function in a working test receiver. Business events also need durable acceptance.
This example accepts the currently emitted signature format only. It does not claim support for future signature schemes or multiple simultaneous secrets. Never log the secret or authorization token. Apply a request-body size limit appropriate to your integration; this contract does not define a universal maximum event size.

Troubleshooting

See delivery and retries for acknowledgment, deduplication, and recovery behavior.