Rate Limits
GoDark enforces rate limits for fair access and platform stability. Your per-account limits are tier-driven. Read the public schedule at GET /vip/tiers and your current budget at GET /account/vip. Every REST response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.
Cancellations use position-indexed lookup, so they cost less than a new placement. That is why cancel throughput is higher than place throughput — useful for market makers, who typically cancel far more than they place.
Tier Breakdown
| Tier | REST req/min | REST req/sec | Burst | WS msg/sec | WS conns | WS subs | Orders/min | Cancels/min | Mass Quotes/min | Max Open | Max Open/Symbol | Requirements |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Core | 60 | 2 | 5 | 5 | 2 | 5 | 10 | 50 | — | 15 | 5 | Email verified |
| Select | 300 | 10 | 20 | 20 | 3 | 20 | 120 | 600 | — | 80 | 15 | $5M 30D volume |
| Advanced | 1,200 | 40 | 100 | 100 | 5 | 100 | 480 | 2,400 | — | 300 | 40 | $10M 30D volume |
| Prime | 3,000 | 100 | 200 | 300 | 10 | 300 | 1,200 | 6,000 | 120 | 1,200 | 100 | $25M 30D volume |
| Apex | 6,000 | 200 | 300 | 500 | 15 | 500 | 2,400 | 12,000 | 600 | 2,500 | 200 | $50M 30D volume |
Mass Quotes — Each mass quote batch contains up to 20 cancel-replace legs. A batch counts as one weighted action, regardless of leg count. At the Apex tier, 600 batches/min with 20 legs each is up to 12,000 quote updates per minute.
Trading Rules
| Rule | Limit | Scope |
|---|---|---|
| Order placement rate | 1 per 1 millisecond | Per symbol, per account |
| Cancel rate | 1 per 200 microseconds | Per symbol, per account |
| Modify rate | 1 per 1 millisecond | Per symbol, per account |
| Mass quote rate | 1 per 1 millisecond | Per symbol, per account |
| Quote rest | 1 millisecond between price improvements | Per symbol |
| Minimum notional | Min Size according to fee tier | Per order |
Weighted Action Costs
The venue tracks a weighted action budget. Weights reflect relative cost, not a separate product surface:
| Action | Weight | Rationale |
|---|---|---|
| Order placement | 1.0 | New book insert |
| Cancel | 0.2 | Position-indexed lookup |
| Modify | 1.2 | Cancel (0.2) + insert (1.0) |
| Mass quote (per batch) | 1.0 | One batch, any number of legs up to the max |
System-Wide Limits
The venue also enforces global throughput caps:
| Rule | Cap |
|---|---|
| Global throughput | 10,000 weighted actions/sec |
| Per-symbol throughput | 5,000 weighted actions/sec |
| Per-symbol max book depth | 100,000 open orders |
When a cap is reached, additional orders are queued or rejected. Codes: Error Codes. Behavior: System Status.
Best Practices
- Space orders at least 1ms apart and cancels at least 200μs apart per symbol.
- Use mass quotes for multi-level quote updates — a batch of 20 legs costs the same as a single placement.
- On a rate-limit reject, back off using the rate-limit headers. See Error Codes.
- Aggregate small orders to meet the minimum trade size for the fee tier.
- Use different symbols simultaneously — limits are per-symbol.
- Track your request timestamps per symbol to stay within limits.
- If an order is queued, do not resubmit.
- If the venue is at capacity, retry with exponential backoff starting at 1 second.
Rate Limit Response
When rate-limited, you'll receive 429 Too Many Requests. See Error Codes for the code. Headers:
X-RateLimit-Limit: 1200
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1839975060
Retry-After: 1