Rate limits
Defaults from production Partner code (synced 2026-07-21). Enterprise tiers may negotiate higher caps — ask Tips Marketing. Always handle 429 with retry_after_seconds when present.
Limits may vary by tier. Sandbox partners (
pk_test_*) never spend live credits but still hit the daily send cap below.Partner API /api/v1/partner/*
| Surface | Limit | Notes |
|---|---|---|
| REST requests (org key or seat) | 100 req/min per partner (default) | Configurable per partner as requests_per_min. Error: rate_limit_exceeded. |
| Single send → same recipient | 10 msgs/day per recipient (default) | recipient_msgs_per_day on the partner record. Anti-harassment. |
| Batch create | 10 req/min · ≤500 recipients/request | Org API key + HMAC only. Shared bucket with campaigns. |
| Campaigns | Same as batch | Org key only. One debit path (wraps batch worker). |
Sandbox pk_test_* |
100 sends/UTC-day · 0 credits | Cap shared across single + batch + campaign. Error: sandbox_daily_cap_exceeded. Bodies prefixed [SANDBOX]. |
| Webhook deliveries log | Last 100 attempts retained | GET /webhook/deliveries — org key only. |
Outbound webhooks (us → you)
| Behavior | Value |
|---|---|
| Immediate attempt timeout | 5 seconds |
| Retry sweep | Hourly background worker |
| Max attempts | 5 (then drop) |
| Backoff | Quadratic minutes, capped at 6 hours |
Not an inbound RPS limit on your servers — plan capacity for bursty fan-out after large batches.
Client API /api/ping/*
Native apps and the Chrome extension use the Client lane (session / device auth). Attach upload, inbox long-poll (/events/wait), and push registration live here — not under /api/v1/partner. See Client API and CLIENT_API_FOR_NATIVE_APPS.md in the repo for governance details.