Networks and endpoints
Base URLs
| Network | API base URL | WebSocket base URL |
|---|---|---|
| Mainnet | https://api-mainnet.n1.xyz | wss://api-mainnet.n1.xyz |
| Devnet | https://api-devnet.n1.xyz | wss://api-devnet.n1.xyz |
Develop against devnet first: it runs the same protocol version as mainnet ahead of each release, so it is where breaking changes appear first.
Schemas are served by each deployment, so they always match the version you are talking to:
| Resource | Path |
|---|---|
| Nord OpenAPI schema | /openapi.json |
| Proton OpenAPI schema | /proton/openapi.json |
| Action protobuf schema | /schema.proto |
| Exchange configuration | /info |
| WebSocket streams | /ws/{streams} |
The API references render the same OpenAPI schemas interactively.
Each network also needs a Solana RPC endpoint for deposits, which settle on Solana rather than on Nord: mainnet-beta for mainnet, devnet for devnet.
Identifiers, decimals, and scaling
GET /info returns the markets and tokens the deployment is running, and it is
the source of truth for every identifier you pass to the API:
{
"markets": [
{
"marketId": 0,
"symbol": "BTCUSD",
"priceDecimals": 1,
"sizeDecimals": 5,
"baseTokenId": 0,
"quoteTokenId": 0,
"mode": "clob",
"regime": "normal"
}
],
"tokens": [
{ "tokenId": 0, "symbol": "USDC", "decimals": 6, "mintAddr": "..." }
]
}
marketIdandtokenIdare the numeric identifiers used by actions and by most endpoints. Symbols likeBTCUSDare used by WebSocket streams.priceDecimalsandsizeDecimalsset the tick and lot precision of a market, and are the scale factors for prices and sizes on the wire: an action carriesprice × 10^priceDecimalsandsize × 10^sizeDecimalsas integers. Quote amounts are scaled bypriceDecimals + sizeDecimals.decimalson a token scales deposit, withdrawal, and transfer amounts.modeis the market's execution mode (clobor RFQ), which determines how orders are matched.
Do not hardcode IDs or decimals. Read /info at startup and refresh it after a
protocol release; markets and tokens are added over time and decimals can change
between deployments.
The TypeScript SDK reads /info during Nord.new and applies these scale
factors for you, so SDK calls take human-readable decimal prices and sizes.