On this page

Credits & rate limits

Credits

ActionCredits
Manual POST …/leads with status: "created"−1
Manual lead duplicate / excluded0
Maps POST /campaigns launch0 at launch; −1 per email lead found later
Start / pause / send / list / get0

Insufficient credits → 403 insufficient_credits (never HTTP 402).

Check balance with GET /credits.

Rate limits

Fixed 60-second windows. On 429, the response includes Retry-After (seconds) and often details.retryAfterSeconds.

Per API key (defaults)

ClassApplies toDefault RPM
globalAll authenticated routes120
add_leadPOST …/leads60
patch_leadPATCH …/leads/:id60
create_campaignPOST /campaigns6
campaign_controlPOST …/start, POST …/pause20
inbox_sendPOST /inbox/messages10

Pre-auth (before key resolves)

Protects against credential stuffing: IP and key-fingerprint buckets (defaults 60/min and 30/min). Failures still return 429 rate_limited.

Idempotency

Optional header on:

  • POST /campaigns/:id/leads
  • POST /inbox/messages
Idempotency-Key: <client-unique-string>
RuleDetail
Max length128 characters
ReplaySame key + same body → same 200 response
MismatchSame key + different body → 409 conflict
In progressSame key still running → 409 conflict (retry shortly)
TTLAbout 24 hours

Invalid / too-long keys → 400 validation_error.

Pagination

QueryDefaultMax
limit50100
cursorOpaque string from previous nextCursor

Response field: nextCursor (string or null). Invalid/expired cursor → 400 validation_error.

Request size

Max body size: 131072 bytes (128 KiB). Over → 413 validation_error with details.maxBytes.