系统端点¶
健康检查¶
身份验证: 无
返回服务健康状态,以及当前 executor_id 和签名验证是否就绪。
{
"status": "healthy",
"version": "v1",
"timestamp": "2026-04-15T08:00:00+00:00",
"executor_id": 0,
"relayer_executor_id": 0,
"signature_ready": true
}
说明:
- 当签名验证就绪、且本地解析的
executor_id与链上探测一致时,status为healthy。 - 当签名验证尚未就绪,或
executor_id与relayer_executor_id不一致时,status为degraded(用于在订单被拒绝前提前发现漂移)。 - 当链上探测暂时不可达时
relayer_executor_id可能为null。仅null本身不是降级信号;只有它与executor_id实际不一致才是。 - 生成组合
uuid_int时请使用executor_id。 - 当后端依赖不可用时,该端点会返回
503。
服务器时间¶
身份验证: 无
请使用该值来设置签名请求中的 expiration 和 deadline。
代币注册表¶
身份验证: 无
{
"tokens": [
{
"currency": "USD",
"symbol": "USDC",
"address": "0xDcaEcdd8Db64f4316A11917Ad0162DEBD935285b",
"decimals": 6,
"min_trade_amount_raw": "8800000",
"min_trade_amount": "8.800000"
},
{
"currency": "EUR",
"symbol": "EURC",
"address": "0xef64d15ed6c371545eb6dcd6c026c17dfb6c440f",
"decimals": 6,
"min_trade_amount_raw": "0",
"min_trade_amount": "0"
}
]
}
响应是一个包含 tokens 数组的对象。
min_trade_amount_raw 对应链上 Sera 合约为每个代币维护的最小成交输入数量(原始单位)。如果提交的输入金额低于这个阈值,/swap/quote 和 /orders 会在预检阶段直接返回 HTTP 400,并携带 AMOUNT_BELOW_MIN(报价为 detail.code,订单为 detail.error_code)。"0" 表示没有最低限制。min_trade_amount 则是按 decimals 缩放后的展示值。
市场注册表¶
身份验证: 无
返回当前活跃市场及其 base/quote 元数据。
{
"markets": [
{
"symbol": "USDC/EURC",
"base_symbol": "USDC",
"quote_symbol": "EURC",
"base_address": "0x965d4b4546716e416e950bc30467d128455d2d0e",
"quote_address": "0xef64d15ed6c371545eb6dcd6c026c17dfb6c440f",
"tick_precision": 6,
"quantity_precision": 6,
"amount_step": "0.000001",
"price_step": "0.000001",
"rounding_mode": "reject_extra_precision",
"base_decimals": 6,
"quote_decimals": 6,
"min_ask_amount_raw": "0",
"min_ask_amount": "0",
"min_bid_quote_amount_raw": "8800000",
"min_bid_quote_amount": "8.800000"
}
]
}
base_address 与 quote_address 是唯一标识该交易对的 ERC-20 合约地址。 base_symbol / quote_symbol 是显示用的代币符号,与 symbol 字符串的两部分对应。 交易对方向由服务端规范化:以小写字节序比较,base_address 严格小于 quote_address。
min_ask_amount_raw / min_bid_quote_amount_raw 来源于链上的最小成交金额:
- ASK 下限 使用基础代币最小值,因此与价格无关。
- BID 下限 以报价代币侧展示,因为最小基础数量会随价格变化。
对应的十进制展示值分别在 min_ask_amount 与 min_bid_quote_amount 中给出。
FX 汇率¶
身份验证: 无。
查询参数¶
| 参数 | 必填 | 说明 |
|---|---|---|
base | 是 | 三个 ASCII 字母,不区分大小写的 ISO 货币代码,例如 USD |
quote | 是 | 三个 ASCII 字母,不区分大小写的 ISO 货币代码,例如 SGD |
响应¶
{
"pair": "USD/SGD",
"rate": "1.2843",
"as_of": 1777372800.12,
"source": "market_oracle",
"observation_date": null,
"rate_24h_ago": "1.2901",
"as_of_24h_ago": 1777286400.05,
"change_pct": "-0.4496"
}
| 字段 | 说明 |
|---|---|
pair | 请求的 base/quote 方向 |
rate | 正数十进制字符串汇率 |
as_of | 所选来源数据的 Unix 时间戳,不一定是请求时间 |
source | identity、market_oracle 或 ecb_reference |
observation_date | ECB 观察日期(YYYY-MM-DD);其他来源为 null |
rate_24h_ago、as_of_24h_ago | 可用的比较汇率与时间戳,可以为 null |
change_pct | 带正负号、四位小数的百分比变化字符串,可以为 null |
来源与时效¶
identity:两侧货币相同时,汇率为1、比较汇率为1、变化为0.0000,观察日期为空,不查询数据存储。market_oracle:对服务方报价进行时间聚簇、异常剔除和中位数聚合。也可选取反向交易对,以1 / 反向汇率计算并保留八位小数。历史查询锁定同一方向;T-24h 附近(默认 ±1 小时)没有历史数据时,比较字段为 null,当前汇率仍返回 200。ecb_reference:两个市场方向都没有可用数据时,部署已启用且可用的 ECB 来源可返回每日参考汇率,比较字段对应可用的参考观察数据。此回退仅用于公共汇率查询,不会成为 Swap 的执行价格。展示为当前汇率前,应检查source、as_of与observation_date。
状态码¶
| HTTP | 含义 |
|---|---|
| 200 | 当前汇率可用,比较字段可以为 null |
| 400 | 已提供的货币代码不满足三个 ASCII 字母要求 |
| 422 | 缺少必填参数,或未通过查询参数模型校验 |
| 429 | 启用公共限流时触发限制 |
| 503 | 市场数据和可选 ECB 回退均不可用,或依赖尚未就绪 |
Permit 元数据¶
身份验证: 需要 API Key
查询参数:
token:ERC-20 代币地址owner:可能签署 permit 的钱包地址spender:额度接收方,通常取自GET /config的sor_address或vault_addressamount(可选):要与当前 allowance 比较的原始 uint256 数量
支持 permit 的代币示例响应:
{
"token": "0x965d4b4546716e416e950bc30467d128455d2d0e",
"owner": "0x...",
"spender": "0x...",
"current_allowance_raw": "0",
"required": true,
"permit_supported": true,
"nonce": 4,
"domain": {
"name": "USD Coin",
"version": "2",
"chainId": 11155111,
"verifyingContract": "0x965d4b4546716e416e950bc30467d128455d2d0e"
}
}
不支持 permit 的代币会返回 permit_supported: false,并省略 nonce 与 domain。只有在传入 amount 时,响应里才会包含可选的 required 字段。
公共配置¶
身份验证: 无
返回签名与交易构建所需的公共引导信息。
{
"chain_id": 11155111,
"sera_address": "0x83475A1bD98a8DC2DCd507A747e4DC85da241D6e",
"vault_address": "0x3c7945840bAE0d7e7f3824Ebccef1962629250F0",
"sor_address": "0x83c1368110B640A729f3810De5FBe94b99aa5668",
"domain_separator": "0x...",
"eip712_domain": {
"name": "Sera",
"version": "1",
"chainId": 11155111,
"verifyingContract": "0x83475A1bD98a8DC2DCd507A747e4DC85da241D6e"
},
"limits": {
"vl_batch": { "min": 2, "max": 50 },
"withdraw": { "cosignature_max_ttl_seconds": 600 }
},
"capabilities": {
"balances": { "sync_enabled": true },
"deposits": { "enabled": true, "restriction_reason": null },
"withdrawals": { "instant_enabled": false },
"orders": { "time_in_force": ["GTC"] }
}
}
配置处理器返回已知值,未知字段为 null。服务预热或注册表不可用时,启动准入仍可能返回 503。请稍后重试,并在签名前确认所需字段齐全。
运行时读取 limits.vl_batch.{min,max} 与 limits.withdraw.cosignature_max_ttl_seconds。前者可按部署配置,联合签名上限为 600 秒。
账户能力¶
capabilities.balances.sync_enabled 表示是否接受余额同步。capabilities.deposits.enabled 与可为空的 capabilities.deposits.restriction_reason 描述充值可用性;deposit_accounting_paused 表示客户端应暂停构建和广播充值。capabilities.withdrawals.instant_enabled 表示即时提款可用性。请读取当前值,不要照抄示例。能力开关不能替代每次请求的身份、余额或资格校验。
验证签名¶
身份验证: 无
可用于在提交订单前测试 EIP-712 订单签名是否正确。
fee_bps 可选,默认 0,并以签名字段 feeBps 重建;必须与签名时的值一致。valid=true 只表示签名验证通过,不证明订单精度规范、最低金额、资金、UUID 绑定或下单准入通过;这些检查请结合订单预览与最终下单响应。
请求体¶
{
"owner_address": "0x...",
"side": "bid",
"amount": "1000.0",
"price": "1.085",
"from_address": "0x...",
"to_address": "0x...",
"order_id": "00000000-0000-4000-8000-000000000001",
"uuid_int": "6427948336465191935941739505432058208337171677044006212075520",
"signature": "0x...",
"expiration": 1713254400
}
from_address 是市场的基础代币,to_address 是报价代币。expiration 为必填,并且必须满足与 POST /orders 相同的有界未来时间规则。
响应¶
精度、缓存与能力¶
当前市场满足 quantity_precision = base_decimals、tick_precision = quote_decimals。amount_step、price_step、rounding_mode="reject_extra_precision" 描述下单规则,签名前请使用预览。订单低于最低金额时读取 detail.error_code="AMOUNT_BELOW_MIN";Swap 报价错误可能改用 detail.code。
GET /markets 支持 ETag / If-None-Match:响应未改变时返回 304 且没有响应体,仅在 200 后解析 JSON。接口支持 gzip,设置 Vary: Accept-Encoding,客户端拒绝所有可用编码时返回 406。
GET /config 还返回 limits.withdraw.cosignature_max_ttl_seconds(600)和 capabilities.orders.time_in_force(["GTC"])。提款联合签名应遵守该时间上限。公共下单能力不代表 Swap 独立执行流程的能力。
就绪与筛查状态¶
这些端点用于部署、负载均衡和监控,建议仅通过受限的运维入口访问。客户接入不需要轮询这些探针。部分探针会查询下游依赖并返回运行状态;列入文档不代表应将其直接开放到公网。
身份验证: 应用处理器不要求交易 API Key;访问范围由部署入口控制。下列路径包含完整版本前缀。
| 方法 | 路径 | 响应与用途 |
|---|---|---|
| GET | /api/v1/livez | { "status": "alive" },仅检查进程存活 |
| GET | /api/v1/warmz | status="warm"、筛查、注册表及订单核算就绪信息;可以在交易激活前成功 |
| GET | /api/v1/readyz | /policy-readyz 的兼容别名 |
| GET | /api/v1/policy-readyz | status="ready",包含筛查策略和已激活交易依赖 |
| GET | /api/v1/traffic-readyz | status="ready"、scope="traffic"、policy_readiness;检查接流依赖,不要求筛查可用 |
| GET | /api/v1/screening/status | provider、capability、state、ready、can_screen |
运行时接流使用 /traffic-readyz,要求策略就绪时使用 /policy-readyz。依赖失败返回 503。进程存活不等于就绪;可接流的服务仍会对受保护操作单独执行筛查。就绪响应中的 ecb_fx 仅供参考。
筛查状态中的 ready=true 不总是表示实际判断能力已探测:已配置的第三方服务可以有 can_screen=null,开发环境关闭筛查时则为 can_screen=false。此端点不筛查指定钱包。地址查询请使用独立的地址筛查 API。