Skip to main content

Overview

SX Bet runs a full testnet environment (called Toronto) that mirrors mainnet. Use testnet to develop and test your integration without risking real funds, then switch to mainnet by updating a few configuration values.

Testnet setup

1

Create a testnet account

Sign up at toronto.sx.bet and export your private key from the assets page, the same way you would on mainnet.
2

Deploy and fund a proxy wallet

Every order settles from a proxy wallet, and a deployed proxy is mandatory before your first order. Then you must transfer USDC to the proxy wallet. The simplest way to do this is through the toronto.sx.bet UI, which does both for you. You can also do it programmatically with POST /user/deploy-proxy and POST /user/transfer-to-proxy.
3

Get testnet funds

Open a support chat on sx.bet to receive testnet USDC.
4

Get your API key

Go to your account page on toronto.sx.bet and generate an API key from the API section. It is shown once, so copy it immediately. Testnet keys are network-specific and won’t work on mainnet. See API keys.

Configuration reference

Everything that differs between testnet and mainnet:

Switching to mainnet checklist

When you’re ready to go live:
  • Update your config to use mainnet values
  • Use your mainnet private key and API key — testnet keys won’t work on mainnet. See API keys
  • Deploy a mainnet proxy wallet and fund it with USDC. A proxy deployed on Toronto does not exist on mainnet
  • Confirm your order signing domain uses chainId and activeAsset.escrowAddress from /metadata/obv3. See EIP-712 order signing
  • Size orders against limits.orderSizeMinimumBaseUnits — the mainnet minimum is five times the testnet one
  • Round odds with oddsLadderStepSize from metadata. See Odds rounding
  • Point your realtime client at the mainnet WebSocket URL. See Initialization → Connect
  • Place one minimum-size order and cancel it before scaling up

Common pitfalls

Wrong chain ID in signatures

If orders come back with Invalid OBv3 order EIP-712 signature, check that your signing domain’s chainId matches the network you’re targeting. Testnet is 79479957, mainnet is 4162.

Wrong Escrow address

activeAsset.escrowAddress is the EIP-712 domain’s verifyingContract and differs per environment. The value in the generated Swagger example matches neither environment — read it from GET /metadata/obv3.

Wrong token addresses

USDC has different contract addresses on each network, and baseToken is a signed field of the order. Using a testnet token address on mainnet (or vice versa) means the order you signed is not the order the exchange will accept.

Order size below the mainnet minimum

Testnet accepts 1 USDC orders; mainnet requires 5. An integration sized against a testnet constant has every order rejected with TOTAL_BET_SIZE_TOO_LOW. The error body carries the applicable minimum.

No proxy on the new network

Proxy wallets are per-environment. A first mainnet order without a deployed proxy returns PROXY_NOT_DEPLOYED.

Testnet API key on mainnet

API keys are network-specific. Generate a separate key for each environment.

References →

Full list of addresses, URLs, and chain IDs.

Exchange metadata →

The runtime config every integration reads at startup.

Funding →

Move USDC into your proxy on either network.

Quickstart →

End-to-end guide from setup to first order.
Last modified on August 11, 2026