Rate Limits

FrontDeskOS applies rate limits to ensure fair usage and protect service stability.

Limits by Plan

PlanTool CallsResource ReadsWebhook EventsBurst Limit
Free100/hour60/hour1,000/day20/min
Pro1,000/hour300/hour10,000/day100/min
Business5,000/hour1,000/hour100,000/day500/min
EnterpriseCustomCustomCustomCustom

Rate Limit Headers

Every response includes rate limit headers so you can track your usage:

Response headerstext
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 987
X-RateLimit-Reset: 1705312800
X-RateLimit-Burst-Limit: 100
X-RateLimit-Burst-Remaining: 95

Handling Rate Limits

When you hit a rate limit, the server returns a 429 status with the RATE_LIMITED error code. Implement exponential backoff to handle this gracefully:

Exponential backofftypescript
async function callWithRetry(toolName: string, args: any, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    try {
      return await mcp.callTool(toolName, args);
    } catch (error: any) {
      if (error.code === "RATE_LIMITED" && attempt < maxRetries) {
        const delay = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s
        await new Promise(resolve => setTimeout(resolve, delay));
        continue;
      }
      throw error;
    }
  }
}
MCP Clients Handle This
Most MCP-compatible clients (including Claude Desktop) handle rate limiting automatically. You only need to implement retry logic if you are building a custom MCP client or calling tools programmatically.

Optimizing Usage

  • Use filters to reduce the amount of data returned by list tools.
  • Cache resource reads -- business info and staff directory change infrequently.
  • Batch related operations when possible rather than making individual calls.
  • Use webhooks instead of polling for real-time updates.
  • Set appropriate limit values on paginated requests.

Search Documentation

Search for pages, tools, and guides