Skip to main content

Rate Limiting

Ticksupply uses a token bucket algorithm to enforce fair usage limits. This guide explains the limits, how to monitor your usage, and best practices for staying within bounds.

Rate limit overview

Rate limits are shared across all API keys on the same account. If you have multiple applications using different keys, they share the same limits.

Rate limit headers

Every API response includes headers showing your current rate limit status: Example response headers on a normal call:
When a window is exhausted, the matching X-RateLimit-Reset-* header is added alongside the rest. Its value is an absolute Unix timestamp in seconds — not a delay:
Compute the wait time as reset - now (seconds), not by treating the value as a duration.

When rate limits are exceeded

When you exceed rate limits, the API returns a 429 Too Many Requests response:
The response includes a Retry-After header indicating how many seconds to wait:

Handling rate limits

Basic retry with exponential backoff

Proactive rate limiting

Monitor the rate limit headers to avoid hitting limits:

Best practices

Batch requests when possible

Instead of making many individual requests, use endpoints that return multiple items:

Use idempotency keys for retries

When retrying failed requests, use idempotency keys to prevent duplicate operations:

Implement request queuing

For high-volume applications, queue requests and process them at a sustainable rate:

Cache responses

Cache catalog data that doesn’t change frequently:
Exchange and stream type data changes infrequently. Cache these responses for at least 1 hour to reduce API calls.

Other limits

Rate limits control request throughput, but two separate kinds of limits can deny specific calls without consuming rate-limit budget:
  • Billing and plan limits — creating a new subscription, resuming a paused subscription, or starting an export beyond your plan returns 402 payment_required. See the Error Handling guide for the full list of causes.
  • Trial caps — on the trial plan, the number of active subscriptions and the cumulative successful-export size are both capped. Further POST /v1/subscriptions or POST /v1/exports calls return 402 payment_required once a cap is reached.
Neither is affected by Retry-After — retrying identical calls will keep failing until the underlying billing state changes. Upgrade your plan, update your payment method, or wait for your trial to convert in billing settings. To check programmatically where you stand — current access_status, plan code, period end, and usage totals — call GET /v1/billing/summary.

Rate limit increases

If you need higher rate limits for your use case, contact our support team:
Rate limit increases are evaluated on a case-by-case basis and may require an upgraded plan.

Next steps

Error Handling

Handle API errors gracefully in your application

Idempotency

Safely retry requests using idempotency keys

Pagination

Navigate large result sets efficiently

API Reference

Explore the complete API documentation
Last modified on April 17, 2026