Use idempotency keys
Network errors can leave you unsure whether an order was placed. Include an Idempotency-Key header on everyPOST /orders request so you can safely retry without risking duplicate orders.
Idempotency key support for order placement is currently under development. We’ll update this guide when it’s available.
Listen to webhooks, don’t poll in a loop
Polling the order status endpoint in a tight loop wastes resources and may hit rate limits. Set up webhooks for real-time updates and only poll as a fallback for reconciliation.Check balances before placing orders
Verify that the account has sufficient cash (for buys) or units (for sells) before submitting the order. This avoids unnecessaryinsufficient_funds and insufficient_units errors and gives you a chance to surface helpful messages to your users.
Handle all terminal states
Your integration should handle bothsettled and cancelled as terminal states. Don’t assume every order will settle — always implement a path for cancellations, including system-initiated ones.
Store order IDs
Persist the order ID returned from the place order call. You’ll need it to poll for status updates or correlate webhook events.Distinguish buy and sell semantics
Buy orders usecash_amount (how much to invest), while sell orders use quantity (how many units to sell). Sending the wrong field for the order side will result in a validation error. Double-check that your integration uses the right field based on the side.