Rate Limits

Understanding and working within TradeStaq's API rate limits.

Overview

Rate limits protect the platform and ensure fair access for all users. Different endpoints have different limits based on their resource requirements.

Webhook Rate Limits

Per-Webhook Limits

Limit TypeValueWindow
Requests60Per minute
Burst10Per second

What This Means

ScenarioAllowed?
1 signal per secondYes
10 signals in 1 second, then pauseYes
60 signals in 1 minuteYes
61 signals in 1 minuteNo (61st rejected)
15 signals in 1 secondNo (11-15 rejected)

Rate Limit Headers

Responses include rate limit information:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1704067260
HeaderDescription
X-RateLimit-LimitMaximum requests per window
X-RateLimit-RemainingRequests remaining
X-RateLimit-ResetUnix timestamp when limit resets

Rate Limit Response

When exceeded:

{
  "success": false,
  "error": "Rate limit exceeded",
  "code": "RATE_LIMITED",
  "retryAfter": 15
}

HTTP Status: 429 Too Many Requests

Exchange API Limits

Each exchange has its own rate limits that TradeStaq respects:

Binance

Endpoint TypeLimitWindow
Order operations10Per second
Account queries1200Per minute
Weight limit1200Per minute

ByBit

Endpoint TypeLimitWindow
Order operations10Per second
Account queries120Per minute

OKX

Endpoint TypeLimitWindow
Order operations60Per 2 seconds
Account queries10Per second

Subscription Tier Limits

Feature Limits by Tier

FeatureFreeProTraderWhale
Webhooks/minute3060120300
Bot spins/minute11060120
API calls/day1,00010,000100,000Unlimited

Concurrent Limits

ResourceFreeProTraderWhale
Active bots151550
Open positions31050200
Pending orders520100Unlimited

Handling Rate Limits

Retry Strategy

When you receive a 429 response:

import time
import requests

def send_signal_with_retry(url, payload, max_retries=3):
    for attempt in range(max_retries):
        response = requests.post(url, json=payload)

        if response.status_code == 429:
            retry_after = response.json().get('retryAfter', 5)
            time.sleep(retry_after)
            continue

        return response

    raise Exception("Max retries exceeded")

Exponential Backoff

For better retry handling:

import time
import random

def exponential_backoff(attempt, base_delay=1, max_delay=60):
    delay = min(base_delay * (2 ** attempt), max_delay)
    jitter = random.uniform(0, delay * 0.1)
    return delay + jitter

# Usage
for attempt in range(5):
    response = requests.post(url, json=payload)
    if response.status_code != 429:
        break
    time.sleep(exponential_backoff(attempt))

Rate Limit Best Practices

PracticeImplementation
Check headersMonitor remaining quota
Implement backoffDon't hammer on 429
Spread requestsDon't burst unnecessarily
Queue signalsProcess sequentially
Cache responsesReduce redundant calls

TradingView Considerations

TradingView Alert Limits

TradingView has its own limits:

PlanAlertsWebhook Calls
Basic1Limited
Pro10Standard
Pro+30Standard
Premium400Standard

Avoiding TradingView Issues

IssueSolution
Alert not firingCheck alert conditions
Webhook timeoutTradeStaq responds < 1s
Duplicate alertsUse alert "Once Per Bar Close"

Monitoring Your Usage

Dashboard Metrics

In your TradeStaq dashboard, monitor:

MetricLocation
Webhook calls todayBot details page
Rate limit warningsNotification center
API usageSettings → Usage

Webhook Health Indicators

ColorMeaning
🟢 GreenHealthy, recent activity
🟡 YellowStale (no signals in 24h)
🔴 RedErrors occurring
⚫ GrayNever received signals

Common Issues

"Rate Limit Exceeded" Errors

Causes:

  • Too many signals in short period
  • Strategy generating excessive signals
  • Multiple sources sending to same webhook

Solutions:

  1. Add delays between signals
  2. Review strategy logic
  3. Use separate bots for different sources

Signals Being Dropped

Causes:

  • Hitting burst limit
  • Exchange rate limits
  • Network issues

Solutions:

  1. Implement queuing
  2. Add retry logic
  3. Check exchange status

Slow Execution

Causes:

  • Near rate limits
  • Exchange congestion
  • High system load

Solutions:

  1. Reduce signal frequency
  2. Upgrade tier for higher limits
  3. Try different times

Optimization Tips

For High-Frequency Strategies

TipImplementation
Use larger timeframesReduce signal count
Add confirmationFilter weak signals
Batch operationsCombine where possible
Consider tier upgradeHigher limits available

For Multiple Bots

TipImplementation
Stagger signalsDon't trigger all at once
Separate webhooksEach bot has own limit
PrioritizeCritical bots first

Limits by Endpoint

Quick Reference

EndpointLimitWindowNotes
/api/webhooks/trade/*601 minPer webhook
/api/exchanges/sync101 minPer exchange
/api/positions301 minRead operations
/api/orders201 minOrder operations

Getting Higher Limits

Upgrade Options

CurrentUpgrade ToWebhook Limit
FreePro60/min
ProTrader120/min
TraderWhale300/min

Enterprise Options

For limits beyond Whale tier:

Next Steps