The second is the easiest to miss, because nothing rejects until settlement.
A wallet whose key was exported from the Noise app is already registered and already approved,
and it holds whatever balance the app account holds. Call
GET /account/balance and confirm
registered is true, then continue at Orders. An app account with no
capital still needs funding: check marginFree, treating null as unreported rather than zero.Register
POST /account/register creates the exchange-side account for the calling wallet, which is identified by the credential rather than by a request body.
{ "status": "pending" } or { "status": "registered" }. Registration is asynchronous, so the first call returns pending because the exchange has not applied the record yet. It is also idempotent: an already-registered wallet returns registered and nothing is written.
Poll GET /account/balance and wait for registered to be true:
Approve collateral
GET /account/approval returns an unsigned transaction granting the clearing house an allowance to move the collateral token. The wallet broadcasts it.
Fund
Send USDC on Base to the wallet address. Use theexchange.collateralTokenAddress from GET /status as the token, because it is not always canonical Circle USDC. Do not assume the well-known address.
Size new orders against marginFree rather than availCash. availCash is the balance free to draw on and totalEquity includes open position value; marginFree is the amount actually available to commit to a new order. The two can differ by capital the exchange has already allocated to an open market, which is not currently published separately.
Verify
GET /account/orders before running a strategy.