Límites de tasa
Límites de tasa por wallet para operaciones de órdenes y solicitudes a la API.
Descripción general
Los límites de tasa usan ventanas fijas de 60 segundos. Los límites por wallet dependen del nivel (tier) de la wallet y se aplican a:
- Colocación de órdenes (
POST /order,PUT /order,PlaceOrderpor WebSocket y envíos de órdenes de perpetuos por la ruta TEE) - Cancelación de órdenes (
DELETE /order,DELETE /order_cloidy cancelaciones de perpetuos por la ruta TEE) - Solicitudes a la API (lecturas asociadas a una wallet y otras escrituras firmadas)
Las cancelaciones, la autorización de agentes, las escrituras de MMP y las simulaciones de riesgo públicas tienen límites separados, asociados al origen de red, con un techo global por proceso.
Cada proceso de la API mantiene los contadores en memoria. No se comparten entre réplicas, así que considere las cifras publicadas como el máximo que admitirá un solo proceso, no como un presupuesto para todo el clúster.
Límites predeterminados
| Nivel | Órdenes/min | Cancelaciones/min | Solicitudes a la API/min | Máx. órdenes abiertas | Máx. posiciones |
|---|---|---|---|---|---|
| Predeterminado | 60 | 120 | 600 | 100 | 50 |
| Nivel 1 | 30 | 60 | 300 | 50 | 20 |
| Nivel 2 | 120 | 300 | 1,200 | 500 | 200 |
| Market Maker | 1,200 | 2,400 | 6,000 | 5,000 | Ilimitadas |
Las wallets nuevas reciben los límites predeterminados. Contacte con soporte para solicitar un nivel superior. Su límite actual de solicitudes a la API aparece en el encabezado X-RateLimit-Limit de cualquier lectura asociada a una wallet, por ejemplo GET /orders?wallet=....
Respuesta por límite de tasa
Cuando se supera un límite de tasa, la API devuelve 429 Too Many Requests:
{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded for OrderPlacement: 60 per minute, retry after 45 seconds",
"retry_after_secs": 45,
"limit": 60
}
Encabezados de respuesta
Los endpoints con límite por wallet devuelven estos encabezados. Una respuesta 429 incluye X-RateLimit-Limit, X-RateLimit-Remaining: 0 y Retry-After, pero no X-RateLimit-Reset:
| Encabezado | Descripción | Ejemplo |
|---|---|---|
X-RateLimit-Limit | Máximo de solicitudes permitidas por ventana | 60 |
X-RateLimit-Remaining | Solicitudes restantes en la ventana actual | 42 |
X-RateLimit-Reset | Marca de tiempo Unix en segundos en que se reinicia la ventana (solo en respuestas exitosas) | 1737312060 |
Retry-After | Segundos hasta poder reintentar (solo en 429) | 45 |
Ejemplo de encabezados de respuesta
Solicitud exitosa:
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1737312060
Solicitud limitada:
HTTP/1.1 429 Too Many Requests
Retry-After: 45
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
Categorías de límites de tasa
Los límites de tasa se contabilizan por separado para cada tipo de acción:
Colocación de órdenes
Se contabiliza por wallet contra las Órdenes/min del nivel:
POST /orderyPUT /orderPlaceOrderpor WebSocketPOST /v1/tee-perp/orders/submity los demás envíos de órdenes de perpetuos, contabilizados contra el manager de la cuenta
POST /bulk_order y PUT /bulk_order admiten como máximo 50 entradas por solicitud.
Cancelación de órdenes
Se contabiliza por wallet contra las Cancelaciones/min del nivel:
DELETE /orderyDELETE /order_cloid- Cancelaciones de perpetuos, contabilizadas contra la wallet de API firmante
Todas las rutas de cancelación, incluidas DELETE /bulk_order y DELETE /bulk_order_cloid, también se limitan antes de verificar la firma a 6,000 cancelaciones individuales por origen de red y 60,000 a nivel de proceso por minuto. Una cancelación masiva cuenta una cancelación individual por cada entrada.
Solicitudes a la API
Se contabiliza por wallet contra las Solicitudes a la API/min del nivel:
- Lecturas asociadas a una wallet, identificadas por el parámetro de consulta
wallet - Escrituras firmadas no incluidas arriba, como la configuración de MMP y el modo de margen
Envío de RFQ
POST /rfq/request y los comandos de envío de RFQ por WebSocket están limitados a 10 por wallet por minuto, independientemente del nivel.
Simulación de riesgo
Las simulaciones públicas de cartera y de órdenes (POST /risk/simulate/portfolio,
POST /risk/simulate/orders y la vista previa de perpetuos POST /v1/tee-perp/preview)
tienen límites separados de 60 solicitudes por origen de red y 600 solicitudes
a nivel de proceso por minuto. Como máximo se ejecutan cuatro
simulaciones de forma concurrente en un proceso de la API. Una solicitud que supere una cuota
o encuentre saturados los workers de simulación devuelve 429 Too Many Requests.
Autorización de agentes
POST /approve-agent, DELETE /revoke-agent y DELETE /revoke-all-agents se limitan antes de verificar la firma a 120 solicitudes por origen de red y 1,200 solicitudes a nivel de proceso por minuto.
Escrituras de MMP
Las escrituras de configuración de MMP se limitan antes de verificar la firma a 120 solicitudes por origen de red y 1,200 solicitudes a nivel de proceso por minuto, además del límite de solicitudes a la API de la wallet.
Límites de posiciones y órdenes
Además de los límites de tasa, las wallets tienen límites máximos de órdenes abiertas y de posiciones:
| Tipo de límite | Descripción | Rechazo |
|---|---|---|
| Máx. órdenes abiertas | Máximo de órdenes abiertas simultáneas | Se rechaza la nueva orden mientras la wallet esté en el límite |
| Máx. posiciones | Máximo de posiciones únicas (-1 = ilimitadas) | Se rechaza la orden si abriría una nueva posición |
Se trata de rechazos de órdenes, no de errores HTTP. La respuesta de la orden es HTTP 200 con status: "REJECTED" y un reason como:
max_open_orders_exceeded: current=100, limit=100
max_positions_exceeded: wallet 0x... has 50 positions, limit is 50
Buenas prácticas
Gestión de los límites de tasa
- Supervise los encabezados: haga seguimiento proactivo de
X-RateLimit-Remaining - Respete Retry-After: espere el tiempo indicado antes de reintentar
- Implemente backoff: use backoff exponencial ante respuestas 429 repetidas
import time
def place_order_with_retry(order, max_retries=3):
for attempt in range(max_retries):
response = api.place_order(order)
if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 60))
time.sleep(retry_after)
continue
return response
raise RateLimitError("Max retries exceeded")
Optimización del uso de solicitudes
- Use endpoints masivos:
POST /bulk_orderpara enviar varias órdenes en una sola solicitud - Agrupe las cancelaciones:
DELETE /bulk_orderoDELETE /bulk_order_cloiden lugar de varias solicitudesDELETE /order - WebSocket para actualizaciones: suscríbase a las actualizaciones de órdenes en lugar de consultar
GET /ordersperiódicamente
Monitoreo
Haga seguimiento de estas métricas del lado del cliente:
- Tasa de solicitudes por tipo de acción
- Tendencias de
X-RateLimit-Remaining - Frecuencia de respuestas 429
- Duración promedio de
Retry-After
Referencia de errores
| Estado HTTP | Código de error | Descripción |
|---|---|---|
| 429 | rate_limit_exceeded | Se superó el límite de tasa; reintente después del tiempo indicado |
Consulte Errores para ver la referencia completa de errores.