Rate limit tiers

Rate limits are applied per API key and vary by plan. Limits are measured in requests per minute (RPM).
PlanRate limitBurst allowance
Free60 requests/min10 extra for short bursts
Pro300 requests/min50 extra for short bursts
Teams1,000 requests/min200 extra for short bursts
EnterpriseCustomContact sales
Burst allowance lets you briefly exceed your base limit for short spikes. Sustained traffic above your base limit will still be throttled.

Rate limit headers

Every API response includes headers that tell you your current rate limit status:
HeaderDescriptionExample
X-RateLimit-LimitMaximum requests allowed per minute300
X-RateLimit-RemainingRequests remaining in the current window287
X-RateLimit-ResetUnix timestamp when the window resets1713000060
Retry-AfterSeconds to wait before retrying (only on 429 responses)12
Example response headers
HTTP/2 200
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
X-RateLimit-Reset: 1713000060
Content-Type: application/json

Handling rate limits

When you exceed your rate limit, the API returns a 429 Too Many Requests response:
429 response
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "You have exceeded the rate limit of 300 requests per minute. Please retry after 12 seconds.",
    "request_id": "req_abc123def456"
  }
}

Retry strategy

We recommend implementing exponential backoff with jitter when you receive a 429 response.
import time
import random
import requests

def api_request_with_retry(url, headers, max_retries=5):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)

        if response.status_code != 429:
            return response

        retry_after = int(response.headers.get("Retry-After", 1))
        jitter = random.uniform(0, 1)
        wait_time = retry_after + jitter

        print(f"Rate limited. Retrying in {wait_time:.1f}s (attempt {attempt + 1})")
        time.sleep(wait_time)

    raise Exception("Max retries exceeded")

Best practices

Meeting data and transcripts rarely change. Cache responses on your side to reduce the number of API calls. Use the ETag header for conditional requests.
Instead of polling for new meetings or transcripts, set up webhooks to receive real-time notifications when data is ready.
When fetching multiple resources, use list endpoints with appropriate limit values instead of making individual requests for each item.
Check the X-RateLimit-Remaining header proactively and throttle your requests before hitting the limit.

Endpoint-specific limits

Some resource-intensive endpoints have additional per-endpoint limits regardless of your plan:
EndpointLimitNotes
POST /transcripts/search30 requests/minFull-text search is computationally expensive
POST /summaries/:id/regenerate10 requests/minAI regeneration consumes significant resources
POST /oauth/token20 requests/minPrevents brute-force token attempts
Need higher limits? Contact our sales team about Enterprise plans with custom rate limits and dedicated infrastructure.