SIGNATURE_INVALID | Closed, on hello | The signature does not verify, or the public key is not registered | Check that you sign the exact payload string you send, and that the key is registered. See Signing |
TIMESTAMP_OUT_OF_WINDOW | Open | The timestamp is more than 30 seconds from the server clock | Fix NTP. Reconnecting does not help |
UNAUTHENTICATED | Closed | A message arrived before the session was open | Send hello first and wait for welcome |
MALFORMED | Open | Not parseable, a required field missing, or fields that contradict each other: a MARKET order with a limitPrice, both quantity and notional or neither. Also a second hello on an open session, and a malformed frame sent before hello | Fix the message |
INVALID_ORDER | Open | Well formed and refused on its merits, with the reason in message: a duplicate externalRef, a buy your own cash cannot cover, a MARKET buy, an order by notional, Insufficient buying power, a sell your redemption balance or the redemption wallet cannot cover, a symbol your account does not trade (mistyped or not), or the broker’s own refusal in its words | A duplicate may be your own earlier order: look it up with get_order by externalRef. Otherwise fix the order, fund your cash or transfer the CETs, then send it again |
NOT_PERMITTED | Open | The key is registered as read-only: it may read and receive pushes, but not place_order, cancel_order or submit_crypto_funding | Trade with a key registered for trading |
INVALID_SYMBOL | Open | On place_order: a symbol your account trades that the broker no longer recognises; message names it. On get_redemption_address and get_redemption_balance: the symbol and chain are not ones you can trade, or (address only) the CET cannot be redeemed | Check it against get_symbols |
ORDER_NOT_FOUND | Open | No such order on the session’s account | Check the id. By externalRef, after an UNKNOWN: the order never reached the broker, and resending it is safe |
ORDER_NOT_CANCELLABLE | Open | The order’s state does not allow it: already filled or cancelled. message carries the broker’s words | Read the order |
UPSTREAM_UNAVAILABLE | Open | The broker could not be reached, or a buy’s cash or a sell’s redemption wallet could not be checked. The fate of an order sent with it is unknown. On hello: the key could not be checked at that moment. On submit_crypto_funding: the chain could not be read, or no answer came in time | Look the order up with get_order by externalRef before resending. On hello, send a new hello with a new nonce on the same socket. On submit_crypto_funding, send the same txHash again: it is never credited twice |
DEPOSIT_PENDING | Open | On submit_crypto_funding: the transaction is not on chain yet, or not final. Nothing was credited | Send the same txHash again later |
DEPOSIT_REFUSED | Open | On submit_crypto_funding: the deposit will not be credited as sent. message says why: crypto funding is not enabled on that chain, there is no USDC transfer from one of your wallets to Securitize’s, the transaction failed, or it was already credited to another account | Nothing to retry. See Fund your cash with crypto |
RATE_LIMITED | Open | The service is throttling requests | Retry after a pause |
INTERNAL | Open | A fault on Securitize’s side, not a problem with the request | Retry with backoff; if it persists, contact Securitize with the traceId |