Signing requests
Each provider has a secret. We sign every call to your MCP server or HTTP API with it.
Create or reset the secret on the Secrets page. Resetting replaces the old value at once.
Every request to your backend includes these headers:
X-BA-Timestamp: time in millisecondsX-BA-Signature:sha256=<hex>X-BA-User-Id: the account that used the tool
The signature is HMAC-SHA256 of timestamp + "." + raw body, using your secret as the key. Reject old timestamps and bad signatures.
timestamp="1710000000000"
body='{"name":"lookup","input":"paris"}'
payload="$timestamp.$body"
signature=$(printf '%s' "$payload" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')
-sky-300">curl -X -sky-300">POST "$TOOL_URL" \
-H "Content-Type: application/json" \
-H "X-BA-Timestamp: $timestamp" \
-H "X-BA-Signature: sha256=$signature" \
-H "X-BA-User-Id: $USER_ID" \
--data "$body"