Overview
OneShot enforces rate limits to ensure fair usage and protect system stability. Limits are applied per agent (identified by wallet address) or per IP address, depending on the endpoint type.Rate Limits by Endpoint Type
| Endpoint Type | Limit | Window | Key |
|---|---|---|---|
| Paid endpoints | 60 requests | 1 minute | Agent wallet |
| Expensive operations | 10 requests | 1 minute | Agent wallet |
| Free read endpoints | 120 requests | 1 minute | Agent wallet |
Endpoint Categories
Paid Endpoints (60/min)
Standard paid API calls:POST /v1/tools/email/quotePOST /v1/tools/email/sendPOST /v1/tools/enrich/emailPOST /v1/tools/enrich/profilePOST /v1/tools/verify/emailPOST /v1/tools/commerce/searchPOST /v1/tools/commerce/buyPOST /v1/tools/sms/send
Expensive Operations (10/min)
Resource-intensive operations with stricter limits:POST /v1/tools/voice/call— Voice callsPOST /v1/tools/research— Deep web researchPOST /v1/tools/research/people— People discovery
Free Read Endpoints (120/min)
Read-only endpoints that don’t require payment:GET /v1/tools/inbox/list— Email inbox listGET /v1/tools/inbox/:id— Email detailsGET /v1/tools/sms/inbox— SMS inbox listGET /v1/tools/sms/inbox/:id— SMS detailsGET /v1/status/:id— Job status polling
Rate Limit Response
When you exceed a rate limit, you’ll receive a429 Too Many Requests response:
Response Headers
Rate limit information is included in response headers:| Header | Description |
|---|---|
RateLimit-Limit | Maximum requests allowed in window |
RateLimit-Remaining | Requests remaining in current window |
RateLimit-Reset | Seconds until the window resets |
Best Practices
Implement exponential backoff
Implement exponential backoff
When you receive a 429 response, wait for the
retry_after period before retrying. For repeated rate limits, increase the wait time exponentially.Batch operations when possible
Batch operations when possible
For bulk operations, use batch endpoints where available:
- SMS: Send to multiple recipients in one request (up to 10)
- Email: Include multiple recipients in one send
Cache inbox results
Cache inbox results
Free read endpoints like inbox list and status polling have generous limits, but caching results client-side reduces unnecessary API calls.
Use webhooks for job completion
Use webhooks for job completion
Instead of polling
/status/:id repeatedly, configure webhooks to receive notifications when jobs complete.