RFQ REST API
The REST API carries every client-initiated action: authentication, RFQ submission and acceptance, maker quoting, and balance and funding operations. Reads are available over REST too; for live updates, pair it with the WebSocket API.
Endpoint-level documentation lives in the interactive REST reference, rendered from the OpenAPI 3.1 spec at /api/rfq-openapi.yaml.
Surface
All paths are under https://rfq-api.silhouette.exchange/v1. Private endpoints require HMAC-signed requests.
| Area | Paths | What it covers |
|---|---|---|
| Auth | /v1/auth/* | SIWE login challenge, API key minting, listing, and revocation |
| Instruments | /v1/rfq/instruments*, /v1/rfq/tokens* | Public instrument and token metadata, including top-of-book |
| RFQs (taker) | /v1/rfq/requests* | Submit, read, cancel, list quotes on, and accept an RFQ |
| Maker | /v1/rfq/maker/* | Open RFQs for approved instruments, quote submission and cancellation |
| Balances | /v1/rfq/balances, /v1/rfq/ledger | Balance state and the append-only ledger |
| Funding | /v1/rfq/funding, /v1/rfq/deposits*, /v1/rfq/withdrawals* | Funding details, deposits, and withdrawals |
Conventions
- Identifiers are opaque, type-prefixed strings (
rfq_,qt_,dep_,wd_). Store and return them verbatim; never parse them. - Amounts are exact decimal strings in human-readable units, never floating point.
- Instants are Unix milliseconds with an
Atsuffix (auctionEndsAt); durations are milliseconds withMs(windowMs,acceptableForMs). The exception is theDeadlinesuffix (settlementDeadline,deliveryDeadline), which carries Unix seconds: these are on-chain-native values relayed verbatim, so they stay in the unit the chain reads. - Lists are cursor-paginated:
limitandcursorin,{ items, hasMore, nextCursor }out.nextCursoris always present, and null whenhasMoreis false. - Mutating submissions carry a client-generated
idempotencyKey(UUID). A replay under the same key returns the originally created resource instead of executing again. - Errors carry a stable machine-readable
codeand a human-readablemessage. Branch oncode; the set grows additively, so treat an unknown code as a generic failure of its class.
Generating clients
The OpenAPI Generator tool can generate strongly-typed client SDKs from the REST spec in many languages, including TypeScript, Python, Java, Go, and Rust.
# Install the OpenAPI Generator CLI
npm install @openapitools/openapi-generator-cli -g
# Generate a TypeScript Axios client
openapi-generator-cli generate \
-i https://docs.silhouette.exchange/api/rfq-openapi.yaml \
-g typescript-axios \
-o ./generated-client
# Generate a Python client
openapi-generator-cli generate \
-i https://docs.silhouette.exchange/api/rfq-openapi.yaml \
-g python \
-o ./generated-client
See the OpenAPI Generator generators list for all supported languages.