Skip to main content
This page assumes you’ve already created a bot in the Zenzap console. If not, start at Setup — that’s where you pick a credential type. Open the tab that matches your bot’s credential type.
Every request carries three headers:
The signature payload differs by HTTP method:
  • POST/PUT/PATCH/DELETE: sign {timestamp}.{body}
  • GET: sign {timestamp}.{uri} (full path + query string)
For multipart/form-data requests, sign the exact raw request body bytes with a timestamp prefix: {timestamp}.<raw-bytes>.Requests with timestamps older than 5 minutes are rejected.

How to calculate

  1. Get the current Unix timestamp in milliseconds.
  2. Build the payload:
    • POST/PUT/PATCH/DELETE: {timestamp}.{raw-body}
    • GET: {timestamp}.{uri} (for example /v2/members?limit=10&offset=0)
  3. Calculate HMAC-SHA256 of the payload using your API secret.
  4. Hex-encode the digest (64 lowercase chars).
  5. Send both X-Signature and X-Timestamp.

Example — POST (Python)

Example — GET (Python)

Our API documentation tools cannot automatically generate HMAC signatures. Calculate the signature manually or use a tool like Postman with pre-request scripts.

OAuth scopes

OAuth bots are authorized by scope, not by read / write. Each /v2/* endpoint requires a specific scope — the bot must be granted that scope at creation, and the access token must include it. A token may carry multiple scopes. Request the minimum set you need — narrower scopes limit the blast radius if the token is ever leaked.