Skip to main content
The Trader API is the programmatic interface to the Noise Exchange, for market makers, bots, and anyone who would rather trade from code than from the app. It is a self-custody API. Every order is signed by the wallet that holds the funds, and Noise holds no key capable of trading on a trader’s behalf. A Noise API credential identifies a wallet and rate-limits it; on its own it cannot open a position or move money.

Requirements

1

A self-held signing key

An EOA on Base whose private key is available to the client for signing. See Choosing a wallet, which covers exporting the key for a Noise app wallet.
2

An API credential

Sign a one-off attestation with that wallet to mint an API key and secret. See Authentication.
3

An exchange account with funds

Register the wallet, approve collateral, and fund it. See Getting Tradeable.
From there, the remaining guides cover orders and streams.

Base URL and environments

Every route is under the base path /api/trader/v1, and the WebSocket is at /ws. Hostnames are published with each deployment. The development deployment is the sandbox: it issues real API credentials against test funds, which allows an integration to be exercised end to end before capital is at risk. Start there. The sandbox runs against a testnet, so its chainId and contract addresses differ from production. Take both from GET /status on the deployment being targeted; the chain IDs in the examples below are illustrative. Each deployment also serves its own live reference. Both sit at the host root, outside the /api/trader/v1 prefix: Those are generated from the same specification that serves the API, so where these guides and the explorer ever disagree, the explorer is right.

Read the deployment before signing

GET /status publishes the chain IDs and contract addresses that signatures commit to, plus the live rate-limit table. Read it at startup rather than hardcoding the values. A signature built against a stale clearing-house address is rejected, and the collateral token is not always canonical Circle USDC.
All market data and status routes are public. Everything else needs a credential, except key minting and rotation, which are authorized by the wallet signature itself.

Conventions

  • All monetary and quantity values are decimal strings, in both requests and responses, never JSON numbers. Parse them with a decimal library, not floating-point arithmetic.
  • GET /account/orders and GET /account/trades use cursor pagination. Pass before=<cursor> and read nextCursor, which is null on the last page. There are no offsets: new fills insert at the head, so an offset would skip or repeat rows. Other list routes return a single unpaginated response and carry no nextCursor.
  • Timestamp units vary by field, so check the field rather than assuming one convention. In Unix seconds: x-noise-timestamp, the attestation timestamp, an order’s expiry (in both directions, matching what was signed), and the x-ratelimit-reset header. In epoch milliseconds: serverTime on GET /status and on system:heartbeat, and price-point timestamps. Do not compare across the two without converting.
  • The API uses the internal names for the two prices: midPrice is what the app calls market price, and markPrice is what it calls relevance. See How It Works.

Endpoints at a glance

All paths are relative to /api/trader/v1. Public routes need no credential, Attestation routes are authorized by a wallet signature instead of a key, and Key routes need signed request headers.

Terms

These guides describe the API contract. Nothing here is trading, investment, or tax advice, and running a bot against a live market risks real capital.