Skip to main content
Every webhook request carries a signature. Checking it confirms that the request came from Bottari and that the body wasn’t changed.
Sign the bytes you received. Don’t parse the body and serialize it again. attempt_number changes on retries, so the signature differs per attempt.

Node example

This example uses only node:http and node:crypto. Without the BOTTARI_WEBHOOK_TOKEN environment variable, it treats the request as the verification step and logs the body.
After verification, set the environment variable so the logging code no longer runs. Delete the token from your logs.
With Express, use express.raw({ type: "application/json" }) instead of express.json() so you keep the raw bytes.

Test values

Use these to check your implementation. They are examples, not a real token.

Signature on the verification request

The request that delivers the verification token is signed with that same token. Your server doesn’t have the key yet, so it can’t check this signature. A subscription only turns on when the token is entered in the app, so only someone who received the token at that address can verify it.