- Static API key
- OAuth 2.0
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)
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
- Get the current Unix timestamp in milliseconds.
- Build the payload:
- POST/PUT/PATCH/DELETE:
{timestamp}.{raw-body} - GET:
{timestamp}.{uri}(for example/v2/members?limit=10&offset=0)
- POST/PUT/PATCH/DELETE:
- Calculate HMAC-SHA256 of the payload using your API secret.
- Hex-encode the digest (64 lowercase chars).
- Send both
X-SignatureandX-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 byread / 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.