Esta página fue traducida automáticamente. El original en inglés es la versión canónica. Leer en inglés →
Saltar al contenido principal

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, PlaceOrder por WebSocket y envíos de órdenes de perpetuos por la ruta TEE)
  • Cancelación de órdenes (DELETE /order, DELETE /order_cloid y 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/minCancelaciones/minSolicitudes a la API/minMáx. órdenes abiertasMáx. posiciones
Predeterminado6012060010050
Nivel 130603005020
Nivel 21203001,200500200
Market Maker1,2002,4006,0005,000Ilimitadas

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:

EncabezadoDescripciónEjemplo
X-RateLimit-LimitMáximo de solicitudes permitidas por ventana60
X-RateLimit-RemainingSolicitudes restantes en la ventana actual42
X-RateLimit-ResetMarca de tiempo Unix en segundos en que se reinicia la ventana (solo en respuestas exitosas)1737312060
Retry-AfterSegundos 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 /order y PUT /order
  • PlaceOrder por WebSocket
  • POST /v1/tee-perp/orders/submit y 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 /order y DELETE /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ímiteDescripciónRechazo
Máx. órdenes abiertasMáximo de órdenes abiertas simultáneasSe rechaza la nueva orden mientras la wallet esté en el límite
Máx. posicionesMá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​

  1. Supervise los encabezados: haga seguimiento proactivo de X-RateLimit-Remaining
  2. Respete Retry-After: espere el tiempo indicado antes de reintentar
  3. 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​

  1. Use endpoints masivos: POST /bulk_order para enviar varias órdenes en una sola solicitud
  2. Agrupe las cancelaciones: DELETE /bulk_order o DELETE /bulk_order_cloid en lugar de varias solicitudes DELETE /order
  3. WebSocket para actualizaciones: suscríbase a las actualizaciones de órdenes en lugar de consultar GET /orders perió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 HTTPCódigo de errorDescripción
429rate_limit_exceededSe superó el límite de tasa; reintente después del tiempo indicado

Consulte Errores para ver la referencia completa de errores.