Download OpenAPI specification:Download
Download Postman Collection:Download
Cloud Rest API allows the developer to create a custom trading application for Web or Mobile communicating with ODIN Order Management System (OMS). This REST based API allows user to develop the following functionalities for Trading Application / Portal.Cloud Rest API is a set of REST APIs that provide the platform along with required data to build a Trading Platform, the API specifications is used for communicating with ODIN API Gateway. API specifications are based on the REST protocol that covers the functionalities which are need to develop a trading application like Login / Logout, Order Management (Place Order, Modify Order, Cancel order), Reports like Order Book, Trade Book, Position, Holding & Limit, etc. The REST API supports JSON based request and responses along with data compression.
Basic Flow to Implement the APIs:
STEP 1:Make a Login API call using login credential to obtain the access token.
STEP 2: Use access token obtained from Login API in all the subsequent API calls.
STEP 3: Setting obtained access token and content-type is shown below.
Header:
Content-Type: application/json
Authorization: Bearer eyJ1c2VySUQiOiJSVVBFU0giLCJpYXQiOjE1NTIxMjIwOTEsImV4cCI6MTU1MjIwODQ5MX0
All GET and DELETE request parameters go as query parameters, and POST and PUT request parameters as json (application/json) parameters, responses from the API are always JSON. Any non-alphanumeric character should be URL encoded in query string and path parameters.
Successful Request
All responses from the API server are in JSON format with the content-type application/json unless explicitly stated otherwise. A successful 200 OK response always has a JSON response body with a status as success. The data key contains the full response payload.
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"code": "",
"message": "",
"data": "{}"
}
HTTP/1.1 500 Server error
Content-Type: application/json
{
"status": "error",
"code": "",
"message": "",
"errors": "[]"
}
The HTTP Status Codes used by the RESTful API.
HTTP Error Code | Description |
400 | Bad Request - Missing or bad request parameters or values. Error message will indicate which one and why. |
401 | Unauthorized - The access token provided is expired, revoked, malformed, or invalid. Client should refresh relogin and then try again. |
404 | Not Found - Request resource was not found. |
405 | Method Not Allowed - Request method (GET, POST etc.) is not allowed on the requested endpoint |
500 | Internal Server Error - API is not working as expected. The request is probably valid but needs to be requested again later. |
503 | Service Unavailable - The API endpoint is down. |
Kindly use below scrip master API for ODIN Scrip master :
https://odinscripmaster.s3.ap-south-1.amazonaws.com/scripfiles/NSE_EQ.json
replace exchange name, like NSE_FO.json, etc...with the list below.
Exchange Segment | Code |
NSE Equity | NSE_EQ |
NSE FNO | NSE_FO |
BSE Equity | BSE_EQ |
BSE FNO | BSE_FO |
MCX FNO | MCX_FO |
NCDEX FNO | NCDEX_FO |
MSE CURRENCY | MSE_CUR |
NSE CURRENCY | NSE_CUR |
BSE CURRENCY | BSE_CUR |
BSE COMMODITY | BSE_COMM |
NSE COMMODITY | NSE_COMM |
This collection of API's would help in user authentication flow including password/MPIN validation, forget & reset etc.
This API needs to be used for signing-in to the application using login
credentials. A successful sign-in would return an ‘access token’ and a
'broadcast_access_token' in the response.
'access_token' needs to
be included in all subsequent API invocations as part of http header
'Authorization' token.
'broadcast_access_token' would be required
for establishing a connection with the feed endpoint ('broadCastSocket'
received in the response). Kindly refer Price
Feed API for further details.
The response will also
have the details like exchanges allowed, product types allowed and other
key information required for trading.
login_type | password | second_auth_type | second_auth |
PASSWORD | password | REGISTER | Not Required |
TOKEN | register_token | OTP/TOTP/FINGERPRINT | OTP value/TOTP value/Registered UDID |
PASSWORD | password | OTP/TOTP/FINGERPRINT | OTP value/TOTP value/Registered UDID |
MPIN | MPIN Registered | OTP/TOTP/FINGERPRINT | OTP value/TOTP value/Registered UDID |
TP_TOKEN | SSO TOKEN | Not Required | Not Required |
To get second factor authentication details of user, "REGISTER" can be used in second_auth_type field, which validates password field and return register_token that can be used as "TOKEN" login type with second factor after registration.
Content-Type | string Example: application/json |
x-api-key | string Example: {{x-api-key}} |
user_id required | string User Id (UCC) |
login_type | string Default: "PASSWORD" Enum: "PASSWORD" "MPIN" "FINGERPRINT" "TP_TOKEN" Login type, whether user is login with password, MPIN, fingerprint or SSO token and respectively need to pass value in password field. |
password required | string Password/MPIN/UDID/SSO-Token to validate |
second_auth_type | string Enum: "OTP" "TOTP" "FINGERPRINT" "REGISTER" Second factor authentication type, and need to pass value in second_auth field. |
second_auth | string Two factor authentication credentials |
api_key required | string API key provided by 63moons |
source required | string Enum: "WEBAPI" "MOBILEAPI" Login source of user |
UDID | string Mobile UDID |
version | string Android application version |
iosversion | string iOS application version |
build_version | string Internal version common for both android and ios |
{- "user_id": "{{user_id}}",
- "login_type": "PASSWORD",
- "password": "{{password}}",
- "second_auth_type": "TOTP",
- "second_auth": "222396",
- "api_key": "{{api_key}}",
- "source": "{{source}}",
- "UDID": "a1b23cd4e5f6g78h",
- "version": "2.0.0",
- "iosversion": "",
- "build_version": "22.11.01"
}
{- "status": "success",
- "code": "s-101",
- "message": "User logged in Successfully.",
- "data": {
- "register_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJDdXN0b21lcklkIjoiMTQwNCIsInVzZXJJZCI6IkFQSVRFU1QiLCJncm91cElkIjoiSE8iLCJ1ZGlkIjoiYTFiMjNjZDRlNWY2Zzc4aCIsInNvdXJjZSI6Ik1PQklMRUFQSSIsIm9jVG9rZW4iOiIweDAxNDUzOTg0RDlCMzdEQTAyNzVGRDhCOERGM0ZCMiIsImV4cCI6MTY2MzY4NjAyMSwiaWF0IjoxNjYzNjg1MTIxfQ.kNSl7ZNuNetTg0qhcnk24jMGm193P_M8WQtE4kOPnDQ",
- "ptnType": "TOTP_OPT",
- "mpin_enabled": true,
- "fingerprint_enabled": true,
- "totp_enabled": false
}
}
This call would logout the user from the system.
Authorization | string Example: {{access_token}} |
Content-Type | string Example: application/json |
x-api-key | string Example: {{x-api-key}} |
{- "status": "success",
- "code": "s-101",
- "message": "Successfully Logged out."
}
This call would validate the access token.
Authorization | string Example: {{access_token}} |
x-api-key | string Example: {{x-api-key}} |
{- "status": "success",
- "code": "s-101",
- "message": "Session verified.",
- "data": "{\"status\":\"false\",\"message\":\"TRUE\",\"dropped\":\"true\"}"
}
This API can be used to retrieve the latest balance with broker for allowed segments.
{- "status": "success",
- "code": "s-101",
- "message": "Success message",
- "data": {
- "equity": {
- "id": 1,
- "name": "Equities",
- "net_available": 24966.45,
- "total_available": 24966.45,
- "total_utilised": 2496,
- "total_withdrawable": 22006,
- "net_payin_payout": 21000,
- "available": {
- "cash": 21000,
- "collateral": 0,
- "credit_for_sale": 0,
- "option_credit_for_sale": 0
}, - "utilised": {
- "limit": 21000,
- "pnl_realised": 0,
- "pnl_unrealised": 0,
- "option_premium": 0
}
}, - "commodity": {
- "id": 1,
- "name": "Commodity",
- "net_available": 24966.45,
- "total_available": 24966.45,
- "total_utilised": 2496,
- "total_withdrawable": 22006,
- "net_payin_payout": 21000,
- "available": {
- "cash": 21000,
- "collateral": 0,
- "credit_for_sale": 0,
- "option_credit_for_sale": 0
}, - "utilised": {
- "limit": 21000,
- "pnl_realised": 0,
- "pnl_unrealised": 0,
- "option_premium": 0
}
}, - "currency": {
- "id": 1,
- "name": "Currency",
- "net_available": 24966.45,
- "total_available": 24966.45,
- "total_utilised": 2496,
- "total_withdrawable": 22006,
- "net_payin_payout": 21000,
- "available": {
- "cash": 21000,
- "collateral": 0,
- "credit_for_sale": 0,
- "option_credit_for_sale": 0
}, - "utilised": {
- "limit": 21000,
- "pnl_realised": 0,
- "pnl_unrealised": 0,
- "option_premium": 0
}
}
}
}
This section provided to information of API calls to do the order management i.e. place fresh order, modify or cancel already submitted valid orders. Retrieve the order and trade book. Using Order API, various type of orders Intraday, Delivery, Bracket Order, Cover order, etc. can be placed. Order type here is used as Product Type in System. Kindly refer to the respective API call for more detail.
Global Constants
Here are some of the constants enum values used for placing order.
Params | Values | Description |
exchange (segment id) | NSE_EQ (1), NSE_FO (2), BSE_EQ (8), BSE_FO (4), MCX_FO (16), NCDEX_FO (64), NSE_CUR (2048), NSE_COMM (32768), BSE_CUR (268435456), BSE_COMM (16384), MSE_CUR (1024), NSE_OTS (536870912) | Exchange segment |
product_type | INTRADAY | It consists of one leg only. Open orders will be squared off automatically before market close. |
DELIVERY | Order position will be carried over to next day under holding. | |
BTST | Buy today sell tomorrow. It will be squared off automatically before next day market close. | |
COVER | It consists of two legs. MAIN_LEG which is market order and SL_LEG which will be square off stop loss order of MAIN_LEG. Open orders will be squared off automatically before market close. | |
BRACKET | It consists of three leg order. MAIN_LEG which is placed as Market or Limit, SL_LEG which is square off stop loss order and PROFIT_LEG which is square off order. Open orders will be squared of automatically before market close. | |
MTF | Margin Trading or Margin Trading Facility (MTF) is a facility provided by brokers to their clients in which the client does not have to pay full amount for carrying overnight positions. | |
order_type | RL | Regular limit order. |
RL-MKT | Regular market order. | |
SL | Stoploss limit order. | |
SL-MKT | Stoploss market order. | |
validity | DAY | Order valid for the same day. |
IOC | Order valid only for immediate execution else cancelled. | |
GTD | Order valid for specified number of days. | |
GTC | Order valid until user cancels the order. | |
EOS | Order valid for the specific session. | |
order_status | PENDING | Order is pending or partially executed at exchange. |
EXECUTED | Order is fully executed at exchange. | |
CANCELLED | Order is cancelled at exchange. | |
OMS_XMITTED | Order is received by OMS but not submitted to exchange. | |
OMS_REJECT | Order is rejected by OMS. | |
ORDER_ERROR | Order is not valid, rejected by exchange. | |
ADMIN_REJECT | Order is rejected by OMS Admin. | |
EXCHANGE_XMITTED | Order is submitted to exchange, but confirmation is not received. | |
AMO_SUBMITTED | AMO order is received by OMS. | |
AMO_CANCELLED | AMO order is cancelled. |
Lets you place a fresh buy order or sell order.
Content-Type | string Example: application/json |
Authorization | string Example: {{access_token}} |
x-api-key | string Example: {{x-api-key}} |
required | object Scrip information can be sent in 2 ways. either by sending exchange and scrip token or by sending scrip details i.e. exchange, symbol, series, expiry, strike price & option type. |
transaction_type required | string Order is BUY or SELL. |
product_type required | string Product type of the order. Kindly refer global constants for enum values. |
order_type required | string Type of order. Kindly refer global constants for enum values. |
quantity required | integer Number of quantity to transact. |
price | number Default: 0 Price at which order will be placed in rupees. |
trigger_price | number Price at which order will be triggered applicable for Order Type as Stop Loss Limit or Stop Loss Market. |
disclosed_quantity | integer Number of quantity to be disclosed to the market. |
validity | |
validity_days | integer Number of days order needs to be carried ahead for validity GTD orders. |
is_amo | boolean Default: false Whether order is an AMO order or not? |
order_identifier | string <= 8 characters An optional field to apply to an order to track it. |
part_code | string Participant code |
algo_id | string Algo id for strategry generated orders |
strategy_id | string Strategy id for strategry generated orders |
vender_code | string Vender code for inhouse application |
{- "scrip_info": {
- "exchange": "NCDEX_FO",
- "scrip_token": 54669,
- "symbol": "",
- "series": "",
- "expiry_date": "",
- "strike_price": "",
- "option_type": ""
}, - "transaction_type": "BUY",
- "product_type": "INTRADAY",
- "order_type": "RL-MKT",
- "quantity": 3,
- "price": 0,
- "trigger_price": 0,
- "disclosed_quantity": 0,
- "validity": "DAY",
- "validity_days": 0,
- "is_amo": false,
- "order_identifier": "",
- "part_code": "",
- "algo_id": "",
- "strategy_id": "",
- "vender_code": ""
}
{- "status": "success",
- "code": "s-101",
- "message": "Order Entry Sent to OMS",
- "data": {
- "orderId": "NWSYF00005>3"
}
}
Lets you modify an existing pending order
exchange required | string Example: NSE_EQ |
order_id required | string Example: NWSYF00005>3 |
Content-Type | string Example: application/json |
Authorization | string Example: {{access_token}} |
x-api-key | string Example: {{x-api-key}} |
order_type required | string Type of order. Kindly refer global constants for enum values. |
quantity required | integer Number of quantity to transact. |
traded_quantity required | integer Cumulative traded quantity of the order. Data to be passed in this field is available in order book response. |
price | number Default: 0 Price at which order will be placed in rupees. |
trigger_price | number Price at which order will be triggered applicable for Order Type as Stop Loss Limit or Stop Loss Market. |
disclosed_quantity | integer Number of quantity to be disclosed to the market. |
validity | |
validity_days | integer Number of days order needs to be carried ahead for validity GTD orders. |
{- "order_type": "RL",
- "quantity": 5,
- "traded_quantity": 0,
- "price": 310,
- "trigger_price": 0,
- "disclosed_quantity": 0,
- "validity": "DAY",
- "validity_days": 0
}
{- "status": "success",
- "code": "s-101",
- "message": "Order Modification Sent to OMS",
- "data": {
- "orderId": "NWSYF00005>3"
}
}
Lets you cancel an existing pending order
exchange required | string Example: NSE_EQ |
order_id required | string Example: NWSYF00005>3 |
Authorization | string Example: {{access_token}} |
Content-Type | string Example: application/json |
x-api-key | string Example: {{x-api-key}} |
{- "status": "success",
- "code": "s-101",
- "message": "Order Cancellation Sent to OMS",
- "data": {
- "orderId": "NWSYF00005>3"
}
}
Lets you place a cover order. Which means, it allows to place a market order or a limit order along with a stop loss order.
Authorization | string Example: {{access_token}} |
x-api-key | string Example: {{x-api-key}} |
Content-Type | string Example: application/json |
required | object Scrip information can be sent in 2 ways. either by sending exchange and scrip token or by sending scrip details i.e. exchange, symbol, series, expiry, strike price & option type. |
transaction_type required | string Order is BUY or SELL. |
object | |
object | |
order_identifier | string <= 8 characters An optional field to apply to an order to track it. |
part_code | string Participant code |
algo_id | < |