Skip to main content
Skip to main content

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.

AreaPathsWhat 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/ledgerBalance 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 At suffix (auctionEndsAt); durations are milliseconds with Ms (windowMs, acceptableForMs). The exception is the Deadline suffix (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: limit and cursor in, { items, hasMore, nextCursor } out. nextCursor is always present, and null when hasMore is 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 code and a human-readable message. Branch on code; 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.