Signing Requests
Every authenticated client request must be signed with the same request body and timestamp you send over the wire.
Signing Algorithm
- Serialize the request body exactly as it will be sent. Use an empty string when the request has no body.
- Generate an RFC3339 UTC timestamp.
- Build the string to sign:
- Compute
HMAC-SHA256(secret_key, data_to_sign). - Hex-encode the result and send it as
X-Signature.
Required Headers
X-API-Key: your public API key identifierX-Timestamp: RFC3339 UTC timestamp used for replay protectionX-Signature: hex-encoded HMAC-SHA256 signature
Important Rules
- The signature must be generated from the exact body bytes sent to the API.
- If you change spacing, formatting, or field order after signing, signature verification can fail.
- Timestamps must be fresh. Requests with old or invalid timestamps are rejected.
- Always transmit over HTTPS.
Common Failure Cases
- Missing
x-api-key,x-signature, orx-timestamp - Invalid timestamp format
- Timestamp too old or too far in the future
- Signature generated from a different body than what was sent
- Using the wrong secret key for the API key