POST /v1/orders
Authentication
| Header | Value |
|---|---|
X-Tradara-Api-Key | tdr_live_… (firm key) or user JWT bearer |
Content-Type | application/json |
Idempotency-Key | Recommended UUID. Replays within 24h return the original response. |
X-Order-Origin | Optional provenance label (e.g. bot-v2, terminal). |
Request body
Required
| Field | Type | Notes |
|---|---|---|
account_id | UUID | Account provisioned by the Prop Firm API. |
instrument_id | UUID | From Instrument Master. Firm keys cannot list instruments — store IDs at onboarding. |
side | enum | BUY or SELL. |
execution_type | enum | MARKET, LIMIT, STOP, STOP_LIMIT, TRAILING_STOP, TRAILING_STOP_LIMIT. |
quantity | decimal string | Positive. Contract count for futures. |
Conditional
| Field | Required when | Type |
|---|---|---|
limit_price | LIMIT, STOP_LIMIT, TRAILING_STOP_LIMIT | decimal string |
stop_price | STOP, STOP_LIMIT | decimal string |
trailing_amount | TRAILING_STOP, TRAILING_STOP_LIMIT | decimal string |
trailing_type | TRAILING_STOP, TRAILING_STOP_LIMIT | AMOUNT or PERCENTAGE |
expiration_date | time_in_force = GTD | ISO 8601 date |
Optional
| Field | Default | Notes |
|---|---|---|
time_in_force | DAY | See Time in force. |
client_order_id | — | Your own correlation ID. Unique per account recommended. |
group_id | — | Attach to existing OCO/OTO/OTOCO group. |
position_effect | inferred | OPEN, CLOSE, CLOSE_TODAY, CLOSE_YESTERDAY. |
display_quantity | full qty | Iceberg display size. |
contract_month | front month | Override for futures rollover scenarios. |
settlement_type | venue default | Venue-specific. |
strategy | — | Free-form strategy tag. |
notes | — | Free-form note, surfaced in journals. |
Examples
Market buy
curl -X POST https://api.tradara.com/v1/orders \
-H "X-Tradara-Api-Key: $TRADARA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"account_id": "'"$ACCOUNT_ID"'",
"instrument_id": "'"$INSTRUMENT_ID"'",
"side": "BUY",
"execution_type": "MARKET",
"quantity": "2",
"time_in_force": "DAY",
"client_order_id": "entry-2026-06-26-001"
}'
Limit sell, GTC
curl -X POST https://api.tradara.com/v1/orders \
-H "X-Tradara-Api-Key: $TRADARA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"account_id": "'"$ACCOUNT_ID"'",
"instrument_id": "'"$INSTRUMENT_ID"'",
"side": "SELL",
"execution_type": "LIMIT",
"quantity": "1",
"limit_price": "5325.50",
"time_in_force": "GTC"
}'
Stop-loss (stop-market)
curl -X POST https://api.tradara.com/v1/orders \
-H "X-Tradara-Api-Key: $TRADARA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"account_id": "'"$ACCOUNT_ID"'",
"instrument_id": "'"$INSTRUMENT_ID"'",
"side": "SELL",
"execution_type": "STOP",
"quantity": "2",
"stop_price": "5290.00"
}'
Trailing stop (percentage)
curl -X POST https://api.tradara.com/v1/orders \
-H "X-Tradara-Api-Key: $TRADARA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"account_id": "'"$ACCOUNT_ID"'",
"instrument_id": "'"$INSTRUMENT_ID"'",
"side": "SELL",
"execution_type": "TRAILING_STOP",
"quantity": "1",
"trailing_amount": "0.25",
"trailing_type": "PERCENTAGE"
}'
Response
201 Created
{
"order_id": "0a1c2e8a-9f2d-4d3c-b6f0-2b6c5b6e1f9a",
"account_id": "8f4a1d6e-2b1c-4e9a-9d3b-5e6c7a0d1f23",
"instrument_id": "f1a2b3c4-d5e6-7890-abcd-ef0123456789",
"side": "BUY",
"execution_type": "MARKET",
"quantity": "2",
"status": "PENDING",
"time_in_force": "DAY",
"client_order_id": "entry-2026-06-26-001",
"created_at": 1750953600123,
"updated_at": 1750953600123
}
orders.state transitions as they happen.
Idempotency
Send a UUID inIdempotency-Key to make retries safe:
- Same key + same body within 24h → original response replayed.
- Same key + different body →
409 Conflict. - No key + network retry → may create duplicate orders.
Errors
| Status | Meaning |
|---|---|
400 | Schema validation failed (missing required field, bad enum). |
403 | Firm key not entitled to this account. |
409 | Idempotency-Key reused with different body. |
422 | Pre-trade risk rejection (buying power, max position, halt active). |
502 | Downstream venue unreachable. |

