OpenAPI Specification
openapi: 3.0.3
info:
title: SynFutures RWA Trading Cash API
version: v1
description: RESTful API for SynFutures tokenized stock (Real-World Asset) trading. Covers market data, portfolio, order placement (calldata build + One Click delegated send), cash and stock deposits/withdrawals, and One Click (1CT) delegation management. All /api/v1 endpoints require HMAC-SHA256 request authentication with an IP-whitelisted partner API key.
contact:
name: SynFutures
url: https://docs.synfutures.com/rwa-trading-apis/readme
x-logo:
url: https://www.synfutures.com/assets/trade_every_asset.png
servers:
- url: https://base-api.synfutures.com/rwa/trading
description: RWA Trading API (base path /api/v1)
security:
- ApiKeyAuth: []
ApiTimestamp: []
ApiNonce: []
ApiSignature: []
ApiChainId: []
ApiProduct: []
tags:
- name: Cash
description: Cash (USD) deposits and withdrawals
paths:
/api/v1/cash/deposits/calldata:
post:
operationId: buildCashDepositCalldata
tags:
- Cash
summary: Deposit calldata
requestBody:
$ref: '#/components/requestBodies/Generic'
responses:
'200':
$ref: '#/components/responses/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/deposits/send:
post:
operationId: sendCashDeposit
tags:
- Cash
summary: One Click deposit
requestBody:
$ref: '#/components/requestBodies/Generic'
responses:
'200':
$ref: '#/components/responses/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/deposits/tx:
post:
operationId: recordCashDepositTx
tags:
- Cash
summary: Record deposit tx
requestBody:
$ref: '#/components/requestBodies/Generic'
responses:
'200':
$ref: '#/components/responses/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/deposits:
get:
operationId: listCashDeposits
tags:
- Cash
summary: Deposit list
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/Limit'
responses:
'200':
$ref: '#/components/responses/PagedEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/deposits/{operationId}:
get:
operationId: getCashDeposit
tags:
- Cash
summary: Deposit detail
parameters:
- $ref: '#/components/parameters/OperationId'
responses:
'200':
$ref: '#/components/responses/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/withdrawals/calldata:
post:
operationId: buildCashWithdrawalCalldata
tags:
- Cash
summary: Withdraw calldata
requestBody:
$ref: '#/components/requestBodies/Generic'
responses:
'200':
$ref: '#/components/responses/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/withdrawals/send:
post:
operationId: sendCashWithdrawal
tags:
- Cash
summary: One Click withdraw
requestBody:
$ref: '#/components/requestBodies/Generic'
responses:
'200':
$ref: '#/components/responses/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/withdrawals/tx:
post:
operationId: recordCashWithdrawalTx
tags:
- Cash
summary: Record withdraw tx
requestBody:
$ref: '#/components/requestBodies/Generic'
responses:
'200':
$ref: '#/components/responses/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/withdrawals:
get:
operationId: listCashWithdrawals
tags:
- Cash
summary: Withdraw list
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/Limit'
responses:
'200':
$ref: '#/components/responses/PagedEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/cash/withdrawals/{operationId}:
get:
operationId: getCashWithdrawal
tags:
- Cash
summary: Withdraw detail
parameters:
- $ref: '#/components/parameters/OperationId'
responses:
'200':
$ref: '#/components/responses/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
components:
schemas:
Envelope:
type: object
description: All responses share this envelope.
properties:
code:
type: integer
description: 200 on success; error code otherwise.
example: 200
errMsg:
type: string
description: Empty on success; descriptive message on error.
data:
description: Response payload (shape varies per endpoint).
uuid:
type: string
nullable: true
description: Request/trace identifier (null when not applicable).
t:
type: integer
nullable: true
description: Server timestamp (null when not applicable).
PagedEnvelope:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
data:
type: object
properties:
total:
type: integer
description: Total matching records.
rows:
type: array
description: Current page of records.
items:
type: object
responses:
Unauthorized:
description: Authentication failed (invalid key, signature, drift, or empty IP whitelist)
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
PagedEnvelope:
description: Paged response envelope
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEnvelope'
Envelope:
description: Standard response envelope
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
parameters:
OperationId:
name: operationId
in: path
required: true
schema:
type: string
Page:
name: page
in: query
required: false
schema:
type: integer
default: 1
minimum: 1
Limit:
name: limit
in: query
required: false
schema:
type: integer
default: 10
minimum: 1
maximum: 100
requestBodies:
Generic:
required: true
content:
application/json:
schema:
type: object
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: Partner API key (must be active, unexpired, and IP-whitelisted).
ApiTimestamp:
type: apiKey
in: header
name: x-api-ts
description: Unix millisecond timestamp; must be within 45s drift tolerance.
ApiNonce:
type: apiKey
in: header
name: x-api-nonce
description: Unique replay-prevention nonce per key within the 45s window (UUID recommended).
ApiSignature:
type: apiKey
in: header
name: x-api-sign
description: HMAC-SHA256 signature over the canonical request, hex-encoded (case-insensitive).
ApiChainId:
type: apiKey
in: header
name: x-api-chain-id
description: Chain identifier (e.g. 8453 Base, 1 Ethereum, 143 Monad).
ApiProduct:
type: apiKey
in: header
name: x-api-p
description: Product type; use "Synfutures".