Rate Limits
The Tailwind API implements rate limiting to ensure fair usage and maintain service quality for all users.
Current Limits
| Limit Type | Limit | Reset Period |
|---|---|---|
| Daily Requests | 1,000 | Midnight UTC |
| Requests per Second | 10 | Per second |
Rate Limit Headers
Every API response includes headers to help you track your usage:
X-RateLimit-Limit: 1000X-RateLimit-Remaining: 950X-RateLimit-Reset: 1704067200| Header | Description |
|---|---|
X-RateLimit-Limit | Your daily request limit |
X-RateLimit-Remaining | Requests remaining today |
X-RateLimit-Reset | Unix timestamp when the limit resets |
Rate Limit Exceeded
When you exceed the rate limit, you’ll receive a 429 Too Many Requests response:
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Daily rate limit of 1000 requests exceeded. Resets at midnight UTC." }, "meta": { "requestId": "abc123" }}Best Practices
1. Implement Exponential Backoff
When you receive a rate limit error, wait before retrying:
async function fetchWithRetry(url, options, maxRetries = 3) { for (let attempt = 0; attempt < maxRetries; attempt++) { const response = await fetch(url, options);
if (response.status === 429) { const waitTime = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s await new Promise(resolve => setTimeout(resolve, waitTime)); continue; }
return response; } throw new Error('Max retries exceeded');}2. Cache Responses
Cache data that doesn’t change frequently:
// Boards rarely change - cache for 5 minutesconst boards = await getCachedOrFetch('boards', 5 * 60 * 1000, () => fetch(`${API_URL}/v1/accounts/${accountId}/boards`, options));3. Batch Operations
Instead of creating posts one at a time, prepare your data and create them efficiently:
// Prepare all posts firstconst posts = preparePostsForWeek();
// Create them in sequence with reasonable delaysfor (const post of posts) { await createPost(post); await new Promise(resolve => setTimeout(resolve, 100)); // 100ms between requests}4. Monitor Your Usage
Track the X-RateLimit-Remaining header to avoid hitting limits:
const response = await fetch(url, options);const remaining = parseInt(response.headers.get('X-RateLimit-Remaining'));
if (remaining < 100) { console.warn(`Low on API requests: ${remaining} remaining`);}Increasing Your Limit
If you need higher rate limits for your use case, please contact support@tailwindapp.com with:
- Your organization name
- Your use case
- Expected request volume
- Any relevant technical details
We’ll review your request and get back to you within 2 business days.