application/json with the same one-field shape, on every route:
Three of these deserve special handling in your client:
409means stop, not retry. Your intent already landed. Re-sending with the sameclientOrderIdwill keep answering409, and re-sending with a new one would place a second order. Read the account stream to see what actually rests.503on a money route means the command was not run. Nothing reached the venue, so the sameclientOrderIdmay be sent again afterRetry-After. The one exception is the unknown-outcome answer: an earlier command with that id may be resting at the venue, so read the account stream before deciding, and never mint a new id to get past it.423means the account is locked, not that the request was wrong. Surface it to the trader as a risk lock. Retrying in a loop just re-earns the same refusal.429tells you exactly how long to wait. HonorRetry-Afterrather than retrying tightly.
Origin header must be on the allowlist even when a
valid key is attached. A bearer excuses a missing Origin, never an untrusted one.