x-api-key header:
API keys
- Create a key in Settings → API Keys. Organization Admins and Members can create keys; Viewers cannot. Copy the full key when it is created, because it is only shown once.
- API keys are scoped to your organization and grant access to all of its agents.
- Store keys securely and never expose them in client-side code.
401 with an UNAUTHORIZED or INVALID_API_KEY error code.
Requests for an agent that doesn’t belong to your organization return 401/404.
Validating your key
To check that your API key works, call a read-only endpoint. Credit usage authenticates the key at the organization level:200 from both means your key is valid and the agent is reachable. Both calls are pure reads — they can’t
schedule or modify anything, regardless of how they’re invoked.
The single-contact scheduling endpoint also accepts
HEAD requests for connectivity checks without scheduling.Request signing
Agents with request signing enabled require two additional headers onPOST /agents/{agentId}/schedule/sequences. The x-api-key header is still required. That is the only
scheduling endpoint that accepts signed requests: for these agents, POST /agents/{agentId}/schedule/sequence
returns 403 with REQUEST_SIGNING_REQUIRED and retryable: false.
X-HMAC-Timestamp— current Unix time in seconds.X-HMAC-Signature— Base64-encoded HMAC-SHA256 using the agent’s configured signing secret.
POST + "\n" + timestamp + "\n" + rawBody. Sign the body exactly as
sent; changing whitespace after signing invalidates the signature. The URL path is excluded from the signature.
The timestamp must fall within the agent’s configured tolerance, which defaults to ±300 seconds. Signing is
checked before JSON parsing. A request that fails signing returns 401 with retryable: false:
Rate limiting
- The bulk scheduling endpoint defaults to 600 requests per minute per agent. The agent can have a different configured limit. API keys for the same organization share this per-agent budget.
- Exceeding the limit returns HTTP
429witherror: "RATE_LIMITED"andretryable: true. - Wait the number of seconds in
Retry-Afterbefore retrying. The response also includesX-RateLimit-Limit,X-RateLimit-Remaining, andX-RateLimit-Reset(Unix seconds).
Error format
Structured API errors contain a machine-readableerror and a human-readable message:
retryable to distinguish requests that may succeed later from requests that need correction,
and includes per-contact rejection details when every contact fails validation.
Clients should also handle server failures whose response body is not JSON. When retrying an unchanged bulk
request after a timeout or server failure, reuse its Idempotency-Key: if the first attempt returned 202, the
retry gets that response back with Idempotent-Replayed: true and nothing is scheduled twice. Only a 202 records
the key, so a request that failed can be corrected and resent with the same key. Use a new key for each new batch.