Skip to main content

Idempotency

Senticore guarantees idempotent order placement through client-controlled identifiers.

How it works

Every place-order request accepts a clientOrderId. The server stores the (account, clientOrderId) mapping. Re-submission of the same pair returns the existing order rather than creating a duplicate.

const order = await client.placeOrder({
market: 'BTC-USDC',
side: 'buy',
price: '60000',
quantity: '0.01',
clientOrderId: 'my-strategy-12345',
});

Retention

StateRetention
Active orderUntil terminal state
Terminal order7 days for reconciliation
Historical fillStandard account history retention

After retention, the same key can be reused by the client.

Best practices

  • Generate clientOrderId deterministically from your internal order id.
  • Use UUID v4 if no deterministic source exists.
  • Never reuse a key for a different intended order.
  • Treat idempotency conflict as "already exists, fetch state".
  • For cancel and replace, target the original clientOrderId.

Protocol equivalents

SurfaceEquivalent
HTTPclientOrderId or X-Client-Order-Id
FIXClOrdID tag 11
Binaryclient_order_id field