Primeros pasos
Un recorrido de ocho pasos desde cero hasta una posición abierta en Nexus Exchange. Inicias sesión con tu billetera, generas una clave de API HMAC, firmas solicitudes, fondeas la cuenta, exploras los mercados, envías una orden, la cancelas o la modificas y monitoreas tus posiciones.
Cada paso se muestra en cinco clientes: cURL, Rust, Python, TypeScript y la CLI del Exchange. Elige una pestaña en cada paso.
Esta página nació como la pestaña Getting Started de la documentación interactiva de la API que la app del Exchange servía en /api-docs. Esa ruta ya no resuelve, así que ahora esta página es la guía.
Antes de empezar
Necesitas una billetera de Ethereum para firmar el mensaje de inicio de sesión. No se requiere nada más para empezar.
URL base. Los ejemplos de abajo usan el host público de testnet. Las rutas sin prefijo van bajo la base de transporte
/v1,https://api.testnet.nexus.xyz/v1, y las rutas/api/v1van en la raíz del host, así que una URL completa se ve comohttps://api.testnet.nexus.xyz/api/v1/…. Sustituye la base por la del despliegue al que llamas. Las rutas se muestran con el prefijo/api/v1donde existe una ruta versionada. La forma sin prefijo sobre la base/v1llega a la misma operación y es hacia la que se están moviendo los clientes oficiales. Consulta URL base para ver las otras bases que declara el contrato y cómo se resuelve la anulación deserversen las rutas/api/v1.Autenticación. Dos esquemas: un token de sesión (Bearer) que se usa solo para crear y administrar claves de API, y la firma con clave de API HMAC-SHA256 que se usa para todo lo demás, incluido todo el trading.
Dos despliegues. La app del Exchange se despliega dos veces a partir de un mismo código. El despliegue de testnet está en vivo y fondea las cuentas desde un faucet de crédito sintético. El despliegue de mainnet con fondos reales se fondeará transfiriendo USDX por el puente desde Ethereum Mainnet. Todavía no está en vivo: su host,
api.nexus.xyz, no resuelve. El paso 4 de abajo difiere entre los dos, y ambas variantes están documentadas.Marcadores de posición. Valores como
0xSIGNATURE_HEX,nx_7f3a1b...,sess_abc123...y0x<wallet-private-key>son marcadores de posición. Sustitúyelos por los tuyos; nunca hagas commit de un secreto.
Cobertura de lenguajes
cURL es la base, y cada paso tiene un ejemplo en cURL. Los cuatro clientes SDK/CLI todavía no cubren todos los pasos. Cuando un cliente no tiene ejemplo para un paso, la pestaña lo indica, y sigues el ejemplo de cURL en su lugar. La documentación interactiva hacía lo mismo: recurría a cURL con una nota.
Puntos de entrada legibles por máquina
Un agente puede empezar por estos sin leer esta página:
llms.txt, en https://exchange.nexus.xyz/llms.txtopenapi.json, el contrato OpenAPI, enhttps://api.testnet.nexus.xyz/openapi.json/metadata, la ruta de metadatos legible por máquina de la app del ExchangeEl servidor MCP, publicado en npm, así que agregarlo es una sola línea. Se ejecuta localmente por stdio, así que tu clave de API se queda en tu máquina:
Sus herramientas públicas de datos de mercado y de demostración no necesitan credenciales, así que el comando es útil antes de que tengas una clave. Está planificado un endpoint MCP alojado; su DNS todavía no está activo, así que hoy no hay una URL remota que agregar.
La especificación OpenAPI y el changelog se versionan en nexus-xyz/nexus-exchange-api, y las versiones se publican en GitHub Releases.
Autenticación
Los pasos 1–3 te llevan de una billetera a una solicitud firmada.
1. Inicia sesión
POST /auth/login. No requiere autenticación.
Autentícate con una firma personal EIP-191. El mensaje que se firma siempre es la cadena fija "Sign in to Nexus Exchange". El servidor recupera la dirección de tu billetera a partir de la firma.
Notas
El token de sesión vence en 24 horas.
Solo necesitas la sesión para crear y administrar claves de API, no para operar.
Todavía no está disponible en TypeScript. Usa el ejemplo de cURL.
Cuerpo de la solicitud
Respuesta
2. Crea una clave de API
POST /keys. Requiere token de sesión.
Usa el token de sesión para crear un par de claves HMAC. El secreto se muestra una sola vez, así que guárdalo de inmediato.
Notas
No puedes recuperar el secreto después de esta respuesta.
Las claves heredan el nivel de tu cuenta. Los encabezados de respuesta
X-RateLimit-*informan los límites de solicitudes por nivel.
Todavía no está disponible en Python. Usa el ejemplo de cURL.
Todavía no está disponible en TypeScript. Usa el ejemplo de cURL.
Cuerpo de la solicitud
Respuesta
3. Firma las solicitudes
GET /markets. Requiere clave de API HMAC.
Cada solicitud autenticada necesita tres encabezados. Construye una cadena canónica, aplícale HMAC-SHA256 con tu secreto y adjunta el resultado.
Encabezados obligatorios
X-API-Key
sí
Tu ID de clave (nx_...)
X-Timestamp
sí
Hora actual en ms desde epoch
X-Signature
sí
HMAC-SHA256 en hex de la cadena canónica
Notas
Formato canónico:
timestamp\nMETHOD\npath\nquery\nsha256(body)pathes la ruta tal como está escrita en el contrato. Incluye el prefijo/api/v1cuando la ruta lo tiene, pero no el prefijo de transporte/v1, que se elimina antes de verificar tu firma. Llamar a…/v1/marketssignifica firmar/markets; llamar a…/api/v1/tickerssignifica firmar/api/v1/tickers.La marca de tiempo debe estar dentro de ±30 segundos respecto a la hora del servidor (milisegundos desde epoch).
Para las solicitudes GET sin cuerpo, calcula el hash de la cadena vacía.
Respuesta
Trading
Los pasos 4–8 fondean la cuenta, abren una posición y la monitorean.
4. Fondea la cuenta
POST /account/credit. Requiere clave de API HMAC. Solo en testnet.
Acredita USDX sintético para empezar a operar. Cada clave de API puede reclamar hasta 500 USDX por día. Omite "amount" para reclamar todo lo que queda de la asignación diaria.
El faucet de crédito solo existe en testnet. En el despliegue de mainnet con fondos reales, este endpoint devuelve 403 y el fondeo es solo por el puente. Consulta la variante de mainnet más abajo.
Notas
Los montos son cadenas decimales, como todos los valores monetarios de la API.
Devuelve 429 cuando se agota la asignación diaria. La asignación se reinicia el siguiente día UTC.
Cuerpo de la solicitud
Respuesta
El paso 4 en mainnet: fondea con colateral real
En el despliegue de mainnet con fondos reales (planificado, todavía no en vivo), un depósito real reemplaza al paso 4. El despliegue de prueba de testnet tiene un faucet de crédito sintético, y el despliegue de mainnet con fondos reales no tiene ninguno. No tienes que ramificar tu código por eso. Un solo endpoint responde "cómo acepta colateral este despliegue", y la respuesta indica el modo.
GET /account/deposit-target. Requiere clave de API HMAC.
No hay crédito sintético en mainnet. Pregúntale a la plataforma adónde enviar el colateral, envíalo y luego consulta periódicamente hasta que tu saldo lo refleje.
No fijes en el código el método de fondeo. La respuesta es una unión discriminada por mode. El modo que recibes es una propiedad del despliegue, no de tu solicitud, y ningún parámetro lo selecciona. Un despliegue con un contrato de depósito real configurado responde onchain. Todos los demás despliegues responden testnet-faucet y apuntan a sus endpoints de crédito sintético. Ramifica según mode, y el mismo código de cliente se fondea solo en cualquiera de los dos despliegues.
Notas
Solo descubrimiento.
GET /account/deposit-targetno mueve fondos ni crea ningún depósito. Actuar según la instrucción devuelta es un paso aparte y explícito.En modo
onchain,onchain.addresses la dirección del contrato de depósito yonchain.chaines la cadena en la que vive. Ambos son configuración del despliegue, así que léelos y no los fijes en el código.403 EARLY_ACCESS_REQUIREDsignifica que tu cuenta todavía no se puede fondear aquí. Cuando un despliegue restringe el fondeo a participantes con acceso anticipado, rechaza una cuenta que no está inscrita, y el rechazo es permanente hasta que la cuenta se inscriba. No reintentes. La validación replicaPOST /account/credityPOST /fauceta propósito, para que a una cuenta que no se puede fondear no se le diga cómo fondearse.El endpoint nunca inventa una dirección para completar la forma
onchain. Un despliegue configurado para depósitos on-chain cuya dirección está mal formada devuelve503 DEPOSIT_TARGET_MISCONFIGUREDen lugar de publicarla, porque depositar en una dirección incorrecta quema los fondos. Es un error de configuración del operador, no una falla transitoria, y reintentar no lo resuelve.min_amountes orientativo, no obligatorio. Es el piso que hace viable una primera operación; nada rechaza un depósito on-chain más pequeño.confirmes idéntico en ambos modos, así que funciona en cualquiera de los dos despliegues. ConsultaGET /accounthasta quebalancerefleje los fondos antes de operar.POST /account/credites un faucet solo de testnet, y el USDX acreditado es sintético. La orientación del propio contrato es no construir un flujo de fondeo que suponga que la operación existe en todas las redes. Mainnet no tiene ningún crédito sintético.GET /api/v1/bridge/assetsenumera las cadenas admitidas y, por cadena, los activos que se pueden depositar con sus decimales, su monto mínimo y las confirmaciones requeridas.Sigue un depósito entre cadenas con
GET /api/v1/bridge/deposits, o uno solo por su id{tx_hash}:{log_index}conGET /api/v1/bridge/deposits/{id}. El watcher escribe ese modelo de lectura, y los endpoints solo lo leen.Las transferencias on-chain son irreversibles. Envía solo el activo que nombra la instrucción, desde una billetera que controles.
El ciclo completo es: fondear aquí, operar (pasos siguientes) y luego retirar.
GET /withdrawalsenumera tus registros yPOST /withdrawalsinicia uno. Se autentica con unWithdrawIntentEIP-712 firmado con la clave propia de la billetera, no con una clave de API, así que no reutiliza las credenciales HMAC de arriba. Un retiro por el puente es una operación aparte,POST /api/v1/bridge/withdrawals.
Todavía no está disponible en Rust. Usa el ejemplo de cURL. El wrapper de cliente de alto nivel para el paso del puente todavía está en desarrollo.
Todavía no está disponible en Python. Usa el ejemplo de cURL.
Todavía no está disponible en TypeScript. Usa el ejemplo de cURL.
Todavía no está disponible en la CLI. Usa el ejemplo de cURL.
Cuerpo de la solicitud
Ninguno. GET /account/deposit-target no acepta parámetros ni cuerpo.
Respuesta (modo onchain, el ejemplo del contrato para DepositTarget)
5. Explora los mercados
GET /markets/{market_id}/ticker. Requiere clave de API HMAC.
Enumera los mercados de futuros perpetuos disponibles y consulta los precios actuales.
Respuesta
Precisión de precio y tamaño
Redondea antes de enviar. Cada mercado declara tres reglas de cuantización, y la plataforma rechaza una orden que no las cumple en lugar de redondearla por ti.
Campo en GET /markets
Regla
tick_size
El precio límite debe ser un múltiplo exacto de este valor.
lot_size
El tamaño de la orden debe ser un múltiplo exacto de este valor.
min_order_size
El tamaño de la orden debe ser al menos este valor.
Para BTC-USDX-PERP son 0.5, 0.001 y 0.001. Así que un precio de 83000.25 no es válido, porque no es múltiplo de 0.5, y tampoco lo es un tamaño de 0.0005, que está por debajo tanto del lote como del mínimo. 83000.00 y 0.001 son válidos.
Lee los valores de cada mercado en lugar de fijarlos en el código. Difieren según el mercado (ETH-USDX-PERP es 0.10 y 0.01, SOL-USDX-PERP es 0.01 y 0.1), y son configuración que se define al listar el mercado. Especificaciones de mercado (en inglés) publica la tabla actual de cada mercado listado.
Redondea hacia el lado seguro. Redondea un precio de compra hacia abajo y un precio de venta hacia arriba al tick, y redondea los tamaños hacia abajo a la cuadrícula del lote. Redondear un tamaño hacia arriba puede hacer que la orden supere el margen que respalda tu patrimonio, y entonces la orden se rechaza por otro motivo.
6. Envía una orden
POST /orders. Requiere clave de API HMAC.
Envía una orden límite o de mercado. La respuesta confirma la aceptación.
Notas
Usa
"type": "market"para ejecutar de inmediato al mejor precio disponible.Agrupa varias órdenes en una sola llamada a
POST /orders/batch. La plataforma las procesa en secuencia, y los resultados conservan el orden de la solicitud.
Cuerpo de la solicitud
Respuesta
7. Cancela o modifica
DELETE /orders/{order_id} · DELETE /orders · PATCH /orders/{order_id}. Requiere clave de API HMAC.
Son tres operaciones separadas:
DELETE /orders/{order_id}
Cancela una orden en el libro.
DELETE /orders
Cancela todas las órdenes en el libro, o todas las órdenes de un mercado con ?market_id=.
PATCH /orders/{order_id}
Cancelar y reemplazar atómico: cambia el precio y/o el tamaño en una sola llamada.
Notas
Una modificación devuelve un reemplazo con un id nuevo. El cuerpo
200es la orden nueva; el id que modificaste ya no existe. Sigue el id que recibes, no el que enviaste.En una modificación hay que enviar al menos uno de
priceosize.La verificación de margen previa a la operación de una modificación excluye la reserva que todavía mantiene la orden que se reemplaza, así que se dimensiona según el margen que agrega el reemplazo. Cambiar el precio con el mismo tamaño no necesita margen adicional, y reducir el tamaño libera margen en lugar de requerir más.
Las órdenes de liquidación no se pueden modificar.
Un
409en una modificación significa que la orden cambió después de que la leíste. Se ejecutó o se canceló entre tu lectura y tu escritura.Las cancelaciones consumen un presupuesto de límites de solicitudes separado del de los envíos. Agotar tu presupuesto de órdenes nunca bloquea una cancelación. Un
429conbucket: canceles el único rechazo que significa que tu propio canal de cancelaciones está saturado. Consulta Límites de solicitudes.
8. Monitorea tus posiciones
GET /positions. Requiere clave de API HMAC.
Consulta las posiciones abiertas, el PnL no realizado y la salud de la cuenta.
Respuesta
WebSockets
Hacer polling está bien para empezar. Un libro en vivo o un feed de ejecuciones deberían usar el stream.
Hay dos sockets, y no son intercambiables:
GET /streames de datos de mercado públicos y no necesita token. Envía un solo mensaje{"subscribe": [...]}. Los frames del libro son instantáneas completas del top 20, así que no hay nada que reproducir después de una reconexión.GET /wsnecesita un token dePOST /ws/tokeny lleva los canales por cuenta además de los públicos, con sobresop, números de secuencia y un cursor de reconexión.
Cada página tiene la lista de canales, las formas de los mensajes y las reglas de reconexión.
Antes de construir sobre ellos:
La cancelación al desconectar es opcional, por cuenta, y está desactivada de forma predeterminada. Actívala con
PUT /account/cancel-on-disconnecty léela con elGET. Es un interruptor de hombre muerto. Cuando tu última conexión autenticada se cae y no se reconecta dentro de la ventana de gracia, la plataforma cancela tus órdenes en el libro. Sin ella, una conexión caída deja tus órdenes activas.Revisa
active, no soloenabled.enabledes tu propia activación.activetambién requiere el interruptor de la función del lado del exchange, así queactivete dice si la cancelación al desconectar se va a activar. Una cuenta puede leerenabled: truey aun así no estar protegida.El stream no es la fuente de verdad del estado de las posiciones. Concilia contra
GET /positionsyGET /accountdespués de cualquier reconexión en lugar de reproducir desde donde te quedaste.
Clientes
Los fragmentos de arriba usan estos paquetes:
Rust
nexus_exchange
Python
nexus_exchange
TypeScript
@nexus-xyz/exchange-ts
CLI
el comando nexus
La CLI y los SDK de lenguajes se distribuyen fuera del monorepo del Exchange. El recorrido guiado no indica sus repositorios, así que las instrucciones de instalación no se reproducen aquí.
Próximos pasos
Descripción general: qué cubre la API del Exchange y cómo está organizada
Autenticación: tokens de sesión, canonicalización HMAC y administración de claves de API en detalle
Tipos de órdenes: la matriz de requisitos de los ocho tipos de órdenes, y las páginas de Trading de la barra lateral de la Referencia
GET /stream(público, sin token) yGET /ws(token dePOST /ws/token): canales, formas de los mensajes y reconexión
Última actualización

