API gratis de paper trading cripto - Prueba tu bot de trading | MarginPad
MARGINPAD
Precios en vivo · ejecuciones en el servidor · sin depósito

El exchange que tu bot se puede permitir romper.

Una API de futuros en paper trading con precios reales en vivo. Tu bot abre posiciones apalancadas, deja órdenes límite y stop pendientes, mueve sus trailing stops y se liquida - todo se resuelve en nuestros servidores, en dólares simulados. El mismo código que vas a usar en real, sin ninguna de las consecuencias.

Sin tarjeta, sin KYC, sin depósito. Tú decides cada condición de ejecución: tamaño del libro, slippage, latencia, ejecuciones parciales, rechazos, comisiones. Gratis para siempre con 120 peticiones por minuto - Pro cuesta $27 cuando un bot se convierte en cuatro. Los datos de mercado siguen sin necesitar clave en todos los planes.

marginpad.io/api/bot/v1en vivo ahora
# no key needed - run this right now
curl "https://marginpad.io/api/bot/v1/price?symbol=BTC"

{ "symbol": "BTC", "price": …, "ts": … }
POST /openejemplo
curl -X POST ".../v1/open" -H "X-API-Key: mpb_…" \
  -d '{"symbol":"BTC","side":"long","margin_usd":100,
       "leverage":10,"trail_pct":1.5}'

{ "ok": true, "position": {
    "id": "bot_9f21…",   "entry": …,
    "liq_price": …,  "trail_pct": 1.5,
    "fee_round_trip_usd": 1.10 } }

Obtén tu clave

Inicia sesión con un correo - sin contraseña, sin KYC. Las posiciones de tu bot persisten en tu cuenta, y una cuenta puede tener varias claves para que un bot de backtest y un bot en vivo nunca compartan el mismo límite de peticiones.

Tus claves, su uso y el book que opera cada una aparecen aquí en cuanto inicias sesión. Las claves son secretas - cualquiera que tenga una puede operar tu cuenta de paper trading.

Planes

Free es el motor completo. Pagas para ejecutar más de una cosa a la vez.

Toda cuenta empieza en Free y obtiene el producto completo: el motor de trading, comisiones reales de cada exchange, entradas límite y stop, trailing stops, replay, books, el stream de WebSocket y todos los datos de mercado sin necesidad de clave. Los planes de pago elevan los límites y añaden webhooks, desgloses del informe con hallazgos escritos, 90 días de historial de operaciones en lugar de 30, y más claves y books. El motor en sí nunca se retiene.

Prueba gratis

$0 por 7 días

El motor completo, gratis durante 7 días desde el día que generas tu primera clave. Después, el motor necesita un plan - los datos de mercado siguen siendo gratis y sin clave para siempre, sin ninguna cuenta.

Una estrategiaun libro, un diario, un saldo
  • 3 claves · 50 posiciones abiertas · 120 peticiones/min
  • Motor completo: órdenes market, limit y stop, trailing stops, dry run y replay
  • Tarifas de 9 exchanges reales
  • Stream por WebSocket · MCP · datos de mercado sin clave
  • Trading report: totales + skill score

Pro

MÁS ELEGIDO
$27/mes
$39 -30%

Para un bot que corre sin supervisión, y para comparar estrategias en vez de adivinar entre ellas.

10 claves, y 90 días de historialuna clave por bot · 5 libros · webhooks · desglose del informe
  • 10 claves · 200 posiciones abiertas · 600 peticiones/min
  • Webhooks - 3 endpoints firmados, con reintentos, entregados aunque estés desconectado
  • Trading report con desgloses y hallazgos escritos
  • 90 días de historial de operaciones, report y curva de equity - Free guarda 30

Max

$69/mes
$99 -30%

Para una flota - una familia de estrategias, cada una con su propio libro, ejecutándose al mismo tiempo.

30 claves, 20 libroslibro de órdenes más profundo · 15 webhooks
  • 30 claves · 500 posiciones abiertas · 2000 peticiones/min
  • 15 webhooks
  • Todo lo de Pro

Business

$139/mes
$199 -30%

Para una app o una mesa que opera en nombre de sus propios usuarios - una clave cada uno, un libro cada uno.

100 claves, 50 librosuna clave por usuario final, cada una separada
  • 1000 posiciones abiertas · 5000 peticiones/min
  • 50 webhooks
  • Todo lo de Max
Elige según las claves y el historial, no según la capacidad - y aquí está la medición.

En 125 cuentas y 174 claves, el bot más activo en producción llega a un máximo de 66 peticiones por minuto de las 120 que ya permite el plan Free, y ninguna clave ha sido limitada por exceso de peticiones en ningún plan. El único límite de Free que sí se alcanza es el de claves: 12 de esas 125 cuentas están en el límite de tres claves o lo superan, porque una configuración seria quiere una clave por bot para que un backtest y una estrategia en vivo nunca compartan el mismo presupuesto de peticiones. Los webhooks y los libros adicionales están en los planes de pago y hasta ahora no han tenido ninguna adopción - preferimos decir eso antes que venderte un plan para algo que nadie usa. Todo lo que decide si un resultado es real - el motor, cada mercado, las órdenes límite y stop, el replay, el stream de WebSocket, toda la simulación configurable y el desglose de costos en tu informe - está en Free.

Lo que cambia con el planFreePro · $27Max · $69Business · $139
API de datos de mercado (/api/v1/*) con tu clave
60 / min por IP sin clave, en todos los planes
120 / min600 / min2000 / min5000 / min
Claves de API por cuenta31030100
Posiciones abiertas a la vez502005001000
Libros - un diario, saldo e informe separados por estrategia
el límite que la mayoría realmente alcanza
152050
Webhooks - firmados, con reintentos, entregados aunque estés desconectadoninguno31550
Historial de operaciones guardado
lo que /v1/trades, el report y la curva de equity todavía pueden ver
30 días90 días90 días90 días
Peticiones por minuto, por clave
medido: el bot en producción más activo usa 46, y nunca se ha limitado nada
12060020005000
Trading report /v1/reporttotales + skill score
hasta 30 días atrás
+ desgloses y hallazgos
hasta 90 días atrás
+ desgloses y hallazgos+ desgloses y hallazgos

En todos los planes, Free incluido: el motor de trading completo - órdenes market, limit y stop, trailing stops, cierres parciales, dry run y replay -, el stream por WebSocket, el servidor MCP, las tarifas de 9 exchanges reales, de $1 a $100,000 de margen por operación con hasta 1000× de apalancamiento, y todos los endpoints de datos de mercado sin clave a máxima velocidad. Los planes de pago mueven los topes. No desbloquean el producto.

Premium es otro producto. Una suscripción a MarginPad Premium desbloquea funciones del sitio web - los indicadores de gráfico exclusivos, el mapa de calor de liquidaciones, Ask-AI en los gráficos - y desde el 15 de septiembre de 2026 no cambia ni un solo límite de la API. Estos planes tampoco desbloquean aquellas funciones del sitio. Compra el que de verdad vayas a usar.

Los planes son mes a mes, pagados en cripto o directamente desde tu saldo de recompensas de MarginPad, y un mes comprado antes de tiempo se suma al que ya tienes en vez de reemplazarlo. Tus límites en vivo siempre están en GET /api/bot/v1/usage - limits, features, plan_until - para que un bot los pueda leer en vez de adivinar.

Lo que estás comprando, por escrito. La sección 9 de los términos cubre la API por su cuenta: qué incluye un plan y qué pasa el día en que termina, que nada se renueva automáticamente y que no hay nada que cancelar, a qué nos comprometemos y a qué no en materia de disponibilidad (no hay SLA - lo decimos así, y decimos a qué nos comprometemos en su lugar), treinta días de aviso antes de cualquier cambio incompatible, y que puedes construir y vender productos comerciales sobre esta API sin pedirnos permiso.

A tu bot se le avisa antes de que caduque el plan, no después. Cada respuesta con clave lleva X-MP-Plan, y en los últimos catorce días lleva además X-MP-Plan-Expires y X-MP-Plan-Days-Left. Regístralos y un bot desatendido puede avisarte él mismo; la misma cuenta atrás está en esta página y en /v1/usage. Un plan que se agota baja la clave a Free: nunca deja de responder.

Inicio rápido

Tres llamadas para pasar de nada a una posición en vivo

La primera no necesita ninguna clave - pégala en una terminal antes de decidir nada. Cada ruta de abajo existe en una v1 congelada y una v2 con envoltorio; elige una y no se va a mover bajo tus pies.

PASO 01

Lee el mercado

GET /v1/price y /v1/klines no requieren clave y tienen CORS habilitado. Hasta 1,000 velas por llamada, siete temporalidades, paginadas hacia atrás con &end= para tanto historial como necesite un backtest.

PASO 02

Abre una posición

POST /v1/open ejecuta al precio en vivo con margen aislado y te devuelve el nivel de liquidación. Añade type:"limit" o "stop" para dejar una orden pendiente en el servidor, o dry_run para cotizar una operación sin escribir nada.

PASO 03

Deja que te lo envíen, no preguntes

Los stops, los objetivos, los trailing stops y las liquidaciones se liquidan de nuestro lado, sobre velas de 1 minuto, esté tu bot corriendo o no. Abre el WebSocket y el resultado te llega en unos dos segundos: es gratis en todos los planes, y es la diferencia entre un bot que reacciona y uno que espera a su siguiente vuelta.

# price (no key)
curl "https://marginpad.io/api/bot/v1/price?symbol=SOL"

# open a 20x long with $100 margin
curl -X POST "https://marginpad.io/api/bot/v1/open" \
  -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"symbol":"SOL","side":"long","margin_usd":100,"leverage":20}'

# check live P&L
curl "https://marginpad.io/api/bot/v1/positions" -H "X-API-Key: YOUR_KEY"

# close half, let the rest run
curl -X POST "https://marginpad.io/api/bot/v1/close" \
  -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"id":"POSITION_ID","pct":50}'

Autentícate con X-API-Key en cada llamada excepto /price, /klines y /time. Clientes oficiales, cero dependencias - npm install marginpad o pip install marginpad, o un solo archivo cada uno: marginpad.py · marginpad.js - REST, WebSocket, sondeo con ETag, reintento tras 429 y verificación de firma de webhook ya incluidos.

26
endpoints, además de un WebSocket, webhooks y un servidor MCP
9
tablas reales de comisiones de exchanges con las que se pueden cobrar tus ejecuciones
1,000×
de apalancamiento máximo, en cualquier par USDT con precio en vivo
156
mercados con una sola clave: perpetuos cripto, acciones de EE. UU., forex, índices y metales
4.4M
peticiones atendidas para los bots que ya se ejecutan en ella
ESTADO motor de trading colector de liquidaciones tareas programadas leyendo /api/status… Estado completo e historial →
Por qué no una testnet de un exchange

Una testnet te da precios falsos. Esto te da precios reales y dinero falso.

Los libros de órdenes de las testnets son poco profundos, sus precios se alejan del mercado real, y se reinician sin aviso. Aquí todo se cotiza con el feed multi-exchange en vivo sobre el que corren nuestros propios gráficos - solo los dólares son simulados.

Simulación

Construye el exchange en el que realmente vas a operar

Dieciocho campos y ocho preajustes: el tamaño del libro y si es un presupuesto real, lo que cuesta cruzar el libro de órdenes al entrar y al salir, cuánto tiempo está tu orden en tránsito, ejecuciones parciales, con qué frecuencia el exchange rechaza, tu propia comisión, el funding, y dónde se ubica la liquidación. Freqtrade te deja configurar el saldo inicial y nada más; un testnet te da lo que su libro te dé. Cada campo, con su rango →

Ejecución

El servidor mantiene tus órdenes

Las entradas límite, las entradas stop, los stop-loss, los objetivos y los trailing stops se evalúan todos de nuestro lado contra velas de 1 minuto. Tu bot puede estar offline, reiniciándose o siendo redesplegado y la ejecución igual cae en tu nivel, marcada con el minuto en que el mercado realmente lo alcanzó.

Costos

Comisiones que coinciden con tu factura real

Ambas patas pagan una comisión taker, cobrada como ida y vuelta al cerrar, con el funding acumulado entre marcas. Indica un exchange y la cuenta de paper trading se cobra según la tabla publicada de ese exchange menos nuestro descuento por referido - así que una estrategia de scalping falla aquí por la misma razón que fallaría allá.

Fallo

Una liquidación que se comporta

Margen aislado, 0.5% de mantenimiento, pérdidas limitadas a tu margen. Un trailing stop se mueve con el extremo de cada vela después de que esa vela se comprobó contra el stop vigente - así una barra nunca puede sacarte en un nivel que ella misma creó.

Idempotencia

Un timeout no es un misterio

Envía client_order_id y un reintento de apertura devuelve la posición que creó la primera llamada, marcada como idempotent: true. Cerrar también acepta uno. Este único campo es la diferencia entre un bot en el que confías sin vigilarlo y uno que tienes que vigilar de cerca.

Observabilidad

Push, no polling

Un WebSocket gratis empuja eventos de posiciones y marcas cada ~2 s; los webhooks envían la misma forma por POST a tu propia URL, firmados con HMAC y con reintentos, incluso cuando nada tuyo está conectado. Los ETag hacen que las peticiones que sigas haciendo salgan casi gratis.

Medición

Califica tu estrategia

Cada book tiene su propio diario, curva de equity y drawdown. /v1/report devuelve la tasa de acierto y el retorno por moneda, franja de apalancamiento, lado y hora, con un skill score - y no dice nada por debajo de ocho operaciones en lugar de inventar un patrón.

Endpoints

Veinticuatro en total. Todo es JSON sobre HTTPS, con CORS activado y una sola cabecera. Cambia v1 por v2 en cualquier ruta para obtener el sobre {ok,data,ts}.

Datos de mercado - sin clave necesaria
GET/v1/price?symbol=BTCPrecio en vivo de cualquier par USDT. No necesita clave - pruébalo ahora mismo en tu navegador.
GET/v1/klines?symbol=BTC&interval=60Velas OHLC para tu estrategia (temporalidades: 1, 5, 15, 30, 60, 240, 1440 minutos). No necesita clave. Hasta 1000 velas por llamada, la más reciente al final - unas 16 horas en 1m, 3 días en 5m, 10 días en 15m, 41 días en 1h, 166 días en 4h y aproximadamente 3 años en 1d. Pasa &end=<unix ms> para paginar más atrás.
GET/v1/marketsTodo lo operable, con asset_class, max_leverage y taker_fee_pct por símbolo. Filtra con ?class=crypto|stock|forex|metal|index. Llama esto una vez al iniciar en lugar de descubrir los límites a prueba y error.
GET/v1/time?client_ts=…Reloj del servidor. No necesita clave. Pasa tu propio unix ms y recibes drift_ms de vuelta. Un bot que agrupa velas contra un reloj local desincronizado construye barras que nadie más ve, y eso es un infierno de depurar desde afuera.
bars = get(f"/api/bot/v1/klines?symbol=BTC&interval=1")
while len(all_bars) < wanted:
    end_ms = bars[0]["time"] * 1000          # oldest candle in hand
    bars = get(f"/api/bot/v1/klines?symbol=BTC&interval=1&end={end_ms}")
    if not bars: break
    all_bars = bars + all_bars
Trading
POST/v1/openAbre una posición simulada al precio en vivo. Body: {"symbol":"BTC","side":"long","margin_usd":100,"leverage":20,"sl":58000,"tp":66000} (sl/tp opcionales). Devuelve la posición, incl. su liq_price. Añade "dry_run":true para recibir la operación cotizada - entrada, cantidad, precio de liquidación y distancia, la comisión de apertura y la ida y vuelta completa - sin escribir nada. Usa el dry run para dimensionar una posición o para probar tu bot contra el motor real.
POST/v1/open trail_pcttrail_pct fija un stop que sigue el mejor precio visto desde la entrada a esa distancia porcentual, ajustado en el servidor: desde los extremos de la vela de 1 minuto en el barrido de cada minuto y desde el precio en vivo en cada lectura de /positions, así que sigue moviéndose mientras tu bot está offline y nunca se afloja. Un long abierto en 60,000 con trail_pct: 1 empieza con su stop en 59,400; cuando el precio marca 63,000, el stop queda en 62,370. Las posiciones llevan trail_pct y trail_hwm.
POST/v1/open type:"limit"La orden queda pendiente en el servidor en vez de ejecutarse ahora: {"symbol":"BTC","side":"long","type":"limit","limit_price":58000,"margin_usd":100,"leverage":20}. Se ejecuta a tu precio, no al precio en que el motor notó el cruce - la ejecución se busca en el máximo/mínimo de 1m, así que una mecha que retrocedió entre dos revisiones igual cuenta. Tu bot no tiene que estar corriendo. Un limit long debe estar por debajo del mercado y un limit short por encima; si no, obtienes limit_marketable en vez de una ejecución silenciosa a mercado.
POST/v1/open type:"stop"Una entrada de ruptura: un long por encima del mercado o un short por debajo, p. ej. {"symbol":"BTC","side":"long","type":"stop","limit_price":66000,"margin_usd":100,"leverage":10}. Mismo motor que una orden límite - se ejecuta en el nivel a partir de velas de 1m, con el navegador cerrado - pero el lado incorrecto se rechaza (stop_wrong_side) para que un stop y un límite nunca se confundan. sl, tp, trail_pct, client_order_id y dry_run aplican todos.
POST/v1/closeCierra una posición al precio en vivo. Body: {"id":"bp...","pct":50} - pct es opcional (100 por defecto); los cierres parciales dividen la posición exactamente igual que en el sitio.
POST/v1/close_allBotón de pánico - cierra todas las posiciones abiertas al precio en vivo en una sola llamada.
POST/v1/sltpMueve el stop-loss, el take-profit o el trailing stop de una posición abierta sin cerrarla. Body: {"id":"bot...","sl":63500,"tp":66000,"trail_pct":1.5} - envía null para borrar uno, omite un campo para mantenerlo. Los niveles se comprueban según el lado de la entrada. Antes de que existiera esto tenías que cerrar y reabrir para mover un stop, lo que cambiaba tu entrada y pagaba una ida y vuelta completa.
Órdenes pendientes
GET/v1/ordersTus órdenes pendientes, cada una con type: "limit" | "stop", más las últimas 20 que se ejecutaron, expiraron o se cancelaron - una ejecutada lleva el position_id que creó. Las órdenes son válidas hasta que se cancelan, expiran a los 30 días, y pueden quedar 20 pendientes por cuenta.
POST/v1/modify_orderCambia una orden pendiente en el mismo lugar: {"order_id":"lo...","limit_price":58500,"sl":57000,"tp":62000,"margin_usd":150,"leverage":10,"trail_pct":1} - envía solo lo que cambia. Antes de esto la única forma era cancelar y volver a crearla, lo que perdía el client_order_id de la orden. La dirección ahora se recalcula a partir del mercado y la marca de vela se reinicia, así que un nivel movido nunca puede ejecutarse en una barra impresa antes del cambio. Una orden ejecutada, cancelada o expirada responde 409.
POST/v1/cancel_orderCancela una orden pendiente. Body: {"order_id":"lo..."}. Si ya se ejecutó o se canceló, responde 409, así que un reintento nunca puede deshacer una ejecución.
Cuenta y estado
GET/v1/positions?status=openTodas tus posiciones con mark_price y unrealized_pnl_usd en vivo; las liquidaciones y el SL/TP alcanzados se resuelven automáticamente. ?status=open|closed recorta el body a lo que tu loop realmente lee; también se admiten ?since=<unix ms> e If-None-Match (304 cuando nada cambió).
GET/v1/accountResumen de la cuenta: posiciones abiertas, margen en uso, P&L no realizado en vivo, P&L realizado de toda la vida, ganadas/perdidas, tasa de acierto, más balance_usd, equity_usd, free_margin_usd y return_pct.
GET/v1/balanceSolo el dinero: saldo inicial, saldo, equity, margen en uso, margen libre, P&L no realizado. Más barato que /account cuando eso es todo lo que necesita tu lógica de tamaño de posición.
GET/v1/trades?limit=100&before=…El libro completo de operaciones cerradas con paginación. /positions está limitado a 100 filas; este pagina por toda la ventana de retención - sigue next_before hasta que vuelva null. Úsalo para calcular estadísticas de la estrategia sobre el registro completo en vez de una cola truncada.
GET/v1/accountsCada book de la cuenta con sus números de toda la vida y las claves ligadas a él.
GET/v1/equity?days=30&step_min=60La curva de equity de este book, en buckets, con max_drawdown_pct y el punto no realizado en vivo al final.
POST/v1/resetDevuelve este book a $10,000 con {"confirm":true}: los cierres se archivan, las órdenes se cancelan. Se rechaza con 409 open_positions_exist mientras haya algo abierto.
GET/v1/usageTu plan, tus límites, lo que queda en la ventana actual y usage_30d - llamadas por día por endpoint más refused (los 429), para que un bot pueda ver qué tan cerca corre de su límite.
Costos, inteligencia y entrega
GET/v1/feesA qué tabla de comisiones se cobran tus ejecuciones: los exchanges que modelamos con taker, maker, nuestro descuento por referido y la tasa efectiva, más tu valor por defecto actual. POST {"venue":"bybit"} fija el valor por defecto de la cuenta; fee_venue en /open lo anula para una posición. Ver comisiones por exchange.
GET/v1/report?days=30El trading report de la cuenta detrás de la clave, medido a partir de sus propias operaciones cerradas: totales y el skill score en todos los planes; tasa de acierto y retorno por moneda, franja de apalancamiento, lado, hora y día más los hallazgos escritos en API Pro y Max (locked[] indica qué se retiene). Cada hallazgo lleva el n en el que se apoya y no dice nada por debajo de 8 operaciones.
GET/v1/webhooksAPI PROEventos de trading enviados a tu URL, segundos después de que ocurren, esté o no conectado tu bot - ver webhooks. POST {"act":"add","url":"https://…"} registra uno, {"act":"test","id":…} envía un ping y devuelve el estado que respondió tu servidor, {"act":"delete","id":…} lo elimina.
POST/v1/replay2.6Corre tu bot a través de un día UTC pasado sobre nuestras propias velas de 1 minuto - ver replay.

Legible por máquina: especificación OpenAPI 3.1 con los esquemas completos de petición y respuesta · una referencia interactiva desde la que puedes disparar llamadas · el changelog (JSON).

Cómo funciona el motor

Ejecuciones y precios

Las órdenes se ejecutan al instante al precio real en vivo (feed multi-exchange - los mismos precios que nuestro Paper Trade). Las ejecuciones vía API no tienen slippage (las del sitio web sí), así que trata los precios de entrada como algo optimistas.

Comisiones de trading - lee esto antes de medir una estrategia

Cada posición paga una comisión taker en ambos lados, que se liquida en pnl_usd al cerrar. Se cobra como un viaje redondo: fee = qty × (entry + exit) × rate. El funding se acumula en posiciones mantenidas a través de las marcas de funding y se descuenta de la misma manera. Las posiciones abiertas ya muestran el P&L neto del viaje redondo en unrealized_pnl_usd, así que lo que ves es lo que se liquida.

MercadoComisión por ladoViaje redondo sobre un nocional de $10,000
Perpetuos de cripto0.055%$11.00
Acciones y ETFs0.02%$4.00
Metales e índices0.015%$3.00
Pares principales de forex0.008%$1.60

¿Prefieres la factura exacta del exchange en el que vas a operar? Cobra a la cuenta simulada según su tarifario, descuento por referido incluido. Por encima de unas 180× de apalancamiento, la tasa se reduce para que el viaje redondo nunca supere el 20% de tu margen. GET /v1/markets devuelve la tasa exacta y el tope de apalancamiento de cada símbolo. Las estrategias de horizonte corto viven o mueren por este número - un scalp que gana menos que el viaje redondo es una pérdida sin importar cuántas veces acierte.

Margen, liquidación, SL/TP, trailing

Margen aislado. Las pérdidas están limitadas a tu margen. El precio de liquidación usa una tasa de margen de mantenimiento del 0.5%; cuando el precio en vivo lo cruza, la posición se liquida automáticamente al precio de liquidación. Las órdenes de stop-loss y take-profit también se ejecutan automáticamente - cuando el precio cruza tu sl o tu tp (verificado contra las mechas de las velas de 1 minuto en el barrido por minuto, así que un pico que se retrajo igual cuenta), la posición se liquida a ese nivel. Un trailing stop avanza desde el mejor precio visto: en el barrido se mueve según el extremo de cada vela después de que esa vela ya fue verificada contra el stop vigente, así que una vela nunca puede sacarte a un nivel que ella misma creó.

Saldo y equity

Cada cuenta simulada empieza con un nominal de $10,000. /v1/account y /v1/balance reportan balance_usd, equity_usd y free_margin_usd para que puedas expresar los resultados como un rendimiento y no como una cifra en dólares sin más. Este saldo es un marcador, no una restricción: el margen no se le descuenta y una apertura nunca se rechaza por falta de fondos (margin_enforced: false). Dimensiona tus propias posiciones si quieres que la restricción sea real.

Headers de límite de peticiones

Cada respuesta lleva X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset (segundos epoch); un 429 añade Retry-After. Los límites se cuentan por clave, así que una segunda clave tiene su propio presupuesto. X-RateLimit-Scope indica si se aplicó el límite de la clave o el de la IP.

Las operaciones de tu bot en el sitio

Las posiciones abiertas vía la API viven en tu cuenta del lado del servidor, así que aparecen en Mis Operaciones, cuentan para las tablas de temporada y el XP, y alimentan tu informe de trading - el mismo informe que GET /v1/report devuelve al bot.

La API de streaming es gratis a propósito

Ponerla detrás de un muro de pago empujaría a todos los demás de vuelta al polling, que nos cuesta mucho más que el stream - así que los incentivos se alinean: usa el WebSocket, ganamos los dos. Los datos de mercado siguen sin clave y gratis para siempre; una clave solo sube su límite.

Realismo de ejecución, porque un backtest que te favorece no vale nada

Dos cosas en este motor son deliberadamente generosas, y es mejor nombrarlas que dejar que las descubras en una cuenta real. Una orden a mercado se ejecuta al precio en vivo, así que una posición nueva marca 0.00 de no realizado y la línea de entrada queda exactamente donde la pediste. Y el margen de mantenimiento es un 0.5% fijo, sin importar cuánto valga la posición. Para aprender a operar, ambas son la decisión correcta. Para poner a prueba una estrategia son optimistas, y cuanto mayor es el tamaño, más optimistas se vuelven.

Así que son interruptores, no supuestos fijos. Desactivados por defecto (nada de lo que ya construiste cambia) y, al activarlos, el precio de ejecución y el precio de liquidación se comportan como los haría comportarse un libro de órdenes real y una tabla de límites de riesgo real.

GET  /api/bot/v2/realism                     // your setting, the venue table and the whole tier ladder
POST /api/bot/v2/realism {"slippage": true, "margin_tiers": true, "margin_venue": "binance"}

# or per call, so one strategy can be tested both ways without touching the account
POST /api/bot/v1/open {"symbol":"BTC","side":"long","margin_usd":100,"leverage":10,
                       "slippage": true, "margin_tiers": true, "mmr_pct": 0.4}

Slippage

La ejecución se mueve en tu contra lo que cuesta recorrer un libro de órdenes real: 0.01% en las principales, 0.05% en criptomonedas menos líquidas, 0.005% en forex, 0.02% en acciones, metales e índices. Una compra paga de más, una venta vende de menos; nunca al revés.

Tramos de margen

El margen de mantenimiento sube con el tamaño nocional, igual que la tabla de límites de riesgo de un exchange, así que una posición grande se liquida antes: un requisito de mantenimiento más alto tolera menos movimiento en contra antes de cerrarte, que es justo lo que un exchange quiere para el tamaño grande. Este es nuestro modelo publicado y no la tabla de ningún exchange en particular, y GET /realism devuelve toda la escala; nunca deberías tener que deducirla a partir de un precio de liquidación.

Exchange de margen

La tasa de margen de mantenimiento publicada de qué exchange usar como base: Binance 0.40%, Bybit 0.50%, MEXC 0.10%, Kraken 0.60%, Hyperliquid 1.25%, Coinbase 1.33%. Esto mueve solo dónde se ubica el precio de liquidación, nunca el tamaño, las comisiones ni el P&L.

Estos tres son un subconjunto. Toda la simulación es configurable - el tamaño del libro y si es un presupuesto real, tus propias cifras de slippage y comisión, el impacto por tamaño, la latencia, las ejecuciones parciales, los rechazos y el funding - y ocho preajustes lo configuran en una sola llamada. Una posición conserva el margen de mantenimiento con el que fue ejecutada, así que activar esto nunca reescribe una operación que ya tienes abierta, y cada cierre registra con qué condiciones se ejecutó. De ahí viene la columna Fills de la arena - una tabla que clasifica bots debería decir cuáles estaban en modo fácil.

Construye el exchange en el que realmente vas a operar

Los tres interruptores de arriba son parte de algo más grande. Todo lo que este motor asume es un campo que puedes configurar: el tamaño del libro y si es un presupuesto real, lo que cuesta cruzar el libro de órdenes al entrar y al salir, cuánto tiempo está tu orden en tránsito, si una orden se ejecuta parcialmente, con qué frecuencia el exchange dice que no, cuánto pagas en comisiones, si se cobra funding o no, y dónde se ubica el precio de liquidación.

Los valores predeterminados son deliberadamente fáciles, y vale la pena decirlo sin rodeos. Una orden a mercado se ejecuta completa al precio en vivo, el margen de mantenimiento es un 0.5% fijo, el saldo es un marcador que nunca rechaza una apertura, y no hay latencia ni impacto por tamaño. Ese es el lugar correcto para poner un bot a andar. Es el lugar equivocado para juzgar si tiene una ventaja. Una sola llamada cambia eso.

GET  /api/bot/v2/sim                    # your profile, every field with its range, and the presets
POST /api/bot/v2/sim {"preset": "realistic"}

# or exactly your own venue
POST /api/bot/v2/sim {"start_balance_usd": 2500, "margin_enforced": true,
                      "slippage": true, "slippage_bps": 8, "impact_bps_per_100k": 15,
                      "latency_ms": 250, "taker_bps": 5.5, "margin_venue": "bybit"}

Los valores fuera de rango son rechazados, nunca ajustados al límite - una estrategia nunca debe medirse bajo una configuración que no elegiste. Una posición conserva el margen de mantenimiento, la tasa de comisión y el costo de cruce en la salida con los que fue ejecutada, para siempre; activar cualquier cosa nunca reescribe una operación que ya tienes abierta.

Ocho preajustes, para que no tengas que inventar dieciocho números

frictionless

El motor como siempre ha sido. Pon el bot a andar, mira cómo caen las operaciones, y después cámbialo.

realistic

El que usar para medir una ventaja: el libro cuesta lo que medimos en ambas patas, el tamaño cuesta más, la escala de límites de riesgo está activa, se cobra el funding, y el libro rechaza lo que no puede financiar.

binance · bybit · okx · hyperliquid

La comisión taker y el margen de mantenimiento publicados por ese exchange, con nuestro costo de cruce medido, margen aplicado y la escala activa.

thin_book · brutal

Un perpetuo de capitalización media en un mal momento, y luego algo peor que cualquier cosa que vayas a encontrar: 60 bps para cruzar, 120 bps por cada $100k de tamaño, ejecuciones desde un cuarto hacia arriba, un rechazo de cada veinte aperturas, un segundo de latencia. Son cifras nuestras, no de ningún exchange. Si una estrategia aún funciona aquí, no está viviendo de la suerte en la ejecución.

Cada campo, su rango y qué cambia

CampoRangoQué hace
El libro — lo que el bot puede arriesgar
start_balance_usd100 – 10,000,000El libro contra el que se miden tus resultados: return_pct, la curva de equity y el drawdown máximo siguen este valor. Pruébalo con el tamaño de cuenta con el que realmente vas a operar.
margin_enforceddesactivado / activadoLa diferencia más grande entre un marcador y un exchange real. Activado, una apertura que necesite más que tu margen libre es rechazada con 402 insufficient_margin. El margen libre es el saldo menos el margen comprometido — el beneficio no realizado de una posición abierta no es garantía para una nueva, porque aquí toda posición usa margen aislado.
leverage_max0 – 10,000Tu propio tope por debajo del límite de cada mercado. Demuestra que una estrategia nunca se deslizó en silencio hasta 100×. 0 = el límite del mercado.
max_notional_usd0 – 1,000,000,000Tu propio tope sobre el valor nocional de una posición. 0 = ninguno propio.
La ejecución — lo que cuesta cruzar el libro
slippagedesactivado / activadoEjecuta en tu contra tal como lo haría caminar por un libro real: 0.01% para las criptos principales, 0.05% para criptos más delgadas, 0.005% forex, 0.02% acciones, metales e índices. Una compra paga de más, una venta vende de menos.
slippage_bps0 – 500Tu propia cifra en lugar de esa tabla. 10 = 0.10%. null vuelve a la tabla.
impact_bps_per_100k0 – 500El tamaño cuesta más, porque una orden más grande recorre más profundo el libro: tantos puntos básicos adicionales por cada $100,000 de valor nocional.
exit_slippageactivado / desactivadoPaga el costo de cruce tanto al salir como al entrar. Sin esto, una estrategia de scalping se ve mejor en el papel de lo que nunca podrá operar en la realidad. Un stop-loss, take-profit o liquidación sigue ejecutándose a su propio nivel — ver los límites abajo.
latency_ms0 – 2,000Tu orden está en tránsito este tiempo, y el precio se vuelve a leer después — así que la ejecución refleja el mercado como estaba cuando tu orden llegó, no cuando la enviaste.
partial_fillsdesactivado / activadoUna orden a mercado puede ejecutarse por menos de lo que pidió. El tamaño ejecutado es position.margin_usd; la proporción está en el encabezado X-MP-Fill-Pct y en el objeto fill en v2.
min_fill_pct10 – 100La peor proporción que te pueden dar. 40 significa cualquier valor entre 40% y 100% de lo que pediste.
reject_rate_pct0 – 50Esta proporción de aperturas se rechaza a propósito con 503 venue_rejected. Un bot que no puede manejar un rechazo no está terminado, y este es el lugar barato para descubrirlo.
El costo
taker_bps0 – 100Tu propia comisión por lado en lugar de la tabla de un exchange. 5.5 = 0.055%. El ajuste decreciente por apalancamiento sigue aplicándose, así que ninguna configuración puede hacer que un ciclo completo se coma todo el margen.
fundingactivado / desactivadoDesactivado, el funding nunca se cobra. Así distingues una ventaja de ejecución de una ventaja de carry — un short mantenido durante funding positivo puede ser rentable solo por el funding.
funding_mult0 – 5Escala la tasa real cada 8 horas.
La liquidación
margin_venue10 exchangesCuya tasa de margen de mantenimiento publicada decide dónde se ubica la liquidación. Binance 0.40%, Bybit 0.50%, MEXC 0.10%, Kraken 0.60%, Hyperliquid 1.25%, Coinbase 1.33%. Mueve únicamente el precio de liquidación.
margin_tiersdesactivado / activadoEl margen de mantenimiento aumenta con el valor nocional de la misma forma que una escala de límites de riesgo, así que una posición grande se liquida antes. Toda la escala está publicada en GET /v2/realism.
mmr_pct0.05 – 10Tu propio margen de mantenimiento, por encima de margin_venue y nuestro valor predeterminado.

Lo que esto no modela, dicho claramente en vez de descubierto por sorpresa

Un stop-loss, take-profit o liquidación se ejecuta a su propio nivel y nunca paga el costo de cruce: el barrido del lado del servidor corre sobre todas las cuentas a la vez y no puede leer un perfil por cada pasada. No hay un libro de órdenes con profundidad real detrás del modelo de impacto — impact_bps_per_100k es un costo lineal declarado, no un libro simulado. Y todo el costo de cruce en la salida se cobra contra el mark, que es un único spread, no un bid y un ask que puedas cotizar por separado. Todo lo demás arriba se aplica exactamente como está escrito.

Cada cifra de este perfil se puede leer de vuelta desde GET /api/bot/v2/sim, incluyendo cómo se vería una ejecución justo ahora — un número que un bot no puede leer de vuelta es un número que tiene que adivinar. GET /api/bot/v2/report te dice entonces cuánto costó realmente la ejecución: comisiones, funding, bruto contra neto, y kept_pct, la parte del bruto que sobrevivió. Ese dato es gratis en todos los planes, porque no es un desglose de dónde está tu ventaja — es si esa ventaja es real.

Comisiones como en el exchange que realmente usarás

Por defecto, cada ejecución simulada paga la tasa de MarginPad: 0.055% por lado en cripto, ambas piernas, cobradas como round trip al cierre. Eso es un promedio justo, pero no es la factura exacta de nadie. Si ya sabes dónde correrá el bot de verdad, cobra a la cuenta simulada según la tabla de ese exchange - su tasa taker publicada, menos el descuento de referido que consigue un registro de MarginPad allí - así el forward test se liquida como lo hará la cuenta real:

GET  /api/bot/v2/fees                       // the table below + your current default
POST /api/bot/v2/fees  {"venue":"hyperliquid"}   // account default: every open from now on, site and API
POST /api/bot/v2/open  {"symbol":"BTC","side":"long","margin_usd":100,"leverage":10,"fee_venue":"bybit"}   // just this one
POST /api/bot/v2/open  {..., "dry_run":true}      // -> fee_venue, taker_fee_pct, fee_vs_marginpad_default_usd
PlataformaTakerNuestro descuento de referidoPagas por lado
Bybit0.055%20%0.044%
Binance0.050%20%0.040%
Bitget0.060%20%0.048%
Gate0.050%20%0.040%
Hyperliquid0.045%4% (código MARGINPAD)0.0432%
OKX · Kraken0.050%-0.050%
MEXC0.020%-0.020%
KuCoin0.060%-0.060%
Valor por defecto de MarginPadsin exchange elegido0.055%

Las tasas son el nivel base publicado de los exchanges y los descuentos que indicamos en /exchanges/; la API las devuelve con source para que sepas que son cifras publicitadas, no mediciones. Ambas piernas pagan la tasa taker (el motor de paper trading ejecuta a mercado; no se modela un rebate de maker en una entrada pendiente). Solo perpetuos cripto - acciones, forex, metales e índices mantienen las tasas de la clase de MarginPad sea cual sea el exchange. Las posiciones abiertas mantienen la tasa con la que se ejecutaron; el límite de apalancamiento extremo (un round trip nunca por encima del 20% del margen) sigue aplicando. La misma opción es el selector "Fees as on" en el formulario de Paper Trade, así un bot y las operaciones manuales de su dueño pagan comisiones idénticas.

Escribir un bot que no se rompa

Envía siempre client_order_id al abrir. Esta es la línea más importante de toda esta documentación. Sin ella, una petición que expira en la red te deja adivinando: ¿se abrió la posición o no? Reintentas y puede que tengas dos. Con ella, el reintento devuelve la posición que creó la primera llamada, marcada como idempotent: true:

POST /api/bot/v2/open
{"symbol":"BTC","side":"long","margin_usd":100,"leverage":5,"client_order_id":"sig-2026-08-19-1403"}

// first call            -> {"ok":true,"data":{"position":{"id":"bot...", ...}}}
// same call retried     -> {"ok":true,"data":{"position":{"id":"bot...", ...},"idempotent":true}}

Usa un valor que tu estrategia pueda regenerar de forma determinista - un id de señal, o el símbolo más la marca de tiempo de la vela. Los ids se recuerdan durante 7 días.

Cerrar también acepta uno. Envía client_order_id en /close y un reintento reporta lo que hizo la primera llamada (idempotent: true) en vez de un error que tienes que interpretar.

Envía symbol al cerrar. Cada fila de /positions ya lo lleva, así que agregarlo no cuesta nada y acorta de forma medible el cierre:

POST /api/bot/v2/close
{"id":"bot...","symbol":"BTC"}    // one price fetch, one round trip
{"id":"bot..."}                   // server must first look up which symbol to price

Nuestro almacén de trading es una única instancia fijada a una región, así que cada salto extra cuesta lo que cuesta el round trip hasta ella desde donde estés. Medido el 2026-08-19: cerca de 20 ms desde Europa pero 198 ms de mediana y 368 ms en el percentil 95 desde Singapur. Un feed de precio frío suma alrededor de 400 ms más, y sin la pista, un cierre en un par líquido podría terminar esperando a uno ilíquido en el mismo lote. Con la pista, un cierre es un salto más un precio ya en caché. Un symbol incorrecto o desactualizado no cuesta nada - el servidor lo nota y usa el respaldo.

No gastes tu presupuesto de peticiones en polling. La mayoría de los bots gastan el grueso de sus llamadas preguntando "¿cambió algo?". Dos cosas hacen que eso sea casi gratis:

# 1. state changes: send back the ETag, get 304 and an empty body when nothing moved
curl -H "X-API-Key: $KEY" -H 'If-None-Match: W/"1a2b3c-4"' \
     https://marginpad.io/api/bot/v1/positions

# 2. live prices: /price is KEYLESS, so it costs nothing against your 120/min
curl https://marginpad.io/api/bot/v1/price?symbol=BTC

El ETag cubre el estado estructural - ids de posición, estado, cantidad, stop, objetivo, salida - y deliberadamente no el precio de referencia (mark price), que se mueve en cada tick y haría que el ETag nunca coincidiera. Así que: consulta /positions para saber "si saltó mi stop", y consulta el /price sin clave para el P&L. Vigila X-RateLimit-Remaining y reduce la frecuencia según Retry-After.

WebSocket - deja de hacer polling por completo

Las posiciones y los precios te llegan automáticamente (push), así te enteras de que tu stop saltó en un par de segundos, en vez de esperar a tu próxima consulta:

wss://marginpad.io/api/bot/v2/stream?api_key=mpb_…

<- {"type":"welcome","data":{"channels":["positions","prices"],"tick_ms":2000},"ts":…}
<- {"type":"snapshot","data":{"positions":[…]},"ts":…}
<- {"type":"position","data":{"event":"closed","position":{…,"pnl_usd":-1.24}},"ts":…}
<- {"type":"prices","data":{"BTC":64770.1},"ts":…}

-> {"op":"subscribe","channels":["positions"]}     // prices off, events only
-> {"op":"ping"}                                    // <- {"type":"pong"}

Eventos: position con event: opened | updated | closed se dispara cuando algo realmente cambia - una ejecución, un stop que se mueve, un cierre, una liquidación. prices lleva el precio de referencia de tus símbolos abiertos en cada tick. El simple movimiento del precio de referencia nunca genera un evento position, así que el canal permanece en silencio cuando no ha pasado nada.

Los stops se resuelven más rápido mientras estás conectado. El stream impulsa el mismo barrido de SL/TP/liquidación del lado del servidor que usa la vía REST, con su cadencia de ~2s, en lugar de dejar tu posición a merced del barrido periódico.

Hasta 3 sockets simultáneos por cuenta, compartidos entre tus claves. Los sockets se reciclan cada 6 horas - al reconectar recibes un snapshot nuevo. Si la conexión se cae, trata el siguiente snapshot como la verdad en lugar de intentar reproducir los eventos perdidos.

Webhooks - eventos enviados a tu servidor API PRO

Medido durante los últimos 40 días: el 76.4% de cada llamada a esta API es un sondeo de /positions y /account buscando eventos que todavía no sucedieron. Un webhook invierte eso - te hacemos un POST cuando algo realmente sucede, con la misma forma de Position que habría devuelto un sondeo, y funciona incluso mientras tu bot está desconectado, reiniciando o desplegado en algún lugar que no puede mantener un socket.

POST /api/bot/v2/webhooks
{"act":"add","url":"https://bot.example.com/marginpad","events":["position.closed","position.liquidated","order.filled"]}

-> {"ok":true,"data":{"webhook":{"id":"wh…","secret":"whs_…","events":[…],"active":true}}}

# what arrives at your URL, seconds after the event:
POST https://bot.example.com/marginpad
X-MP-Event: position.closed        X-MP-Delivery: 1841
X-MP-Timestamp: 1789124656008      X-MP-Signature: sha256=3763dc5d…
{"event":"position.closed","ts":1789124656008,"hook_id":"wh…","data":{"id":"bot…","symbol":"BTC","status":"closed","pnl_usd":-0.08,"close_reason":"SL hit",…}}

Eventos: position.opened · position.updated (un stop o un objetivo se movió) · position.closed · position.liquidated · order.filled (lleva la posición que creó) · order.expired · order.cancelled. Omite events para recibirlos todos. Las operaciones hechas en el sitio en la misma cuenta también los disparan.

Verifica cada entrega. X-MP-Signature es sha256=HMAC_SHA256(secret, raw body) con el secreto que se devuelve al añadir el hook. Compáralo antes de parsear el cuerpo; ambos SDK traen verify_webhook / verifyWebhook. Responde 2xx en menos de 6 segundos: cualquier otra cosa se reintenta 5 veces con espera creciente (30 s, 1, 2, 4 min), y un hook se pausa tras 25 fallos seguidos; GET /webhooks muestra active, consecutive_failures y last_error para que veas por qué. Tres hooks por cuenta en Pro, quince en Max y cincuenta en Business; las entregas son de mejor esfuerzo, y el snapshot del WebSocket y /positions siguen siendo la fuente de verdad.

Pruébalo antes de escribir un receptor: registra https://marginpad.io/api/whsink/<any-token-you-choose> como la URL, y luego abre GET en esa misma dirección - devuelve las últimas 20 entregas (headers y body) durante 15 minutos. Sin autenticación; el token es el secreto.

Books - una estrategia, un resultado limpio 2.5

Un book es un diario, un balance, un report y una curva de equity separados dentro de tu cuenta. Crea una clave con el nombre de un book y cada llamada hecha con esa clave opera ese book; tu cuenta principal y tus otros books nunca lo ven. Las cuentas Free tienen un book además del principal, API Pro cinco, Max veinte y Business cincuenta.

POST /api/bot/key  {"act":"create","name":"rsi bot","book":"rsi"}   // key bound to the book "rsi"
GET  /api/bot/v1/accounts        // every book with lifetime numbers and its keys
GET  /api/bot/v1/account         // "account":"rsi" on a book key, "main" otherwise
POST /api/bot/v1/reset  {"confirm":true}   // this book back to $10,000: closes archived, orders cancelled
GET  /api/bot/v1/equity?days=30&step_min=60   // equity curve + max_drawdown_pct

Reset se rechaza con 409 open_positions_exist mientras haya algo abierto: cierra primero, luego reinicia. Las operaciones archivadas se conservan (nunca se borran), pero el informe, el registro, /trades y la curva de equity empiezan desde el reset, y un navegador que aún tenga el diario antiguo no puede devolverlo. Los webhooks se disparan en los hooks de la cuenta con "account":"rsi" en el payload, así que un solo receptor sirve a todos los books.

Replay - corre tu bot a través de un día pasado 2.6

Haz backtest con el mismo código que vas a correr en vivo. Inicia un replay de un día UTC pasado y las mismas rutas que tu bot ya llama actúan sobre un diario de replay separado, cotizado con las propias velas de 1 minuto de MarginPad en el cursor. Los stops, los objetivos y las liquidaciones se comprueban en cada vela entre dos de tus llamadas, sobre el máximo y el mínimo, con la misma matemática de comisiones y funding que en vivo. Nada de un replay llega a las tablas, a la arena o a tu informe.

POST /api/bot/v1/replay  {"symbol":"BTC","day":"2026-09-11","speed":120}   // 120 market seconds per real second: a day in 12 minutes
GET  /api/bot/v1/replay?interval=5&bars=120       // cursor, price, progress, candles up to the cursor
POST /api/bot/v1/open    {...}                        // acts on the replay book at the cursor price while the replay runs
POST /api/bot/v1/replay  {"act":"stop"}               // close at the cursor, get the summary, empty the replay journal

La velocidad va de 1 (tiempo real) a 600 (un día en 2.4 minutos). Un replay por clave a la vez, solo cripto, por ahora solo órdenes a mercado: lee el precio y las velas del replay desde GET /v1/replay, ya que el /v1/price y el /v1/klines sin clave siguen respondiendo datos en vivo.

Gestionar tus claves

Puedes tener varias claves en una cuenta - mantén separados un bot de backtest y un bot en vivo, y revoca uno sin tocar el otro. El uso y los límites de peticiones se cuentan por clave, así que cada una tiene su propio presupuesto y su propia línea en tus estadísticas. Con la sesión iniciada en el sitio, desde el navegador:

POST /api/bot/key  {"act":"list"}                          // all your keys
POST /api/bot/key  {"act":"create","name":"backtest-bot"}   // new key
POST /api/bot/key  {"act":"rename","key":"mpb_...","name":"live-bot"}
POST /api/bot/key  {"act":"revoke","key":"mpb_..."}         // usage history is kept

Una clave revocada devuelve 401 revoked_key. Las claves son secretas - cualquiera que tenga una puede operar tu cuenta de paper trading. Créalas y revócalas arriba de esta página.

Bot arena - una clasificación pública para bots

Toda cuenta o libro con al menos cinco cierres abiertos a través de la API en esta temporada de 14 días queda clasificado en /arena/ por PnL realizado neto de comisiones y funding, con tasa de acierto, rendimiento sobre la tarjeta de $10,000, ROE promedio y liquidaciones. Sin premios y sin nada que registrar: opera a través de la API y la tabla te incluye sola. JSON: GET /api/arena.

Úsalo desde Claude, ChatGPT o Cursor

MarginPad ejecuta un servidor remoto de MCP, así un asistente de IA puede leer los mercados y operar tu cuenta simulada directamente - sin código de conexión:

https://marginpad.io/mcp

Añádelo como servidor MCP remoto en tu cliente y pon el header X-API-Key: mpb_… si quieres las herramientas de paper trading. Las herramientas de datos de mercado no necesitan clave. Se exponen veintiocho herramientas: precios, velas, mercados, screener, funding, interés abierto, liquidaciones, fear and greed, el calendario económico, dos calculadoras, y apertura en paper (con trailing stops y dry run) / órdenes límite y stop / modificar / cancelar / cerrar / sltp / posiciones / órdenes / saldo / operaciones / informe / comisiones / cuentas / reset / equity / replay. GET /mcp en un navegador devuelve el descriptor del servidor.

Formato de respuesta - v1 y v2

/api/bot/v1/* está congelada. Sus cuerpos de respuesta no van a cambiar; los bots escritos contra ella siguen funcionando indefinidamente, y todavía recibe correcciones de errores.

/api/bot/v2/* es la misma API con el envoltorio que ya usan nuestros endpoints de datos - una sola forma predecible para el éxito y el fallo, para que escribas el parseo una sola vez:

{ "ok": true,  "data": { ... }, "ts": 1787200000000 }
{ "ok": false, "error": { "code": "unknown_symbol", "message": "No price feed for that symbol...", "symbol": "FOO" }, "ts": 1787200000000 }

Mismas rutas, mismos parámetros, misma clave - cambia v1 por v2 en la URL. Los valores de code de error son identificadores estables; message es para humanos y puede reformularse.

Códigos de error

En /v2, los fallos siempre tienen la forma {"ok":false,"error":{"code","message"},"ts"}. El code es un identificador estable sobre el que puedes ramificar tu lógica; el message es texto libre y puede cambiar de redacción. Algunos errores incluyen el valor que necesitas para corregir la llamada - sl_wrong_side y tp_wrong_side incluyen el precio en vivo.

CódigoHTTPQué hacer
missing_api_key / invalid_api_key401Envía una clave válida en X-API-Key.
revoked_key401Crea una clave nueva; esta fue revocada.
rate_limit429Espera hasta Retry-After. No reintentes de inmediato.
unknown_symbol404Consulta /v1/markets.
symbol_required, margin_usd_min_1, margin_usd_max_100000, id_required400Corrige el cuerpo de la solicitud.
sl_wrong_side / tp_wrong_side400La respuesta incluye live - coloca el nivel en el lado correcto de ese precio.
stop_wrong_side400Una entrada stop espera del lado de la ruptura (long por arriba, short por abajo). Usa type:"limit" para una entrada en retroceso.
trail_pct_invalid400trail_pct es un porcentaje entre 0.05 y 50; se rechaza, nunca se ajusta en silencio.
nothing_to_modify400/modify_order necesita al menos un campo.
plan_required402Los webhooks necesitan un plan de pago. Todo lo demás en esta página está en Free. El cuerpo incluye plan_needed.
premium_required402Código heredado de plan_required, que se sigue enviando para que un bot de la 2.3 lo reconozca.
too_many_webhooks409Borra uno primero: tres hooks en Pro, quince en Max y cincuenta en Business.
bad_url / bad_event400Las URLs de los webhooks deben ser https en un host público; los nombres de eventos están listados en GET /webhooks.
too_many_open409Estás en el límite de posiciones abiertas de tu plan. Cierra algo.
already_closed400Inofensivo en un reintento - la posición ya está liquidada.
no_price400No hay precio en vivo en este instante; la posición sigue abierta. Reintenta.
unavailable503Transitorio. Reintenta con backoff.

¿Sigues atascado? El cuerpo del error es el primer lugar donde mirar, y estado es el segundo. Si ninguno lo resuelve, escribe a support@marginpad.io con el endpoint y el cuerpo exacto que te devolvimos - qué más incluir está en la página de soporte. Una persona lo lee.

API gratis de datos de liquidaciones DATOS EN VIVO

Liquidaciones en tiempo real agregadas de ocho exchanges por nuestro propio colector - los datos detrás de nuestro feed Rekt y del Mapa de Calor de Liquidaciones, expuestos como JSON gratis. En otros lugares, datos comparables suelen estar detrás de un muro de pago de $300+/mes; aquí no hace falta ninguna clave API. Con caché en el edge y límite de peticiones, así que soporta sin problema a los bots que hacen polling.

GET/api/v1/feedLas liquidaciones más recientes en TODOS los símbolos rastreados - {events:[{ts, exchange, symbol, side, price, qty, notional}]}. Los eventos llegan aquí segundos después de que ocurren (caché de borde de 3s). Haz polling cada 3-5s.
GET/api/v1/liquidations/live?symbol=BTC&limit=400Eventos de liquidación crudos y recientes para un símbolo (BTC, ETH, SOL, XRP, DOGE, BNB, ADA, LINK, AVAX, LTC). side es long_liquidated o short_liquidated, notional es el tamaño en USD.
GET/api/v1/liquidations/recent?symbol=BTC&minutes=1440Histograma agrupado por tiempo (USD long vs short por bucket) para gráficos - la fuente exacta de las estadísticas de nuestro mapa de calor. minutes: hasta 43200 (30 días).
GET/api/v1/clusters?symbol=BTCClusters de liquidación modelados: niveles de precio donde se estima que hay liquidez de liquidación ahora mismo - {clusters:[{price, side, est_notional}]}. Se actualiza continuamente a partir del flujo de órdenes en vivo.

Se agradece la atribución (enlaza marginpad.io) pero no es obligatoria. La cobertura es ~70%+ del flujo de liquidaciones del mercado - los exchanges que mueven el precio. Uso educativo; sin SLA de uptime. ¿Solo quieres datos de mercado? Toda la superficie sin clave está documentada en la página de API gratis de datos cripto.

Backtest, paper, live - en ese orden

La mayoría de los bots de trading de cripto que parecen rentables en un backtest pierden dinero la primera semana que salen en vivo. Los backtests repiten velas históricas limpias: no detectan una condición de carrera en tu lógica de órdenes, un error de tamaño de posición que solo aparece tras una racha de pérdidas, ni un apalancamiento que crece en silencio más allá de lo que tu margen aguanta. El forward testing ejecuta el mismo bot, el mismo código, contra precios reales en vivo y en tiempo real. Si la estrategia tiene un fallo, aparece aquí, donde un error no te cuesta nada.

BacktestingPaper trading (esta API)Trading en vivo
PreciosVelas históricasPrecios reales en vivo, en tiempo realPrecios reales en vivo
RiesgoNingunaNinguno - dólares simuladosDinero real en juego
Detecta errores de lógicaRara vez - los datos reproducidos los ocultanSí - el mismo código que en vivoSí, pero cada error cuesta dinero
Control de sobreajusteNo - ajustaste la estrategia con estos mismos datosSí - datos futuros nunca vistosSí
CostoGratisGratis - comisiones & funding simuladosComisiones + pérdidas + funding
Ideal paraDescartar ideas rápidoPoner a prueba el bot antes de financiarloUna estrategia ya probada dos veces

El paso intermedio es el que la mayoría se salta, y el que les habría salvado. Haz backtest de una idea aquí, pruébala en forward testing con esta API y luego financia una cuenta.

Paso tres: dónde correr el bot de verdad

Todo en esta página se liquida en dólares simulados. Una vez que el bot ha sobrevivido semanas de forward testing, ese mismo código necesita una API de exchange para colocar órdenes reales. Recomendamos a quienes construyen bots dos exchanges, por razones distintas:

HLHyperliquidon-chain · enfocado en la API

Perpetuos en su propia cadena con una API REST y WebSocket pública, sub-cuentas que tienen cada una su propia wallet de API (el bot nunca tiene tu clave principal), funding cada hora y un libro de órdenes que cualquiera puede auditar on-chain. Lo más parecido a correr contra esta API pero con dinero real.

4%de descuento en comisiones de trading
con el código MARGINPAD
Únete a Hyperliquid →
BBybitcentralizado · libros más profundos

Formatos de REST y WebSocket parecidos a lo que acabas de escribir, una clave separada por sub-cuenta, y uno de los feeds de donde vienen nuestros propios precios. La opción por defecto cuando quieres un libro de órdenes centralizado con rampas de entrada en fiat.

Abre una cuenta en Bybit →
Enlaces de referido - MarginPad puede ganar una comisión si abres una cuenta, sin ningún costo para ti; el descuento de Hyperliquid es su propio descuento por referido. La API de paper trading sigue siendo gratis de todos modos, y nada aquí requiere una cuenta en un exchange. Hyperliquid no está disponible para personas de EE. UU. según sus términos.

FAQ

¿Hay una API gratis de datos de liquidaciones / mapa de calor?

Sí - MarginPad expone liquidaciones en tiempo real agregadas de 8 exchanges como JSON gratis, sin necesidad de clave: /api/v1/feed, /api/v1/liquidations/live, /api/v1/liquidations/recent y /api/v1/clusters. Los feeds comparables suelen costar $300+/mes. Consulta la sección de datos de liquidaciones.

¿La API para bots de trading es realmente gratis?

Sí. Es un simulador de paper trading: las posiciones usan precios reales del mercado en vivo, pero sin dinero real. Inicia sesión con un email, genera una clave API y empieza a probar de inmediato. Los planes de pago solo elevan los límites.

¿Qué lenguajes de programación puedo usar?

Cualquier lenguaje que pueda hacer una petición HTTPS: Python, JavaScript/Node.js, Go, Rust, PHP o curl a secas. REST estándar, respuestas JSON, un único header X-API-Key.

¿Con qué monedas puede operar mi bot?

Cualquier par USDT con precio en vivo en los principales exchanges: BTC, ETH, SOL y cientos de altcoins, además de acciones de EE. UU., pares forex principales, metales e índices como perpetuos. Comprueba un símbolo con GET /api/bot/v1/price?symbol=SOL.

¿Necesito una cuenta en un exchange o hacer un depósito?

No. Sin depósito, sin wallet, sin KYC. Solo inicias sesión con un correo para que tu clave API y tus posiciones persistan entre sesiones.

¿Premium de MarginPad incluye la API?

No. La Bot API tiene sus propios planes y una suscripción Premium no cambia ningún límite de la API. Premium desbloquea funciones en el sitio web; los planes de la API desbloquean límites de la API. Se compran por separado.

Guías y tutoriales