First order in minutes

Place a signed Pro spot order with a known HMAC fixture.

Open Get API keys. Restrict by IP when you can.

Run the known-answer fixture before you hit production.

GET /v2/trading/market-config

Public. Use the returned symbol, min/max, and precision. Sample: get-markets.

GET /v2/trading/tickers and GET /v2/trading/order-book. Still public.

Spot orders debit Pro balances, not Simple Wallet pockets. Move funds first:

POST /v1/trading/wallet/deposit

Required body: fromPocketId, amount, currency (strings). End-user funds: send X-SUBACCOUNT-ID. This operation documents 403 (invalid credentials) and 404 (wallet not found), not 412.

Reverse path: POST /v1/trading/wallet/withdraw (amount, currency, optional toPocketId) — next step after the fill.

POST /v1/trading/order

Sign nonce:path: plus the exact compact JSON bytes on the wire (JSON.stringify with no spaces). Pro symbols use a slash (BTC/EUR), not MCP BTC-EUR. Compact body:

{"side":"buy","symbol":"BTC/EUR","price":"50000","amount":"0.01","orderType":"limit"}

On this operation, HTTP 412 means price or amount is outside the market min/max from GET /v2/trading/market-config. The snapshot does not document 417 here. Wallet 412 (pocket funds) is a different API.

Sample: trading-spot-samples REST trading.

GET /v1/trading/order/{id} or subscribe to my-orders on the Pro WebSocket.

After the fill, move Pro balances back to a Wallet pocket:

POST /v1/trading/wallet/withdraw

Body: amount, currency (required); toPocketId when you target a pocket. Same 403 / 404 as deposit. This is not an on-chain withdrawal.

Wallet → Pro → order → Pro → Wallet is the documented conversion path. Details also sit in the Pro REST Funding section (deposit, withdraw).

Amounts are strings. Use . for decimals.

Optional: stream fills on wss://ws.bit2me.com/v1/trading after WsAuth.