Limits
| Category | Limit | Endpoints |
|---|---|---|
| Reads (tier-1) | 10,000/min | All GET/HEAD/OPTIONS requests not listed below |
| Search (tier-2) | 10,000/min | POST /v1/trademarks, GET /v1/trademarks, GET /v1/suggest |
| Writes (tier-3) | 1,000/min | All POST, PATCH, DELETE requests not listed below |
| MCP | 1,000/min | All /mcp endpoints |
POST /v1/trademarks (the search endpoint) counts as a write because it uses the POST method. GET /v1/trademarks counts as a read.
Rate limits are counted per organization. All API keys under the same org share a single rate limit window.
Rate Limit Headers
Every API response includes IETF-standard rate limit headers so you can monitor your usage in real time:| Header | Format | Description |
|---|---|---|
RateLimit-Policy | {limit};w={windowSec} | The limit and window size in seconds (e.g., 1000;w=60 means 1,000 requests per 60-second window). |
RateLimit | remaining={N}, reset={seconds} | Remaining requests in the current window and seconds until the window resets. |
Retry-After | {seconds} | Only present on 429 responses. Number of seconds to wait before retrying. |
Per-Endpoint Rate Information
Each endpoint falls into the tier determined by its HTTP method and path, as described above. Some notable classifications:| Endpoint | Tier | Limit | Notes |
|---|---|---|---|
GET /v1/trademarks | Reads | 10,000/min | GET falls into the reads tier. |
POST /v1/trademarks | Writes | 1,000/min | POST method falls into the writes tier. |
GET /v1/trademarks/suggest | Search | 10,000/min | Explicitly routed to the search tier. |
GET /v1/suggest | Search | 10,000/min | Explicitly routed to the search tier. |
POST /v1/trademarks/batch | Writes | 1,000/min | Each batch request counts as 1, regardless of batch size. |
Handling 429 Responses
When you exceed your rate limit, the API returns a429 Too Many Requests status with details about when you can retry:
Retry-After response header and the retry_after field in the body both contain the number of seconds to wait.
Exponential Backoff
When you receive a429, wait for the Retry-After duration and then retry with exponential backoff:
Monitoring Usage
GET /v1/usage
Check your current rate limit status and historical usage without making a full API call:current_period tracks daily usage against your daily cap. rate_limits shows the current sliding-window status for each category.
Avoid polling the
/v1/usage endpoint in a tight loop. It shares the standard reads quota.Best Practices
Use batch endpoints to reduce request count
Use batch endpoints to reduce request count
A single batch request of 100 IDs counts as 1 request against your rate limit, compared to 100 individual GET requests. See the batch operations guide for details.
Cache responses with ETags
Cache responses with ETags
Use targeted lookups instead of frequent searches
Use targeted lookups instead of frequent searches
If you are periodically checking for trademark status changes, use Trademark History on specific marks rather than re-running broad searches. A targeted lookup costs 1 read request and avoids burning your search quota.
Spread requests evenly
Spread requests evenly
Bursting 500 requests in the first second of a window is more likely to trigger rate limiting than spreading them evenly across the minute. If you need to process a large batch, add a small delay (50—100ms) between requests.
Use separate API keys per concern
Use separate API keys per concern
If your application has both a user-facing dashboard and a background sync job, create separate API keys for each. This prevents a background job from exhausting the rate limit that your dashboard users depend on.
Monitor the RateLimit header
Monitor the RateLimit header
Build alerting around the
remaining value in the RateLimit header. If it consistently drops below 20% of your limit, you may need to optimize your request patterns or contact us about higher limits.Need Higher Limits?
If you are consistently hitting rate limits:- Optimize: Apply the best practices above (caching, batching, watches).
- Contact us: Reach out at support@signa.so to discuss higher limits tailored to your workload.