NeoLinks
ProductsPricingDocsBlogAbout
Sign in
NeoLinks API Docs
  • 平台概览
  • 环境与 Base URL
  • 认证与签名
  • 通用响应格式
  • 幂等与限流
  • 收单 Acquiring
  • — 创建收单订单
  • — 查询收单订单
  • 虚拟账户 VA
  • 收款 Collection
  • 付款 Payout
  • 兑换 Exchange
  • 入金 Deposits
  • 余额 Balances
  • 稳定币收单
  • 法币收单
  • 保证金
  • KYT 合规
  • Webhook 事件
  • — 签名验证
  • 错误码表
  • Sandbox 测试
  • 更新日志

快速上手

NeoLinks 是企业级稳定币/法币支付基础设施平台,为 B2B 商户与第三方集成方提供统一的收单、收款、付款、兑换与虚拟账户能力。通过 Partner OpenAPI,您可以在数分钟内完成沙箱集成并开始测试真实支付流程。

🔗

Partner OpenAPI

HMAC 签名鉴权,RESTful JSON API,覆盖收单/收款/付款/兑换全链路。

🏦

虚拟账户 VA

美元代收、路由账号分配,法币入金自动匹配收单订单。

⛓️

稳定币链上

Vault 合约收单、HD 子地址、Scanner 实时入账、KYT 合规筛查。

基础设施能力总览

📄
收单 AcquiringInvoices / Transactions,法币 VA + 稳定币 Vault 双通道
💰
收款 Collection独立收款账户,HD 地址分配,KYT 后入账
📤
付款 Payout银行出款 + 链上 payout,三户扣款源可选
🔄
兑换 Exchange实时锁价,法币/稳定币互换,失败自动回滚
🏛️
虚拟账户 VA美元代收路由,附言匹配,超额/部分到账处理
🔔
Webhook订单状态变更实时推送,HMAC 签名校验,指数退避重试
架构原则:业务状态(payment schema)与账务分录(ledger schema)解耦;所有余额变更仅经 Ledger.Post 唯一入口;Partner API 路径与 Schema 以 OpenAPI YAML 为唯一事实来源(SSOT)。

环境与 Base URL

NeoLinks 提供 Sandbox 与 Production 两套环境。Sandbox 使用 stub 法币通道与 Anvil 本地链,可完整跑通 E2E 流程。

环境Base URL说明
Sandbox https://api.sandbox.neolinks.io/v1 测试环境,法币 stub 模式,链 ID 31337 (Anvil)
Production https://api.prod.neolinks.io/v1 生产环境,真实 VA/银行通道与主网/测试网链

认证与签名

Partner API 使用 API Key + HMAC-SHA256 签名双重鉴权。所有写操作须携带幂等键 Idempotency-Key。

请求头

Header类型说明
X-Api-Key必填 string Partner API Key,由运营后台分配
X-Signature必填 string HMAC-SHA256 签名,十六进制编码
X-Timestamp必填 string ISO8601 UTC 时间戳,与服务端偏移 ≤ 300 秒
Idempotency-Key写操作必填 uuid 幂等键,TTL 72 小时

签名算法

签名字符串格式:

Signature String
{timestamp}\n{METHOD}\n{path}\n{sha256(body)}
cURL 示例
curl -X POST "https://api.sandbox.neolinks.io/v1/acquiring/orders" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: pk_sandbox_xxx" \
  -H "X-Timestamp: 2026-06-22T08:00:00Z" \
  -H "X-Signature: a1b2c3..." \
  -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
  -d '{"merchant_order_id":"ord_001","amount":"100.00","currency":"USDC","payment_method":"crypto","chain_id":31337,"notify_url":"https://example.com/webhook"}'

通用响应格式

所有 API 响应均为 JSON,包含统一信封字段。成功时 code = 0,错误时 code 为字符串错误码。

Success Response
{
  "code": 0,
  "message": "ok",
  "data": { /* 业务对象 */ },
  "trace_id": "tr_abc123",
  "request_id": "req_xyz789"
}
Error Response
{
  "code": "INVALID_REQUEST",
  "message": "amount must be a positive decimal string",
  "trace_id": "tr_abc123",
  "request_id": "req_xyz789"
}

幂等与限流

幂等规则

字段唯一范围TTL
Idempotency-Keyper merchant72 小时
merchant_order_idper merchant永久
third_party_order_idper merchant(可选)永久

默认限流

维度限制
建单(POST)100 req/min/merchant
查询(GET)300 req/min/merchant

收单 Acquiring

收单模块支持平台内 Invoices/Transactions 与 Partner OpenAPI 双订单源。创建订单后系统自动分配稳定币 Vault 地址或法币虚拟账户,并通过 Webhook 推送状态变更。

订单状态机

状态说明
AWAITING_PAYMENT已分配地址/VA,等待付款
PAYMENT_DETECTED法币部分到账或累计不足额
KYT_PENDING链上到账,KYT 筛查中
COMPLETED足额到账且合规通过,订单完成
KYT_FAILEDKYT 拒绝
CLOSED商户或系统关单
POST /v1/acquiring/orders

创建收单订单。根据 payment_method 自动分配稳定币 Vault 地址或法币 VA 付款指引。

Request Body

参数类型说明
merchant_order_id必填 string 商户侧唯一订单号
amount必填 string 应付金额,十进制字符串,如 "100.00"
currency必填 string 币种,如 USDC、USD
payment_method必填 enum crypto 或 fiat
chain_idcrypto 必填 integer 链 ID,Sandbox 使用 31337 (Anvil)
notify_url可选 uri Webhook 回调地址
third_party_order_id可选 string 第三方平台订单号
metadata可选 object 自定义键值对,原样回传
Request — Crypto
{
  "merchant_order_id": "mch_ord_001",
  "amount": "100.00",
  "currency": "USDC",
  "payment_method": "crypto",
  "chain_id": 31337,
  "notify_url": "https://merchant.example.com/webhook"
}
Response 200
{
  "code": 0,
  "message": "ok",
  "data": {
    "id": "acq_ord_abc123",
    "merchant_order_id": "mch_ord_001",
    "status": "AWAITING_PAYMENT",
    "amount": "100.00",
    "currency": "USDC",
    "payment_rail": "contract",
    "pay_contract": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "order_ref": "0x1a2b3c...",
    "chain_id": 31337,
    "network": "anvil",
    "expires_at": "2026-06-23T08:00:00Z"
  },
  "trace_id": "tr_xxx",
  "request_id": "req_xxx"
}
GET /v1/acquiring/orders/{id}

查询单笔收单订单详情,含当前状态、已检测金额与 VA 付款指引。

Path Parameters

参数类型说明
id必填 string 收单订单 ID
POST /v1/acquiring/orders/{id}/close

关闭未完成的收单订单。已完成的订单不可关单。

虚拟账户 Virtual Account

法币收单通过虚拟账户(VA)实现美元代收。创建 payment_method: "fiat" 的收单订单后,系统自动分配路由银行账号,付款方通过银行转账完成支付,附言(payment_reference)用于自动匹配。

VA 付款指引字段

法币收单响应中的 va / fiat_payment 对象包含以下字段:

字段类型说明
bank_namestring收款银行名称
account_namestring账户户名
account_numberstring银行账号 / IBAN
swiftstringSWIFT/BIC 代码(跨境)
payment_referencestring付款附言,须原样填入银行转账备注
global_account_idstring全局 VA 账户 ID
Request — Fiat VA
{
  "merchant_order_id": "mch_fiat_001",
  "amount": "5000.00",
  "currency": "USD",
  "payment_method": "fiat",
  "notify_url": "https://merchant.example.com/webhook"
}
Response — VA Instruction
{
  "code": 0,
  "data": {
    "id": "acq_ord_fiat001",
    "status": "AWAITING_PAYMENT",
    "payment_rail": "fiat",
    "va": {
      "bank_name": "Community Federal Savings Bank",
      "account_name": "NeoLinks Payments LLC",
      "account_number": "****7890",
      "swift": "CMFGUS33",
      "payment_reference": "QX-ACQ-abc123",
      "global_account_id": "ga_usd_001"
    }
  }
}
部分到账与超额:法币 VA 支持部分到账(PAYMENT_DETECTED)与超额到账(settlement_status=OVERPAID)。Webhook 将分别推送 acquiring.order.payment_detected 与 acquiring.order.fiat_overpaid 事件。

收款 Collection

独立收款账户模块,适用于非收单场景的稳定币入账。创建收款单后分配 HD 子地址,链上确认 + KYT 通过后入账至收款账户(RECEIVE)。

POST /v1/collection/orders

创建收款单,分配链上收款地址。

Request Body

参数类型说明
amount必填string期望收款金额
currency必填string币种
reference_no可选string商户参考号
order_type可选string收款类型
GET /v1/collection/orders/{id}

查询收款单详情,含 pay_address、detected_amount 与当前状态。

付款 Payout

向受益人发起银行出款或链上 payout。扣款源可选收单清算户(ACQUIRING)、收款户(RECEIVE)或兑换交割户(EXCHANGE)。材料审核通过后由商户门户或 Partner API 执行。

POST /v1/payout/orders

Request Body

参数类型说明
debit_business_account必填enumACQUIRING | RECEIVE | EXCHANGE
amount必填string付款金额
currency必填string币种
beneficiary_name必填string受益人名称
beneficiary_account必填string受益人账号/地址
Request
{
  "debit_business_account": "ACQUIRING",
  "amount": "1000.00",
  "currency": "USDC",
  "beneficiary_name": "Acme Corp",
  "beneficiary_account": "0xRecipient..."
}

兑换 Exchange

实时锁价兑换,支持法币与稳定币互换。创建兑换单锁定汇率,确认后执行;失败自动回滚账务分录。

POST /v1/exchange/orders

创建兑换单并锁定汇率。

Request Body

参数类型说明
source_business_account必填string卖出方业务账户
source_currency必填string卖出币种
target_currency必填string买入币种
amount必填string卖出金额
POST /v1/exchange/orders/{id}/execute

执行已锁价的兑换单。须在锁价有效期内调用。

入金 Deposits

入金记录查询接口,用于 T+1 对账。包含链上入账与 VA 法币入账的统一视图。

GET /v1/deposits

分页查询入金列表。支持 page、page_size 参数。

GET /v1/deposits/{id}

查询单笔入金详情。

余额 Balances

按币种与业务账户汇总可用余额,只读接口。付款前建议调用以确保余额充足。

GET /v1/balances
Response 200
{
  "code": 0,
  "data": [
    {
      "currency": "USDC",
      "business_account": "ACQUIRING",
      "available": "12500.00"
    },
    {
      "currency": "USD",
      "business_account": "ACQUIRING",
      "available": "50000.00"
    }
  ]
}

稳定币收单

稳定币收单通过 Vault 智能合约接收链上 USDC/USDT 等代币。创建订单后返回 pay_contract(Vault 地址)与 order_ref(bytes32 订单引用),付款方调用 Vault.pay(orderRef, amount) 完成支付。

  • Scanner 实时监听链上 PaymentReceived 事件
  • 入账后触发 KYT 筛查,通过后状态流转至 COMPLETED
  • 资金归集至商户收单清算账户(ACQUIRING)
  • 本地开发使用 Anvil(chain_id=31337),生产环境按 configs/chains.yaml 配置

法币收单

法币收单通过虚拟账户(VA)路由实现。开发阶段使用 stub 模式模拟银行入账回调,生产环境对接真实 VA/银行通道 adapter。

  • 创建订单时 payment_method: "fiat",无需 chain_id
  • 响应包含完整 VA 付款指引(银行名、账号、附言)
  • VA Webhook 入账后自动匹配订单,支持部分/超额到账
  • 通道模式由环境变量 VA_WEBHOOK_* / BANK_PAYOUT_MODE 控制

保证金

收单业务可配置保证金要求。保证金不足时 API 返回 MARGIN_INSUFFICIENT(HTTP 403)。商户可通过商户门户或 Partner API 进行保证金充值(margin top-up)。

保证金充值通过账本分录模板 margin_topup 执行,资金从外部转入商户保证金子账户。详见商户门户「收单 → 保证金充值」页面。

KYT 合规

所有链上入账均触发 KYT(Know Your Transaction)筛查。KYT 为异步流程,订单状态先进入 KYT_PENDING,筛查完成后流转至 COMPLETED 或 KYT_FAILED。

  • KYT 供应商通过 adapter 端口接入,开发阶段使用 stub 模式
  • 拒绝时推送 acquiring.order.kyt_failed Webhook
  • AML 冻结由运营后台人工触发,优先级高于 Payment 操作

Webhook 事件

订单状态变更时,NeoLinks 向创建订单时指定的 notify_url 投递 JSON 事件。所有 Webhook 均经 Outbox 异步投递,支持指数退避重试。

事件列表

事件触发时机
acquiring.order.awaiting_payment已分配地址/VA
acquiring.order.payment_detected法币部分到账或累计不足额
acquiring.order.completed足额到账且合规通过
acquiring.order.fiat_overpaid法币超额到账
acquiring.order.crypto_overpaid稳定币超额到账
acquiring.order.kyt_failedKYT 拒绝
acquiring.order.closed关单
acquiring.account.deposit_credited收单清算户 VA 入账
collection.order.credited收款单入账完成
collection.order.kyt_failed收款单 KYT 拒绝
payout.order.completed付款成功
payout.order.failed付款失败
exchange.order.completed兑换完成
exchange.account.deposit_credited兑换户入金匹配入账
Webhook Payload
{
  "event": "acquiring.order.completed",
  "created_at": "2026-06-22T08:00:00Z",
  "data": {
    "id": "acq_ord_abc123",
    "merchant_order_id": "mch_ord_001",
    "status": "COMPLETED",
    "amount": "100.00",
    "currency": "USDC"
  }
}

签名验证

Webhook 请求携带以下 Header,接收方须验证签名以确保来源可信:

Header说明
X-Webhook-Signaturesha256=... HMAC 签名
X-Webhook-TimestampISO8601 UTC 时间戳

重试策略:1m → 5m → 30m → 2h → 8h。商户返回 HTTP 2xx 视为投递成功。

错误码

codeHTTP说明
0200成功
INVALID_REQUEST400参数错误
UNAUTHORIZED401签名/密钥错误
FORBIDDEN403无权限
MARGIN_INSUFFICIENT403保证金不足
NOT_FOUND404资源不存在
IDEMPOTENCY_CONFLICT409幂等键冲突且 body 不一致
ORDER_NOT_PAYABLE422订单状态不允许
KYT_REJECTED422KYT 拒绝
RATE_LIMITED429限流
INTERNAL_ERROR500内部错误

Sandbox 测试

Sandbox 环境提供完整的 stub 法币通道与 Anvil 本地链,可跑通收单/收款/付款/兑换全链路 E2E。

快速开始

  1. 联系销售获取 Sandbox API Key 与 Secret
  2. 阅读「认证与签名」章节,按 HMAC 规范构造请求头
  3. 创建 crypto 收单订单,使用 Anvil 测试账户向 Vault 地址转账
  4. 创建 fiat 收单订单,使用 stub VA 模拟入账回调
  5. 配置 Webhook 接收端点,验证签名与事件流转
Local E2E (Anvil)
# quantiex-platform 仓库
make up              # Postgres + Redis
make up-anvil        # 本地链 RPC :8545
make migrate         # 数据库迁移
make deploy-anvil    # 部署 Vault 合约
make smoke-anvil-chain  # 链上 E2E 冒烟

更新日志

版本日期变更
v1.1.02026-06新增 Collection / Payout / Exchange Partner API;法币超额 Webhook
v1.0.02026-05MVP-1 发布:Acquiring + Deposits + Balances + Webhook

联系方式

NeoLinks Payments

neolinks.io

商务合作

sales@neolinks.io

企业 API 接入与定制方案

技术支持

support@neolinks.io

集成问题与 Sandbox 支持

© 2026 NeoLinks. Partner API v1.1.0 · OpenAPI SSOT: docs/api/partner.openapi.yaml