Skip to content

Rate Limits

The Tailwind API implements rate limiting to ensure fair usage and maintain service quality for all users.

Current Limits

Limit TypeLimitReset Period
Daily Requests1,000Midnight UTC
Requests per Second10Per second

Rate Limit Headers

Every API response includes headers to help you track your usage:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 950
X-RateLimit-Reset: 1704067200
HeaderDescription
X-RateLimit-LimitYour daily request limit
X-RateLimit-RemainingRequests remaining today
X-RateLimit-ResetUnix 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 minutes
const 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 first
const posts = preparePostsForWeek();
// Create them in sequence with reasonable delays
for (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.