Place Single Order¶
Use this page for one Trading API V3 single-instrument order through the REST API.
Trading API V3 uses the intent-order payload model. Even for one order, the request body is still sent inside an orders array with exactly one item.
Nubra Trading API V3 supports the same main single-order families documented in the Python SDK V3 track. In REST, the same workflows are expressed directly through the payload shape, including market, limit, AMO-style, trigger, iceberg, timed, and good-till patterns.
Scope
Use this page only for one independent single-instrument order.
A single order:
- sets
refId - sets
qty - sets
side - sets
deliveryType - sets
isMultiLeg: false - does not send
legs
For several independent orders in one request, use Place Multi Order. For one strategy order made from legs, use Place Strategy Order.
Endpoint¶
Method: POST
Endpoint: sentinel/orders/create
Required Headers¶
Authorization: Bearer <session_token>
x-device-id: <device_id>
x-app-version: 0.4.5
x-device-os: sdk
Cookie: deviceId=<device_id>
Content-Type: application/json
All examples on this page assume the request is being sent to the UAT V3 REST flow with the headers above. Keep field names in camel case exactly as shown, such as refId, deliveryType, validityType, entryPrice, and isMultiLeg.
Basic Usage¶
curl --location 'https://uatapi.nubra.io/sentinel/orders/create' \
--header 'Authorization: Bearer {{session_token}}' \
--header 'x-device-id: {{x_device_id}}' \
--header 'x-app-version: 0.4.5' \
--header 'x-device-os: sdk' \
--header 'Cookie: deviceId={{x_device_id}}' \
--header 'Content-Type: application/json' \
--data '{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"stratTags": ["rest-api-v3", "basic-usage"]
}
]
}'
Successful create requests return HTTP 201 Created on this REST V3 flow.
Example Order Patterns¶
- market order
- limit order
- AMO order
- trigger or stoploss order (price based entry or exit)
- iceberg order
- good-till order
- timed entry or exit order (time based entry or exit)
Use the tabs below as the main single-order families. The detailed sections later on this page expand the same payload families further.
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "MARKET",
"validityType": "IOC",
"isMultiLeg": false,
"executionMode": "ENTRY",
"stratTags": ["rest-api-v3", "single-market"]
}
]
}
Use this pattern when the order should execute as a market order. In the current REST flow, MARKET orders should use validityType: "IOC" and should not send entryPrice.
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"stratTags": ["rest-api-v3", "single-limit"]
}
]
}
Use this pattern for a standard single-instrument limit order.
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"stratTags": ["rest-api-v3", "amo-limit"]
}
]
}
Use this pattern for a standard limit order placed after market hours. Trading API V3 does not require a separate AMO payload field.
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY_AND_EXIT",
"entryPrice": 127000,
"entryConfig": {
"triggers": {
"ltp": {
"atOrAbove": { "value": 127000 }
}
}
},
"exitConfig": {
"stoplossParams": {
"stoplossTriggerPrice": { "value": 126500 },
"stoplossLimitPrice": { "value": 126400 }
}
},
"stratTags": ["rest-api-v3", "trigger-stoploss"]
}
]
}
Use this family when the entry is trigger-based, when the order carries a stoploss exit, or when both are required.
{
"orders": [
{
"refId": 72329,
"qty": 1000,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"icebergInfo": {
"maxQtyPerLeg": 100
},
"stratTags": ["rest-api-v3", "iceberg"]
}
]
}
Use this family when the order quantity should be sliced using icebergInfo.
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "CNC",
"priceType": "LIMIT",
"validityType": "GTE",
"isMultiLeg": false,
"executionMode": "ENTRY",
"goodTillDate": "2026-10-31T15:10:00Z",
"entryPrice": 127000,
"stratTags": ["rest-api-v3", "gte"]
}
]
}
Use this pattern for future-dated good-till orders. For this validated flow, future-dated GTE should be paired with deliveryType: "CNC".
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"entryConfig": {
"entryTime": "2026-06-17T09:20:00Z"
},
"exitConfig": {
"exitTime": "2026-06-17T09:25:00Z"
},
"stratTags": ["rest-api-v3", "timed-entry-exit"]
}
]
}
Use this family when the order should become active at a scheduled time, exit at a scheduled time, or both.
Replace the sample entryTime and exitTime values before running the payload. They are illustrative placeholders and should be updated to valid times for your current trading session.
Iceberg Orders¶
Use icebergInfo when a larger order should be split into smaller visible slices. Choose either maxQtyPerLeg or numberOfLegs; do not send both in the same order.
{
"orders": [
{
"refId": 72329,
"qty": 1000,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"icebergInfo": {
"maxQtyPerLeg": 100
}
}
]
}
Use this pattern when you want each visible iceberg slice to be capped at a fixed quantity.
{
"orders": [
{
"refId": 72329,
"qty": 1000,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"icebergInfo": {
"numberOfLegs": 10
}
}
]
}
Use this pattern when you want Trading API V3 to split the total quantity across a fixed number of iceberg slices.
Trigger Order Patterns¶
- trailing stop-loss exit
- trigger entry above the current price
- trigger entry below the current price
- trigger entry with stop-loss exit
- target-only exit
- stop-loss and target exit
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY_AND_EXIT",
"entryPrice": 127000,
"exitConfig": {
"stoplossParams": {
"stoplossTriggerPrice": { "value": 126500 },
"stoplossLimitPrice": { "value": 126400 },
"stoplossTrailJump": 5
}
}
}
]
}
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"entryConfig": {
"triggers": {
"ltp": {
"atOrAbove": { "value": 127000 }
}
}
}
}
]
}
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"entryConfig": {
"triggers": {
"ltp": {
"atOrBelow": { "value": 126900 }
}
}
}
}
]
}
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY_AND_EXIT",
"entryPrice": 127000,
"entryConfig": {
"triggers": {
"ltp": {
"atOrAbove": { "value": 127000 }
}
}
},
"exitConfig": {
"stoplossParams": {
"stoplossTriggerPrice": { "value": 126500 },
"stoplossLimitPrice": { "value": 126400 }
}
}
}
]
}
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY_AND_EXIT",
"entryPrice": 127000,
"exitConfig": {
"targetParams": {
"targetProfitTriggerPrice": { "value": 127500 },
"targetProfitLimitPrice": { "value": 127400 }
}
}
}
]
}
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY_AND_EXIT",
"entryPrice": 127000,
"exitConfig": {
"stoplossParams": {
"stoplossTriggerPrice": { "value": 126500 },
"stoplossLimitPrice": { "value": 126400 }
},
"targetParams": {
"targetProfitTriggerPrice": { "value": 127500 },
"targetProfitLimitPrice": { "value": 127400 }
}
}
}
]
}
Timed Entry / Exit Patterns¶
- timed entry
- timed exit
- timed entry with timed exit
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"entryConfig": {
"entryTime": "2026-06-17T09:20:00Z"
}
}
]
}
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY_AND_EXIT",
"entryPrice": 127000,
"exitConfig": {
"exitTime": "2026-06-17T09:25:00Z"
}
}
]
}
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"isMultiLeg": false,
"executionMode": "ENTRY",
"entryPrice": 127000,
"entryConfig": {
"entryTime": "2026-06-17T09:20:00Z"
},
"exitConfig": {
"exitTime": "2026-06-17T09:25:00Z"
}
}
]
}
GTE Patterns¶
Use validityType: "GTE" for good-till orders.
- good-till limit order
- good-till order with price-based entry trigger
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "CNC",
"priceType": "LIMIT",
"validityType": "GTE",
"isMultiLeg": false,
"executionMode": "ENTRY",
"goodTillDate": "2026-10-31T15:10:00Z",
"entryPrice": 127000
}
]
}
{
"orders": [
{
"refId": 72329,
"qty": 1,
"side": "BUY",
"deliveryType": "CNC",
"priceType": "LIMIT",
"validityType": "GTE",
"isMultiLeg": false,
"executionMode": "ENTRY",
"goodTillDate": "2026-10-31T15:10:00Z",
"entryPrice": 127000,
"entryConfig": {
"triggers": {
"ltp": {
"atOrAbove": { "value": 127000 }
}
}
}
}
]
}
Execution Modes¶
| Value | Use |
|---|---|
ENTRY |
Entry-only order without managed exit controls |
ENTRY_AND_EXIT |
Entry order with target, stop-loss, trailing stop-loss, timed exit, or a combination of these |
EXIT |
Exit-only modification or exit-only workflow where the order is meant to manage the exit leg or exit controls |
Single Order Fields¶
| Field | Type | Required | Description |
|---|---|---|---|
orders |
array | Yes | Wrapper array. For this page, send exactly one order item |
orders[].refId |
int | Yes | Instrument reference id |
orders[].qty |
int | Yes | Order quantity |
orders[].side |
enum | Yes | BUY or SELL |
orders[].deliveryType |
enum | Yes | IDAY or CNC |
orders[].priceType |
enum | Yes | LIMIT or MARKET |
orders[].validityType |
enum | Yes | DAY, IOC, or GTE depending on the order family |
orders[].isMultiLeg |
boolean | Yes | Must be false for independent single orders |
orders[].executionMode |
enum | Yes | ENTRY or ENTRY_AND_EXIT depending on the payload |
orders[].entryPrice |
int | Conditional | Required for LIMIT orders. Omit for MARKET orders |
orders[].goodTillDate |
string | Conditional | Required for GTE orders |
orders[].entryConfig |
object | Conditional | Entry trigger or entry-time configuration |
orders[].exitConfig |
object | Conditional | Stoploss, target, exit-time, or other exit controls |
orders[].icebergInfo |
object | Conditional | Iceberg slicing configuration |
orders[].stratTags |
array | Optional | Client-defined tags for grouping and traceability |
Order Condition Fields¶
| Field | Type | Description |
|---|---|---|
entryConfig.triggers.ltp.atOrAbove.value |
int | Entry trigger above a price |
entryConfig.triggers.ltp.atOrBelow.value |
int | Entry trigger below a price |
entryConfig.entryTime |
string | Scheduled entry time in ISO format |
exitConfig.exitTime |
string | Scheduled exit time in ISO format |
exitConfig.stoplossParams.stoplossTriggerPrice.value |
int | Stop-loss trigger price |
exitConfig.stoplossParams.stoplossLimitPrice.value |
int | Stop-loss limit price |
exitConfig.stoplossParams.stoplossTrailJump |
int | Trailing stop-loss jump |
exitConfig.targetParams.targetProfitTriggerPrice.value |
int | Target trigger price |
exitConfig.targetParams.targetProfitLimitPrice.value |
int | Target limit price |
Response Behaviour Notes¶
- successful create requests return HTTP
201 Created - good-till orders are returned under the
gttbucket inGET sentinel/orders - the returned order object may normalize
executionMode goodTillDatemay need to be confirmed throughGET sentinel/ordersinstead of relying only on the create-response echoicebergInfomay not be echoed back identically for every iceberg variant- for target exits, keep
targetProfitTriggerPricegreater than or equal totargetProfitLimitPrice
Order Response Fields¶
| Field | Meaning |
|---|---|
intentOrderId |
Trading API V3 order id used for modify, cancel, and tracking |
status |
Current order state such as OPEN, CANCELLED, or GTE |
intentOrderType |
Normalized response family such as REGULAR, TRIGGER, or FLEXI |
orderQty |
Final order quantity accepted for the item |
orderPrice |
Final normalized entry price |
ltp |
Market price snapshot attached to the response |
refData |
Instrument metadata returned alongside the order |
timestamps |
Lifecycle timestamps such as create and send-to-exchange times |
Response Shape¶
{
"message": "order creation request pushed successfully",
"orders": [
{
"intentOrderId": 9946,
"exchange": "NSE",
"status": "OPEN",
"isMulti": false,
"legs": null,
"refId": 72329,
"refData": {
"refId": 72329,
"exchange": "NSE",
"asset": "ICICIBANK",
"stockName": "ICICIBANK",
"displayName": "ICICIBANK",
"lotSize": 1,
"tickSize": 10
},
"filledQty": 0,
"orderQty": 1,
"deliveryType": "IDAY",
"priceType": "LIMIT",
"validityType": "DAY",
"executionMode": "ENTRY",
"stratTags": ["rest-api-v3", "basic-usage"],
"ltp": 133360,
"orderPrice": 127000,
"timestamps": {
"intentCreatedAt": "2026-06-15T08:27:31.191134998Z",
"sentToColoAt": "2026-06-15T08:27:31.19804133Z"
},
"intentOrderType": "REGULAR",
"side": "BUY"
}
]
}
Important Rules¶
MARKETorders were accepted in validation whenentryPricewas omitted andvalidityTypewas set toIOC.- Future-dated
GTEorders should usedeliveryType: "CNC". An intradayGTEorder was rejected with the message:Intraday orders cannot have an expiry beyond today. Use Delivery (CNC) instead. - Trigger-based and timed payloads are normalized in the response model. For example, a trigger plus stoploss request may come back with
intentOrderType: "TRIGGER"and a normalizedexitConfigarray. - Use hyphenated or plain tags in
stratTags. Avoid underscores in tag names such asabc_def; prefer names such asabc-def.