Overview
PIPELINE API implements rate limiting to ensure fair usage and protect against abuse. Rate limits are enforced per client IP address or user identifier.Rate limits reset automatically after the specified time window. All responses include rate limit headers to help you track your usage.
Rate Limit Tiers
General API
100 requests per minuteApplies to most API endpoints including jobs CRUD, dashboard stats, and data retrieval.
Authentication
5 requests per minuteStricter limit for login, signup, and password reset endpoints to prevent brute force attacks.
Scraper Triggers
10 requests per hourPrevents excessive scraper runs that could overload job board sources.
Export Operations
10 requests per hourLimits data export operations to prevent bulk data scraping.
Rate Limit Headers
Every API response includes rate limit information in the headers:| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the time window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp (ms) when the limit resets |
Rate Limit Errors
When you exceed a rate limit, the API returns a429 Too Many Requests error:
Error Response Fields
Number of seconds to wait before retrying
The rate limit that was exceeded
Will always be
0 in rate limit errorsISO 8601 timestamp when the rate limit resets
Additional Headers
Rate limit error responses include an additional header:Rate Limit Strategy
Current Implementation: In-memory rate limiting suitable for development and single-instance deployments.Production Recommendation: For multi-instance production deployments, consider Redis-based rate limiting (e.g.,
@upstash/ratelimit).How It Works
- Sliding Window: Rate limits use a sliding time window algorithm
- IP-Based: Requests are tracked by client IP address (from
X-Forwarded-FororX-Real-IPheaders) - Automatic Cleanup: Old request records are cleaned up every 10 minutes
Limitations
The current in-memory implementation has these limitations: For production deployments with multiple instances, implement Redis-based rate limiting to ensure consistent limits across all servers.Handling Rate Limits
Exponential Backoff
Implement exponential backoff when you receive rate limit errors:Check Headers Proactively
Monitor rate limit headers to avoid hitting limits:Batch Requests
Instead of making many individual requests, batch your operations:Best Practices
Cache Responses
Cache Responses
Cache API responses on the client side to reduce the number of requests:
- Use React Query or SWR for automatic caching
- Implement browser localStorage for persistent caching
- Set appropriate cache TTLs based on data freshness requirements
Respect Headers
Respect Headers
Always check rate limit headers and respect
Retry-After:- Read
X-RateLimit-Remainingbefore making requests - Use
Retry-Afterheader value for retry timing - Implement circuit breakers for repeated failures
Implement Backoff
Implement Backoff
Use exponential backoff with jitter:
- Start with 1-2 second delays
- Double the delay on each retry
- Add random jitter to prevent thundering herd
- Cap maximum delay at 30-60 seconds
Monitor Usage
Monitor Usage
Track your API usage patterns:
- Log rate limit headers in development
- Set up alerts for approaching limits
- Monitor 429 error rates
- Optimize request patterns based on usage data
Service-Specific Limits
AI Matching Service
The AI matching service has additional rate limiting:Scraper Service
Scraper runs are strictly limited:Increasing Limits
Rate limits are fixed in the current version. For higher limits, consider:
- Optimizing your request patterns
- Implementing client-side caching
- Batching operations
- Self-hosting with custom rate limit configuration
Future Enhancements
Planned improvements for v1:Related Documentation
Error Codes
View all error codes and handling
Webhooks
Learn about webhook rate limits