Skip to main content
Every /quote, /confirm, and /ping request we send carries an X-Novig-Signature header. Check it on every request. A valid signature proves the request came from us and that nobody changed the body on the way.

How we sign

The signature is a BLAKE3 keyed hash of the raw request body.
Your shared secret comes from the POST /rfq/pricer response. Registration explains it.
Hash the body bytes exactly as you received them, before you parse the JSON. Parsing and re-serializing changes whitespace or key order, and the signature won’t match.

Check a signature

Use a BLAKE3 library and a constant-time comparison.
Pass verify the raw body as bytes and the value of the X-Novig-Signature header.

Reject a bad signature

Return 401 when the signature doesn’t match. Don’t process the body, echo it back, or log the signature. Never answer a bad signature with a 2xx status. A 2xx tells the sender you accepted the request.

Test your check

Call POST /rfq/pricer/ping. We send a real signed request to your /ping handler and report how you answered. Run it before any live RFQ depends on your check.