For the complete documentation index, see llms.txt. This page is also available as Markdown.

入门

从零开始到在 Nexus Exchange 上开出一个仓位的八步演练。您将用钱包登录、创建 HMAC API 密钥、对请求签名、为账户充值、浏览市场、下单、撤单或修改订单,并监控仓位。

每一步都以五种客户端展示:cURL、Rust、Python、TypeScript 和 Exchange CLI。每一步选择一个标签页即可。

本页最初是交易所应用曾在 /api-docs 提供的交互式 API 文档中的 Getting Started 标签页。该路由已无法访问,因此现在由本页作为指南。

开始之前

  • 您需要一个以太坊钱包来对登录消息签名。开始时不需要其他任何东西。

  • 基础 URL。下面的示例使用公共测试网主机。不带前缀的路径位于 /v1 传输基础路径 https://api.testnet.nexus.xyz/v1 之下,/api/v1 路径则位于主机根地址之下,因此完整 URL 形如 https://api.testnet.nexus.xyz/api/v1/…。请替换为您所调用部署的基础 URL。在存在带版本路由的地方,路径以 /api/v1 前缀展示。/v1 基础 URL 上不带前缀的形式可访问同一操作,也是官方客户端正在迁移到的形式。关于契约声明的其他基础 URL,以及 /api/v1 路径上的 servers 覆盖如何解析,请参见基础 URL。

  • 身份验证。有两种方案:仅用于创建和管理 API 密钥的会话令牌(Bearer),以及用于其他一切(包括所有交易)的 HMAC-SHA256 API 密钥签名。

  • 两个部署。交易所应用基于同一代码库部署了两次。测试网部署已上线,通过合成额度水龙头为账户注资。主网真实资金部署将通过把 USDX 从以太坊主网跨链转入来注资。它尚未上线:其主机 api.nexus.xyz 目前无法解析。下面的第4步在两者之间有所不同,两种情况都有说明。

  • 占位符。0xSIGNATURE_HEX、nx_7f3a1b...、sess_abc123... 和 0x<wallet-private-key> 等值都是占位符。请替换为您自己的值;切勿将任何密钥提交到代码仓库。

语言覆盖情况

cURL 是基线,每一步都有 cURL 示例。四种 SDK/CLI 客户端尚未覆盖每一步。当某个客户端在某一步没有示例时,标签页会注明,您可以改为参照 cURL 示例。交互式文档的做法相同,会附注说明并回退到 cURL。

机器可读的入口

代理无需阅读本页,即可从以下入口开始:

  • llms.txt,位于 https://exchange.nexus.xyz/llms.txt

  • openapi.json,即 OpenAPI 契约,位于 https://api.testnet.nexus.xyz/openapi.json

  • /metadata,交易所应用的机器可读元数据路由

  • MCP 服务器,已发布到 npm,因此只需一行即可添加。它通过 stdio 在本地运行,因此您的 API 密钥保留在您的机器上:

其公开的市场数据和演示工具无需凭证,因此在您拥有密钥之前该命令就已可用。托管的 MCP 端点已在计划中;其 DNS 尚未生效,因此目前没有可添加的远程 URL。

OpenAPI 规范和变更日志在 nexus-xyz/nexus-exchange-api 中进行版本管理,版本发布记录在 GitHub Releases。


身份验证

第1–3步带您从钱包走到一个已签名的请求。

1. 登录

POST /auth/login。无需身份验证。

使用 EIP-191 个人签名进行身份验证。要签名的消息始终是固定字符串“Sign in to Nexus Exchange”。服务器会从签名中恢复出您的钱包地址。

说明

  • 会话令牌在24小时后过期。

  • 您只在创建和管理 API 密钥时需要会话,交易时不需要。

TypeScript 暂不支持。请使用 cURL 示例。

请求体

响应

2. 创建 API 密钥

POST /keys。需要会话令牌。

使用会话令牌创建一个 HMAC 密钥对。secret 只显示一次,请立即保存。

说明

  • 此响应之后,您将无法再取回 secret。

  • 密钥继承您账户的等级。X-RateLimit-* 响应头会报告各等级的速率限制。

Python 暂不支持。请使用 cURL 示例。

TypeScript 暂不支持。请使用 cURL 示例。

请求体

响应

3. 对请求签名

GET /markets。需要 HMAC API 密钥。

每个需要身份验证的请求都需要三个请求头。构造一个规范字符串,用您的 secret 对其做 HMAC-SHA256,然后附上结果。

必需的请求头

请求头
必填
说明

X-API-Key

是

您的密钥 ID(nx_...)

X-Timestamp

是

当前时间,自 epoch 起的毫秒数

X-Signature

是

规范字符串的 HMAC-SHA256 十六进制值

说明

  • 规范格式:timestamp\nMETHOD\npath\nquery\nsha256(body)

  • path 是契约中写明的路径。路由带有 /api/v1 前缀时请包含该前缀,但不要包含 /v1 传输前缀,它会在验证签名之前被去除。调用 …/v1/markets 意味着签名 /markets;调用 …/api/v1/tickers 意味着签名 /api/v1/tickers。

  • 时间戳必须与服务器时间相差在 ±30秒以内(自 epoch 起的毫秒数)。

  • 对于没有请求体的 GET 请求,对空字符串做哈希。

响应

在交互式文档中,这一步有一个针对 GET /markets 的实时“Try it”按钮。


交易

第4–8步为账户注资、建立仓位并对其进行监控。

4. 为账户充值

POST /account/credit。需要 HMAC API 密钥。仅限测试网。

领取合成 USDX 额度以开始交易。每个 API 密钥每天最多可领取500 USDX。省略 "amount" 即可领取当日剩余的全部额度。

说明

  • 金额是十进制字符串,与 API 中的所有货币值一样。

  • 当日额度用完后返回429。额度在下一个 UTC 日重置。

请求体

响应

主网上的第4步:使用真实抵押品注资

在主网真实资金部署上(已计划,尚未上线),真实充值将取代第4步。测试网的试玩部署有合成额度水龙头,主网真实资金部署则没有。您不必自己为此做分支判断。有一个端点会回答“该部署如何接受抵押品”,响应中会给出注资模式。

GET /account/deposit-target。需要 HMAC API 密钥。

主网上没有合成额度。向交易所询问应将抵押品发送到哪里,发送后轮询,直到余额体现这笔资金。

不要硬编码注资方式。响应是一个以 mode 区分的联合类型。您得到的模式是部署的属性,而不是您请求的属性,也没有任何参数可以选择模式。配置了真实充值合约的部署返回 onchain。其他所有部署返回 testnet-faucet,并指向其合成额度端点。根据 mode 做分支,同一段客户端代码即可在任一部署上完成注资。

说明

  • 仅用于发现。GET /account/deposit-target 不会转移任何资金,也不会创建充值。按返回的指引操作是一个单独、明确的步骤。

  • 在 onchain 模式下,onchain.address 是充值合约地址,onchain.chain 是其所在的链。两者都是部署配置,请读取它们,不要硬编码。

  • 403 EARLY_ACCESS_REQUIRED 表示您的账户目前还不能在此注资。当部署将注资限定于抢先体验参与者时,它会拒绝未加入的账户,并且该拒绝在账户加入之前是永久性的。请勿重试。这一限制有意与 POST /account/credit 和 POST /faucet 保持一致,这样无法注资的账户就不会被告知如何注资。

  • 该端点绝不会为填充 onchain 结构而捏造地址。如果配置为链上充值的部署地址格式错误,它会返回 503 DEPOSIT_TARGET_MISCONFIGURED,而不是公布该地址,因为向错误地址充值会导致资金销毁。这是运营方的配置错误,而不是暂时性故障,重试无法解决。

  • min_amount 是建议值,不强制执行。它是让首笔交易可行的下限;较小的链上充值不会被拒绝。

  • confirm 在两种模式下完全相同,因此在任一部署上都可用。交易前请轮询 GET /account,直到 balance 体现这笔资金。

  • POST /account/credit 是一个仅限测试网的水龙头,入账的 USDX 是合成的。契约自身的指引是:不要构建假定该操作在每个网络上都存在的注资流程。主网完全没有合成额度。

  • GET /api/v1/bridge/assets 列出支持的链,以及每条链上可充值的资产及其精度、最小金额和所需确认数。

  • 使用 GET /api/v1/bridge/deposits 跟踪跨链充值,或通过 GET /api/v1/bridge/deposits/{id} 按其 {tx_hash}:{log_index} id 跟踪单笔充值。该读取模型由 watcher 写入,这些端点只负责读取。

  • 链上转账不可撤销。请只从您控制的钱包发送指引中指定的资产。

  • 完整流程是:在此注资,交易(后续步骤),然后提现。GET /withdrawals 列出您的记录,POST /withdrawals 发起一笔提现。它通过以钱包自身密钥签名的 EIP-712 WithdrawIntent 进行身份验证,而不是 API 密钥,因此不会复用上面的 HMAC 凭证。跨链桥提现是一个单独的操作,即 POST /api/v1/bridge/withdrawals。

Rust 暂不支持。请使用 cURL 示例。跨链桥步骤的高层客户端封装仍在开发中。

Python 暂不支持。请使用 cURL 示例。

TypeScript 暂不支持。请使用 cURL 示例。

CLI 暂不支持。请使用 cURL 示例。

请求体

无。GET /account/deposit-target 不接受参数,也没有请求体。

响应(onchain 模式,契约中 DepositTarget 的示例)

5. 浏览市场

GET /markets/{market_id}/ticker。需要 HMAC API 密钥。

列出可用的永续合约市场并查看当前价格。

响应

这一步的源码注释写的是 # List markets (all 32)。这是已配置的市场数量,而不是正在交易的数量。测试网目前正在交易4个市场,因此上面的注释已作更正。当前的市场集合请参见 Exchange Testnet。

主网部署的市场集合有所不同。主网上线时有3个市场(BTC-USDX-PERP、ETH-USDX-PERP、SOL-USDX-PERP),之后扩展到32个以上。那里的 cURL 注释写的是 # List markets (3 at internal launch: BTC, ETH, SOL — expanding to 32+)。

在交互式文档中,这一步有一个针对 GET /markets/BTC-USDX-PERP/ticker 的实时“Try it”按钮。

价格和数量精度

提交前请先取整。每个市场都声明了三条量化规则,不符合规则的订单会被交易所拒绝,而不是替您取整。

GET /markets 上的字段

规则

tick_size

限价必须是它的整数倍。

lot_size

订单数量必须是它的整数倍。

min_order_size

订单数量不得低于此值。

对于 BTC-USDX-PERP,这三个值分别为 0.5、0.001 和 0.001。因此价格 83000.25 无效,因为它不是 0.5 的整数倍;数量 0.0005 也无效,因为它同时低于最小交易单位和最小下单数量。83000.00 和 0.001 是有效的。

请按市场读取这些值,而不要硬编码。它们因市场而异(ETH-USDX-PERP 为 0.10 和 0.01,SOL-USDX-PERP 为 0.01 和 0.1),并且属于上线时的配置。市场规格(英文) 发布了每个已上线市场的当前表格。

向安全的一侧取整。将买入价格按最小价格变动向下取整,卖出价格向上取整,数量则按最小交易单位向下取整。将数量向上取整可能使订单超出您的权益所能支撑的保证金,订单随后会因其他原因被拒绝。

6. 下单

POST /orders。需要 HMAC API 密钥。

提交限价单或市价单。响应会确认订单已被接受。

说明

  • 使用 "type": "market" 以当前最优价格立即成交。

  • 可在一次 POST /orders/batch 调用中批量提交多个订单。交易所按顺序处理它们,结果保持请求中的顺序。

请求体

响应

7. 撤单或修改

DELETE /orders/{order_id} · DELETE /orders · PATCH /orders/{order_id}。需要 HMAC API 密钥。

这是三个独立的操作:

操作
效果

DELETE /orders/{order_id}

撤销一个挂单。

DELETE /orders

撤销所有挂单,或通过 ?market_id= 撤销某一市场上的所有订单。

PATCH /orders/{order_id}

原子性撤单并替换:在一次调用中修改价格和/或数量。

说明

  • 修改订单会返回一个带有新 id 的替换订单。200 响应体是新订单;您修改的那个 id 已不复存在。请跟踪返回给您的 id,而不是您发送的 id。

  • 修改订单时必须至少提供 price 或 size 之一。

  • 修改订单的交易前保证金检查不计入被替换订单仍占用的保证金,因此按替换订单新增的保证金来计算。以相同数量重新定价不需要额外保证金,缩小数量则会释放保证金,而不是需要更多保证金。

  • 强平订单不可修改。

  • 修改订单时返回 409 表示订单在您读取之后发生了变化。它在您读取和写入之间已成交或已被撤销。

  • 撤单与提交订单使用各自独立的速率限制额度。用完订单额度绝不会阻止撤单。只有带 bucket: cancel 的 429 才表示您的撤单通道本身已饱和。参见速率限制。

8. 监控仓位

GET /positions。需要 HMAC API 密钥。

查看持有的仓位、未实现盈亏和账户健康状况。

响应

在交互式文档中,这一步有一个针对 GET /account 的实时“Try it”按钮。


WebSocket

入门时使用轮询即可。实时订单簿或成交推送应使用数据流。

有两个 socket,它们不能互换:

  • GET /stream 提供公开的市场数据,无需令牌。发送一条 {"subscribe": [...]} 消息即可。订单簿帧是完整的前20档快照,因此重连后无需重放任何内容。

  • GET /ws 需要来自 POST /ws/token 的令牌,除公开频道外还承载各账户的频道,带有 op 封装结构、序列号和重连游标。

每个页面都有频道列表、消息结构和重连规则。

在基于它进行开发之前:

  • 断线撤单需要主动开启,按账户设置,默认关闭。使用 PUT /account/cancel-on-disconnect 设置,使用对应的 GET 读取。它是一个失联保护开关。当您最后一个已认证的连接断开且未在宽限期内重连时,交易所会撤销您的挂单。没有它,断开的连接会让您的订单继续有效。

  • 检查 active,而不仅仅是 enabled。enabled 是您自己的开启设置。active 还要求交易所端的功能开关已打开,因此 active 才能告诉您断线撤单是否会触发。账户可能读回 enabled: true,却仍未受到保护。

  • 数据流不是仓位状态的权威来源。任何重连之后,请以 GET /positions 和 GET /account 为准进行对账,而不是从上次中断处重放。

客户端

上面的代码片段使用以下包:

客户端
包 / crate

Rust

nexus_exchange

Python

nexus_exchange

TypeScript

@nexus-xyz/exchange-ts

CLI

nexus 命令

CLI 和各语言 SDK 在交易所 monorepo 之外分发。引导式演练没有说明它们的仓库,因此这里不提供安装说明。

后续步骤

  • 概览:交易所 API 涵盖哪些内容以及如何组织

  • 身份验证:会话令牌、HMAC 规范化以及 API 密钥管理的完整说明

  • 订单类型:全部八种订单类型的要求矩阵,以及参考侧边栏中的 Trading 页面

  • GET /stream(公开,无需令牌)和 GET /ws(令牌来自 POST /ws/token):频道、消息结构和重连

最后更新于