{ "availableBalance": "1500.25", "lockedBalance": "200" }JSON.parse has returned a JSON number, precision is already lost. Use a decimal library: decimal.js in JavaScript, Decimal in Python, BigDecimal in Java.1500.250000000000000000 is sent as "1500.25", and zero is sent as "0", never "0.000000000000000000". Two consequences:"1.5" !== "1.50", but they are the same amount. Always compare through your decimal type."0.000000000000000001" survives a round trip exactly. It just is not padded."0.001", "0.0010" and "0.00100000" are all accepted and identical.1e-18 and +5 are both rejected.leverage on futures orders is a plain JSON integer. It is the only non-string numeric on an order object.pending.<tokenId>.pendingAmountBaseUnits on GET /v1/wallets/balance is in base units (satoshi, wei), not a human decimal like everything else. Convert it using the asset's decimals before you show it to anyone.2026-08-18T09:20:43.000Z.X-MG-TIMESTAMP header: Unix time in milliseconds.INVALID_TIMESTAMP errors.BASE-QUOTE, uppercase, hyphen-separated: BTC-USDT, ETH-USDT. Lowercase input is accepted on order placement and uppercased for you, but match on the uppercase form.POST and DELETE requires an Idempotency-Key header. Any unique string works, and a UUID is the obvious choice.409 IDEMPOTENCY_IN_PROGRESS. Wait briefly and try again.404, never 403 and never their data. The API will not confirm that someone else's id exists.| Endpoint | Shape | Watch out for |
|---|---|---|
GET /v1/wallets/balance | Object with balances array and pending object | pending is keyed by tokenId as a string key, not an array |
GET /v1/transfers/balances | Object keyed by coin ticker | Slot keys are lowercase (spot, asset, future) while walletType elsewhere is uppercase |
GET /v1/orders | A bare JSON array | Not wrapped in an object. No total, page or hasMore |
GET /v1/futures/orders | A bare JSON array | Each element carries a fills array |
| Everything else | Object |
rejectReason and venueCode are added only to orders whose status is REJECTED. On every other order the keys are missing entirely. Check for presence, not for null.413 PAYLOAD_TOO_LARGE.