On this page

Credits & rate limits

Credits

ActionCredits
Manual POST …/leads with status: "created"−1
Manual POST …/leads/batch−1 per item with status: "created"
Manual lead duplicate / excluded0
Manual POST …/leads/batch-update0
Manual POST …/leads/batch-delete0 (no credit refund)
Maps POST /campaigns launch0 at launch; −1 per email lead found later
Start / pause / send / list / get0

Insufficient credits → single add 403 insufficient_credits (never HTTP 402); add-batch → HTTP 200 with per-item insufficient_credits (not envelope 403).

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 routes (including GET /activity, GET /insights/overview)120
add_leadPOST …/leads60
add_leads_batchPOST …/leads/batch10
update_leads_batchPOST …/leads/batch-update6
delete_leads_batchPOST …/leads/batch-delete10
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 /campaigns/:id/leads/batch
  • POST /campaigns/:id/leads/batch-update
  • POST /campaigns/:id/leads/batch-delete
  • 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
Add-batch persistOnly if any item is created | duplicate | excluded
Update-batch persistWhen summary.updated > 0
Delete-batch persistWhen summary.deleted > 0

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.