NAV
javascript

Change Log

2025-08-19

2024-06-14

2019-02-08

About TORA API

Welcome to the TORA API! The public API provides methods to access data from the system in order to use it in different applications. The data is transmitted in JSON format over HTTP (REST & Websocket).

General WebSocket protocol considerations

Property value types must be booleans, numbers, strings, objects, arrays, or null. However, it is useful define a set of standard data types when dealing with certain values. These data types will always be strings, but they will be formatted in a specific manner so that they can be easily parsed.

Type Format Description
boolean - Booleans can only have two values: true or false
number INT Number contains no decimals
number DEC Number contains decimals
string - Used for storing and manipulating generic text
string DATE A calendar date representation formatted as recommended by ISO 8601 using the YYYY-MM-DD format
string DURATION An amount of intervening time in a time interval representation formatted P[n]Y[n]M[n]DT[n]H[n]M[n]S or P[n]W as shown and recommended by ISO 8601
string TIMESTAMP A timestamp representation as recommended by RFC 3339
string ENUM A set of named values called elements of the type
string UUID A string representation of the universally unique identifier
object - A JSON object that contains property names and values
list - An array of values

General Client Request

Parameter Type Format Description
messageId string - A unique identifier for the message. This is useful for correlating server logs with individual responses received at a client
service string - The service we need to route this request to
action string - The performed action
params object - Request parameters

General Server Response

Initial object image updates:

{
  "messageId": "...",
  "service": "...",
  "event": "update",
  "messageReferenceId": "...",
  "data": {
    "objects": [...]
    // note that isComplete is not set
  }
}
// .. the last update that completes the initial image:
{
  "messageId": "...",
  "service": "...",
  "event": "update",
  "messageReferenceId": "...",
  "data": {
    "objects": [...],
    "isComplete": true
  }
}
Parameter Type Format Description
messageId string UUID A unique identifier for the message
messageReferenceId string - Refers the request messageId
service string - The service which handled the request
event string - Indicates the reply type
params object - Refers the request parameters
data object - The response payload
status object - Status contains the integer code and the string message

Rate Limiting

To ensure fair usage and maintain optimal performance for all clients, our API employs rate limiting. This section details our rate limiting policies and provides guidelines for best practices.

What is Rate Limiting?

Rate limiting is a mechanism that controls the amount of incoming and outgoing traffic to or from a network. It is used to prevent abuse and overuse of resources, ensuring that all clients have access to the API in a fair manner.

Rate Limit Policy

Our API enforces rate limits, on a per-account basis, with the following key points:

  1. Each account is allowed a specific number of requests per minute, hour and day, depending on the service and action type used.
  2. Besides the rate limits, which limit the number of requests a client can perform in a certain time frame, we also impose limits on the number of active subscriptions for a certain service.
  3. The exact numbers can be found in the form of a table, under every available action type in this documentation.
  4. The thresholds defined in this documentation are applied by default to all accounts, however they can be adjusted per the needs of every account, if necessary.
  5. Whenever a limit is breached, the client will receive a reject response with status code 429 and a reject message stating which limit has been breached and some other additional information.

Best Practices for Efficient API Usage

To optimize your API usage and stay within the rate limits:

Further Assistance

If you have any questions or need assistance regarding the rate limiting, please contact our OEMS support team.

OEMS

End points

Environment WEBSOCKET
UAT wss://api.uat.toradev.net/oems/v1

Authentication

The WebSocket protocol has a heartbeat mechanism. The server sends Ping messages every 30s, while the client needs to respond with a Pong message. A payload is mandatory on the Pong message, and can be anything (usually a timestamp is used).

Auth Routing Parameters

Parameter Type Description Values
service string The auth service auth
action string The requested action auth

Auth Request Parameters

To authorize, use this code (replace openIdToken and accessToken with your tokens):

// Create a new WebSocket.
var socket = new WebSocket('wss://api.uat.toradev.net/oems/v1');
// Send the auth request
socket.send({
  "messageId": "jTzNAHXnCv",
  "service": "auth",
  "action": "auth",
  "params": {
    "authMethod": "openIdConnect",
    "idToken": "openIdToken",
    "accessToken": "accessToken",
    "group": "Group1",
    "user": "user1"
  }
});

Auth request is successful, the returned JSON is similar to:

{
  "messageId": "...",
  "service": "auth",
  "event": "auth",
  "messageReferenceId": "jTzNAHXnCv",
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Auth request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "...",
  "service": "auth",
  "event": "auth",
  "messageReferenceId": "jTzNAHXnCv",
  "status": {
    "code": 201,
    "message": "Auth failed: invalid id token"
  }
}

Auth request is unsuccessful, the user was not specified:

{
  "messageId": "...",
  "service": "auth",
  "event": "auth",
  "messageReferenceId": "uccAL090CQ",
  "data": {
    "availableUsers": [
      "user1",
      "user3",
      "user4"
    ]
  },
  "status": {
    "code": 201,
    "message": "Auth failed: No user specified. See the list of available user in the data/availableUsers field"
  }
}

Auth request is unsuccessful, the group was not specified:

{
  "messageId": "...",
  "service": "auth",
  "event": "auth",
  "messageReferenceId": "uccAL090CQ",
  "data": {
    "availableGroups": [
      "Group1",
      "Group3",
      "Group",
      "Group5",
      "Group7"
    ]
  },
  "status": {
    "code": 201,
    "message": "Auth failed: No group specified. See the list of available groups in the data/availableGroups field"
  }
}
Parameter Type Format Description
authMethod string - The auth method used
idToken string ID Token signature The signature which can be verified with the public RSA key
accessToken string Access Token signature The uniquely Keycloak/Ping-generated encrypted token that allows user access to resources
group string - The group this user needs to authenticate for
user string - The compass user account we are authenticating with

When the authentication is being performed, a compass user name must be supplied; this is because one email address can be linked with several compass user accounts, and the client needs to drive the user selection. When no user account is supplied but the token is valid, the auth request is rejected and a list of available users is returned.

In the case when the group membership is not known upfront, the client can initialize the authentication using the authMethod, the idToken and a valid accessToken, and the server will respond providing the list of groups that are enabled for the user. Please note that in this case, the connection will be terminated, and the client will need to re-authenticate and specify the group.

In the case where there is only one user account enabled for that token in that specific environment, the login will pick that user account and that will be used in that session. This can also be applied for group selection. If for the token we have only one user account enabled on only one group, the login will be validated and the user + group combination will be used in that session. The auth service will return the picked user account and group, letting the client know what was selected.
Examples:
Email address: user1@domain.com
Compass user accounts for this address:
compassUser1 with access to groups: GROUP1, GROUP2
compassUser2 with access to groups: GROUP3


Auth request with valid token having: only the token
Result: request rejected; reason: should pick one user out of the two available for this request: compassUser1, compassUser2

Auth request with valid token having: token + user: compassUser1
Result: request rejected; reason: should pick one group out of the two available for this request: GROUP1, GROUP2

Auth request with valid token having: token + user: compassUser1 + group: GROUP1
Result: request succeeded; the token + user + group combination is valid and we return the user and group on the response

Auth request with valid token having: token + user: compassUser2
Result: request succeeded; the token + user combination determines that this user is only member of a single group; we validate it and we return the user and group on the response

Auth request with valid token having: token + user: someCompassUser
Result: request rejected; reason: someCompassUser is invalid

Email address: user2@domain.com
Compass user accounts for this address:
compassUser3 with access to groups: GROUP4

Auth request with valid token having: only the token
Result: request succeeded; the token determines that there is only one user for this email address and this user is member of only one group; we validate it and we return the user and group on the response

Both the idToken and accessToken have an expiration time, after which these two become invalid. Before this expire time is reached out, the tokens need to be refreshed, so that the validation passes and the already logged-in user remains connected to the application; if the validation fails, the user is logged out.

Auth Response Data

Parameter Type Format Description
availableGroups list - A collection of strings representing the available groups
availableUsers list - A collection of strings representing the available users for the email address

Orders

Parameter Values
service orders

The order service provides information on the orders inside the system. The authenticated client can perform the order actions detailed bellow:

Order Subscription

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "orders",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test order subscription",
    "symbolType": "tora"
  }
});

The initial order image is retrieved:

// First message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "data": {
    "orders": [...]
  }
}

// Last message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "data": {
    "orders": [...],
    "isComplete": "true"
  }
}
Parameter Values
action subscribe

The client is ready to receive updates on the orders that are present in the system.

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Order Subscription Parameters

Parameter Type Format Description
subscriptionId string - Identifier for the subscription. Based on this information, a subscription can be updated or removed
symbolType string ENUM Specifies the listing symbol used for this subscription. Possible values: caspian, bloomberg, reuters, tora, forex; if missing, defaults to tora
filter object - Instructs the orders service to return all the orders that match this filter



Order Subscription Reply

Request is successful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "orders",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test order subscription",
    "symbolType": "tora"
  },
  "status": {
    "code": 0,
    "message": "Subscribe OK."
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "orders",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test order subscription",
    "symbolType": "tora"
  },
  "status": {
    "code": 201,
    "message": "Invalid subscription: <reason>."
  }
}
Parameter Values
event subscribe
params The client subscription parameters
status The status of this subscription






















Order Unsubscribe

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "orders",
  "action": "unsubscribe",
  "params": {
    "subscriptionId": "test order subscription"
  }
});

Request is successful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "orders",
  "event": "unsubscribe",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "status": {
    "code": 0,
    "message": "Unsubscribe OK."
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "orders",
  "event": "unsubscribe",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "status": {
    "code": 201,
    "message": "Invalid unsubscribe request: <reason>."
  }
}
Parameter Values
action unsubscribe
params.subscriptionId The subscription id for which the client doesn't need to receive any more updates

The client requests not to receive any more updates for the specified subscription.




























Order Updates

The initial order image is retrieved:

// First message in the initial image
{
  "messageId": "bb60e356-b325-4ef3-bc5d-c75eb95697ef",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "data": {
    "orders": [{
      "orderId": "SUF/GlqBWG8AAq/j",
      "clientOrderId": "05a075a3-926a-4791-8a39-e33899b1152c",
      "creationTime": "2018-11-06T16:51:22.000Z",
      "sendTime": "2018-11-06T16:51:22.000Z",
      "lastUpdateTime": "2018-11-06T16:51:22.000Z",
      "broker": "ml",
      "side": "SELL",
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "quantity": 1000,
      "executedQuantity": 700,
      "limitPrice": 6250.54,
      "owner": "george",
      "flowType": "DMA",
      "state": "SENT",
      "status": "OK",
      "brokerAccount": "ARDITI",
      "internalAccount": "hoarding",
      "executedValue": 4263.342,
      "referencePrice": 6250.54,
      "averagePrice": 6219.77095339,
      "notionalValue": 6232.574627,
      "previousExecutedQuantity": 0,
      "previousExecutedValue": 0.0,
      "dayAvgPx": 6219.77095339,
      "tradeBook": "oranges"
      },
      {
      "orderId": "SUF/GlqBWG8AAq/w",
      "clientOrderId": "bbe7ac4a-34c1-4496-8581-367b4f3a277d",
      "creationTime": "2018-11-06T20:11:45.000Z",
      "sendTime": "2018-11-06T20:43:58.000Z",
      "lastUpdateTime": "2018-11-06T20:43:58.000Z",
      "broker": "gs",
      "side": "BUY",
      "symbol": "CS.NULL.JAPAN.SP.JPY.1734",
      "quantity": 3000,
      "executedQuantity": 400,
      "limitPrice": 6019.86,
      "owner": "george",
      "flowType": "DMA",
      "state": "SENT",
      "status": "ERROR",
      "errorMessage": "Some error triggered by last user action",
      "brokerAccount": "ARDITI",
      "internalAccount": "hoarding",
      "tradeBook": "lemons"
      }
    ]
  }
}

// Last message in the initial image
{
  "messageId": "77226975-3b8e-48ed-868c-f2dc88388a91",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "data": {
    "orders": [{
      "orderId": "SUF/GlqBWG8AA/aa",
      "clientOrderId": "bde9e8c4-b6c0-4c5e-b514-2f1ddbf597a8",
      "creationTime": "2018-11-06T18:30:51.000Z",
      "sendTime": "2018-11-06T18:31:22.000Z",
      "lastUpdateTime": "2018-11-06T18:31:22.000Z",
      "broker": "jpm",
      "side": "SELL",
      "symbol": "CS.NULL.JAPAN.SP.JPY.2137",
      "quantity": 1500,
      "executedQuantity": 1300,
      "limitPrice": 6238.5,
      "owner": "george",
      "flowType": "DMA",
      "state": "SENT",
      "status": "OK",
      "brokerAccount": "ARDITI",
      "internalAccount": "hoarding",
      "tradeBook": "oranges"
    }],
    "isComplete": "true"
  }
}

// Subsequent update
{
  "messageId": "db744fdb-596c-4b52-b759-16e6f291b5e4",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "data": {
    "orders": [{
      "orderId": "SUF/GlqBWG8AAq/j",
      "clientOrderId": "05a075a3-926a-4791-8a39-e33899b1152c",
      "creationTime": "2018-11-06T16:51:22.000Z",
      "sendTime": "2018-11-06T16:51:22.000Z",
      "lastUpdateTime": "2018-11-06T16:51:22.000Z",
      "broker": "ml",
      "side": "SELL",
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "quantity": 1000,
      "executedQuantity": 800,
      "limitPrice": 6250.54,
      "owner": "george",
      "flowType": "DMA",
      "state": "SENT",
      "status": "OK",
      "brokerAccount": "ARDITI",
      "internalAccount": "hoarding",
      "tradeBook": "oranges"
      }
    ]
  }
}

//Order update for multi-leg order
{
  "messageId": "b95b0445-9c52-461e-ab27-587a77533c84",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "orderSubscriptionIdUprDt2dQiekAAAAy"
  },
  "data": {
    "orders": [
      {
        "orderId": "AAAJYWdQitkAAACJ",
        "clientOrderId": "CLIENT_IDUprDt2dQiekAAAA6",
        "isParent": false,
        "parentId": "AAAJYWdQitkAAAB8",
        "symbol": "SPR.FUT.ATW.IEU.USD.202810-3M",
        "exchange": "IEU",
        "broker": "simu",
        "side": "BUY",
        "quantity": 2000.0,
        "limitPrice": 120.0,
        "owner": "TestUser1",
        "flowType": "DMA",
        "brokerAccount": "LongShort",
        "internalAccount": "InternalAccount1",
        "state": "SENT",
        "executedQuantity": 1000.0,
        "creationTime": "2024-12-04T17:02:32.209000Z",
        "sendTime": "2024-12-04T17:02:32.602000Z",
        "lastUpdateTime": "2024-12-04T17:02:33.072000Z",
        "status": "OK",
        "executedValue": 10000.0,
        "notionalValue": 1.3E8,
        "previousExecutedQuantity": 0.0,
        "previousExecutedValue": 0.0,
        "condition": "NORMAL",
        "averagePrice": 10.0,
        "dayAvgPx": 10.0,
        "legs": [
          {
            "symbol": "FUT.CMDT.ATWM.ICE.USD.202812",
            "side": "BUY",
            "executedValue": 10000.0,
            "executedQuantity": 1000.0,
            "previousExecutedValue": 0.0,
            "previousExecutedQuantity": 0.0
          },
          {
            "symbol": "FUT.CMDT.ATWM.ICE.USD.202811",
            "side": "BUY",
            "executedValue": 10000.0,
            "executedQuantity": 1000.0,
            "previousExecutedValue": 0.0,
            "previousExecutedQuantity": 0.0
          },
          {
            "symbol": "FUT.CMDT.ATWM.ICE.USD.202810",
            "side": "BUY",
            "executedValue": 10000.0,
            "executedQuantity": 1000.0,
            "previousExecutedValue": 0.0,
            "previousExecutedQuantity": 0.0
          }
        ],
        "currentMarginFlag": "None",
        "externalId": "CLIENT_IDUprDt2dQiekAAAA6",
        "lastUpdateOwner": "TestUser1",
        "limitStatus": "APPR",
        "manualExecution": "N",
        "margin": "None",
        "creatorComponent": "WSGW",
        "lastExecutedTime": "2024-12-04 17:02:32.000 GMT 0us",
        "originator": "TestUser1",
        "pendingQuantity": 1000.0,
        "strategyId": "AAAJYWdQitkAAAB8",
        "strategyType": -1,
        "isHidden": false
      }
    ]
  }
}
Parameter Values
event update
params The subscription parameters
data.orders The list of orders that were updated
data.isComplete Is set, and the value is true when the initial order image transfer is complete

Order Fields

Parameter Type Format Description Direction Amendable
aggregatedParentId string UUID Aggregation parent identifier for orders part of an aggregation O N
algoFields object - Values for the algo fields that were set on this order; example: {"StartTime": "xxx", "EndTime": "yyy", "ParticipationRate": "15"} I / O Y
algoStrategy string - The broker algo strategy used I / O Y
allocationMethod string - Specified allocation method for this order; can be either the predefined allocation method name, or it can be a custom allocation string I / O Y
averagePrice number DEC Order execution average price O N
broker string - Order execution broker I / O Y
brokerAccount string - Indicates the specified account a client has at a certain broker I / O Y
brokerDestinationParameters string - Some brokers offer specific ways of matching orders. This is accomplished by creating pools where orders are stored and then executed according to their specific pool parameters (these are set before the order is sent). Example: {"Hidden": true, "PostOnly": false} I / O Y
brokerOrdTypeFlag string - Populated for orders flagged with a specific destination at the broker, shown as BrkFlag in GUI. Examples: prg, jmc, wap, etc I / O Y
capacity string - Order capacity I / O Y
carriedFlag string ENUM Set on GTC orders with true if the order is tora level and false if the order is broker level; not present on DAY orders. I / O Y
caspianCode string - Caspian symbol for the instrument this order is traded I / O N
childQuantity number DEC On parent orders: sum of the quantities of all children O N
clientAlias string - Identifier for the client alias I / O N
clientOrderId string - The client order identifier I N
commissionMethod object - The cost order's template id, together with the selected cost type, parameters and flags I / O Y
condition string ENUM The condition of the traded order. The possible conditions are: NORMAL, WORKED, OPEN, CLOSE, FUNARI, FOK(fill or kill), IOC(immediate or cancel) I / O Y
confirmation string ENUM Order limit confirmation; possible values: NONE, Y, N I / O Y
creationTime string TIMESTAMP Order creation time O N
creatorComponent string - Order creator component I / O N
crossingParameters string - Displays the crossing parameters set for the TORA pool I / O Y
dayAvgPx number DEC Order execution average price for the current trading day O N
errorMessage string - Order error description message O N
evaluateRelativePrice boolean - Evaluate the relative price specified by the relativePrice parameter. If true, order registration requests will overwrite the limit price, while amend/send requests will amend the existing limit price. Defaults to false if missing. Note that this parameter is only valid within a request, and is not retained between subsequent requests. I N
exchange string - Order exchange I / O N
exchangeExecutionId string - Last execution's id on the exchange O N
exchangeInternalId string - Exchange internal id O N
exchangeOrderID string - Exchange order id I / O N
excludedDealers list - Indicates the list of excluded dealers. Used for FX instruments. The differences between the all supported dealers and the ones specified here may contain one item for FULL subscription type or one or more items for LMT subscription type or an empty value. I Y
executedQuantity number DEC Current executed quantity for this order O N
executedValue number DEC Current executed value for this order O N
externalId string - The external order id for orders that are generated from outside the system I / O N
externalOwner string - The external owner for orders that are generated from outside the system I / O Y
fixBrokerOrderId string - Order id received from broker over FIX I / O N
fixExecId string - Execution id received over FIX I / O N
fixExecRefId string - Execution reference id received over FIX I / O N
fixingDate string TIMESTAMP Date at which the difference between the prevailing spot market rate and the agreed-upon rate is calculated I / O Y
fixOrderId string - Order id received over FIX I / O N
flowType string ENUM The order handling instruction: DMA, ALGO, WORKED O N
freezeTime string UNIX-TIMESTAMP Time when the order is marked as frozen during the EOD Events O N
groupingId string - Grouping identifier for orders that are part of a group I / O Y
groupingType string - Grouping type for orders that are part of a group; possible values: PAIR, CROSS, AGGREGATION I / O Y
includedDealers list - Indicates the list of included dealers. Used for FX instruments. May contain one item for FULL subscription type or one or more items for LMT subscription type or an empty value. I Y
instrumentType string ENUM Indicates the type of FX instruments; possible values: FXSPOT, FXFWD, FXSWP I N
internalAccount string - Indicates the internal account selected for this order I / O Y
internalComment string - Internal comment set on this order I / O Y
internalNote string - The internal note that was set on this order I / O Y
isCrossing boolean - Indicates this order has been crossed I / O N
isDeleted boolean - Indicated whether this order was removed from the system O N
isFrozen boolean - Indicated whether this order was frozen during the EOD Events O N
isParent boolean - True when this is a parent order O N
lastTradingDate string TIMESTAMP The last trading date for this GTD order. The timezone of this parameter is GMT. I / O Y
lastUpdateOwner string - The last update owner I / O Y
lastUpdateTime string TIMESTAMP The last update time O N
legs object - An object used to specify the data fields of legs I / O N
legs -> name string - Indicates the name of leg; possible values:near, far I Y
legs -> quantity string - Indicates the quantity of leg. If it is missing then the quantity value from order will be used for all of legs. I Y
legs -> settlementDate string yyyyMMdd Indicates the settlement date of FXFWD/FXSWP's legs. If it is missing, then the tenor value will be used. I Y
legs -> tenor string - Indicates the tenor code used to determine the settlement date of FXSWP's legs. Examples: SPOT, TOM, 1W, 6M, 5Y I Y
legs -> symbol string - Instrument symbol this leg is received O N
legs -> side string ENUM Execution side. Possible values BUY, SELL, BTC, SHORT, SSE O N
legs -> executedValue number DEC Current executed value for this leg O N
legs -> previousExecutedValue number DEC Previous trading day leg executed value O N
legs -> previousExecutedQuantity number DEC Previous trading day leg executed quantity O N
limitPrice number DEC Order limit price I / O Y
limitRequestId string - Identifier for the limit request I / O N
limitRequestIdTime string TIMESTAMP Timestamp for the limit request I / O N
limitStatus string ENUM The limit status for this order; possible values: PLIM = Pending Limits, APPR = Approved, REJD = Rejected I / O Y
liquiditySection string - Identifies the feed (or section) for which liquidity data is offered I / O N
liquidityTransactionId string - Identifier for the last liquidity transaction I / O N
locateBroker string - The locate broker for SHORT orders I / O N
locateId string - The locate ID for SHORT orders I / O Y
manualExecution string - Populated withYwhen this order is booked manually, missing when this is a regular trade I / O N
matchId string - Indicator for the matching that took place in the dark pool I / O N
mifidFields object - MIFID related fields carried on this order I / O Y
note string - Order note I / O Y
notionalPrice number DEC Price used to compute the notional value I / O Y
notionalValue number DEC Notional value of the traded order O N
openClose string ENUM Identifies whether an order is a margin order or a non-margin order; possible values: Open, Close I / O Y
orderId string UUID The order identifier O N
orderType string - Type of this order: MARKET, STOP, LIMIT or for ALGO orders (ATDL) the format broker_ATDL where broker is the execution broker. When condition is WORKED the following order types are used: MKT, CD, STLMT, LOB, VWAP, STOP, STOPLMT, STOPCD. I / O Y
originator string - Order originator I / O N
owner string - Order owner I / O Y
panicMode string - Panic mode flag I / O Y
parentId string UUID If this order is a child order, this will hold the parent order identifier I / O N
pendingQuantity number DEC The order portion that has not yet been executed I / O N
positionMultiplier number DEC Position multiplier for the instrument this order is traded in I / O N
previousExecutedQuantity number DEC Previous trading day executed quantity O N
previousExecutedValue number DEC Previous trading day executed value O N
primaryExchangeBloombergCode string - Bloomberg code for the primary exchange the instrument this order is traded I / O N
primaryExchangeReutersCode string - Reuters code for the primary exchange the instrument this order is traded I / O N
productExpireDate string TIMESTAMP The expire date for derivatives with expiration I / O N
productNativeCode string - Exchange native code for Caspian products I / O N
quantity number DEC Order quantity I / O Y
referencePrice number DEC Order reference price; the price at the order Register time, then updated at the order Send time I / O Y
relativePrice string - Order relative price; Available types are ASK{t} BID{t} LAST{t} OPEN{t} CLOSE{t}, where {t} represents a signed-integer number of ticks to offset. cf: ASK+2 BID-1. When evaluateRelativePrice is true, limitPrice will be overwritten by what the relative price is evaluated to at the moment of the action. I / O Y
relativeTimeout number INT Order relative price's timeout in milliseconds. Overrides the default relativePrice evaluation timeout if specified. Default timeout is used if omitted. Note that this parameter is only valid within a request, and is not retained between subsequent requests. I N
sender string - Order sender I / O N
sendTime string TIMESTAMP Order send time O N
settlementCCY string - Order settlement currency I / O N
settlementDate string yyyy-MM-dd HH:mm:ss.SSS z Order settlement date I / O Y
shortLocate string - Order short locate I / O N
side string ENUM Order side; possible values: BUY, SELL, BTC, SHORT, SSE I / O N
state string ENUM Order state; possible values: SENT, FILD, REDG, CAND, PAMD, PSEN, PCAN, EXPD, OVER O N
status string ENUM Order status; possible values: OK, ERROR O N
stopPrice number DEC Stop price for this order I / O Y
strategy string - Order strategy description I / O Y
strategyId string - Order strategy id I / O N
strategyType string - Order strategy type O N
subscriptionType string - FOREX subscription type; possible values: FULL, LMT I / O Y
suspended string - Order suspended flag I / O N
symbol string - Instrument symbol this order is traded. If the symbolType has value forex then the symbol field must contains the pair of FX currencies separated by slash / I / O N
symbolType string ENUM Specifies the listing symbol used for this subscription. Possible values: caspian, bloomberg, reuters, tora, forex; if missing, defaults to tora I N
synthType string - Populated for the orders placed on a synthetic instrument. Examples: swp, cfd, etc, will be empty for normal orders I / O Y
tag string - Order custom tag I / O Y
timeInForce string ENUM Order TIF, must be missing for DAY orders, possible values: GTS= Good 'Till Session, GTC = Good 'Till Cancelled, GTD = Good 'Till Date I / O Y
timeout number INT Order timeout I / O N
tradeBook string - Indicates the specified tradebook for this order I / O Y
tradedCCY string - Specifies the currency in which the trade is executed. This field is applicable for forex orders. I / O Y
transferFromId string - Transfer from identifier I / O N
transferToId string - Transfer to identifier I / O N
unsolicitedTouch string - Order unsolicited touch I / O Y
waveId string - Order wave identifier I / O Y
workAMPM string - Worked AM/PM parameter I / O Y
workATDLDescription string - Worked ATDL description. The timezone of timestamp parameters is the market timezone. I / O Y
workATDLGUI string - Worked ATDL state I / O Y
workAutomate string - Worked automate parameter I / O Y
workBrkSpec string - Worked broker specific parameter I / O Y
workBrkSpecATDL string - Worked ATDL broker specific parameter. The timezone of timestamp parameters is GMT. I / O Y
workBrkSpecStrategy string - Worked broker specific strategy parameter I / O Y
workTimeBegin string TIMESTAMP Worked start time parameter I / O Y
workTimeEnd string TIMESTAMP Worked end time parameter I / O Y
workType string - Type of a worked order; possible values: MKT, VWAP, CD, StopMKT, STLMT, StopLMT, LOB, StopCD, BrkAlgo. For ALGO orders (ATDL), the type has the format broker_ATDL, where broker is the execution broker. I / O Y
workVolume string - Worked volume parameter I / O Y

Mappings between WS API fields and OEMS GUI fields

WS API Field GUI Field
aggregatedParentId Parent ID
broker Broker
brokerAccount BrokerAccount
brokerOrdTypeFlag BrkFlag
childQuantity Child Qty
commissionMethod Commission Method
condition Condition
confirmation Confirmation
creationTime Creation Time
dayAvgPx DayAvgPrice
errorMessage Error Message
exchange EX
externalId External ID
externalOwner External Owner
flowType Flow Type
groupingId Grouping ID
groupingType Grouping Type
internalAccount Internal Account
internalNote Internal Note
limitPrice LMTPx
limitStatus Limit Status
note Comments
openClose Opt OpenClose
orderId Order ID
orderType Order Type
originator Originator
owner Owner
parentId Parent ID
pendingQuantity Pending
sendTime Sending Time
settlementDate Settlement Date
side Side
state State
status Status
stopPrice Stop Price
synthType SynthType
tag Tag
tradeBook Trade Book
tradedCCY Traded CCY
unsolicitedTouch Unsolicited Touch
workType Worked Type

Subscription filters

Subscribe for all orders:

socket.send({
  "messageId": "9feec0f4-04ff-4ea1-aecc-8fe2a0d40490",
  "service": "orders",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test order subscription - all orders",
    "symbolType": "tora"
  }
});

All orders are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "9feec0f4-04ff-4ea1-aecc-8fe2a0d40490",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription - all orders"
  },
  "data": {
    "orders": [...]
  }
}

Subscribe for all parent orders:

socket.send({
  "messageId": "f795b899-764d-4dbf-948f-e2517f059795",
  "service": "orders",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test order subscription - only parent orders",
    "symbolType": "tora",
    "filter": {
      "isParent": true
    }
  }
});

All parent orders are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "f795b899-764d-4dbf-948f-e2517f059795",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription - only parent orders"
  },
  "data": {
    "orders": [...]
  }
}

Subscribe for all specific parent's child orders:

socket.send({
  "messageId": "005c22be-1a2b-4666-9cfb-daec3653a25d",
  "service": "orders",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test order subscription - specific child orders",
    "symbolType": "tora",
    "filter": {
      "parentId": "someParentId"
    }
  }
});

All parent orders are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "005c22be-1a2b-4666-9cfb-daec3653a25d",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription - specific child orders"
  },
  "data": {
    "orders": [...]
  }
}
Filter Parameter Description
isParent Instructs the orders service to return all the parent orders
parentId Instructs the orders service to return all specific parent's child orders

When subscribing for orders, the API allows subscriptions for all the orders, when filter is not set, for parent only orders, "isParent": true filter parameter is set, or for orders that have a specific parent, "parentId": "specificParentId"




































































Parent Register

Use the register action and specify the required order fields

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "register",
  "params": {
    "order": {
      "clientOrderId": "order_2018-11-14_1",
      "symbol": "CS.NULL.JAPAN.SP.JPY.2137",
      "symbolType": "tora",
      "quantity": 2000,
      "side": "BUY",
      "limitPrice": "0.0",
      "brokerAccount": "LongShort",
      "broker": "binance"
    }
  }
});

The parent order is registered

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "register",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "AAEWu1vsKJYAAABX"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

DMA parent register. Use the register action and specify the required order fields. The NORMAL condition is implicit, so orders missing the condition field will be considered DMA.

socket.send({
  "messageId": "cc82875a-4270-461b-8807-0cfb57285a4d",
  "service": "orders",
  "action": "register",
  "params": {
    "order": {
      "clientOrderId": "CLORDID_DMA_ORDER_1",
      "symbol": "CS.NULL.JAPAN.T.JPY.6702",
      "symbolType": "tora",
      "quantity": 1000,
      "side": "BUY",
      "broker": "ubs",
      "condition": "NORMAL",
      "brokerAccount": "BA",
      "internalAccount": "IA",
      "tradeBook": "TB"
    }
  }
});

WORKED parent register. Use the register action and specify the required order fields. For an order to be considered WORKED, it is required to specify the condition as WORKED and an order type.

socket.send({
  "messageId": "db8dd9b5-9635-4a05-bf53-12230123f799",
  "service": "orders",
  "action": "register",
  "params": {
    "order": {
      "clientOrderId": "CLORDID_WORKED_ORDER_1",
      "symbol": "CS.NULL.JAPAN.T.JPY.6702",
      "symbolType": "tora",
      "quantity": 1000,
      "side": "BUY",
      "broker": "ubs",
      "condition": "WORKED",
      "orderType": "CD",
      "brokerAccount": "BA",
      "internalAccount": "IA",
      "tradeBook": "TB"
    }
  }
});

ALGO parent register. Use the register action and specify the required order fields. For an order to be considered ALGO, it is required to specify the condition as WORKED, the algo strategy and algo fields, as well as an order type having the broker_ATDL format.

socket.send({
  "messageId": "3763f5f8-e4cf-4add-aa7d-f79402197756",
  "service": "orders",
  "action": "register",
  "params": {
    "order": {
      "clientOrderId": "CLORDID_ALGO_ORDER_1",
      "symbol": "CS.NULL.JAPAN.T.JPY.6702",
      "symbolType": "tora",
      "quantity": 1000,
      "side": "BUY",
      "broker": "baml",
      "condition": "WORKED",
      "orderType": "BAML_ATDL",
      "brokerAccount": "BA",
      "internalAccount": "IA",
      "tradeBook": "TB",
      "algoStrategy": "VWAP",
      "workBrkSpecATDL": "6401:1;6408:M;6168:20230215-13:31:23;126:20230215-14:31:23;6961:1900.0"
    }
  }
});

FXSWP parent register with bhalanced quantities. Use the register action and specify the required order fields

socket.send({
  "messageId": "2023-02-07_5",
  "service": "orders",
  "action": "register",
  "params": {
    "order": {
      "clientOrderId": "order_2019-10-14_1",
      "symbol": "USD/JPY",
      "symbolType": "forex",
      "side": "BUY",
      "quantity": 1000,
      "limitPrice": "1.537",
      "brokerAccount": "BA",
      "broker": "ebs"
      "exchange":"EBS",
      "tradedCCY":"USD",
      "legs": [
          {
            "name": "near",
            "tenor":"SPOT"
          },
          {
            "name": "far",
            "settlementDate":"20230223"
          }
       ]
    }
  }
});

FXSWP parent register with unbalanced quantities. Use the register action and specify the required order fields

socket.send({
  "messageId": "2023-02-07_5",
  "service": "orders",
  "action": "register",
  "params": {
    "order": {
      "clientOrderId": "order_2019-10-14_1",
      "symbol": "USD/JPY",
      "symbolType": "forex",
      "side": "BUY",
      "limitPrice": "1.537",
      "brokerAccount": "BA",
      "broker": "ebs"
      "exchange":"EBS",
      "tradedCCY":"USD",
      "legs": [
          {
            "name": "near",
            "tenor":"SPOT",
            "quantity": 1000
          },
          {
            "name": "far",
            "settlementDate":"20230223",
            "quantity": 2000
          }
       ]
    }
  }
});

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000
Parameter Values
action register
params.order The specified parent order fields
params.skipAlgoParamValidation Indicates if the ALGO parameters specified into params.order.workBrkSpecATDL should be validated or not. This flag is optional and the default value is false.









































































































































Parent Send

Use the send action and specify the orderId or the clientOrderId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "send",
  "params": {
    "orderId": "AAEWu1vsKJYAAABX",
    // or
    "clientOrderId" : "order_2018-11-14_1",
    // optional
    "skipLimitChecks" : true,
    // optional
    "evaluateRelativePrice" : true,
    // optional
    "relativeTimeout" : 1000
  }
});

The parent order is sent

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "send",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "AAEWu1vsKJYAAABX"
    // or
    "clientOrderId" : "order_2018-11-14_1"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000
Parameter Values
action send
params.orderId The parent order with this ID will be sent
params.clientOrderId Client specified order ID, useful for identifying the order on the client side
params.skipLimitChecks Bypass limit checks on the order for this action; limits will be skipped both for the parent order and the child order
params.evaluateRelativePrice See Order Fields.
params.relativeTimeout See Order Fields.





Parent Register and Send

Use the registerAndSend action, and specify the required order fields

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "registerAndSend",
  "params": {
    "order": {
      "clientOrderId": "order_2018-11-14_1",
      "symbol": "CS.NULL.JAPAN.SP.JPY.2137",
      "symbolType": "tora",
      "quantity": 2000,
      "side": "BUY",
      "relativePrice": "ASK-1",
      "account": "LongShort",
      "broker": "citi"
    }
  }
});

The parent order is registered and sent

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "registerAndSend",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "AAEWu1vsKJYAAABX"
    // or
    "clientOrderId" : "order_2018-11-14_1"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000
Parameter Values
action registerAndSend
params.orderId The parent order with this ID will be registered and sent
params.clientOrderId Client specified order ID, useful for identifying the order on the client side
params.skipAlgoParamValidation Indicates if the ALGO parameters specified into params.order.workBrkSpecATDL should be validated or not. This flag is optional and the default value is false.








Parent Amend

Use the amend action and specify the required order fields, along with the parent order identifier: orderId or clientOrderId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "amend",
  "params": {
    "order": {
      "orderId": "AAEWu1vsKJYAAABX", // or "clientOrderId" : "order_2018-11-14_1"
      "symbolType": "tora",
      "quantity": 4000 // increase the quantity to 4000
      "side": "BUY",
      "limitPrice": "0.0",
      "brokerAccount": "LongShort",
      "broker": "binance",
    }
  }
});

The parent order is amended

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "amend",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "AAEWu1vsKJYAAABX"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

ALGO parent amend. Use the amend action and specify the required order fields, along with the parent order identifier: orderId or clientOrderId

socket.send({
  "messageId": "2019-10-14_5",
  "service": "orders",
  "action": "amend",
  "params": {
    "order": {
      "orderId": "AAEWu1vsKJYAAABX", // or "clientOrderId" : "order_2019-10-14_1"
      "symbolType": "tora",
      "quantity": 2000,
      "side": "BUY",
      "limitPrice": "0.0",
      "brokerAccount": "LongShort",
      "broker": "seb"
      "condition":"WORKED",
      "algoStrategy":"1111",
      "algoFields":{  
         "StartTime":"20191020-14:59:30",
         "EndTime":"20191020-15:59:30",
         "ParticipationRate":"30" //change the participation rate to 30
      }
    }
  }
});

Rate limits

Time Interval Max. Requests
1 minute 7500
1 hour 15000
1 day 15000
Parameter Values
action amend
params.order The specified parent order fields and the ones that need to be updated
params.skipAlgoParamValidation Indicates if the ALGO parameters specified into params.order.workBrkSpecATDL should be validated or not. This flag is optional and the default value is false.

Amending the parent order is similar to the parent register action, except that when performing this action, we only need to set the updated fields and the order identifier. There are a few constraints when amending the parent order: the parentId, orderId, clientOrderId, side or symbol fields cannot be changed. Also, the broker field can be changed only if the parent order is still in register state (not sent to the broker).





























Parent Amend & Send

Use the amendAndSend action and specify the required order fields, along with the parent order identifier: orderId or clientOrderId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "amendAndSend",
  "params": {
    "order": {
      "orderId": "AAEWu1vsKJYAAABX", // or "clientOrderId" : "order_2018-11-14_1"
      "limitPrice": "123.4"
    }
  }
});

The parent order is amended and sent

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "amendAndSend",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "AAEWu1vsKJYAAABX"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 7500
1 hour 15000
1 day 15000
Parameter Values
action amendAndSend
params.order The specified parent order fields and the ones that need to be updated
params.skipAlgoParamValidation Indicates if the ALGO parameters specified into params.order.workBrkSpecATDL should be validated or not. This flag is optional and the default value is false.

Currently, only the limitPrice field is eligible for this amendment. Specifying any other fields will be rejected.



Parent Cancel

Use the cancel action and specify the orderId or clientOrderId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "cancel",
  "params": {
    "orderId": "AAEWu1vsKJYAAABX"
    // or
    "clientOrderId" : "order_2018-11-14_1"
  }
});

The parent order is cancelled

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "cancel",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "AAEWu1vsKJYAAABX"
    // or
    "clientOrderId" : "order_2018-11-14_1"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 12500
1 hour 25000
1 day 25000
Parameter Values
action cancel
params.orderId The parent order with this ID will be cancelled
params.clientOrderId The parent order having this client order ID will be cancelled









Child Register

Use the register action and specify the required order fields, along with the parentId

// The parent order id needs to be specified
socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "register",
  "params": {
    "order": {
      "clientOrderId": "order_2018-11-14_1",
      "symbol": "CS.NULL.JAPAN.SP.JPY.2137",
      "symbolType": "tora",
      "quantity": 2000,
      "side": "BUY",
      "limitPrice": "0.0",
      "brokerAccount": "LongShort",
      "broker": "binance",
      "parentId": "AAEWu1vsKJYAAABX"
    }
  }
});

The child order is registered

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "register",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "U9W4IV0LOL8AB0JW"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000
Parameter Values
action register
params.order The specified child order fields
params.skipAlgoParamValidation Indicates if the ALGO parameters specified into params.order.workBrkSpecATDL should be validated or not. This flag is optional and the default value is false.

Please note that when slicing a parent order into several child orders, for each of the child orders that are being registered, the parent id field must be set; otherwise, this register action is treated as a basic parent register action.








Child Send

Use the send action and specify the orderId or the clientOrderId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "send",
  "params": {
    "orderId": "U9W4IV0LOL8AB0JW",
    // or
    "clientOrderId" : "order_2018-11-14_1",
    // optional
    "evaluateRelativePrice" : true,
    // optional
    "relativeTimeout" : 1000
  }
});

The child order is sent

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "send",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "U9W4IV0LOL8AB0JW"
    // or
    "clientOrderId" : "order_2018-11-14_1"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000
Parameter Values
action send
params.orderId The child order with this ID will be sent
params.clientOrderId Client specified order ID, useful for identifying the order on the client side
params.evaluateRelativePrice See Order Fields.
params.relativeTimeout See Order Fields.

This action is identical to the parent send one.






Child Register and Send

Use the registerAndSend action, and specify the required order fields, along with the parentId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "registerAndSend",
  "params": {
    "order": {
      "clientOrderId": "order_2018-11-14_1",
      "symbol": "CS.NULL.JAPAN.SP.JPY.2137",
      "symbolType": "tora",
      "quantity": 2000,
      "side": "BUY",
      "relativePrice": "BID+1",
      "account": "LongShort",
      "broker": "citi",
      "parentId": "AAEWu1vsKJYAAABX"
    }
  }
});

The child order is registered and sent

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "registerAndSend",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "U9W4IV0LOL8AB0JW"
    // or
    "clientOrderId" : "order_2018-11-14_1"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000
Parameter Values
action registerAndSend
params.orderId The child order with this ID will be registered and sent
params.clientOrderId The child order having this client order ID will be registered and sent
params.skipAlgoParamValidation Indicates if the ALGO parameters specified into params.order.workBrkSpecATDL should be validated or not. This flag is optional and the default value is false.

Please note that when slicing a parent order into several child orders, for each of the child orders that are being registered and sent, the parent id field must be set; otherwise, this register and send action is treated as a basic parent registerAndSend action.






Child Amend

Use the amend action and specify the required order fields, along with the child order identifier: orderId or clientOrderId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "amend",
  "params": {
    "order": {
      "orderId": "AAEWu1vsKJYAAABX", // or "clientOrderId" : "order_2018-11-14_1"
      "symbolType": "tora",
      "quantity": 4000,// increase the quantity to 4000
      "side": "BUY",
      "limitPrice": "0.0",
      "brokerAccount": "LongShort",
      "broker": "binance",
      "parentId": "AAEWu1vsKJYAAABX"
    }
  }
});

The child order is amended

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "amend",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "U9W4IV0LOL8AB0JW"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 7500
1 hour 15000
1 day 15000
Parameter Values
action amend
params.order The specified child order fields and the ones that need to be updated
params.skipAlgoParamValidation Indicates if the ALGO parameters specified into params.order.workBrkSpecATDL should be validated or not. This flag is optional and the default value is false.

Amending the child order is similar to the child register action, except that when performing this action, we only need to set the updated fields and the order identifier. There are a few constraints when amending the child order: the parentId, orderId, clientOrderId, side or symbol fields cannot be changed. Also, the broker field can be changed only if the child order is still in register state (not sent to the broker).





Child Amend & Send

Use the amendAndSend action and specify the required order fields, along with the child order identifier: orderId or clientOrderId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "amendAndSend",
  "params": {
    "order": {
      "orderId": "AAEWu1vsKJYAAABX", // or "clientOrderId" : "order_2018-11-14_1"
      "limitPrice": "123.4"
    }
  }
});

The child order is amended and sent

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "amendAndSend",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "U9W4IV0LOL8AB0JW"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 7500
1 hour 15000
1 day 15000
Parameter Values
action amendAndSend
params.order The specified child order fields and the ones that need to be updated
params.skipAlgoParamValidation Indicates if the ALGO parameters specified into params.order.workBrkSpecATDL should be validated or not. This flag is optional and the default value is false.

Currently, only the limitPrice field is eligible for this amendment. Specifying any other fields will be rejected.



Child Cancel

Use the cancel action and specify the orderId or clientOrderId

socket.send({
  "messageId": "2018-11-14_5",
  "service": "orders",
  "action": "cancel",
  "params": {
    "orderId": "U9W4IV0LOL8AB0JW"
    // or
    "clientOrderId" : "order_2018-11-14_1"
  }
});

The child order is cancelled

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "cancel",
  "messageReferenceId": "2018-11-14_5",
  "data": {
    "orderId": "U9W4IV0LOL8AB0JW"
    // or
    "clientOrderId" : "order_2018-11-14_1"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 12500
1 hour 25000
1 day 25000
Parameter Values
action cancel
params.orderId The child order with this ID will be cancelled
params.clientOrderId The child order having this client order ID will be cancelled

This action is identical to the parent cancel one.








Manual Execution

Use the manualExecution action in order to create a manual execution as you would from the manual orders pad

// Send a manual fill
socket.send({
  "messageId": "FUT-a7c822d-1",
  "service": "orders",
  "action": "manualExecution",
  "params": {
    "execution": {
      "broker": "daiwa",
      "brokerAccount": "BA1",
      "clientOrderId": "FUT-a7c822d-1",
      "condition": "NORMAL",
      "orderType": "STLMT",
      "price": 31222.35,
      "quantity": 2,
      "side": "BUY",
      "specialInstruction": "Funari",
      "symbol": "FUT.IDX.NK225.OS.JPY.202403",
      "symbolType": "tora",
      "brokerOrdTypeFlag": "cfd",
      "settlementDate": "2023-12-18",
      "fillTime": "2024-01-16T10:11:12.345Z",
      "commission": 0.3,
      "initiator": "initiatorWSGW FUT 1",
      "fxRate": 13.4
    }
  });

//The successful action gets the following ack message
{
    "messageId": "49bb2d7f-058f-4987-aacd-538005d3592f",
    "service": "orders",
    "event": "manualExecution",
    "messageReferenceId": "FUT-a7c822d-1",
    "data": {
        "orderId": "AAAS7GV8AioAAACJ"
    },
    "status": {
        "code": 0,
        "message": "Ok"
    }
}
//On the order subscription this update will be received
{
    "messageId": "e58099f6-9f3b-494b-9b3b-2bd4a80fb197",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "test order subscription"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GV8AioAAACO",
                "clientOrderId": "FUT-a7c822d-1",
                "isParent": false,
                "parentId": "AAAS7GV8AioAAACJ",
                "symbol": "FUT.IDX.NK225.OS.JPY.202403",
                "exchange": "OS",
                "broker": "daiwa",
                "side": "BUY",
                "quantity": 2.0,
                "limitPrice": 31222.35,
                "owner": "testuser",
                "flowType": "DMA",
                "brokerAccount": "BA1",
                "state": "FILD",
                "executedQuantity": 2.0,
                "creationTime": "2023-12-15T07:42:35.508000Z",
                "lastUpdateTime": "2023-12-15T07:42:35.920000Z",
                "status": "OK",
                "executedValue": 62444.7,
                "notionalValue": 6.24447E7,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "condition": "NORMAL",
                "orderType": "LIMIT",
                "averagePrice": 31222.35,
                "dayAvgPx": 31222.35,
                "currentMarginFlag": "None",
                "externalId": "FUT-a7c822d-1",
                "lastUpdateOwner": "testuser",
                "limitStatus": "APPR",
                "manualExecution": "Y",
                "margin": "None",
                "brokerOrdTypeFlag": "cfd",
                "creatorComponent": "WSGW",
                "lastExecutedTime": "2023-12-08 10:11:12.345 UTC 678us",
                "note": "Funari",
                "originator": "testuser",
                "pendingQuantity": 0.0,
                "productNativeCode": "169030018",
                "settlementDate": "2023-12-18 14:59:59.000 GMT 0us",
                "strategyId": "AAAS7GV8AioAAACJ",
                "strategyType": -1,
                "isHidden": true
            },
            {
                "orderId": "AAAS7GV8AioAAACJ",
                "clientOrderId": "FUT-a7c822d-1",
                "isParent": true,
                "symbol": "FUT.IDX.NK225.OS.JPY.202403",
                "exchange": "OS",
                "broker": "daiwa",
                "side": "BUY",
                "quantity": 2.0,
                "limitPrice": 31222.35,
                "owner": "testuser",
                "flowType": "DMA",
                "brokerAccount": "BA1",
                "state": "FILD",
                "executedQuantity": 2.0,
                "creationTime": "2023-12-15T07:42:34.283000Z",
                "lastUpdateTime": "2023-12-15T07:42:35.920000Z",
                "status": "OK",
                "executedValue": 62444.7,
                "notionalValue": 6.24447E7,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "condition": "NORMAL",
                "orderType": "LIMIT",
                "averagePrice": 31222.35,
                "dayAvgPx": 31222.35,
                "currentMarginFlag": "None",
                "externalId": "FUT-a7c822d-1",
                "lastUpdateOwner": "testuser",
                "limitRequestId": "AAAS7GV8AioAAACQ",
                "limitStatus": "APPR",
                "manualExecution": "Y",
                "margin": "None",
                "brokerOrdTypeFlag": "cfd",
                "creatorComponent": "WSGW",
                "note": "Funari",
                "originator": "testuser",
                "pendingQuantity": 0.0,
                "productNativeCode": "169030018",
                "settlementDate": "2023-12-18 14:59:59.000 GMT 0us",
                "childQuantity": 2.0
            }
        ],
        "isComplete": true
    }
}

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000
Parameter Values
action manualExecution
params See Execution Params

Notes:
- creating a manual execution will create an order as well (parent or a child order if parentId is specified)
- some order params that make sense for a manual execution will apply (Order Fields)

Manual Execution Fields

Parameter Type Format Description GUI fields
allocationMethod string - Specified allocation method for this order; can be either the predefined allocation method name, or it can be a custom allocation string AllocationMethod
bestExec string - BestEx; Example values: Cost, Natur, Other, Price, Settlement, Size, Speed, etc BestEx
broker string - Order execution broker Broker
brokerAccount string - Indicates the specified account a client has at a certain broker BrokerAccount
brokerOrdTypeFlag string - Populated for orders flagged with a specific destination at the broker, shown as BrkFlag in GUI. Examples: prg, jmc, wap, etc BrkFlag
clientOrderId string - The client order identifier
condition string ENUM The condition of the traded order. The possible conditions are: NORMAL, WORKED Condition
fillTime string TIMESTAMP Timestamp of the fill. Allowed format: ISO 8601 e.g. 2024-01-16T10:11:12.345Z Fill time
fxRate number DEC FXRate FXRate
initiator string - Order initiator Initiator
note string - Order note Comments
parentId string UUID If the manual fill is for a child order, this will hold the parent order identifier. Parent ID
quantity number DEC Order quantity Quantity
settlementDate string YYYY-MM-DD Order settlement date Settlement Date
specialInstruction string - Special order instruction; Possible values: NI, OnClose, OnOpen, Funari, etc Special instruction
side string ENUM Order side; possible values: BUY, SELL, BTC, SHORT, SSE Side
symbol string - Instrument symbol this order is traded. If the symbolType has value forex then the symbol field must contains the pair of FX currencies separated by slash /
symbolType string ENUM Specifies the listing symbol used for this subscription. Possible values: caspian, bloomberg, reuters, tora, forex; if missing, defaults to tora
synthType string - Populated for the orders placed on a synthetic instrument. Examples: swp, cfd, etc, will be empty for normal orders SynthType
tag string - Order custom tag Tag
tradeBook string - Indicates the specified tradebook for this order Trade Book












Order End Of Day events

// The orders are frozen
{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "data": {
    "orders": [{
      "orderId": "SUF/GlqBWG8AAq/j",
      "isFrozen": true,
      //..rest of the order fields
      },
      "orderId": "SUF/GlqBWG8AA/aa",
      "isFrozen": true,
      //..rest of the order fields
      },
      //..rest of the frozen orders   
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

// The orders are cleared
{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "test order subscription"
  },
  "data": {
    "orders": [{
      "orderId": "SUF/GlqBWG8AAq/j",
      "isFrozen": true,
      "isDeleted": true,
      //..rest of the order fields
      },
      "orderId": "SUF/GlqBWG8AA/aa",
      "isFrozen": true,
      "isDeleted": true,
      //..rest of the order fields
      },
      //..rest of the frozen orders   
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

The Freeze event resets intraday positions and marks eligible orders as frozen (all orders are eligible to be frozen, but the TIF orders). A frozen order has isFrozen: true, and can still be found inside the system, but the actions allowed upon them are limited. Frozen orders do not allow any amends other than amending the: Trade Book, Internal Account, Broker Account, User Comment (and SOI), Tag, Allocation Method, Commission, Settlement Date. Amending the allocation method on frozen orders results in re-allocation of the positions, exactly as it does for the regular/active orders.

Also, any incoming fill from the broker on a frozen order, will not be accepted. In case a fill will come from the broker on a frozen order, a warning will be triggered in the Monitor application, so that support will be able to contact the broker.

Position columns affected by the freeze event:

Name Description
Position SOD Current day start of day position
Position Intraday Current day intraday position (affected by orders traded throughout the day)
Position EOD Current day end of day position (sum of SOD + Intraday)
T-1 Position SOD Previous trading day start of day position
T-1 Position Intraday Previous trading day intraday position
T-1 Position EOD Previous trading day end of day position

The Clear event transfers positions to previous positions, and resets the intraday position, deleting frozen orders from the system. The order will be updated with isDeleted: true, signaling its removal inside the OEMS.

At a Freeze event, the orders will stop contributing to the calculations of the intraday position, and will be considered in the calculations of the Yesterday position. (also known as the Frozen position)

Position Before Freeze After Freeze
Intraday position P1 0
T-1 Intraday position P2 P1

The Freeze event is considered to be the end of the Trading day. This means that the start of day position needs to be ‘prepared’ for the next trading day. In order to accomplish this, the SOD position will need to reflect all the positions that were traded throughout the previous trading day, meaning that SOD position will become equal to the end of day position (New Current Day SOD = Old Current Day SOD + Old Current Day Intraday)

The newly calculated SOD position can be overwritten by the client’s SOD process (process that retrieves an SOD file from the client’s external system and applies the SOD values over the system’s calculated values).

Also, because the client still needs to see what his SOD was for the previous trading day, the current day start of day position will be copied over to the previous trading day start of day position.

Position Before Freeze After Freeze
Intraday position P1 0
Intraday SOD P2 P2 + P1
T-1 Intraday position P3 P1
T-1 SOD P4 P2

Extra Order Samples

Executions

Parameter Values
service executions

The executions service provides information on the executions inside the system. The authenticated client can perform the execution actions detailed bellow:

The multi-leg executions allow for much more granular tracking and reporting multi-part orders.

Execution Subscription

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "executions",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test execution subscription",
    "symbolType": "tora"
  }
});

The initial executions image is retrieved:

// First message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "test execution subscription"
  },
  "data": {
    "executions": [...]
  }
}

// Last message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "test execution subscription"
  },
  "data": {
    "executions": [...],
    "isComplete": "true"
  }
}
Parameter Values
action subscribe

The client is ready to receive updates on the executions that are present in the system.

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Subscription Parameters

Parameter Type Format Description
subscriptionId string - Identifier for the subscription. Based on this information, a subscription can be updated or removed
symbolType string ENUM Specifies the listing symbol used for this subscription. Possible values: caspian, bloomberg, reuters, tora, forex; if missing, defaults to tora
filter object - Instructs the orders service to return all the executions that match this filter

Subscription Reply

Request is successful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "executions",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test execution subscription",
    "symbolType": "tora"
  },
  "status": {
    "code": 0,
    "message": "Subscribe OK."
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "executions",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test execution subscription",
    "symbolType": "tora"
  },
  "status": {
    "code": 201,
    "message": "Invalid subscription: <reason>."
  }
}
Parameter Values
event subscribe
params The client subscription parameters
status The status of this subscription

Execution Updates

The initial execution image is retrieved:

// The initial image
{
  "messageId": "bb60e356-b325-4ef3-bc5d-c75eb95697ef",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "test execution subscription"
  },
  "data": {
    "executions": [{
      "executionId": "AAAhkFwECXwAAACw",
      "orderId": "SUF/GlqBWG8AAq/j",
      "time": "2018-11-06T16:51:22.000Z",
      "broker": "ml",
      "side": "SELL",
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "quantity": 500,
      "price": 6250.54,
      "owner": "george"
      },
      {
      "executionId": "AAAhkFwECXwAAAdi",
      "orderId": "SUF/GlqBWG8AAq/j",
      "time": "2018-11-06T16:51:25.000Z",
      "broker": "ml",
      "side": "SELL",
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "quantity": 200,
      "price": 6250.54,
      "owner": "george"
      }
    ],
    "isComplete": "true"
  }
}

// Subsequent update
{
  "messageId": "db744fdb-596c-4b52-b759-16e6f291b5e4",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "test execution subscription"
  },
  "data": {
    "executions": [{
      "executionId": "AAAhkFwECXwAAAdm",
      "orderId": "SUF/GlqBWG8AAq/j",
      "time": "2018-11-06T16:51:22.000Z",
      "broker": "ml",
      "side": "SELL",
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "quantity": 100,
      "price": 6250.54,
      "owner": "george"
      }
    ]
  }
}

//Execution for multi-leg order
{
  "messageId": "8bea7199-c72f-4570-965b-3e91c18749de",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "execSubscriptionMsgIdUprDt2dQiekAAAAw"
  },
  "data": {
    "executions": [
      {
        "executionId": "AAAhj2dQiwUAAAAS",
        "orderId": "AAAJYWdQitkAAACJ",
        "symbol": "SPR.FUT.ATW.IEU.USD.202810-3M",
        "quantity": 1000.0,
        "price": 10.0,
        "time": "2024-12-04T17:02:32.000000Z",
        "owner": "TestUser1",
        "broker": "simu",
        "side": "BUY",
        "fixExecId": "headExecIdPartialFill",
        "parentId": "AAAJYWdQitkAAAB8",
        "originator": "TestUser1",
        "currentSentQty": 1000.0,
        "marginFlag": "None",
        "lastModifiedTime": "1733331753072",
        "orderExchange": "IEU",
        "legs": [
          {
            "symbol": "FUT.CMDT.ATWM.ICE.USD.202812",
            "side": "BUY",
            "executions": [
              {
                "executionId": "AAAhj2dQiwUAAAAT0",
                "fixExecId": "legExecIdATWMZ8UprDt2dQiekAAABP",
                "price": 10.0,
                "quantity": 1000.0
              }
            ]
          },
          {
            "symbol": "FUT.CMDT.ATWM.ICE.USD.202810",
            "side": "BUY",
            "executions": [
              {
                "executionId": "AAAhj2dQiwUAAAAU0",
                "fixExecId": "legExecIdATWMV8UprDt2dQiekAAABR",
                "price": 10.0,
                "quantity": 1000.0
              }
            ]
          },
          {
            "symbol": "FUT.CMDT.ATWM.ICE.USD.202811",
            "side": "BUY",
            "executions": [
              {
                "executionId": "AAAhj2dQiwUAAAAV0",
                "fixExecId": "legExecIdATWMX8UprDt2dQiekAAABT",
                "price": 10.0,
                "quantity": 1000.0
              }
            ]
          }
        ]
      }
    ]
  }
}
Parameter Values
event update
params The client subscription parameters
data.executions The list of executions that were updated
data.isComplete Is set, and the value is true when the initial executions image transfer is complete

Execution Fields

Parameter Type Format Description GUI Fields
executionId string UUID Execution identifier
fixExecId string - FIX execution id received from broker or executionId if this is a manual execution.
fixExecRefId string - FIX execution reference id provided by the broker or executionId of the canceled/corrected execution if the action was performed from GUI.
Available only for canceled and corrected executions.
orderId string UUID Order identifier for which this execution is received OrderID
time string TIMESTAMP Execution time
broker string - Execution broker Broker
side string ENUM Execution side. Possible values BUY, SELL, BTC, SHORT, SSE Side
symbol string - Instrument symbol this execution is received
quantity number DEC Execution quantity Quantity
price number DEC Execution price Price
owner string - Order owner Owner
isFrozen boolean - Indicated whether this execution was frozen during the EOD Events
isDeleted boolean - Indicated whether this execution was removed from the system
isCanceled boolean - Indicates whether this execution was canceled or corrected, either by the broker or manually from UI
isSuspended boolean - Indicates whether this execution was suspended
isManual boolean - Indicates whether this execution was manually added Manual Flag
legs object - An object used to indicates the data fields of legs
legs -> name string - Indicates the name of leg; possible values:near, far
legs -> quantity string - Indicates the quantity of leg.
legs -> settlementDate string yyyyMMdd Indicates the settlement date of FXFWD/FXSWP's legs.
legs -> tenor string - Indicates the tenor code used to indicate the settlement date of FXSWP's legs. If it is missing, then the settlementDate value can be used. Examples: SPOT, TOM, 1W, 6M, 5Y
legs -> symbol string - Instrument symbol this leg is received
legs -> side string ENUM Execution side. Possible values BUY, SELL, BTC, SHORT, SSE Side
legs -> executions object - An object used to indicate the data fields of legs executions.
legs -> executions -> executionId string UUID Leg execution identifier
legs -> executions -> fixExecId string - FIX leg execution id received from broker or executionId if this is a manual execution.
legs -> executions -> price number FLOAT Leg execution price Price
legs -> executions -> quantity number FLOAT Leg execution quantity Quantity
executionExchange string - Provides the execution exchange Execution Exchange
execExtraFields object - Extra information for this execution, fields as ExecutingBroker, TriggerExecId, FlowType, WorkedType, BrokerSpecific, BrokerSpecificATDL, BrokerSpecificStratATDL, ATDLDescription, CommissionType, CommissionAmt, CommissionCcy, Predicted
note string - Execution note
parentId UUID - Parent order id for which this execution was received
originator string - Order originator for which this execution was received Originator
currentSentQty number DEC Remaining quantity at the exchange
marginFlag string - The order margin flag. Possible values: missing, Open, Close
qJump string - Queue jump flag. Set to Y when this order jumped the queue
lastModifiedTime string TIMESTAMP Last modified time
counterPartyId string - The identifier for the execution counter party
orderExchange string - Order exchange
lastLiquidityIndicator number DEC LAst liquidity indicator
lastCapacity number DEC Last capacity

Subscription filters

Subscribe for all executions:

socket.send({
  "messageId": "7e4bcc3c-8018-4f70-b6fa-f5a94fb077c3",
  "service": "executions",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test execution subscription - all executions",
    "symbolType": "tora"
  }
});

All executions are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "7e4bcc3c-8018-4f70-b6fa-f5a94fb077c3",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "test execution subscription - all executions"
  },
  "data": {
    "executions": [...]
  }
}

Subscribe for specific order's executions:

socket.send({
  "messageId": "4f4cc9ac-94f4-48b4-a2e2-ccad8cc8cbbb",
  "service": "executions",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test execution subscription - specific executions",
    "symbolType": "tora",
    "filter": {
      "orderId": "someOrderId"
    }
  }
});

All executions are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "4f4cc9ac-94f4-48b4-a2e2-ccad8cc8cbbb",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "test execution subscription - specific executions"
  },
  "data": {
    "executions": [...]
  }
}
Filter Parameter Values
orderId Instructs the executions service to return all specific order's executions














































Execution End Of Day events

// The executions are frozen
{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "test execution subscription"
  },
  "data": {
    "executions": [{
      "executionId": "SUF/GlqBWG8AAq/j",
      "isFrozen": true,
      //..rest of the execution fields
      },
      "executionId": "SUF/GlqBWG8AA/aa",
      "isFrozen": true,
      //..rest of the execution fields
      },
      //..rest of the frozen executions   
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

// The executions are cleared
{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "executions",
  "event": "update",
  "params": {
    "subscriptionId": "test execution subscription"
  },
  "data": {
    "executions": [{
      "executionId": "SUF/GlqBWG8AAq/j",
      "isFrozen": true,
      "isDeleted": true,
      //..rest of the execution fields
      },
      "executionId": "SUF/GlqBWG8AA/aa",
      "isFrozen": true,
      "isDeleted": true,
      //..rest of the execution fields
      },
      //..rest of the frozen executions   
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

In a similar manner we described for orders, the Freeze event marks eligible executions as frozen. A frozen execution has isFrozen: true, and can still be found inside the system.

Please note that any incoming fill from the broker on a frozen order, will not be accepted.

The Clear event deletes frozen executions from the system. The execution will be updated with isDeleted: true, signaling its removal inside the OEMS.

Positions

Parameter Values
service positions

The positions service provides information on the positions inside the system. The authenticated client can perform the position actions detailed bellow:

Positions are computed by a service in the back-end based on the provided subscription params.

Imagine you have a bunch of fields holding information, and you want to consolidate that based on some criteria: {key1: "a1", key2: "b1", value: 5} {key1: "a1", key2: "b2", value: 10} {key1: "a1", key2: "b1", value: 15}

If you subscribe with groupBy=["key1"], you will receive an update having the following data: [{key1: "a", value: 30}], but if you subscribe with groupBy=["key1", "key2"], you will receive the following data:[{key1: "a1", key2: "b1", value: 20},{key1: "a1", key2: "b2", value: 10}].

Position Subscription

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "positions",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test position subscription",
    "symbolType": "tora",
    "groupBy": [..]
  }
});

The initial positions image is retrieved:

// First message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "positions",
  "event": "update",
  "params": {
    "subscriptionId": "test position subscription"
  },
  "data": {
    "positions": [...]
  }
}

// Last message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "positions",
  "event": "update",
  "params": {
    "subscriptionId": "test position subscription"
  },
  "data": {
    "positions": [...],
    "isComplete": "true"
  }
}
Parameter Values
action subscribe

The client is ready to receive updates on the positions that are present in the system, grouped according to the groupBy specifications

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Subscription Parameters

Parameter Type Format Description
subscriptionId string - Identifier for the subscription. Based on this information, a subscription can be updated or removed
symbolType string ENUM Specifies the listing symbol used for this subscription. Possible values: caspian, bloomberg, reuters, tora, forex; if missing, defaults to tora
groupBy list - Holds a list of values representing the criteria on which the positions will be aggregated; the values are: product, exchange, country, displayCode, ricCode, bbgCode, owner, broker, brokerAccount, internalAccount, tradebook, allocated, syntheticsFlag, tag

Position subscriptions can be organized by grouping and splitting positions according to shared criteria with the groupBy parameter provided in the subscription. Multiple groupings are allowed.

Option Description
product This is the default position grouping
exchange Receive position data further split out into one record per exchange
country Receive position data further split out into one record per country
displayCode Receive position data further split out into one record per display code
ricCode Receive position data further split out into one record per Reuters code
bbgCode Receive position data further split out into one record per Bloomberg code
owner Receive position data further split out into one record per order owner
broker Receive position data further split out into one record per broker
brokerAccount Receive position data further split out into one record per broker account
internalAccount Receive position data further split out into one record per internal account
tradebook Receive position data further split out into one record per trade book
syntheticsFlag Receive position data further split out into one record per synthetic flag
tag Receive position data further split out into one record per tag
allocated Receive position data further split out based on the assigned allocation methods. Please note that positions must also be grouped by the account identifier to which allocation methods are mapped (e.g. Broker Account, Internal Account, etc.)

Subscription Reply

Request is successful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "positions",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test position subscription",
    "symbolType": "tora",
    "groupBy": [..]
  },
  "status": {
    "code": 0,
    "message": "Subscribe OK."
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "positions",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test position subscription",
    "symbolType": "tora",
    "groupBy": [..]
  },
  "status": {
    "code": 201,
    "message": "Invalid subscription: <reason>."
  }
}
Parameter Values
event subscribe
params The client subscription parameters
status The status of this subscription

Position Updates

The initial position image is retrieved:

// The initial image
{
  "messageId": "bb60e356-b325-4ef3-bc5d-c75eb95697ef",
  "service": "positions",
  "event": "update",
  "params": {
    "subscriptionId": "test position subscription"
  },
  "data": {
    "positions": [{
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "brokerAccount": "ARDITI",
      "internalAccount": "hoarding",
      "longPosition": 24000,
      "realizedPL": 18546300.87,
      "longPendingPosition": 300     
      },
      {
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "brokerAccount": "ARDITI",
      "internalAccount": "spending",
      "shortPosition": 2500,
      "realizedPL": 5180653.29,
      "shortPendingPosition": 0 
    }
    ],
    "isComplete": "true"
  }
}

{
  "messageId": "39ebb84c-e7c5-4c70-9c80-ce7c7b0cd242",
  "service": "positions",
  "event": "update",
  "params": {
    "subscriptionId": "test position subscribe"
  },
  "data": {
    "positions": [{
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "brokerAccount": "DECIMA",
      "internalAccount": "assault",
      "longPosition": 24100,
      "realizedPL": 18552501.73,  
      },
      {
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "brokerAccount": "DECIMA",
      "internalAccount": "amber",
      "longPendingPosition": 200
    }],
    "isComplete": "true"
  }
}

// Subsequent update
{
  "messageId": "23388ad9-7600-4126-b49d-964149b9dfa5",
  "service": "positions",
  "event": "update",
  "params": {
    "subscriptionId": "test position subscribe"
  },
  "data": {
    "positions": [{
      "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
      "brokerAccount": "DECIMA",
      "internalAccount": "assault",
      "longPosition": 24200,
      "realizedPL": 18558801.31  
      }]
  }
}
Parameter Values
event update
params The client subscription parameters
data.positions The list of positions that were updated
data.isComplete Is set, and the value is true when the initial position image transfer is complete

Position Fields

Parameter Type Format Description GUI Fields
allocated string - Indicated the specified allocation method this position is grouped on; can be either the predefined allocation method name, or it can be a custom allocation string
broker string - Position execution broker Broker
brokerAccount string - Indicates the specified account at the broker this position is grouped on BrokerAccount
exchange string - Position exchange Ex
internalAccount string - Indicates the internal account this position is grouped on Internal Account
owner string - Position owner
symbol string - Instrument symbol this position is traded
syntheticsFlag string - Provides the synthetic instrument code. Possible values are SWAP, CFD or empty. Synth Flag
tag string - Position custom tag Tag
tradeBook string - Indicates the specified trade book this position is grouped on Trade book
borrowExecuted number DEC Intra-day borrow position BW Pos
borrowSod number DEC Start of day borrow position BW SOD
borrowEod number DEC End of day borrow position, which is calculated as follows: borrowSod + borrowExecuted BW EOD
borrowPending number DEC Pending borrow position BW Pend
btcQuantity number DEC Buy to cover quantity
pendingBtcPosition number DEC The buy to cover pending position for orders at exchange (SENT, PSEN, PAMD, PCAN)
pendingBtcPositionComplete number DEC The buy to cover pending position for all orders (SENT, PSEN, PAMD, PCAN, REDG)
longPosition number DEC The long intra-day position, including buy to cover Position
shortPosition number DEC The short intra-day position, including short sell Position
netPosition number DEC The net value of the intra-day position, which is calculated as follows: longPosition - shortPosition Position
startOfDayPosition number DEC The position as of the start of day SOD Position
startOfDayNotionalUsd number DEC The startOfDayPosition value in USD
eodOfDayPosition number DEC The end of day Position, which is calculated as follows: startOfDayPosition + netPosition EOD Position
shortSellQuantity number DEC The short sell position
btcQuantity number DEC The buy to cover position
netValue number DEC The net value of this position, which is calculated as follows: grossValue + cost
longNotional number DEC The value of the longPosition, which is calculated as follows: longPosition * longAvgPx Long Notional
shortNotional number DEC The value of the shortPosition, which is calculated as follows: shortPosition * shortAvgPx Short Notional
realizedPL number DEC The sum of next values: value resulted from offsetting startOfDayPosition against netPosition using SOD Price (if there is no SODPrice, the BasePrice is used; if there is no BasePrice either, the ClosePrice is used) and using dayAvgPx (Long AVG or Short AVG, depends on the SOD, if it is Short or Long); value resulted from offsetting positions longPosition against shortPosition (what was left from offsetting SOD) using Day ShortAVGprice and Day LongAVGprice; value of Cost Realized P&L
totalPL number DEC The sum of next values: value resulted from closing position longPosition (with Long Avg Price) at current LastPx; value resulted from closing position shortPosition (with Short Avg Price) at current LastPx; value resulted from closing position SOD (with SOD Price or LastClosePx if not provided by user) at current LastPx. Total P&L
unrealizedPL number DEC The value computed as follows: totalPL - realizedPL Unrealized P&L
closePrice number DEC The close price for the traded product ClosePx
buyPosition number DEC The intra-day buy position, computed as follows: longPosition - btcQuantity
buyPendingPosition number DEC The buy (excluding buy to cover) pending position for orders at exchange (SENT, PSEN, PAMD, PCAN)
buyPendingValue number DEC The buyPendingPosition value
sellPosition number DEC The intra-day sell position, computed as follows: shortPosition - shortSellQuantity
sellPendingPosition number DEC The sell (excluding short sell) pending position for orders at exchange (SENT, PSEN, PAMD, PCAN)
sellPendingValue number DEC The sellPendingPosition value
navPercent number DEC The value for the position that is calculated according to the allocation method. The value displayed is calculated as MarketValue/(fund1_nav + fund2_nav + ...) NAV %
intraDayPL number DEC The P&L for the intra-day position, which does not include the SOD. IntradayP&L = (LongPosition * (longAvgPx - LastPx) * Multiplier) + (ShortPosition * (LastPx - ShortAvgPx) * Multiplier) + Cost Intraday P&L
longPendingPosition number DEC The buy (including BTC) pending position for orders at exchange (SENT, PSEN, PAMD, PCAN)
longPendingPositionComplete number DEC The buy (including BTC) pending position for all orders (SENT, PSEN, PAMD, PCAN, REDG)
longPendingValue number DEC The value of the longPendingPosition for orders at exchange (SENT, PSEN, PAMD, PCAN)
longPendingValueComplete number DEC The value of the longPendingPosition for all orders (SENT, PSEN, PAMD, PCAN, REDG)
shortPendingPosition number DEC The sell (including short sell) pending position for orders at exchange (SENT, PSEN, PAMD, PCAN)
shortPendingPositionComplete number DEC The sell (including short sell) pending position for all orders (SENT, PSEN, PAMD, PCAN, REDG)
shortPendingValue number DEC The value of the shortPendingPosition for orders at exchange (SENT, PSEN, PAMD, PCAN)
shortPendingValueComplete number DEC The value of the shortPendingPosition for all orders (SENT, PSEN, PAMD, PCAN, REDG)
shortSellPendingPosition number DEC The short sell pending position for orders at exchange (SENT, PSEN, PAMD, PCAN)
shortSellPendingPositionComplete number DEC The short sell pending position for all orders (SENT, PSEN, PAMD, PCAN, REDG)
longCostValue number DEC Commission resulted from building the longPosition. Calculated as sum for each trade: trade_shares * CostPerShare + trade_value * BpsCost Cost
shortCostValue number DEC Commission resulted from building the shortPosition. Calculated as sum for each trade: trade_shares * CostPerShare + trade_value * BpsCost Cost
multiplier number DEC Multiplier for the instrument of the position
usdValue number DEC The value of this position in USD
cfdSod number DEC CFD for the start of day
cfdEod number DEC CFD for the end of day
settledQty number DEC SOD position which has been settled intra-day settledpos
lastPrice number DEC The last price of the symbol on which the order was created LastPx

Analytics

Parameter Values
service analytics

The analytics service provides information on the execution performance for the orders inside the system. The authenticated client can perform the execution actions detailed bellow:

Analytics Subscription

Parameter Values
action subscribe

The client is ready to receive updates with analytical data computed for the orders that are present in the system.

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Subscription Parameters - Symbol Based

// Subscribe for analytical data based on symbol and time interval
socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "analytics",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test analytics subscription - symbol",
    "symbolType": "tora"
    "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
    "startTime": "2019-01-06T16:34:41.000Z",
    "endTime": "2019-01-07T03:15:22.000Z"
  }
});

// Reply
{
  "messageId": "351010c3-bc38-4b40-8ff2-d6f669399cd5",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "analytics",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test analytics subscription - symbol",
    "symbolType": "tora"
    "symbol": "CS.NULL.JAPAN.SP.JPY.1449",
    "startTime": "2019-01-06T16:34:41.000Z",
    "endTime": "2019-01-07T03:15:22.000Z"
  },
  "status": {
    "code": 200,
    "message": "Subscribe OK."
  }
}
Parameter Type Format Description
subscriptionId string - Identifier for the subscription. Based on this information, a subscription can be updated or removed
symbolType string ENUM Specifies the listing symbol used for this subscription. Possible values: caspian, bloomberg, reuters, tora; if missing, defaults to tora
symbol string - Instructs the orders service to return all the executions that match this filter
startTime string TIMESTAMP Instructs the analytics service to provide data computed for an interval that begins with this timestamp
endTime string TIMESTAMP Instructs the analytics service to provide data computed for an interval that ends with this timestamp; this parameter is not required, and if it is not present, the analytics data will be updated each time a new trade occurs

Subscription Parameters - Order Based

// Subscribe for analytical data based on order
socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "analytics",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test analytics subscription - order",
    "orderId": "..."
    "useRegisterTime": true,
    //"useAlgoStartTime": true,
    "untilClose": true,
    "includeOTCTrades": "false"
  }
});

// Reply
{
  "messageId": "351010c3-bc38-4b40-8ff2-d6f669399cd5",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "analytics",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test analytics subscription - order",
    "orderId": "..."
    "useRegisterTime": true,
    //"useAlgoStartTime": true,
    "untilClose": true,
    "includeOTCTrades": "false"
  },
  "status": {
    "code": 200,
    "message": "Subscribe OK."
  }
}
Parameter Type Format Description
subscriptionId string - Identifier for the subscription. Based on this information, a subscription can be updated or removed
orderId string - The order id for which we subscribe for analytics data
userRegisterTime boolean - Start computing analytics data starting from the moment the order was Registered in the system; if this property is missing and any other options are missing, this is defaulted to true
userAlgoStartTime boolean - Instructs the analytics service to provide data computed for an interval that begins with the algo start time which was set on the order
untilClose boolean - Instructs the analytics service to provide data computed for an interval that ends with the market close time; this parameter is not required, and if it is not present, the analytics data will be computed for as long as the order is live
includeOTCTrades boolean - Instructs the analytics service to include in the computed data the orders that were traded on OTC instruments. If this property is missing, it will be considered false

Analytics Updates

{
  "messageId": "351010c3-bc38-4b40-8ff2-d6f669399cd5",
  "messageReferenceId": "9817706c-c941-4d04-97dd-df77f1a4aecb",
  "service": "analytics",
  "event": "update",
  "params": {
    "subscriptionId": "test analytics subscribe"
  },
  "data": {
    "vwap": 5820.35,
    "accumulated": 656543435
  }
}

{
  "messageId": "107864dc-92fa-4c0d-aff3-c605a85bfa73",
  "messageReferenceId": "9817706c-c941-4d04-97dd-df77f1a4aecb",
  "service": "analytics",
  "event": "update",
  "params": {
    "subscriptionId": "test analytics subscribe"
  },
  "data": {
    "vwap": 5820.38,
    "accumulated": 656546835
  }
}

Parameter Values
event update
params The client subscription parameters
data.vwap The volume weighted average price (VWAP), representing a trading benchmark used to validate the performance of the trade
data.accumulated Represents the accumulated volume and holds the total volume traded for the symbol during the time specified in the parameters

Trading Capabilities

Parameter Values
service tradingcapabilities

The trading capabilities service provides information on the user valid actions. The authenticated client can query the capabilities:

Capabilities Subscription

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "tradingcapabilities",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test capabilities subscription"
  }
});

Request is successful, the returned JSON is similar to:


{
  "messageId": "a45a5ecf-b0ac-4d37-a0e6-386d10b6dbf2",
  "service": "tradingcapabilities",
  "event": "update",
  "params": {
    "subscriptionId": "6"
  },
  "data": {
    "tradingcapabilities": [
    {
        "group": "BDornean",
        "user": "bdornean",
        "brokerCountryModeling": {
        "markets": [
            "CS.NULL.HKG.*.*"
        ],
        "flows": [
            "DMA"
        ],
        "brokers": [
            "phill",
            "unspec"
        ],
        "filters": [
            {
            "field": "MARKET",
            "values": [
                "CS.NULL.HKG.*.*"
            ],
            "allowed": [
                {
                "field": "FLOW",
                "values": [
                    "DMA"
                ],
                "allowed": [
                    {
                    "field": "BROKER",
                    "values": [
                        "phill",
                        "unspec"
                    ],
                    "allowed": [
                      {
                        "field": "BROKER_FLAGS",
                        "values": [
                          "prg", "aut"    
                        ],
                        "defaultValue": "prg",
                        "mandatory": true
                      },
                      {
                        "field": "SYNTH_FLAGS",
                        "values": [
                          "cfd", "swp"    
                        ],
                        "defaultValue": "swp",
                        "mandatory": false
                      },
                      {
                        "field": "OPEN_CLOSE",
                        "values": [
                          "OPEN", "CLOSE"    
                        ],
                        "defaultValue": ""
                      }
                    ]
                    }
                ]
                }
            ]
            }
        ]
        },
        "accountModel": {
        "brokerAccounts": [
            "QII_Main",
        ],
        "tradebooks": [
            "trdx",
            "trdy",
            "tb1",
        ],
        "internalAccounts": [
            "acc2",
            "acc1",
        ],
        "filters": [
            {
            "field": "MARKET",
            "values": [
                "CS.NULL.HKG.*.*"
            ],
            "allowed": [
                {
                "field": "INTERNAL_ACCOUNT",
                "values": [
                    "IA1",
                    "IA2"
                ],
                "allowed": [
                    {
                    "field": "TRADEBOOK",
                    "values": [
                        "TB1"
                    ],
                    "allowed": [
                        {
                        "field": "ALLOCATION_METHOD",
                        "values": [
                            "AM1"
                        ],
                        "allowed": [
                            {
                            "field": "BROKER_ACCOUNT",
                            "values": [
                                "BA1"
                            ],
                            "allowed": [
                                {
                                "field": "BROKER",
                                "values": [
                                    "msdw",
                                    "gs",
                                    "ml"
                                ],
                                "defaultValue": "ml"
                                }
                            ]
                            }
                        ]
                        }
                    ]
                    }
                ]
                }
            ]
            }
        ]
        },
      "allocationInfo": {
        "allocationMethods": [
          {
            "code": "N100",
            "exportId": "n100", 
            "Description": "100% to nomu",
            "Definition": "!!%A00(!!%D00)"
          },
          {
            "code": "N-G50-50",
            "exportId": "ng5050", 
            "Description": "50% to gs, 50% to nomu",
            "Definition": "!!%A00(!!%D50C50)"
          },
          {
            "code": "G100",
            "exportId": "g100", 
            "Description": "100% to gs",
            "Definition": "!!%A00(!!%D00)"
          }
        ]
      },
      "tradingRights": {
          "register": false,
          "send": false,
          "amend": false,
          "cancel": false
      }
    }
    ]
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "tradingcapabilities",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test capabilities subscription"
  },
  "status": {
    "code": 201,
    "message": "Invalid subscription: <reason>."
  }
}
Parameter Values
action subscribe

The client is ready to receive the available trading capabilities

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Subscription Parameters

Parameter Type Format Description
subscriptionId string - Identifier for the subscription. Based on this information, a subscription can be updated or removed

Subscription Reply

Parameter Values
event subscribe
params The client subscription parameters
status The status of this subscription

Capability Data

Parameter Type Format Description
tradingcapabilities list - Holds the list of tradingcapability objects, the returned results matching the specified parameters.
tradingcapabilities[].tradingcapability object - The object holding trading capability data.
tradingcapability.group string - The group this trading capability object refers to
tradingcapability.user string - The user this trading capability object refers to
tradingcapability.brokerModeling object - The object holding data regarding the brokers, markes, flows the user has access
brokerModeling.markets[] list - Holds the full list of markets current user has access to
brokerModeling.flows[] list - Holds the full list of flows current user has access to
brokerModeling.brokers[] list - Holds the full list of brokers current user has access to
brokerModeling.filters[] list - Holds the list of filters which limit the availability of flows and brokers for a certain market
brokerModeling.filters[].filter object - Holds the broker/market/flow filtering information
filter.field string - Holds the field for which this filter applies to. Allowed values are: MARKET, FLOW, BROKER, BROKER_FLAGS, SYNTH_FLAGS, OPEN_CLOSE
brokerModeling.filters[].filter.values list - Holds the list of values in the field for which the filter applies
brokerModeling.filters[].filter.allowed list - Holds the list of objects of type filter by which values for other fields can be filtered in case the value selected for current field matches the values from the list brokerModeling.filters[].filter.values
tradingcapability.accountModel object - The object holding data regarding the broker accounts, tradebooks, internal accounts the user has access
accountModel.brokerAccounts[] list - Holds the full list of broker accounts current user has access to
accountModel.tradebooks[] list - Holds the full list of tradebooks current user has access to
accountModel.internalAccounts[] list - Holds the full list of internal accounts current user has access to
accountModel.filters[] list - Holds the list of filters which limit the availability of flows and brokers for a certain market
accountModel.filters[].filter object - Holds the broker/market/flow/brokerAccount/internalaccount/tradebook filtering information
accountModel.filters[].filter.field string - Holds the filed for which this fielter applies to. Allowed values are: BROKER_ACCOUNT, INTERNAL_ACCOUNT, TRADEBOOK, BROKER, MARKET, ALLOCATION_METHOD, FLOW
accountModel.filters[].filter.values list - Holds the list of values in the field for which the filter applies
accountModel.filters[].filter.allowed list - Holds the list of objects of type filter by which values for other fields can be filtered in case the value selected for current field matches the values from the list .brokerModeling.Filters[].filter.values
tradingcapability.allocationInfo object - The object holding data regarding the allocation info
allocationInfo.allocationMethods[] list - Holds the full list of allocation method that current user has access to.
tradingRights object - Holds the trading rights for current user

Products

Parameter Values
service product

The product service provides information on the products.

Get Product Details

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "product",
  "action": "get-product-details",
  "params": {
    "symbol": "CS.NULL.JAPAN.T.JPY.6298",
    "symbolType": "tora"
  }
});

Request is successful, the returned JSON is similar to:

{
  "messageId": "f1d8d3f6-7511-4ef3-a0cc-b8987cfc7aea",
  "service": "product",
  "event": "get-product-details",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "data": {
    "ISINCode": "JP3990600003",
    "OLDSECTION": "1",
    "averageVolume": {
      "5WD": "49860.0",
      "5_10WD": "32300.0",
      "100WD": "35194.0",
      "6M": "35692.0",
      "3M": "40973.4375",
      "10WD": "41080.0",
      "20WD": "47115.0",
      "30WD": "46840.0",
      "90WD": "35798.88888888889"
    },
    "bbgCode": "6298 JT Equity",
    "closePrice": {
      "YTD": "35692.0",
      "3M": "35798.88888888889",
      "12M": "35692.0",
      "1M": "46840.0",
      "6M": "35692.0"
    },
    "code": "6298",
    "country": "JPN",
    "crtTradeMarket": "CS.NULL.JAPAN.T.JPY",
    "currency": "JPY",
    "displayCode": "6298",
    "gics": "45301010",
    "highPrice": {
      "YTD": "35692.0",
      "3M": "35798.88888888889",
      "1M": "46840.0",
      "12M": "35692.0",
      "6M": "35692.0"
    },
    "isShortSell": "F",
    "lastPrice": "0.0",
    "lastTouch": "1567646711162",
    "lotSize": "100",
    "lowPrice": {
      "YTD": "35692.0",
      "3M": "35798.88888888889",
      "12M": "35692.0",
      "1M": "46840.0",
      "6M": "35692.0"
    },
    "market": "CS.NULL.JAPAN.T.JPY",
    "marketCap": "1.000695663167022E9",
    "multiplier": "1",
    "name": "L T D LTD",
    "nativeLanguage": "JP%7C%3F%3F%3F%3F%3F%3F%28%3F%29",
    "primaryExchange": "CS.NULL.JAPAN.T.JPY",
    "reutersCode": "6298.T",
    "section": "Tokyo SE 1st Section",
    "sedolCode": "6984454",
    "settlementDateOffset": "2",
    "sharesOutstanding": "1132521.0",
    "tickRule": ",3000.0,1.0;,5000.0,5.0;,30000.0,10.0;,50000.0,50.0;,300000.0,100.0;,500000.0,500.0;,3000000.0,1000.0;,5000000.0,5000.0;,30000000,10000.0;,50000000,50000.0;,,100000.0;",
    "tradingMarkets": [
      "CS.NULL.JAPAN.CLP.JPY",
      "CS.NULL.JAPAN.INJ.JPY",
      "CS.NULL.JAPAN.JPC.JPY",
      "CS.NULL.JAPAN.T.JPY",
      "CS.NULL.JAPAN.JNX.JPY"
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}
Parameter Values
action get-product-details

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000

Get Product Details Parameters

Parameter Type Format Description
symbol string - The code of the product that you want the details.
symbolType string - The type of the symbol used for search. Possible values: caspian, bloomberg, reuters, tora;

Get Product Details Reply

Parameter Type Format Description
product details Object - Holds the properties of the product matching the specified parameters.

Compliance

Parameter Values
service compliances

The compliances service provides information on the compliance status for the orders:

Compliance Subscription

socket.send({
  "messageId": "2018-12-20_2",
  "service": "compliances",
  "action": "subscribe",
  "params": {
    "subscriptionId": "s_1",
    "symbolType": "tora"
  }
});

Subscription reply

{
  "messageId": "f80216bd-a6d2-43b0-8950-4f7fdde1455b",
  "service": "compliances",
  "event": "subscribe",
  "messageReferenceId": "2018-12-20_2",
  "params": {
    "subscriptionId": "s_1"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}
// Receiving initial update
{
  "messageId": "c68d828c-14fc-42b3-9a5c-f652151f5d8f",
  "service": "compliances",
  "event": "update",
  "params": {
    "subscriptionId": "s_1"
  },
  "data": {
    "complianceViolations": [...]
    },
    "isComplete": true
  }
}
Parameter Values
action subscribe

The client is ready to receive the compliance notifications

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Compliance Subscription Parameters

Parameter Type Format Description
subscriptionId string - Identifier for the subscription
symbolType string ENUM Specifies the listing symbol used for this subscription. Possible values: bloomberg, reuters, tora; if missing, defaults to tora

Subscription Reply

Request is successful, the returned JSON is similar to:

Received: {
  "messageId": "aac7043b-4c4f-4ecc-984f-a4d0abd51d5e",
  "service": "compliances",
  "event": "subscribe",
  "messageReferenceId": "2018-12-18_2",
  "params": {
    "subscriptionId": "s_1"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "compliances",
  "event": "subscribe",
  "params": {
    "subscriptionId": "s_1"
  },
  "status": {
    "code": 201,
    "message": "Invalid subscription: <reason>."
  }
}
Parameter Values
event subscribe
params The client subscription parameters
status The status of this subscription

Notification Data

{
  "messageId": "c68d828c-14fc-42b3-9a5c-f652151f5d8f",
  "service": "compliances",
  "event": "update",
  "params": {
    "subscriptionId": "s_1"
  },
  "data": {
    "complianceViolations": [
      {
        "complianceViolationId": "AAAF51wcrtwAAAFC",
        "state": "pending response",
        "initiatorUser": "illyes",
        "complianceViolatingOrders": [
          {
            "orderId": "UA0M9Fwcr1wAAFgn",
            "broker": "daiwa",
            "exchange": "T",
            "side": "BUY",
            "symbol": "CS.NULL.JAPAN.T.JPY.6758",
            "quantity": 300,
            "action": "Amend",
            "violatedComplianceGroup": {
              "protocol": "Warning",
              "violatedCompliances": [
                {
                  "limitName": "NettingExpressionBasedLimit",
                  "limitTemplateName": "Expression Based 1",
                  "message": "No Limit",
                  "extraLabels": [
                    {
                      "label": "Order",
                      "value": "300.00 shs Fund1"
                    },
                    {
                      "label": "Limit",
                      "value": "100.00 shs Fund1"
                    }
                  ],
                  "suggestions": [
                    {
                      "field": "QUANTITY",
                      "oldValue": "300.0",
                      "newValue": "100.0"
                    }
                  ]
                }
              ]
            },
            "decision": {
              "decisionMaker": "illyes",
              "decisionTime": "2018-12-21T09:27:12.327000Z",
              "status": "approved"
            }
          }
        ]
      },
      {
        "complianceViolationId": "AAAF51wbsxUAAAM+",
        "state": "pending decision",
        "initiatorUser": "TestUser3",
        "complianceViolatingOrders": [
          {
            "orderId": "TDbljlwbs+4AAHAb",
            "broker": "daiwa",
            "exchange": "T",
            "side": "BUY",
            "symbol": "CS.NULL.JAPAN.T.JPY.6383",
            "quantity": 1700,
            "action": "Amend",
            "violatedComplianceGroup": {
              "protocol": "Approval",
              "violatedCompliances": [
                {
                  "limitName": "Quantity",
                  "message": "The order quantity exceeds the maximum number of lots."
                }
              ]
            }
          }
        ]
      },
      {
        "complianceViolationId": "AAAF51wbsxUAAANO",
        "state": "pending response",
        "initiatorUser": "illyes",
        "complianceViolatingOrders": [
          {
            "orderId": "TDPN41wbsyMAAF69",
            "broker": "daiwa",
            "exchange": "T",
            "side": "BUY",
            "symbol": "CS.NULL.JAPAN.T.JPY.6758",
            "quantity": 2100,
            "action": "Send",
            "violatedComplianceGroup": {
              "protocol": "Approval",
              "violatedCompliances": [
                {
                  "limitName": "Quantity",
                  "message": "The order quantity exceeds the maximum number of lots."
                }
              ]
            },
            "decision": {
              "decisionMaker": "illyes",
              "decisionTime": "2018-12-20T15:48:49.974000Z",
              "status": "approved"
            }
          }
        ]
      },
      {
        "complianceViolationId": "AAAF51wbsxUAAAJA",
        "state": "history",
        "initiatorUser": "TestUser3",
        "complianceViolatingOrders": [
          {
            "orderId": "TDbljlwbs+4AAGtg",
            "broker": "daiwa",
            "exchange": "T",
            "side": "BUY",
            "symbol": "CS.NULL.JAPAN.T.JPY.6383",
            "quantity": 2100,
            "action": "Register",
            "violatedComplianceGroup": {
              "protocol": "Approval",
              "violatedCompliances": [
                {
                  "limitName": "Quantity",
                  "message": "The order quantity exceeds the maximum number of lots."
                }
              ]
            },
            "decision": {
              "decisionMaker": "illyes",
              "decisionTime": "2018-12-20T15:39:17.515000Z",
              "status": "approved"
            }
          }
        ]
      },
    "isComplete": true
  }
}

Subsequent updates:

{
  "messageId": "f0726632-bdcc-43fb-bf53-e38d77415fa1",
  "service": "compliances",
  "event": "update",
  "params": {
    "subscriptionId": "s_1"
  },
  "data": {
    "complianceViolations": [
      {
        "complianceViolationId": "AAAF51wbsxUAAAOW",
        "state": "pending decision",
        "initiatorUser": "TestUser3",
        "complianceViolatingOrders": [
          {
            "orderId": "TDbljlwbs+4AAHDM",
            "broker": "daiwa",
            "exchange": "T",
            "side": "BUY",
            "symbol": "CS.NULL.JAPAN.T.JPY.6383",
            "quantity": 1900,
            "action": "Amend",
            "violatedComplianceGroup": {
              "protocol": "Approval",
              "violatedCompliances": [
                {
                  "limitName": "Quantity",
                  "message": "The order quantity exceeds the maximum number of lots."
                }
              ]
            }
          }
        ]
      }
    ]
  }
}

Parameter Type Format Description
complianceViolations[] list - Holds a list of compliance violation objects
complianceViolations[].complianceViolation object - The object holding compliance violation data
complianceViolation.complianceViolationId string - Compliance violation identifier used inside the OEMS
complianceViolation.userComment string - User comment set on approval response
complianceViolation.seniorComment string - User comment set by approval user on approval decision / approval response
complianceViolation.state string ENUM The state of the compliance violation. Supported values: pending decision, pending response, history
complianceViolation.initiatorUser string - User that initiated the action which caused the compliance violation
complianceViolation.complianceViolatingOrders[] list - Array of orders that are violating compliances along with the decision taken by the user
complianceViolatingOrders[].complianceViolatingOrder object - Details of an order that violdated some compliances along with the decision taken by the user
complianceViolatingOrder.orderId string - Order identifier used inside the OEMS
complianceViolatingOrder.broker string - The broker assigned to this order
complianceViolatingOrder.exchange string - The exchange assigned to this order
complianceViolatingOrder.side string ENUM The side of the order: BUY, SELL
complianceViolatingOrder.symbol string - The symbol on which the order was created; tora, bloomberg, reuters symbol types are currently supported
complianceViolatingOrder.quantity number DEC The order quantity
complianceViolatingOrder.price number DEC The order price
complianceViolatingOrder.action string - The action on order that triggered the compliance violation (e.g. Register, Amend, Send)
complianceViolatingOrder.violatedComplianceGroup object - The list of violated compliances and their general protocol
violatedComplianceGroup.protocol string ENUM The general protocol of the compliance violation: Warning, Approval, Reject
violatedComplianceGroup.violatedCompliances[] list - The list of violated compliances
violatedCompliances[].violatedCompliance object - Details about the compliance violated: limitName, limitTemplateName, etc
violatedCompliance.limitName string - The name of the limit that was breached
violatedCompliance.limitTemplateName string - The name of the template in which the limit is defined
violatedCompliance.message string - A message for the user explaining the limit breach
violatedCompliance.details string - More details about the limit breach. By default this message shouldn’t be displayed. The user should have the posibility to expand and see the details.
violatedCompliance.extraLabels[] list - Additional information about the limit breach. To be displayed as label:value pairs
extraLabels[].extraLabel object - Pair of label and value with additional information about the limit breach
extraLabel.label string - The label of the extra info
extraLabel.value string - The value of the extra info
violatedCompliance.suggestions[] list - Amend suggestions to be displayed for the user
suggestions[].suggestion object - Suggestion to amend a given field
suggestion.field string - The name of the field to for which the amend suggestion is displayed
suggestion.oldValue string - The old value of the field to for which the amend suggestion is displayed
suggestion.newValue string - The new value of the field to for which the amend suggestion is displayed
complianceViolatingOrder.decision object - Decision taken by the user for the compliance violation
complianceViolatingOrder.decision.decisionMaker string - The user that made the decision
complianceViolatingOrder.decision.decisionTime string TIMESTAMP The time when the decision was made
complianceViolatingOrder.decision.status string ENUM The status of the taken decision: approved, denied

Approval decision

socket.send({
  "messageId": "2018-12-20_2",
  "service": "compliances",
  "action": "approval decision",
  "params": {
    "complianceViolation": {
      "complianceViolationId": "AAAF51wbsxUAAAOW",
      "seniorComment": "senior approval decision comment",
      "complianceViolatingOrders": [
        {
          "orderId": "TDbljlwbs+4AAHDM",
          "decision": {
            "decisionMaker": "illyes",
            "decisionTime": "2018-12-18T08:38:20.947111Z",
            "status": "approved"
          }
        }
      ]
    }
  }
});

This generates the following update:

{
  "messageId": "6899ec7c-94ec-420e-826e-01cf12dad18d",
  "service": "compliances",
  "event": "update",
  "params": {
    "subscriptionId": "s_1"
  },
  "data": {
    "complianceViolations": [
      {
        "complianceViolationId": "AAAF51wbsxUAAAOW",
        "state": "pending response",
        "status": "pending response",
        "initiatorUser": "TestUser3",
        "seniorComment": "senior approval decision comment",
        "complianceViolatingOrders": [
          {
            "orderId": "TDbljlwbs+4AAHDM",
            "broker": "daiwa",
            "exchange": "T",
            "side": "BUY",
            "symbol": "CS.NULL.JAPAN.T.JPY.6383",
            "quantity": 1900,
            "action": "Send",
            "violatedComplianceGroup": {
              "protocol": "Approval",
              "violatedCompliances": [
                {
                  "limitName": "Quantity",
                  "message": "The order quantity exceeds the maximum number of lots."
                }
              ]
            },
            "decision": {
              "decisionMaker": "illyes",
              "decisionTime": "2018-12-18T08:38:20.947000Z",
              "status": "approved"
            }
          }
        ]
      }
    ]
  }
}

Rate limits

Time Interval Max. Requests
1 minute 10000
1 hour 20000
1 day 20000

If a hard limit is triggered, the originating user is notified to either cancel the order or to add the order to the Compliance Queue to await a decision from an approval user. The approval user can set a status to approved or denied and also add a comment on the approval decision (seniorComment).











































Approval response

socket.send({
  "messageId": "2018-12-20_3",
  "service": "compliances",
  "action": "approval response",
  "params": {
    "complianceViolation": {
      "complianceViolationId": "AAAF51wbsxUAAAOW",
      "userComment": "user approval response comment",
      "seniorComment": "senior approval decision comment",
      "complianceViolatingOrders": [
        {
          "orderId": "TDbljlwbs+4AAHDM",
          "decision": {
            "decisionMaker": "illyes",
            "decisionTime": "2018-12-18T08:38:20.947111Z",
            "status": "approved"
          }
        }
      ]
    }
  }
});

This generates the following update:

{
  "messageId": "9696daa5-3b8f-4a72-92fc-29322c68410e",
  "service": "compliances",
  "event": "update",
  "params": {
    "subscriptionId": "s_1"
  },
  "data": {
    "complianceViolations": [
      {
        "complianceViolationId": "AAAF51wbsxUAAAOW",
        "state": "history",
        "status":"history",
        "initiatorUser": "TestUser3",
        "userComment": "user approval response comment",
        "seniorComment": "senior approval decision comment",
        "complianceViolatingOrders": [
          {
            "orderId": "TDbljlwbs+4AAHDM",
            "broker": "daiwa",
            "exchange": "T",
            "side": "BUY",
            "symbol": "CS.NULL.JAPAN.T.JPY.6383",
            "quantity": 1900,
            "action": "Send",
            "violatedComplianceGroup": {
              "protocol": "Approval",
              "violatedCompliances": [
                {
                  "limitName": "Quantity",
                  "message": "The order quantity exceeds the maximum number of lots."
                }
              ]
            },
            "decision": {
              "decisionMaker": "illyes",
              "decisionTime": "2018-12-18T08:38:20.947000Z",
              "status": "approved"
            }
          }
        ]
      }
    ]
  }
}

Rate limits

Time Interval Max. Requests
1 minute 10000
1 hour 20000
1 day 20000

In the latter case, the approval user is notified and can then Approve or Deny a compliance limit violation. The original user can also Cancel the pending request at any time before an approval user makes a decision, thereby canceling the order and the approval request. On the approval response the user can set a comment (userComment). Here we can have both the seniorComment and the userComment (if the user does not have the auto approve rights).

In this example, the decisionMaker approved this compliance violation and the order will change to state APPR and will be registered, sent or amended

Note: In case a limit is triggered with REJECT protocol - the Limit Server sets the reject message on the seniorComment.

Borrow

Parameter Values
service borrow

The borrow service provides information on the borrow orders inside the system. The authenticated client can perform the following borrow orders actions

Borrow Subscription

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "borrow",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test_borrow_subscription",
    "symbolType": "tora"
  }
});

The initial borrow order image is retrieved:

// First message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "borrow",
  "event": "update",
  "params": {
    "subscriptionId": "test_borrow_subscription"
  },
  "data": {
    "orders": [...]
  }
}

// Last message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "borrow",
  "event": "update",
  "params": {
    "subscriptionId": "test_borrow_subscription"
  },
  "data": {
    "orders": [...],
    "isComplete": "true"
  }
}
Parameter Values
action subscribe

The client is ready to receive updates on the borrow orders that are present in the system.

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Subscription Parameters

Parameter Type Format Description
subscriptionId string - Identifier for the subscription. Based on this information, a subscription can be updated or removed
symbolType string ENUM Specifies the listing symbol used for this subscription. Possible values: caspian, bloomberg, reuters, tora; if missing, defaults to tora
filter object - Instructs the borrow service to return all the orders that match this filter

Subscription Reply

Request is successful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "borrow",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test_borrow_subscription",
    "symbolType": "tora"
  },
  "status": {
    "code": 0,
    "message": "Subscribe OK."
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "borrow",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test_borrow_subscription",
    "symbolType": "tora"
  },
  "status": {
    "code": 201,
    "message": "Invalid subscription: <reason>."
  }
}
Parameter Values
event subscribe
params The client subscription parameters
status The status of this subscription























Borrow Unsubscribe

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "borrow",
  "action": "unsubscribe",
  "params": {
    "subscriptionId": "test_borrow_subscription"
  }
});

Request is successful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "borrow",
  "event": "unsubscribe",
  "params": {
    "subscriptionId": "test_borrow_subscription"
  },
  "status": {
    "code": 0,
    "message": "Unsubscribe OK."
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "borrow",
  "event": "unsubscribe",
  "params": {
    "subscriptionId": "test_borrow_subscription"
  },
  "status": {
    "code": 201,
    "message": "Invalid unsubscribe request: <reason>."
  }
}
Parameter Values
action unsubscribe
params.subscriptionId The subscription id for which the client doesn't need to receive any more updates

The client requests not to receive any more updates for the specified subscription.




























Borrow Updates

The initial borrow order image is retrieved:

// The initial image
{
  "messageId": "bb60e356-b325-4ef3-bc5d-c75eb95697ef",
  "service": "borrow",
  "event": "update",
  "params": {
    "subscriptionId": "test_borrow_subscription"
  },
  "data": {
    "orders": [{
      "orderId": "Ww0Y42Fe/TIAABKk",
      "symbol": "CS.NULL.JAPAN.T.JPY.6298",
      "exchange": "T",
      "currency": "JPY",
      "state": "NEW",
      "brokerAccount": "C1",
      "internalAccount": "S1",
      "tradeBook": "F1",
      "broker": "ubs",
      "primeBroker": "gs",
      "originator": "user1",
      "userNote": "user+note",
      "requestedQuantity": 800,
      "rate": 0.7,
      "value": 691200,
      "lastModifiedTime": "2021-10-07T14:11:02.757000Z",
      "timestamp": "2021-10-07T14:11:02.757000Z"
      }
    ],
    "isComplete": "true"
  }
}

// Subsequent update
{
  "messageId": "db744fdb-596c-4b52-b759-16e6f291b5e4",
  "service": "borrow",
  "event": "update",
  "params": {
    "subscriptionId": "test_borrow_subscription"
  },
  "data": {
    "orders": [{
      "orderId": "Ww0Y42Fe/TIAABKk",
      "symbol": "CS.NULL.JAPAN.T.JPY.6298",
      "exchange": "T",
      "currency": "JPY",
      "state": "APPROVED",
      "brokerAccount": "C1",
      "internalAccount": "S1",
      "tradeBook": "F1",
      "broker": "ubs",
      "primeBroker": "gs",
      "originator": "user1",
      "userNote": "user+note",
      "requestedQuantity": 800,
      "rate": 0.7,
      "value": 691200,
      "lastModifiedTime": "2021-10-07T14:11:02.757000Z",
      "timestamp": "2021-10-07T14:11:02.757000Z"
      }
    ]
  }
}
Parameter Values
event update
params The client subscription parameters
data.orders The list of borrow orders that were updated
data.isComplete Is set, and the value is true when the initial borrow orders image transfer is complete

Borrow Order Fields

Parameter Type Format Description
orderId string UUID Order identifier for the borrow order
clientOrderId string - The client order identifier
symbol string - Instrument symbol for the borrow order
exchange string - Provides the borrow order exchange
currency string - Provides the order currency
state string ENUM Provides the order state : NEW, PENDING, APPROVED, REJECTED, APPROVED_QUANTITY_CHANGED, APPROVED_PRICE_CHANGED, CANCELLED, PENDING_CANCEL
orderType string ENUM Type of this order: NORMAL, AUTO-APPROVE, UNSOLICITED, MANUAL
requestedQuantity number DEC Requested borrow quantity
approvedQuantity number DEC Approved borrow quantity
rate number DEC Borrow rate
value number DEC Borrow value
brokerAccount string - Indicates the specified account a client has at a certain broker
internalAccount string - Indicates the internal account selected for this order
tradeBook string - Indicates the specified tradebook for this order
broker string - Provides the order broker
primeBroker string - Provides the order prime broker
originator string - Provides the originator
decider string - Provides the decider
brokerNote string - Provides the broker note
userNote string - Provides the user note
allocationMethod string - Specified allocation method for this order; can be either the predefined allocation method name, or it can be a custom allocation string
groupingId string - Grouping identifier for orders that are part of a group
groupingType string - Grouping type for orders that are part of a group; possible values: PAIR, CROSS, AGGREGATION
syntheticsFlag string Provides synthetic flag
extraFields object - Extra information for this borrow order
timestamp string TIMESTAMP Borrow order timestamp
executionTimestamp string TIMESTAMP Execution time
lastModifiedTime string TIMESTAMP Last modified time
isDeleted boolean - Indicated whether this borrow was removed from the system

Subscription filters

Subscribe for all borrow orders:

socket.send({
  "messageId": "7e4bcc3c-8018-4f70-b6fa-f5a94fb077c3",
  "service": "borrow",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test_borrow_subscription - all orders",
    "symbolType": "tora"
  }
});

All borrow orders are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "7e4bcc3c-8018-4f70-b6fa-f5a94fb077c3",
  "service": "borrow",
  "event": "update",
  "params": {
    "subscriptionId": "test_borrow_subscription - all orders"
  },
  "data": {
    "orders": [...]
  }
}

Subscribe for specific order:

socket.send({
  "messageId": "4f4cc9ac-94f4-48b4-a2e2-ccad8cc8cbbb",
  "service": "borrow",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test_borrow_subscription - specific borrow orders",
    "symbolType": "tora",
    "filter": {
      "orderId": "someOrderId"
    }
  }
});

All orders are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "4f4cc9ac-94f4-48b4-a2e2-ccad8cc8cbbb",
  "service": "borrow",
  "event": "update",
  "params": {
    "subscriptionId": "test_borrow_subscription - specific borrow orders"
  },
  "data": {
    "orders": [...]
  }
}
Filter Parameter Values
orderId Instructs the borrow service to return specific order
















































Borrow Create

Use the create action and specify the required borrow order fields

socket.send({
  "messageId": "2021-11-28_1",
  "service": "borrow",
  "action": "create",
  "params": {
    "order": {
      "clientOrderId": "order_2021-11-28_1",
      "symbol": "CS.NULL.JAPAN.T.JPY.6758",
      "symbolType": "tora",
      "requestedQuantity": 2000,
      "broker": "bnp",
      "brokerAccount": "LongShort"
    }
  }
});

The borrow order is created and sent

{
  "messageId": "ba72e7e5-eced-4ad5-827f-f57f5469c129",
  "service": "borrow",
  "event": "create",
  "messageReferenceId": "2021-11-28_1",
  "data": {
    "orderId": "AAEWu1vsKJYAAABY"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000
Parameter Values
action create
params.clientOrderId Client specified order ID, useful for identifying the order on the client side (mandatory)
params.symbol Instrument symbol this order (mandatory)
params.symbolType Specifies the listing symbol used (mandatory)
params.requestedQuantity The amount of shares to borrow (mandatory)
params.broker The borrow broker to send the order to (mandatory)
params.primeBroker The prime broker (mandatory)
params.brokerAccount The account used (mandatory)
params.internalAccount The account used (optional)
params.tradeBook The account used (optional)
params.rate The requested borrow rate in bps (optional)
params.userNote User comment (optional)
params.manual Indicate to create a manual order (boolean, optional)

Strategies

Parameter Values
service order-strategy

The order-strategy service provides information on the strategy of orders inside the system. The authenticated client can perform the following strategy orders actions

The updates sent by order-strategy services can be joined with the updates from orders services using the following fields from strategy status updates: orderId, parentId and clientOrderId.

Strategy Subscription

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "order-strategy",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  }
});

The initial strategy of order image is retrieved:

// First message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "order-strategy",
  "event": "update",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  },
  "data": {
    "strategies": [...]
  }
}

// Last message in the initial image
{
  "messageId": "...",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "order-strategy",
  "event": "update",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  },
  "data": {
    "strategies": [...],
    "isComplete": "true"
  }
}
Parameter Values
action subscribe

The client is ready to receive updates on the strategy of orders that are present in the system.

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Subscription Parameters

Parameter Type Format Description
subscriptionId string - Identifier for the subscription. Based on this information, a subscription can be updated or removed

Subscription Reply

Request is successful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "order-strategy",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  },
  "status": {
    "code": 0,
    "message": "Subscribe OK."
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0fece",
  "service": "order-strategy",
  "event": "subscribe",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  },
  "status": {
    "code": 201,
    "message": "Invalid subscription: <reason>."
  }
}
Parameter Values
event subscribe
params The client subscription parameters
status The status of this subscription




























Strategy Unsubscribe

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "order-strategy",
  "action": "unsubscribe",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  }
});

Request is successful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "order-strategy",
  "event": "unsubscribe",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  },
  "status": {
    "code": 0,
    "message": "Unsubscribe OK."
  }
}

Request is unsuccessful, the returned JSON is similar to:

{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "order-strategy",
  "event": "unsubscribe",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  },
  "status": {
    "code": 201,
    "message": "Invalid unsubscribe request: <reason>."
  }
}
Parameter Values
action unsubscribe
params.subscriptionId The subscription id for which the client doesn't need to receive any more updates

The client requests not to receive any more updates for the specified subscription.




























Strategy Status Updates

The initial strategy status of order image is retrieved:

// The initial image
{
  "messageId": "bb60e356-b325-4ef3-bc5d-c75eb95697ef",
  "service": "order-strategy",
  "event": "update",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  },
  "data": {
    "strategies": [{
        "orderId": "Rmrzd2GbPi4AABWC",
        "clientOrderId": "externalID_1",
        "parentId": "Fmrzd3GbOl4AACWD",
        "name": "TIMED_ORDER",
        "state": "SCHEDULED"
      }
    ],
    "isComplete": "true"
  }
}

// Subsequent update
{
  "messageId": "db744fdb-596c-4b52-b759-16e6f291b5e4",
  "service": "order-strategy",
  "event": "update",
  "params": {
    "subscriptionId": "test_strategy_subscription"
  },
  "data": {
    "strategies": [{
        "orderId": "Rmrzd2GbPi4AABWC",
        "clientOrderId": "externalID_1",
        "parentId": "Fmrzd3GbOl4AACWD",
        "name": "TIMED_ORDER",
        "state": "EXECUTED"
      }
    ]
  }
}
Parameter Values
event update
params The client subscription parameters
data.strategies The list of strategy status that were updated
data.isComplete Is set, and the value is true when the initial strategy status image transfer is complete

Strategy Status Fields

Parameter Type Format Description
orderId string UUID Order identifier. It is always sent on strategy status updates.
clientOrderId string - The client order identifier
parentId string UUID If the order is a child order, this will hold the parent order identifier. It is sent only when the strategy is from a child order.
name string - Provides the name of the strategy
details string - Provides the reason message when a strategy failed.
state string ENUM Provides the state of strategy : SCHEDULED, IN_PROGRESS, EXECUTED, EXECUTED_REPEATING, FAILED, CANCELED

Subscription filters

Subscribe for the status of all strategies from all orders:

socket.send({
  "messageId": "7e4bcc3c-8018-4f70-b6fa-f5a94fb077c3",
  "service": "order-strategy",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test_strategy_subscription - all strategies"
  }
});

The status of all strategies from all orders are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "7e4bcc3c-8018-4f70-b6fa-f5a94fb077c3",
  "service": "order-strategy",
  "event": "update",
  "params": {
    "subscriptionId": "test_strategy_subscription - all strategies"
  },
  "data": {
    "strategies": [...]
  }
}

Subscribe a strategy status for a specific order:

socket.send({
  "messageId": "4f4cc9ac-94f4-48b4-a2e2-ccad8cc8cbbb",
  "service": "order-strategy",
  "action": "subscribe",
  "params": {
    "subscriptionId": "test_strategy_subscription - specific strategy orders",
    "symbolType": "tora",
    "filter": {
      "orderId": "someOrderId"
    }
  }
});

All orders are retrieved:

{
  "messageId": "...",
  "messageReferenceId": "4f4cc9ac-94f4-48b4-a2e2-ccad8cc8cbbb",
  "service": "order-strategy",
  "event": "update",
  "params": {
    "subscriptionId": "test_strategy_subscription - specific strategy orders"
  },
  "data": {
    "strategies": [...]
  }
}
Filter Parameter Values
orderId Instructs the order-strategy service to return the strategy status of a specific order

Algo Definitions

Parameter Values
service algo

The algo service provides information about the definitions of algo strategies, exactly as it is given in the FIXatdl file provided by the broker. The authenticated client can perform the algo actions detailed below:

Additionally, a step-by-step guide showing how an algo order can be created through the API using the information received by querying the algo service can be found in the Algo order creation section.

Parameter Values
action get-algo-strategies

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000

Algo Strategies Search Parameters

socket.send({
  "messageId": "825254c2-b89b-4c80-96c7-54ab4d98egfd",
  "service": "algo",
  "action": "get-algo-strategies",
  "params": {
    "symbol": "CS.NULL.JAPAN.T.JPY.6298",
    "symbolType": "tora",
    "broker": "brkName"
  }
});
Parameter Type Format Description
symbol string - Instructs the algo service to use this symbol for the algo strategies lookup.
symbolType string - Specifies the listing symbol used for this action. Possible values: caspian, bloomberg, reuters, tora; if missing, defaults to tora
broker string - Instructs the algo service to use this broker for the algo strategies lookup.

Algo Strategies Search Reply

Request is successful, the returned JSON is similar to:

{
  "messageId": "675a3226-c820-4d08-8dcf-87fbfa93cfd7",
  "service": "algo",
  "event": "get-algo-strategies",
  "messageReferenceId": "825254c2-b89b-4c80-96c7-54ab4d98egfd",
  "data": {
    "strategies": [
      "CLICK",
      "CLOSE",
      "CUSTOM",
      "ICEBERG",
      "IS",
      "PARTICIPATE",
      "STOPLOSS",
      "TWAP",
      "VWAP"
     ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}
Parameter Type Format Description
strategies list - The list of algo strategies available for the client.



















Parameter Values
action get-algo-details

Rate limits

Time Interval Max. Requests
1 minute 2500
1 hour 5000
1 day 5000

Algo Details Search Parameters

socket.send({
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98egfd",
    "service": "algo",
    "action": "get-algo-details",
    "params": {
      "symbol": "CS.NULL.JAPAN.T.JPY.6298",
      "symbolType": "tora",
      "broker": "brkName",
      "algoStrategy": "AQUA"
    }
});
Parameter Type Format Description
symbol string - Instructs the algo service to use this symbol for the algo strategies lookup.
symbolType string - Specifies the listing symbol used for this action. Possible values: caspian, bloomberg, reuters, tora; if missing, defaults to tora
broker string - Instructs the algo service to use this broker for the algo strategies lookup.
algoStrategy string - The name of the algo strategy that you want details for. If missing, details regarding all algo strategies will be returned. (optional)
algoField string - The name of the algo field that you want details for. If missing, details regarding all algo fields will be returned. (optional)

Algo Details Search Reply

Request is successful, the returned JSON is similar to:

{
  "messageId": "bd07285c-a8e3-49de-9bcd-ae05941d30d2",
  "service": "algo",
  "event": "get-algo-details",
  "messageReferenceId": "825254c2-b89b-4c80-96c7-74ab4d98egfd",
  "data": {
    "strategyTag": 8031,
    "strategies": [
      {
        "algoStrategy": "AQUA",
        "algoStrategyFilters": {
          "regions": {
            "included": [
              {
                "region": "AsiaPacificJapan",
                "included": [
                    "JP",
                    "HK"
                ],
                "excluded": []
              }
            ],
            "excluded": []
          },
          "securityTypes": {
            "included": [
              "CS"
            ],
            "excluded": []
          }
        },
        "algoFields": [
          {
            "algoField": "Visibility",
            "fixTag": "8141",
            "type": "number",
            "valueMappings": [
              {
                "value": "{NULL}",
                "uiValue": ""
              },
              {
                "value": "2",
                "uiValue": "Visible"
              },
              {
                "value": "1",
                "uiValue": "Not Visible"
              }
            ],
            "required": false,
            "immutableOnExchangeSide": true
          },
          {
            "algoField": "DeliverToLocationID",
            "fixTag": "145",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "constantValue": 101
          },
          {
            "algoField": "StartTime",
            "fixTag": "168",
            "type": "string",
            "required": false,
            "immutableOnExchangeSide": false
          },
          {
            "algoField": "OffsetLast",
            "fixTag": "8215",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "minValue": 0,
            "maxValue": 5
          },
          {
            "algoField": "DeliverToLocationID",
            "fixTag": "145",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "constantValue": 101
          }
        ]
      }
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}
Parameter Type Format Description
strategyTag number INT The fix tag by which the algo strategies can be identified.
strategies list - The list of algo strategies details.
algoStrategy string - The name of the algo strategy.
algoStrategyFilters object - The filters of an algo strategy.
regions object - Locations as defined by the provider. Used to declare the regions where the algo strategy is supported. The absence of any regions implies that the strategy is valid for all regions. Possible values for region elements (under include/exclude fields): TheAmericas, EuropeMiddleEastAfrica, AsiaPacificJapan.
securityTypes object - Valid security types of algo strategy. The absence of any security types implies that the strategy is valid for all markets. Possible values of security type element (under include / exclude fields): CS, FUT, OPT, SPR, FX, FWD, SWP, IDX, CB, WAR, PS, FI, OTC, CCY, PSW, MRG, BKT.
included list - An array of included regions / country codes (ISO 3166-1 alpha-2 code for the countries) / securityTypes.
excluded list - An array of excluded regions / country codes (ISO 3166-1 alpha-2 code for the countries) / securityTypes.
algoFields list - A list of algo parameters defined on that algo strategy. The timezone of timestamp parameters is GMT.
algoField string - The name of the algo parameter.
fixTag string - The FIX tag of the algo parameter.
type string ENUM The type of the algo parameter. Possible values: string, number, boolean.
required boolean - A flag that marks whether the algo parameter is mandatory or not.
immutableOnExchangeSide boolean - A flag that marks whether the value of the algo parameter can be changed or not after it is sent to the exchange.
constantValue - - The constant value of the algo parameter; can be of any type.
minValue - - The minimum value of the algo parameter; can be of any type.
maxValue - - The maximum value of the algo parameter; can be of any type.
valueMappings list - The mappings between the value of the algo parameter and the corresponding UI value.
value string - The value of the algo parameter.
uiValue string - The UI value of algo parameter.
timezone string - Used to specify the time zone of an algo parameter with type date.
format string - Used to specify the time format of an algo parameter with type date.
precision number INT The number of digits to the right of the decimal point of an algo parameter.

Algo Order Creation

In order to create an algo order through the API, you need to determine the algo parameters for the order and pass this information to the service responsible for creating orders. This can be achieved by building and setting the broker specific ATDL string on the workBrkSpecATDL field on the JSON order which is sent to the order service.

Given that you have selected a product and a broker, the following steps show the procedure of creating an algo order:

  1. Request the set of available algo strategies for the required product and broker by querying the algo service, using the get-algo-strategies action.
  2. Select a strategy from the list of available algo strategies given in the response of the request from the previous step.
  3. Request the information regarding the algo parameters defined for the selected strategy by querying the algo service, using the get-algo-details action.
  4. Select the relevant algo parameters defined for that strategy (mandatory parameters and parameters that are relevant for your order) and assign values to them, keeping in mind their constraints (min. value, max. value, increment, format, etc.).
  5. Build the broker specific ATDL string using the information determined at the previous step.

This string can be built in the following way:

Finally, you can create an order using the order service and pass the previously built string on the workBrkSpecATDL field, as well as the chosen algo strategy on the algoStrategy field.

Example

To make this procedure clearer, we'll demonstrate the above algorithm by presenting a concrete example of placing an algo order. We'll assume that the client is already authenticated and has selected a product and a broker to which the order should be sent.

1. Get the available algo strategies

The first step is to query the available algo strategies for the product and broker combination, so we need to send a request using the get-algo-strategies action. More details regarding this action can be found in its own section.

Request sent through the API to query for available strategies:

{
    "messageId": "id_2",
    "service": "algo",
    "action": "get-algo-strategies",
    "params": {
        "symbol": "CS.NULL.JAPAN.T.JPY.6298",
        "symbolType": "tora",
        "broker": "baml"
    }
}

The API will return the list of available strategies for the given product and broker combination, for example:

{
  "messageId": "0957d7e3-bcb4-4210-ab11-30e6bff6f4ca",
  "service": "algo",
  "event": "get-algo-strategies",
  "messageReferenceId": "id_2",
  "data": {
    "strategies": [
      "BLOCKSEEKER",
      "CUSTOM1",
      "CUSTOM2",
      "CUSTOM3",
      "CUSTOM4",
      "DMA",
      "DYNAMIC",
      "GETDONE",
      "INSTINCT",
      "IS",
      "MOSAICALGO",
      "POV",
      "PiAlgo",
      "QMOC",
      "SMA",
      "TAGALGO",
      "TWAP",
      "VWAP"
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

2. Select a strategy and get its algo fields definitions

The next thing that we have to do is choose one of the previously received strategies and query the details regarding its defined algo parameters using the get-algo-details action. More details regarding this action can be found in its own section.

In this example, we'll pick the VWAP strategy and query its details using the request below:

{
    "messageId": "id_3",
    "service": "algo",
    "action": "get-algo-details",
    "params": {
        "symbol": "CS.NULL.JAPAN.T.JPY.6298",
        "symbolType": "tora",
        "broker": "baml",
        "algoStrategy": "VWAP"
    }
}

The API will return the list of defined parameters along with their details for the given strategy. In this example, the API sent the following response:

{
  "messageId": "9a81a45b-672b-4594-92db-579d28e13233",
  "service": "algo",
  "event": "get-algo-details",
  "messageReferenceId": "id_3",
  "data": {
    "strategyTag": 6401,
    "strategies": [
      {
        "algoStrategy": "VWAP",
        "algoStrategyFilters": {
          "regions": {
            "included": [
              {
                "region": "AsiaPacificJapan"
              }
            ]
          },
          "securityTypes": {
            "included": [
              "CS"
            ]
          }
        },
        "algoFields": [
          {
            "algoField": "TargetSubID",
            "fixTag": "57",
            "type": "string",
            "required": true,
            "immutableOnExchangeSide": true,
            "constantValue": "ALGO"
          },
          {
            "algoField": "StartTime",
            "fixTag": "6168",
            "type": "string",
            "required": false,
            "immutableOnExchangeSide": false,
            "formats": [
              "yyyyMMdd-HH:mm:ss",
              "yyyyMMdd-HH:mm:ss.SSS"
            ]
          },
          {
            "algoField": "SpeedPrice",
            "fixTag": "6410",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "precision": 2,
            "minValue": 0.01,
            "maxValue": 99999999.9999
          },
          {
            "algoField": "Custom",
            "fixTag": "6960",
            "type": "string",
            "required": false,
            "immutableOnExchangeSide": false
          },
          {
            "algoField": "AuctionParticipation",
            "fixTag": "6412",
            "type": "string",
            "valueMappings": [
              {
                "value": "B",
                "uiValue": "AM Open"
              },
              {
                "value": "A",
                "uiValue": "PM Close"
              },
              {
                "value": "{NULL}",
                "uiValue": "Both"
              },
              {
                "value": "AB",
                "uiValue": "None"
              }
            ],
            "required": false,
            "immutableOnExchangeSide": false
          },
          {
            "algoField": "SpeedUpToOrderPct",
            "fixTag": "6511",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "minValue": 1,
            "maxValue": 100
          },
          {
            "algoField": "GetDonePrice",
            "fixTag": "6961",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "precision": 4,
            "minValue": 0
          },
          {
            "algoField": "SpeedUpTargetPct",
            "fixTag": "6411",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "minValue": 1,
            "maxValue": 100
          },
          {
            "algoField": "BlockEligible",
            "fixTag": "8131",
            "type": "number",
            "valueMappings": [
              {
                "value": "{NULL}",
                "uiValue": "unchecked"
              },
              {
                "value": "100",
                "uiValue": "checked"
              }
            ],
            "required": false,
            "immutableOnExchangeSide": false
          },
          {
            "algoField": "EndTime",
            "fixTag": "126",
            "type": "string",
            "required": false,
            "immutableOnExchangeSide": false,
            "formats": [
              "yyyyMMdd-HH:mm:ss",
              "yyyyMMdd-HH:mm:ss.SSS"
            ]
          },
          {
            "algoField": "MaxPctVol",
            "fixTag": "6403",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "minValue": 1,
            "maxValue": 100
          },
          {
            "algoField": "ShowHT",
            "fixTag": "8208",
            "type": "string",
            "valueMappings": [
              {
                "value": "{NULL}",
                "uiValue": "unchecked"
              },
              {
                "value": "HT",
                "uiValue": "checked"
              }
            ],
            "required": false,
            "immutableOnExchangeSide": false
          },
          {
            "algoField": "GetDonePct",
            "fixTag": "6967",
            "type": "number",
            "required": false,
            "immutableOnExchangeSide": false,
            "minValue": 1,
            "maxValue": 100
          },
          {
            "algoField": "Urgency",
            "fixTag": "6408",
            "type": "string",
            "valueMappings": [
              {
                "value": "L",
                "uiValue": "Low"
              },
              {
                "value": "M",
                "uiValue": "Medium"
              },
              {
                "value": "H",
                "uiValue": "High"
              }
            ],
            "required": true,
            "immutableOnExchangeSide": false
          }
        ]
      }
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

3. Select the algo fields and assign values to them

The next step is to pick the fields which are relevant for our use case and assign values to them, keeping in mind their restrictions. For example:

For this example, we'll consider the following field assignments:

4. Build the workBrkSpecATDL string

Now that we have the fields which we want to set on the algo order as well as their fixTags and values, we can build the broker specific ATDL. First we need to concatenate each fixTag with its assigned value, so we have:

Then, we have to do the same for the strategyTag and name of the strategy, so we'll have 6401:VWAP.

The last step in building the ATDL string is to join all of these values together with semicolons and also end the string with a semicolon, and in this case the result will be: 8031:STOPLOSS;8099:25.0;168:20221110-16:31:23;11007:0;.

5. Send the algo order

Finally, we have reached the point where we can actually send the order to the API using the order service. What we need to do beside the usual information is pass the ATDL string onto the workBrkSpecATDL field on the JSON message and the chosen strategy on the algoStrategy field, and we'll have an order register message similar to the one below:

{
    "messageId": "id_6",
    "service": "orders",
    "action": "register",
    "params": {
        "order": {
            "clientOrderId": "clOrdId_6",
            "symbol": "7203.T",
            "symbolType": "reuters",
            "quantity": 2000,
            "side": "BUY",
            "limitPrice": "0.0",
            "brokerAccount": "TestAccount1",
            "broker": "baml",
            "orderType": "BAML_ATDL",
            "workBrkSpecATDL": "6401:1;6408:M;6168:20230215-13:31:23;126:20230215-14:31:23;6961:1900.0",
            "algoStrategy": "VWAP",
            "condition": "WORKED"
        }
    }
}

In order to check that the order has been correctly sent to the system, we may subscribe for order updates, in which case we'll receive an update regarding the order that we've just registered.

Among the fields sent in the update message for the broker, we can specifically look at workATDLDescription and workBrkSpecATDL:

We can see that these strings contain all the fields that we've manually set, as well as the constant value fields.













Quotes

Parameter Values
service quotes

The quotes service enables users to stay updated on RFQs (Request for Quotes) within the system. It also provides the ability to request or cancel RFQs. Authenticated clients can perform the following actions related to quotes:

Quotes Subscription

socket.send({
  "messageId": "246e9661e880-24f40-186fcd5a312-2690",
  "service": "quotes",
  "action": "subscribe",
  "params": {
    "subscriptionId":"test_quotes_subscription"
  }
});

//  Clients will receive any available updates on quotes requested by other means as well.
//  Initial ack to subscription
{
  "messageId": "1398340c-ec9d-4768-a01d-77f57c4a223f",
  "service": "quotes",
  "event": "subscribe",
  "messageReferenceId": "246e9661e880-24f40-186fcd5a312-2690",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

// First message in the initial image
{
  "messageId": "23efc6b6-cef0-4d49-b7d6-1a749074bc29",
  "service": "quotes",
  "event": "update",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "data": {
    "quotes": [...]
  }
}

// Last message in the initial image
{
  "messageId": "23efc6b6-cef0-4d49-b7d6-1a749074bc29",
  "service": "quotes",
  "event": "update",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "data": {
    "quotes": [...],
    "isComplete": "true"
  }
}

Clients can receive updates on RFQs by subscribing to the quotes service:

Parameter Values
action subscribe

By setting the action parameter to "subscribe", the client is indicating that it's ready to receive updates on requested quotes or active quotes.

Rate limits

Time Interval Max. Requests
1 minute 10
1 hour 20
1 day 40

Quotes Subscription Parameters

Parameter Type Format Description
subscriptionId string - An identifier for the subscription. This ID can be used to update or remove the subscription.
filter object - This filter instructs the quotes service to return only those quotes that match the specified criteria.













Subscription filters

Subscribe for all Quotes, no filter:

socket.send({
  "messageId": "246e9661e880-24f40-186fcd5a312-2690",
  "service": "quotes",
  "action": "subscribe",
  "params": {
    "subscriptionId":"test_quotes_subscription"
  }
});

Updates on all RFQ requested are retrieved, even those requested outside WebsSocket API:

{
  "messageId": "23efc6b6-cef0-4d49-b7d6-1a749074bc29",
  "service": "quotes",
  "event": "update",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "data": {
    "quotes": [...]
  }
}

Subscribe for specific clientRequestId:

socket.send({
  "messageId": "246e9661e880-24f40-186fcd5a312-2690",
  "service": "quotes",
  "action": "subscribe",
  "params": {
    "subscriptionId":"test_quotes_subscription",
    "filter": {
      "clientRequestId": "specificClientRequestId"
    }
  }
});

Updates on the specific client request id specified by the filter are received

{
  "messageId": "...",
  "service": "quotes",
  "event": "update",
  "params": {
  "subscriptionId": "test_quotes_subscription"
},
  "data": {
  "quotes": [
    {
      "clientRequestId": "specificClientRequestId",
      "requestId": "...",
      "offerQuoteID": "..",
      "bidQuoteID": "..",
      "timestamp": ..,
      "tradedCCY": "..",
      "broker": "..",
      "isCancel": false,
      "isTradable": false
    }
  ]
}
}
Filter Parameter Values
clientRequestId Instructs the quote service to receive updates on specific quotes that match the specified clientRequestId.




















































Quotes Subscription Reply

If the subscription request is successful, the JSON response will be similar to:

// Request is successful, the returned JSON is similar to:
{
  "messageId": "1398340c-ec9d-4768-a01d-77f57c4a223f",
  "service": "quotes",
  "event": "subscribe",
  "messageReferenceId": "246e9661e880-24f40-186fcd5a312-2690",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "status": {
    "code": 0,
    "message": "Ok"
  },
  "filter": {
    "clientRequestId": "clientRequestId"
  }
}

// Request is unsuccessful, the returned JSON is similar to:
{
  "messageId": "1398340c-ec9d-4768-a01d-77f57c4a223f",
  "service": "quotes",
  "event": "subscribe",
  "messageReferenceId": "246e9661e880-24f40-186fcd5a312-2690",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "status": {
    "code": 201,
    "message": "Invalid subscription: <reason>."
  }
}
Parameter Values
event subscribe
params The client subscription parameters
status The status of this subscription



















Quotes unsubscribe

socket.send({
  "messageId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "quotes",
  "action": "unsubscribe",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  }
});

// If the unsubscribe request is successful, the JSON response will be similar to:
{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "quotes",
  "event": "unsubscribe",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "status": {
    "code": 0,
    "message": "Unsubscribe OK."
  }
}

// Request is unsuccessful, the returned JSON is similar to:
{
  "messageId": "825254c2-b89b-4c80-96c7-74ab4d98effd",
  "messageReferenceId": "6b25450f-1421-4cef-b6c4-9ebed1f0lece",
  "service": "quotes",
  "event": "unsubscribe",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "status": {
    "code": 201,
    "message": "Invalid unsubscribe request: <reason>."
  }
}
Parameter Values
action unsubscribe
params.subscriptionId The subscription ID for which the client no longer wishes to receive updates.

By setting the action parameter to "unsubscribe" and providing the appropriate subscription ID in the params object, the client requests to stop receiving updates for the specified subscription.




















Quote Updates

First update will retrieve the initial quote image.

// The initial image
{
  "messageId": "23efc6b6-cef0-4d49-b7d6-1a749074bc29",
  "service": "quotes",
  "event": "update",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "data": {
    "quotes": [
      {
        "messageId": "3620ec49-fc66-4e28-b734-cf65c0e56329",
        "service": "quotes",
        "event": "update",
        "params": {
          "subscriptionId": "test_quotes_subscription"
        },
        "data": {
          "quotes": [
            {
              "dealerName": "ZBBI",
              "requestId": "AAABKWQPWSYAABQR",
              "offerQuoteID": "1166200000000820001-65339872071|1166200000000820001|KEYTDOBG63268411996502403",
              "bidQuoteID": "1166200000000820001-65339872071|1166200000000820001|KEYTDOBG63268411996502403",
              "timestamp": 1678730939,
              "provider": "ZBBI",
              "tradedCCY": "CZK",
              "validUntilTime": 1678731060,
              "broker": "ebs",
              "isCancel": false,
              "isTradable": true,
              "quantity": 10000,
              "settlementDate": "20230314",
              "bidPrice": 23.75229,
              "bidSize": 10000,
              "bidSpotRate": 23.7585,
              "bidForwardPoints": -0.00621,
              "offerPrice": 23.80685,
              "offerSize": 10000,
              "offerSpotRate": 23.8065,
              "offerForwardPoints": 0.00035
            }
          ]
        }
      }],
    "isComplete": true
  }
}

// Subsequent update
{
  "messageId": "db744fdb-596c-4b52-b759-16e6f291b5e4",
  "service": "quotes",
  "event": "update",
  "params": {
    "subscriptionId": "test_quotes_subscription"
  },
  "data": {
    "quotes": [
      {
        "dealerName": "ZBBI",
        "requestId": "AAABKWQPWSYAABQR",
        "offerQuoteID": "1166200000000820001-65339872071|1166200000000820001|KEYTDOBG63268411996502403",
        "bidQuoteID": "1166200000000820001-65339872071|1166200000000820001|KEYTDOBG63268411996502403",
        "timestamp": 1678730939,
        "provider": "ZBBI",
        "tradedCCY": "CZK",
        "validUntilTime": 1678731060,
        "broker": "ebs",
        "isCancel": false,
        "isTradable": true,
        "quantity": 10000,
        "settlementDate": "20230314",
        "bidPrice": 23.75229,
        "bidSize": 10000,
        "bidSpotRate": 23.7585,
        "bidForwardPoints": -0.00621,
        "offerPrice": 23.80685,
        "offerSize": 10000,
        "offerSpotRate": 23.8065,
        "offerForwardPoints": 0.00035
      }
    ]
  }
}

// Quote Expiry Update
{
  "messageId": "...",
  "service": "quotes",
  "event": "update",
  "params": {
    "subscriptionId": "..."
  },
  "data": {
    "quotes": [
      {
        "clientRequestId": "...",
        "requestId": "...",
        "offerQuoteID": "*",
        "bidQuoteID": "*",
        "timestamp": 1682385956,
        "tradedCCY": "AUD",
        "broker": "ebs",
        "isCancel": true,
        "isTradable": true
      }
    ]
  }
}
Parameter Values
event update
params The client subscription parameters
data.quotes The updated quotes
data.isComplete This value is set to true when the initial quotes are complete.

When there are any updates to the subscribed quotes, an update event will be triggered. The data object will contain the updated quotes, and the data.isComplete value will be set to true when the initial quotes have been retrieved.

Quote Fields

Parameter Type Format Description
clientRequestId string string Same as the one specified in quote request, present if request created from websocket
rejectCode number - Reject code in case request was rejected.
rejectReason string - Reject reason for a rejected request.
dealerName string - The dealer from which the quote was recieved.
requestId string - Internal request id corresponding to the quote request.
offerQuoteID string string The id to use while executing the order at the offer.
bidQuoteID string string The id to use while executing the order at the bid.
listId string string Parameter for list quotes.
orderId string string OrderId corresponding to quote.
aggregationId string string Aggregation id corresponding to quote request.
timestamp long TIMESTAMP Epoch timestamp when the quote was created
priceType string - Quote in price type format
provider string - The provider from whom the quote was recieved.
tradedCCY string - The traded curency in the initial quote request.
validFromTime long TIMESTAMP Time in UTC from where quote request is valid.
validUntilTime long TIMESTAMP Time in UTC untill which the quote request is valid.
broker string string Broker for which quote request was created.
isCancel boolean boolean If true quote specifies the expiry of the quote.
isTradable boolean boolean Is the quote tradable.
estimatedPrice string number Estimated price.
estimatedGSpread string number Estimated G-spread for bond.
estimatedYield string number Estimated yield for the bond.
inquiryState string string The inquiry state.
commissionType string enum The commision type PRIME_BROKER_COMMISSION, NON_PRIME_BROKER_COMMISSION, MISSING_COMMISSION, NO_COMMISSION
tenor string - The tenor code.
bidSwapPoints string number Swap points calculated from bid.
offerSwapPoints string number Swap points calculated from ask.
offerNetSpreadPoints string number Offer Net Spread points calculated from commision's file.
bidNetSpreadPoints string number Bid Net Spread points calculated from commision's file.
quantity string number The corresponding leg Quantity.
legs list - Holds a list of leg based info for swaps.
settlementDate date yyyyMMdd SettlementDate for the asset.
bidPrice string number The bid for the asset.
bidSize string number The bid size for the asset.
bidSpotRate string number The bid spot rate for the asset.
bidForwardPoints string number The bid forward points for the asset.
offerPrice string number The offer price for the asset.
offerSize string number The offer size for the asset.
offerSpotRate string number The offer spot rate for the asset.
offerForwardPoints string number The offer forward points for the asset.
legs[].name string - Near Leg has near and Far Leg has far
legs[].quantity string number The corrsponding leg Quantity.
legs[].bidPrice string number The bid corresponding to the leg.
legs[].bidSize string number The bid size corresponding to the leg.
legs[].bidSpotRate string number The bid Spot rate corresponding to
legs[].bidForwardPoints string number The forward points corresponding to the leg.
legs[].offerPrice string number The offer price corresponding to the leg.
legs[].offerSize string number The offer size corresponding to the leg.
legs[].offerSpotRate string number The offer spot rate corresponding to the leg.
legs[].offerForwardPoints string number The offer forward points corresponding to the leg.

Pairs

Parameter Values
service pairs

The pairs service enables users to manage TORA Pairs orders for different Pairs strategies. It allows users to register, send, amend and cancel a pair. Authenticated clients can perform the following actions:

Pairs Fields

Parameter Type Format Description
broker string string The broker corresponding to the pair.
algoId string string A unique ID used to identify the pair.
strategy string string The strategy to use for the pairs order. (Merger, Pairs, Rights, etc.)
algoFields object object Algo parameters/fields specific to the actual algo, will depend on the Strategy and ATDL version in use.
The format of the parameters is the same as the one from the file used for Pairs upload in GUI.
orders[] * * Order-level details for each leg of the pair, which are defined in this section.
orders[].legName string string Identifies the current leg as either 'leg1' or 'leg2', used for referencing parameters in algoFields.
orders[].clientOrderId string string A unique identifier for each leg of the pair.

Pairs register

Use the register action and specify the corresponding pairs fields to register a pair. Similar to an order register, this will not send the pair to the exchange/engine.

socket.send({
    "messageId": "pairs-register",
    "service": "pairs",
    "action": "register",
    "params": {
        "broker": "tpairs",
        "algoId": "XNG8NGXqtKcAAAAY",
        "strategy": "Merger",
        "algoFields": {
            "target_ratio": "1.6",
            "leg1_slippage": "0.0",
            "pairs_ord_status": "ACTIVE",
            "leg2_primary": "N",
            "target_spread": "0.0",
            "leg2_slice_manual": "1000.0",
            "slippage_percent_type": "Y",
            "Version": "1",
            "continuous": "N",
            "leg2_threshold": "10.0",
            "pairs_alert_action_type": "CROSS",
            "cash": "0.0",
            "leg2_executing_broker": "ml",
            "conversion": "NONE",
            "leg1_concurrency": "1",
            "leg_strategy": "AD_FLOAT_FLOAT",
            "leg1_threshold": "10.0",
            "leg1_slice_manual": "10000.0",
            "leg2_execution_style": "AGGRESSIVE",
            "leg2_concurrency": "1",
            "leg1_executing_broker": "ml",
            "leg1_primary": "Y",
            "Strategy": "Merger",
            "spread_percent_type": "N",
            "leg1_execution_style": "AGGRESSIVE",
            "leg2_slippage": "0.0"
        },
        "orders": [{
            "clientOrderId": "XNG8NGXqtKcAAAAj",
            "symbol": "6293.T",
            "symbolType": "reuters",
            "quantity": 200000,
            "side": "BUY",
            "limitPrice": "0",
            "brokerAccount": "LongShort",
            "internalAccount": "acc1",
            "tradeBook": "trdx",
            "legName": "leg1"
        }, {
            "clientOrderId": "XNG8NGXqtKcAAAAk",
            "symbol": "6298.T",
            "symbolType": "reuters",
            "quantity": 100000,
            "side": "SELL",
            "limitPrice": "0",
            "brokerAccount": "LongShort",
            "internalAccount": "acc1",
            "tradeBook": "trdx",
            "legName": "leg2"
        }]
    }
});

The pairs order is registered.

{
  "messageId": "aed02754-8fff-4d02-a379-59ded993204b",
  "service": "pairs",
  "event": "register",
  "messageReferenceId": "pairs-register",
  "data": {
    "algoId": "XNG8NGXqtKcAAAAY",
    "orders": [
      {
        "clientOrderId": "XNG8NGXqtKcAAAAj",
        "symbol": "6293.T",
        "symbolType": "reuters",
        "quantity": 200000.0,
        "side": "BUY",
        "limitPrice": 0.0,
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "legName": "leg1",
        "broker": "tpairs",
        "orderId": "AAAJYWXqtacAAACg",
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;cash:0.0;leg2_executing_broker:ml;conversion:NONE;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Merger;spread_percent_type:N;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      },
      {
        "clientOrderId": "XNG8NGXqtKcAAAAk",
        "symbol": "6298.T",
        "symbolType": "reuters",
        "quantity": 100000.0,
        "side": "SELL",
        "limitPrice": 0.0,
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "legName": "leg2",
        "broker": "tpairs",
        "orderId": "AAAJYWXqtacAAACi",
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;cash:0.0;leg2_executing_broker:ml;conversion:NONE;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Merger;spread_percent_type:N;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      }
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

An error will be received in case the order could not be registered.

{
  "messageId": "486ad365-2d91-464d-9e20-cfe438bc48411",
  "service": "pairs",
  "event": "register",
  "messageReferenceId": "pairs-register",
  "status": {
    "code": "...",
    "message": "..."
  }
}

If an order subscription is active, updates will be received on the individual orders.

{
  "messageId": "9265a3f7-cf69-4df0-8e1c-4a9942762a7c",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "XNG8NGXqtKcAAAAi"
  },
  "data": {
    "orders": [
      {
        "orderId": "AAAJYWXqtacAAACi",
        "clientOrderId": "XNG8NGXqtKcAAAAk",
        "isParent": true,
        "symbol": "CS.NULL.JAPAN.T.JPY.6298",
        "exchange": "T",
        "broker": "tpairs",
        "side": "SELL",
        "quantity": 100000.0,
        "limitPrice": 0.0,
        "owner": "TestUser3",
        "flowType": "ALGO",
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "state": "REDG",
        "executedQuantity": 0.0,
        "creationTime": "2024-03-08T06:54:25.816000Z",
        "lastUpdateTime": "2024-03-08T06:54:25.816000Z",
        "status": "OK",
        "executedValue": 0.0,
        "notionalValue": 0.0,
        "previousExecutedQuantity": 0.0,
        "previousExecutedValue": 0.0,
        "condition": "WORKED",
        "orderType": "TPAIRS_ATDL",
        "algoStrategy": "Merger",
        "algoFields": {
          "Leg1Instrument": "6293.T",
          "SpreadIsPercentType": "N",
          "Cash": "0.0",
          "Leg1IsPrimary": "Y",
          "TargetSpread": "0.0",
          "PairIsHung": "N/A",
          "Conversion": "NONE",
          "ActiveCoverCount": "N/A",
          "TargetRatio": "1.0",
          "ShareRatio": "1.0"
        },
        "externalId": "XNG8NGXqtKcAAAAk",
        "groupingId": "XNG8NGXqtKcAAAAY:AAAJYWXqtacAAACf",
        "groupingType": "PAIR",
        "lastUpdateOwner": "TestUser3",
        "limitRequestId": "UNKNOWN",
        "manualExecution": "N",
        "creatorComponent": "WSGW",
        "workATDLDescription": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;cash:0.0;leg2_executing_broker:ml;conversion:NONE;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Merger;spread_percent_type:N;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;",
        "workBrkSpecATDL": "8500:Merger;7621:4.3.7;8052:N;6004:0.0;6115:N;6015:Y;6067:Y;8178:N/A;8078:N/A;8076:N/A;8075:N/A;8043:N/A;8042:N/A;8041:N/A;6101:6298.T;6001:6293.T;6068:N;6109:10.0;6009:10.0;6000:AD_FLOAT_FLOAT;6108:0.0;6008:0.0;6014:Y;8051:0.0;6003:1.0;8107:N;6111:1;6011:1;6028:N;6107:1000.0;6007:10000.0;6197:N;6199:N;6097:N;6099:N;6196:NONE;6096:NONE;6041:ACTIVE;8056:N;6005:NONE;6110:AGGRESSIVE;6010:AGGRESSIVE;6117:ml;6017:ml;8057:N;8053:N;6040:CROSS;",
        "workBrkSpecStrategy": "Merger",
        "workType": "TPAIRS_ATDL",
        "originator": "TestUser3",
        "pendingQuantity": 0.0,
        "childQuantity": 0.0
      }
    ]
  }
}

The algoId is the first token of the groupingId, in the below case: "groupingId": "XNG8NGXqtKcAAAAY:AAAJYWXqtacAAACf".

{
  "messageId": "55683210-5ac1-43f0-bd3c-1bf095b98096",
  "service": "orders",
  "event": "update",
  "params": {
    "subscriptionId": "XNG8NGXqtKcAAAAi"
  },
  "data": {
    "orders": [
      {
        "orderId": "AAAJYWXqtacAAACg",
        "clientOrderId": "XNG8NGXqtKcAAAAj",
        "isParent": true,
        "symbol": "CS.NULL.JAPAN.T.JPY.6293",
        "exchange": "T",
        "broker": "tpairs",
        "side": "BUY",
        "quantity": 200000.0,
        "limitPrice": 0.0,
        "owner": "TestUser3",
        "flowType": "ALGO",
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "state": "REDG",
        "executedQuantity": 0.0,
        "creationTime": "2024-03-08T06:54:25.814000Z",
        "lastUpdateTime": "2024-03-08T06:54:25.814000Z",
        "status": "OK",
        "executedValue": 0.0,
        "notionalValue": 0.0,
        "previousExecutedQuantity": 0.0,
        "previousExecutedValue": 0.0,
        "condition": "WORKED",
        "orderType": "TPAIRS_ATDL",
        "algoStrategy": "Merger",
        "algoFields": {
          "Leg1Instrument": "6293.T",
          "SpreadIsPercentType": "N",
          "Cash": "0.0",
          "Leg1IsPrimary": "Y",
          "TargetSpread": "0.0",
          "PairIsHung": "N/A",
          "Conversion": "NONE",
          "ActiveCoverCount": "N/A",
          "TargetRatio": "1.0",
          "ShareRatio": "1.0"
        },
        "externalId": "XNG8NGXqtKcAAAAj",
        "groupingId": "XNG8NGXqtKcAAAAY:AAAJYWXqtacAAACf",
        "groupingType": "PAIR",
        "lastUpdateOwner": "TestUser3",
        "limitRequestId": "UNKNOWN",
        "manualExecution": "N",
        "creatorComponent": "WSGW",
        "workATDLDescription": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;cash:0.0;leg2_executing_broker:ml;conversion:NONE;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Merger;spread_percent_type:N;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;",
        "workBrkSpecATDL": "8500:Merger;7621:4.3.7;8052:N;6004:0.0;6115:N;6015:Y;6067:Y;8178:N/A;8078:N/A;8076:N/A;8075:N/A;8043:N/A;8042:N/A;8041:N/A;6101:6298.T;6001:6293.T;6068:N;6109:10.0;6009:10.0;6000:AD_FLOAT_FLOAT;6108:0.0;6008:0.0;6014:Y;8051:0.0;6003:1.0;8107:N;6111:1;6011:1;6028:N;6107:1000.0;6007:10000.0;6197:N;6199:N;6097:N;6099:N;6196:NONE;6096:NONE;6041:ACTIVE;8056:N;6005:NONE;6110:AGGRESSIVE;6010:AGGRESSIVE;6117:ml;6017:ml;8057:N;8053:N;6040:CROSS;",
        "workBrkSpecStrategy": "Merger",
        "workType": "TPAIRS_ATDL",
        "originator": "TestUser3",
        "pendingQuantity": 0.0,
        "childQuantity": 0.0
      }
    ]
  }
}

Rate limits

Time Interval Max. Requests
1 minute 250
1 hour 1500
1 day 1500

















































































































































































































Pairs send

Use the send action with the already registered pairs order to send out the pair to the exchange/engine. The legName parameter and either of orderId / clientOrderId are required for the identification of each leg.

socket.send({
  "messageId": "pairs-send",
  "service": "pairs",
  "action": "send",
  "params": {
    "orders": [
      {
        "orderId": "AAAJYWXqtacAAACg",
        "legName": "leg1"
      },
      {
        "orderId": "AAAJYWXqtacAAACi",
        "legName": "leg2"
      }
    ]
  }
});

The pairs order is sent to exchange/engine.

 {
  "messageId": "11d42a90-d552-4501-a059-5e9ffeb4739d",
  "service": "pairs",
  "event": "send",
  "messageReferenceId": "pairs-send",
  "data": {
    "algoId": "XNG8NGXqtKcAAAAY",
    "orders": [
      {
        "orderId": "AAAJYWXqtacAAACg",
        "legName": "leg1",
        "broker": "tpairs",
        "side": "BUY",
        "quantity": 200000.0,
        "limitPrice": 0.0,
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;cash:0.0;leg2_executing_broker:ml;conversion:NONE;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Merger;spread_percent_type:N;leg1_execution_style:PASSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      },
      {
        "orderId": "AAAJYWXqtacAAACi",
        "legName": "leg2",
        "broker": "tpairs",
        "side": "SELL",
        "quantity": 100000.0,
        "limitPrice": 0.0,
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;cash:0.0;leg2_executing_broker:ml;conversion:NONE;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Merger;spread_percent_type:N;leg1_execution_style:PASSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      }
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

An error will be received in case the order could not be sent.

{
  "messageId": "486ad365-2d91-464d-9e20-cfe438bc48412",
  "service": "pairs",
  "event": "send",
  "messageReferenceId": "pairs-send",
  "status": {
    "code": "...",
    "message": "..."
  }
}

Rate limits

Time Interval Max. Requests
1 minute 250
1 hour 1500
1 day 1500
















































Pairs Register and Send

Use the registerAndSend action and specify the corresponding pairs fields to register and immediately send a pair to the exchange/engine.

socket.send({
    "messageId": "pairs-reg-and-send",
    "service": "pairs",
    "action": "registerAndSend", 
    "params": {
        "broker": "tpairs",
        "algoId": "XNG8NGXqtKcAAAC8",
        "strategy": "Pairs",
        "algoFields": {
            "target_ratio": "1.6",
            "leg1_slippage": "0.0",
            "pairs_ord_status": "ACTIVE",
            "leg2_primary": "N",
            "target_spread": "0.0",
            "leg2_slice_manual": "1000.0",
            "slippage_percent_type": "Y",
            "Version": "1",
            "continuous": "N",
            "leg2_threshold": "10.0",
            "pairs_alert_action_type": "CROSS",
            "leg2_executing_broker": "ml",
            "conversion": "NONE",
            "leg1_concurrency": "1",
            "leg_strategy": "AD_FLOAT_FLOAT",
            "leg1_threshold": "10.0",
            "leg1_slice_manual": "10000.0",
            "leg2_execution_style": "AGGRESSIVE",
            "leg2_concurrency": "1",
            "leg1_executing_broker": "ml",
            "leg1_primary": "Y",
            "Strategy": "Pairs",
            "leg1_execution_style": "AGGRESSIVE",
            "leg2_slippage": "0.0"
        },
        "orders": [{
            "clientOrderId": "XNG8NGXqtKcAAADD",
            "symbol": "6293.T",
            "symbolType": "reuters",
            "quantity": 200000,
            "side": "BUY",
            "limitPrice": "0",
            "brokerAccount": "LongShort",
            "internalAccount": "acc1",
            "tradeBook": "trdx",
            "legName": "leg1"
        }, {
            "clientOrderId": "XNG8NGXqtKcAAADE",
            "symbol": "6298.T",
            "symbolType": "reuters",
            "quantity": 100000,
            "side": "SELL",
            "limitPrice": "0",
            "brokerAccount": "LongShort",
            "internalAccount": "acc1",
            "tradeBook": "trdx",
            "legName": "leg2"
        }]
    }
});

The pairs order is registered and sent to the exchange/engine.

{
  "messageId": "db19892c-a202-4c20-8d9b-7e09ac8779bc",
  "service": "pairs",
  "event": "registerAndSend",
  "messageReferenceId": "pairs-reg-and-send",
  "data": {
    "algoId": "XNG8NGXqtKcAAAC8",
    "orders": [
      {
        "clientOrderId": "XNG8NGXqtKcAAADD",
        "symbol": "6293.T",
        "symbolType": "reuters",
        "quantity": 200000.0,
        "side": "BUY",
        "limitPrice": 0.0,
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "legName": "leg1",
        "broker": "tpairs",
        "orderId": "AAAJYWXqtacAAAKT",
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;leg2_executing_broker:ml;conversion:NONE;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Pairs;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      },
      {
        "clientOrderId": "XNG8NGXqtKcAAADE",
        "symbol": "6298.T",
        "symbolType": "reuters",
        "quantity": 100000.0,
        "side": "SELL",
        "limitPrice": 0.0,
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "legName": "leg2",
        "broker": "tpairs",
        "orderId": "AAAJYWXqtacAAAKU",
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;leg2_executing_broker:ml;conversion:NONE;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Pairs;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      }
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

An error will be received in case the order could not be registered and sent.

{
  "messageId": "486ad365-2d91-464d-9e20-cfe438bc48413",
  "service": "pairs",
  "event": "registerAndSend",
  "messageReferenceId": "pairs-reg-and-send",
  "status": {
    "code": "...",
    "message": "..."
  }
}

Rate limits

Time Interval Max. Requests
1 minute 250
1 hour 1500
1 day 1500




























































































Pairs amend

Use the amend action to modify amendable pairs and order parameters on an existing pairs order.

socket.send({
  "messageId": "pairs-amend",
    "service": "pairs",
    "action": "amend",
    "params": {
    "broker": "tpairs",
    "algoId": "XNG8NGXqtKcAAACi",
    "strategy": "Pairs",
    "algoFields": {
      "target_ratio": "1.6",
      "leg1_slippage": "0.0",
      "pairs_ord_status": "ACTIVE",
      "leg2_primary": "N",
      "target_spread": "0.0",
      "leg2_slice_manual": "1000.0",
      "slippage_percent_type": "Y",
      "Version": "1",
      "continuous": "N",
      "leg2_threshold": "10.0",
      "pairs_alert_action_type": "CROSS",
      "leg2_executing_broker": "ml",
      "conversion": "CURRENCY",
      "leg1_concurrency": "1",
      "leg_strategy": "AD_FLOAT_FLOAT",
      "leg1_threshold": "10.0",
      "leg1_slice_manual": "10000.0",
      "leg2_execution_style": "AGGRESSIVE",
      "leg2_concurrency": "1",
      "leg1_executing_broker": "ml",
      "leg1_primary": "Y",
      "Strategy": "Pairs",
      "leg1_execution_style": "AGGRESSIVE",
      "leg2_slippage": "0.0"
    },
    "orders": [{
      "clientOrderId": "XNG8NGXqtKcAAACz",
      "symbol": "6293.T",
      "symbolType": "reuters",
      "quantity": "200000",
      "side": "BUY",
      "limitPrice": "0",
      "brokerAccount": "LongShort",
      "internalAccount": "acc1",
      "tradeBook": "trdx",
      "legName": "leg1"
    }, {
      "clientOrderId": "XNG8NGXqtKcAAAC0",
      "symbol": "6298.T",
      "symbolType": "reuters",
      "quantity": "100000",
      "side": "SELL",
      "limitPrice": "0",
      "brokerAccount": "LongShort",
      "internalAccount": "acc1",
      "tradeBook": "trdx",
      "legName": "leg2"
    }]
  }
});

The amend action is sent to exchange/engine.

{
  "messageId": "301cad75-19e3-418e-980b-67bafcc87e79",
  "service": "pairs",
  "event": "amend",
  "messageReferenceId": "pairs-amend",
  "data": {
    "algoId": "XNG8NGXqtKcAAACi",
    "orders": [
      {
        "clientOrderId": "XNG8NGXqtKcAAACz",
        "symbol": "6293.T",
        "symbolType": "reuters",
        "quantity": 200000.0,
        "side": "BUY",
        "limitPrice": 0.0,
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "legName": "leg1",
        "orderId": "AAAJYWXqtacAAAJk",
        "broker": "tpairs",
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;leg2_executing_broker:ml;conversion:CURRENCY;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Pairs;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      },
      {
        "clientOrderId": "XNG8NGXqtKcAAAC0",
        "symbol": "6298.T",
        "symbolType": "reuters",
        "quantity": 100000.0,
        "side": "SELL",
        "limitPrice": 0.0,
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "legName": "leg2",
        "orderId": "AAAJYWXqtacAAAJl",
        "broker": "tpairs",
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;leg2_executing_broker:ml;conversion:CURRENCY;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Pairs;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      }
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

An error will be received in case the order could not be amended.

{
  "messageId": "486ad365-2d91-464d-9e20-cfe438bc48414",
  "service": "pairs",
  "event": "amend",
  "messageReferenceId": "pairs-amend",
  "status": {
    "code": "...",
    "message": "..."
  }
}

Rate limits

Time Interval Max. Requests
1 minute 500
1 hour 6000
1 day 6000




























































































Pairs cancel

Use the cancel action to cancel a pairs order. Similar to send, legName and either of orderId / clientOrderId are required for the identification of each leg.

socket.send({
  "messageId": "pairs-cancel",
  "service": "pairs",
  "action": "cancel",
  "params": {
    "orders": [
      {
        "orderId": "AAAJYWXqtacAAAJk",
        "legName": "leg1"
      },
      {
        "orderId": "AAAJYWXqtacAAAJl",
        "legName": "leg2"
      }
    ]
  }
});

The cancel action is sent to exchange/engine.

{
  "messageId": "301cad75-19e3-418e-980b-67bafcc87e79",
  "service": "pairs",
  "event": "cancel",
  "messageReferenceId": "pairs-cancel",
  "data": {
    "algoId": "XNG8NGXqtKcAAACi",
    "orders": [
      {
        "clientOrderId": "XNG8NGXqtKcAAACz",
        "symbol": "6293.T",
        "symbolType": "reuters",
        "quantity": 200000.0,
        "side": "BUY",
        "limitPrice": 0.0,
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "legName": "leg1",
        "orderId": "AAAJYWXqtacAAAJk",
        "broker": "tpairs",
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;leg2_executing_broker:ml;conversion:CURRENCY;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Pairs;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      },
      {
        "clientOrderId": "XNG8NGXqtKcAAAC0",
        "symbol": "6298.T",
        "symbolType": "reuters",
        "quantity": 100000.0,
        "side": "SELL",
        "limitPrice": 0.0,
        "brokerAccount": "LongShort",
        "internalAccount": "acc1",
        "tradeBook": "trdx",
        "legName": "leg2",
        "orderId": "AAAJYWXqtacAAAJl",
        "broker": "tpairs",
        "workBrkSpecATDL": "target_ratio:1.6;leg1_slippage:0.0;pairs_ord_status:ACTIVE;leg2_primary:N;target_spread:0.0;leg2_slice_manual:1000.0;slippage_percent_type:Y;Version:1;continuous:N;leg2_threshold:10.0;pairs_alert_action_type:CROSS;leg2_executing_broker:ml;conversion:CURRENCY;leg1_concurrency:1;leg_strategy:AD_FLOAT_FLOAT;leg1_threshold:10.0;leg1_slice_manual:10000.0;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;leg1_executing_broker:ml;leg1_primary:Y;Strategy:Pairs;leg1_execution_style:AGGRESSIVE;leg2_slippage:0.0;leg1_instrument:6293.T;leg2_instrument:6298.T;"
      }
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

An error will be received in case the order could not be cancelled.

{
  "messageId": "486ad365-2d91-464d-9e20-cfe438bc4841",
  "service": "pairs",
  "event": "cancel",
  "messageReferenceId": "pairs-cancel",
  "status": {
    "code": "...",
    "message": "..."
  }
}

Rate limits

Time Interval Max. Requests
1 minute 500
1 hour 9000
1 day 9000



























































Pairs Pair Up

Use the pairUp action to link and pair two already registered single Parent orders, including the pairs fields that define how the algorithm will trade. This action will not transmit the pair to the exchange/engine. If the action fails validation, the orders will not pair up. If it succeeds, the two orders will link together as a pair in the registered state. orderId or clientOrderId from the registered parent orders can be used to identify the already registered orders.

Best Practices:

socket.send({
  "messageId": "pair-up-test",
  "service": "pairs",
  "action": "pairUp",
  "params": {
    "strategy": "Pairs",
    "broker": "tpairs",
    "algoId": "9265a8c2051e-c7b-19472e63c43-3",
    "algoFields": {
      "target_ratio": "15.65",
      "pairs_ord_status": "INACTIVE",
      "target_spread": 0.0,
      "conversion": "None",
      "pairs_alert_action_type": "CROSS",
      "leg1_threshold": 0.01,
      "leg2_threshold": 0.01,
      "leg1_slippage": 0,
      "leg2_slippage": 0,
      "leg1_concurrency": 1,
      "leg2_concurrency": 1,
      "leg1_slice_manual": 100,
      "leg2_slice_manual": 100,
      "leg_strategy": "AD_FLOAT_FIX",
      "leg1_primary": "Y",
      "leg2_primary": "N",
      "leg1_pov_type": "ALL",
      "leg2_pov_type": "ALL",
      "leg1_execution_style": "AGGRESSIVE",
      "leg2_execution_style": "AGGRESSIVE",
      "leg1_pov": 10,
      "leg2_pov": 10,
      "leg1_executing_broker": "broker",
      "leg2_executing_broker": "broker"
    },
    "orders": [
      {
        "legName": "leg1",
        "orderId": "Ukbg4meJzIAAAgMK"
      },
      {
        "legName": "leg2",
        "orderId": "Ukbg4meJzIAAAgVX"
      }
    ]
  }
});

The pairUp action succeeds.

{
  "messageId": "66374851-0bcd-4316-8184-e687774985ef",
  "service": "pairs",
  "event": "pairUp",
  "messageReferenceId": "pair-up-test",
  "data": {
    "algoId": "9265a8c2051e-c7b-19472e63c43-3",
    "orders": [
      {
        "legName": "leg1",
        "orderId": "Ukbg4meJzIAAAgMK",
        "symbol": "9432.T",
        "symbolType": "REUTERS",
        "exchange": "T",
        "brokerAccount": "BROKER_ACCOUNT",
        "side": "BUY",
        "quantity": 10000.0,
        "limitPrice": 0.0,
        "broker": "tpairs",
        "workBrkSpecATDL": "leg1_slippage:0.0;leg1_pov_type:All;enable_slices:false;leg1_pov:10.0;slippage_percent_type:false;leg2_slice_manual:100.0;active_cover_count:N/A;Version:4.4.0;leg1_instrument:9432.T;continuous:false;pair_session_info_tag:N/A;pairs_is_hung:N/A;pairs_alert_action_type:CROSS;leg2_instrument:6501.T;leg_strategy:AD_FLOAT_FIX;leg1_threshold:0.01;leg1_slice_manual:100.0;leg1_executing_broker:gs;pair_executed_conversion_rate:N/A;leg1_primary:true;leg1_execution_style:AGGRESSIVE;primary_avg_price:N/A;leg2_slippage:0.0;target_ratio:15.65;incremental_float:false;pairs_ord_status:INACTIVE;leg2_primary:false;target_spread:0.0;tgtbt_check:true;enable_i_would_ratio:false;leg2_threshold:0.01;enable_i_would_spread:false;leg2_executing_broker:gs;leg2_pov_type:All;conversion:None;pair_error_reason:N/A;leg2_enable_pov:true;leg1_concurrency:1;leg2_enable_passive_pov:false;leg1_enable_passive_pov:false;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;secondary_avg_price:N/A;leg1_enable_pov:true;leg2_pov:10.0;Strategy:Pairs;enable_too_good_to_be_true:false;check_available_liquidity:false;enable_flexible_slice_sizes:false;"
      },
      {
        "orderId": "Ukbg4meJzIAAAgVX",
        "legName": "leg2",
        "symbol": "0001.HK",
        "symbolType": "REUTERS",
        "exchange": "HK",
        "brokerAccount": "BROKER_ACCOUNT",
        "side": "SELL",
        "quantity": 5000.0,
        "limitPrice": 0.0,
        "broker": "tpairs",
        "workBrkSpecATDL": "leg1_slippage:0.0;leg1_pov_type:All;enable_slices:false;leg1_pov:10.0;slippage_percent_type:false;leg2_slice_manual:100.0;active_cover_count:N/A;Version:4.4.0;leg1_instrument:9432.T;continuous:false;pair_session_info_tag:N/A;pairs_is_hung:N/A;pairs_alert_action_type:CROSS;leg2_instrument:6501.T;leg_strategy:AD_FLOAT_FIX;leg1_threshold:0.01;leg1_slice_manual:100.0;leg1_executing_broker:gs;pair_executed_conversion_rate:N/A;leg1_primary:true;leg1_execution_style:AGGRESSIVE;primary_avg_price:N/A;leg2_slippage:0.0;target_ratio:15.65;incremental_float:false;pairs_ord_status:INACTIVE;leg2_primary:false;target_spread:0.0;tgtbt_check:true;enable_i_would_ratio:false;leg2_threshold:0.01;enable_i_would_spread:false;leg2_executing_broker:gs;leg2_pov_type:All;conversion:None;pair_error_reason:N/A;leg2_enable_pov:true;leg1_concurrency:1;leg2_enable_passive_pov:false;leg1_enable_passive_pov:false;leg2_execution_style:AGGRESSIVE;leg2_concurrency:1;secondary_avg_price:N/A;leg1_enable_pov:true;leg2_pov:10.0;Strategy:Pairs;enable_too_good_to_be_true:false;check_available_liquidity:false;enable_flexible_slice_sizes:false;"
      }
    ]
  },
  "status": {
    "code": 0,
    "message": "Ok"
  }
}

An error will be received in case the pairUp action fails. The orders will not be paired up in this case. And can be paired up again if validation fails

{
  "messageId": "486ad365-2d91-464d-9e20-cfe438bc4841",
  "service": "pairs",
  "event": "pairUp",
  "messageReferenceId": "pair-up-test",
  "status": {
    "code": "...",
    "message": "..."
  }
}

Rate limits

Time Interval Max. Requests
1 minute 250
1 hour 1500
1 day 1500
























































MDATA

End points

Environment REST WEBSOCKET
UAT https://api.uat.toradev.net/dev wss://api.uat.toradev.net/dev/mdata
PROD https://api-a.toratrading.net/v1 wss://api-a.toratrading.net/v1/mdata
POEMS AMER Not available wss://api-amer.macpoems.refinitiv.com/mdata/v1
POEMS EMEA Not available wss://api-emea.macpoems.refinitiv.com/mdata/v1
POEMS APAC Not available wss://api-apac.macpoems.refinitiv.com/mdata/v1

Authentication

An access token is required in order to interact with the market data APIs. This can be obtained by sending an HTTP request as described below. Access tokens expire after 24 hours.

Authentication request example


curl -X POST
 -H "Content-Type: application/json"
 -d '{
       "type":"Key",
       "payload":{
         "accessKeyID":"<yourAccessKey>",
         "secretAccessKey":"<yourSecretAccessKey>"
       }
     }'
 $REST_ENDPOINT/auth/authenticate

Parameter Values
type The authentication type - may be "Key" or "Credentials". Only "Key" is supported at the moment.
payload The accessKeyID and secretAccesKey. Request one from your sales representative

Authentication successful response example


{
  "accessToken":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJWMVFIVFFQSjAxOTIxQzNNREZIWSIsImlzcyI6IkNhc3BpYW4gVGVjaCIsImV4cCI6MTY0ODg4NzI1N30.MmJ7ZTr9mSK-bsgNif5HyjU8Z9__WGTN_oGvUxdZ3XI",
  "expiration":"2022-04-02T08:14:17.818000"
}

Available Exchanges

Exchanges request example:


curl -X POST
 -H "Authorization: <yourSecretAccessKey>"
 $REST_ENDPOINT/refdata/exchanges

Exchanges response example:

[
  {
    "name": "CS.NULL.JAPAN.FU.JPY",
    "code": "CS.NULL.JAPAN.FU.JPY"
  },
  {
    "name": "CS.NULL.JAPAN.INJ.JPY",
    "code": "CS.NULL.JAPAN.INJ.JPY"
  },
  {
    "name": "CS.NULL.JAPAN.JNX.JPY",
    "code": "CS.NULL.JAPAN.JNX.JPY"
  },
  {
    "name": "CS.NULL.JAPAN.NG.JPY",
    "code": "CS.NULL.JAPAN.NG.JPY"
  },
  {
    "name": "CS.NULL.JAPAN.SP.JPY",
    "code": "CS.NULL.JAPAN.SP.JPY"
  },
  {
    "name": "CS.NULL.JAPAN.T.JPY",
    "code": "CS.NULL.JAPAN.T.JPY"
  }
]

An endpoint to return all available exchanges.

Field Description
name The name for this market
code The code used for this market

Exchange Products

Products request example:


curl -X POST
 -H "Content-Type: application/json"
 -H "Authorization: <yourSecretAccessKey>"
 -d '{
       "exchanges":["CS.NULL.JAPAN.SP.JPY"]
     }'
 $REST_ENDPOINT/refdata/products

Products response example:


[
  {
    "lotSize": "100",
    "section": "MAIN",
    "displayCode": "3544",
    "primaryExchange": "T",
    "clientAlias": "",
    "name": "SATUDORA HOLDINGS CO LTD",
    "gics": "30101010",
    "sharesOutstanding": "4742000",
    "ric": "3544",
    "bbgBase": "3544",
    "reutersCode": "3544.SP",
    "bbgCode": "3544 JS Equity",
    "ISINCode": "JP3319750000",
    "sedolCode": "BD9F750",
    "nativeCode": "3544",
    "IDCCode": "E:S3544:TKY",
    "bbgComp": "3544 JP Equity",
    "sharesFloat": "2.7358",
    "subtype": "ORD",
    "issuer": "CS.NULL.JAPAN.T.JPY.3544",
    "prevEarningsDate": "2016-09-29",
    "toraMarket": "CS.NULL.JAPAN.SP.JPY",
    "toraCode": "CS.NULL.JAPAN.SP.JPY.3544"
  },
  {
    "lotSize": "100",
    "lastPrice": "2090",
    "closingDate": "2019-01-25T00:00:00.000000",
    "basePrice": "2090",
    "section": "AMBITIOUS",
    "displayCode": "3987",
    "primaryExchange": "T",
    "clientAlias": "",
    "name": "ECOMOTT INC",
    "gics": "45102010",
    "sharesOutstanding": "4530800",
    "marketcap": "9469372000",
    "ric": "3987",
    "bbgBase": "3987",
    "isMother": "M",
    "reutersCode": "3987.SP",
    "bbgCode": "3987 JS Equity",
    "ISINCode": "JP3161290006",
    "sedolCode": "BF2MKX1",
    "nativeCode": "3987",
    "IDCCode": "E:S3987:TKY",
    "bbgComp": "3987 JP Equity",
    "sharesFloat": "1.6374",
    "subtype": "ORD",
    "issuer": "CS.NULL.JAPAN.T.JPY.3987",
    "toraMarket": "CS.NULL.JAPAN.SP.JPY",
    "toraCode": "CS.NULL.JAPAN.SP.JPY.3987"
  }
]

An endpoint to return all products of a certain exchange.

Parameter Description
exchanges List of exchanges for which to retrieve the product information

Product Details

Product Details request example:


curl -X GET
 -H "Authorization: <yourSecretAccessKey>"
 $REST_ENDPOINT/refdata/product/CS.NULL.JAPAN.SP.JPY.8524

Product Details response example:


[
  {
    "lotSize": "100",
    "lastPrice": "287",
    "closingDate": "2018-12-20T00:00:00.000000",
    "basePrice": "287",
    "section": "MAIN",
    "displayCode": "8524",
    "primaryExchange": "T",
    "clientAlias": "",
    "name": "NORTH PACIFIC BANK LTD",
    "gics": "40101015",
    "sharesOutstanding": "399060179",
    "marketcap": "114530271373",
    "ric": "8524",
    "bbgBase": "8524",
    "reutersCode": "8524.SP",
    "bbgCode": "8524 JS Equity",
    "ISINCode": "JP3843400007",
    "sedolCode": "B7VKZP7",
    "nativeCode": "8524",
    "IDCCode": "E:S8524:TKY",
    "bbgComp": "8524 JP Equity",
    "sharesFloat": "351.6631",
    "subtype": "ORD",
    "issuer": "CS.NULL.JAPAN.T.JPY.8524",
    "prevEarningsDate": "2016-11-11",
    "toraMarket": "CS.NULL.JAPAN.SP.JPY",
    "toraCode": "CS.NULL.JAPAN.SP.JPY.8524"
  }
]

An endpoint to get the details of a certain product.

Parameter Decription
product_code The product code for the retrieved product

Each product can have a subset of the following fields populated, according to its asset type.

Parameter Type Format Description
avgVol5D string - Average traded volume in the last 5 working days
avgVol10D string - Average traded volume in the last 10 working days
avgVol20D string - Average traded volume in the last 20 working days
avgVol30D string - Average traded volume in the last 30 working days
avgVol60D string - Average traded volume in the last 60 working days
avgVol90D string - Average traded volume in the last 90 working days
avgVol100D string - Average traded volume in the last 100 working days
avgVol3M string - Average traded volume in the last 3 months
avgVol6M string - Average traded volume in the last 6 months
basePrice string - The base price
bbgBase string - Bloomberg Base code for a specic instrument
bbgCode string - Corresponding Bloomberg code for this security
bbgComp string - Bloomberg Composite code
beta string - Coefficient describing the activity of a security's returns responding to swings in the market
caspianCode string - The code for a crypto security used inside the Caspian system
ccyFrom string - FX pair base currency
ccyTo string - FX pair quote currency
clientAlias
closingDate string DATE Closing date for a derivative
cm1 string DATE Currency from (applicable for FX pairs)
cm2 string DATE Currency to (applicable for FX pairs)
contractYearMonth string - Contract year month
currency string - Currency this product is being traded in
currentDate string -
cusipCode string - CUSIP code for this security
displayCode string - Code used internally by Compass. It uniquely defines codes inside a TORA market family
earningsDate
exdivident
expireDate string DATE Date when a future / spread / option expires
externalID
faceValue string - A stock's face value is the initial cost of the stock, as indicated on the certificate of the stock in question; a bond's face value is the dollar figure due to be paid to the investor, once the bond reaches maturity.
fixingDate string - The fixing date is the date at which the difference between the prevailing spot market rate and the agreed-upon rate is calculated.
gics string - Global Industry Classification Standard (GICS) code
giveupBroker string - Give up is a procedure in securities or commodities trading where an executing broker places a trade on behalf of another broke
IDCCode string - IDC Code
IPODate string - Date of the IPO for the specified symbol
isAuction string - Signals whether the symbol represents an auction
isExceptShortSell
isExpired - - Signals whether the instrument is a future/ spread/ option that is no longer tradeable
ISINCode string - The corresponding ISIN Code of the specified symbol
isMother
idNDF - - Non disclosure forward
isShortSell
issue
issuer string - The entity creating the security/ symbol
lastPrice string - Value representing the last price the security was traded at. Not all instruments have this field populated
lotSize string - Lot size of the instrument
marginFlag
market - - The Tora Market family of this specific instrument: Format: INSTRUMENTTYE.INSTRUMENTSUBTYPE.COUNTRY
marketcap string - Market capitalization
minSize - - Minimum size for an order
multiplier
name string - Description of the symbol
nativeCode string - The code used by the exchange to refer to it
nativeLanguage - - The language of the exchange where the instrument was listed
optionType
prevEarningsDate string - Previous earning date
primaryExchange string - The primary exchange were the instrument is listed
putCall
reutersCode string - Reuters code for the symbol
ric string - The Reuters code without the exchange suffix
section string - The exchange section to which the symbol belongs to
sectionMIC string - Section MIC code
sedolCode string - SEDOL code for the symbol
settlementDate
settlementDateOffset
sharesFloat
sharesOutstanding
sicc string - SICC code for the symbol
significantDecimal
significantIntegers
spreadType
strike string - The strike of the spread
subtype
tenor
tickRule string - The tick rule definition of the symbol
triggerPrice
type string - Type of instrument, for example: "FX", "CS", "FWD"
underlyingToraCode string - Underlying Tora code for the symbol (only applicable for futures, spreads and options)

Search for instruments where either the "name" or "ric" contains the text "PACIFIC"


curl -X POST
 -H "Content-Type: application/json"
 -H "Authorization: <yourSecretAccessKey>"
 -d '{
       "conditions":[{"anyOf": ["name", "ric"], "contains": "PACIFIC"}],
       "limit": "1000"
     }'
 $REST_ENDPOINT/refdata/search-products

Search response example:


[
  {
    "lotSize": "100",
    "displayCode": "7532",
    "primaryExchange": "T",
    "clientAlias": "",
    "name": "PAN PACIFIC INTERNATIONAL HO",
    "gics": "25503020",
    "sharesOutstanding": "158299060",
    "ric": "7532",
    "reutersCode": "7532.INJ",
    "ISINCode": "JP3639650005",
    "sedolCode": "6269861",
    "settlementDateOffset": "3",
    "subtype": "ORD",
    "issuer": "CS.NULL.JAPAN.T.JPY.7532",
    "prevEarningsDate": "2019-05-08",
    "toraMarket": "CS.NULL.JAPAN.INJ.JPY",
    "toraCode": "CS.NULL.JAPAN.INJ.JPY.7532"
  },
  {
    "lotSize": "100",
    "displayCode": "5541",
    "primaryExchange": "T",
    "clientAlias": "",
    "name": "PACIFIC METALS CO LTD",
    "gics": "15104020",
    "sharesOutstanding": "19577071",
    "ric": "5541",
    "reutersCode": "5541.INJ",
    "ISINCode": "JP3448000004",
    "sedolCode": "6666343",
    "settlementDateOffset": "3",
    "subtype": "ORD",
    "issuer": "CS.NULL.JAPAN.T.JPY.5541",
    "prevEarningsDate": "2019-05-10",
    "toraMarket": "CS.NULL.JAPAN.INJ.JPY",
    "toraCode": "CS.NULL.JAPAN.INJ.JPY.5541"
  }
]

Search for instruments named "PACIFIC METALS CO LTD" which have "toraMarket" as "JAPAN" and for which the "displayCode" matches the pattern "5541.*"


curl -X POST
 -H "Content-Type: application/json"
 -H "Authorization: <yourSecretAccessKey>"
 -d '{
       "conditions":[
         {"anyOf":["name"], "isEqualTo": "PACIFIC METALS CO LTD"},
         {"anyOf":["toraMarket"], "contains": "JAPAN"},
         {"anyOf":["displayCode"], "matches": "5541.*"}
       ],
       "limit": "5"
     }'
 $REST_ENDPOINT/refdata/search-products

Search response example:


[
  {
    "lotSize": "100",
    "displayCode": "5541",
    "primaryExchange": "T",
    "clientAlias": "",
    "name": "PACIFIC METALS CO LTD",
    "gics": "15104020",
    "sharesOutstanding": "19577071",
    "ric": "5541",
    "reutersCode": "5541.INJ",
    "ISINCode": "JP3448000004",
    "sedolCode": "6666343",
    "settlementDateOffset": "3",
    "subtype": "ORD",
    "issuer": "CS.NULL.JAPAN.T.JPY.5541",
    "prevEarningsDate": "2019-05-10",
    "toraMarket": "CS.NULL.JAPAN.INJ.JPY",
    "toraCode": "CS.NULL.JAPAN.INJ.JPY.5541"
  }
]

An endpoint to get products based on given conditions.

Parameter Description
conditions A list of search conditions, joined by the AND operator
conditions[].anyOf One or more fields on which this filter is being applied
conditions[].contains A filter that checks whether the anyOf fields contain a given value
conditions[].isEqualTo A filter that checks whether the anyOf fields are equal to a given value
conditions[].matches A filter that checks whether the anyOf fields match the given regex expression
limit The maximum number of results to return

Realtime Market Data

The following section describes the interaction between a client application and the Real-time Data service, using web socket technology. In order to use this service, a token must first be obtained, as described in the authentication section.

Please be aware that Realtime Data service can be used only for FX live prices.

1. Connection initialization

A connection initialization example in javascript:


var socket = new WebSocket('$WEBSOCKET_ENDPOINT/realtime/stream?access_token=<yourAccessToken>');

When establishing the websocket connection, the user must supply the access token via one of the following ways:

  1. By setting the HTTP header Authorization and connecting to $WEBSOCKET_ENDPOINT/realtime/stream Authorization: access_token
  2. By adding the access_token parameter in the URL $WEBSOCKET_ENDPOINT/realtime/stream?access_token=<yourAccessToken>

If the token is not specified or if it's invalid/expired, the websocket connection will be closed by the server with one of the following reasons mentioned in the CloseState (see RFC 6455 on protocol details):

Once the connection is established successfully, the user can proceed with sending requests to the service. The connection will be closed by the service when the token expires. In order to keep the old connection alive, the user must generate a new valid token and make a Token Refresh request as described in Token Refresh section. The Token Refresh request will replace the token used for the current connection with the newly generated one. If the Token Refresh request succeeds the connection lifetime will be extended in accordance to the new token lifetime.

2. Messages format

Both outbound and inbound messages are formatted using JSON standard like below: {
       "requestId": string,
       "type": string,
       "payload": object
}

where:

For outbound messages, the requestId value will be the same as the one used in generating the request (except for the protocol error messages - those are returning the requestId as "N/A").

3. Inbound messages

By inbound messages, we are referring to messages sent by the client to the server.

Real-time subscription example:


socket.send({
  "requestId": "96113dcc-734d-42d3-b347-965a4218e0a2",
  "type": "Subscribe",
  "payload": {
      "symbol": "EURUSD=EBS",
      "symbolType": "Reuters",
      "type": "Level1"
  }
});

Subscription OK response:


{
    "requestId": "96113dcc-734d-42d3-b347-965a4218e0a2",
    "type": "SubscribeResponse",
    "payload": {
        "code": 200,
        "message": "All OK"
    }
}

Subscription with extraParams example:


{
  "requestId": "96113dcc-734d-42d3-b347-965a4218e0a2",
  "type": "Subscribe",
  "payload": {
    "symbol": "EURUSD=EBS",
    "symbolType": "Reuters",
    "type": "Level2",
    "conflation": "1s",
    "numberOfLevels": 10,
    "extraParams": {
      "fx": {
        "type": "full-amount",
        "quantity": 10000,
        "liquidity-providers": ["LP1", "LP2"]
      }
    }
  }
}

3.1 Subscription requests
Subscriptions are used for requesting streaming data for a certain symbol.

Parameter Type Format Description
requestId string - A unique string identifying the request; it's recommended that UUID is used for populating this field
type string ENUM The type of message (for subscriptions, must be Subscribe)
payload object - An object holding the subscription parameters
payload.symbol string - The symbol for which market data is requested
payload.symbolType string ENUM The type of symbol used for this subscription. Possible values: Reuters, Bloomberg, Tora; if symbol type is not specified, the default (Reuters) is used
payload.type string ENUM Market data type; can be Level1 (for trade and quote data) or Level2 (for depth data)
payload.numberOfLevels number INT The number of depth levels (for Level2 subscriptions). Default value is 20. Max value is 100
payload.conflation string - If the conflation value is different than None, updates will be conflated and only sent at the specified time interval. Default value is 330ms.
payload.extraParams object - An optional object holding extra information regarding the subscription
payload.extraParams.fx object - An object holding extra information regarding a FX subscription
payload.extraParams.fx.type string ENUM The type of FX subscription. Possible values: sweepable, full-amount, vwap
payload.extraParams.fx.quantity int - Quantity of interest. Mandatory for FX types vwap and full-amount. Optional for sweepable
payload.extraParams.fx.liquidity-providers object string list - List of liquidity providers that should be considered when computing market data. In order to build a valid list, please contact your representative in order to determine valid values

Possible response codes for subscriptions messages:

Code Description
200 All OK
201 Duplicated Request ID
202 Invalid subscription symbol
203 Invalid subscription type
204 Another subscription already exists
205 Not authorized
206 Subscription limit reached
207 Invalid symbol type
208 Invalid number of levels
209 Symbol type not currently supported
211 Missing FX quantity.
212 Incorrect extra parameters.
213 Invalid JSON.
214 Missing FX type.
215 Invalid FX type.
216 Invalid liquidity providers field value.
218 Invalid FX quantity.
500 Internal server error.

Real-time unsubscription example:


socket.send({
  "requestId": "96113dcc-734d-42d3-b347-965a4218e0a2",
  "type": "Unsubscribe",
  "payload": {
    "subscribeRequestId": "96113dcc-734d-42d3-b347-965a4218e0a2"
  }
});

Unsubscription response when the request was OK:


{
    "requestId": "96113dcc-734d-42d3-b347-965a4218e0a2",
    "type": "UnsubscribeResponse",
    "payload": {
        "code": 300,
        "message": "All OK"
    }
}

Unsubscription response when the subscribeRequestId is not found:


{
    "requestId": "N/A",
    "type": "ProtocolError",
    "payload": {
        "code": 301,
        "message": "Subscription not found"
    }
}

3.2 Unsubscription requests
Unsubscriptions are used to terminate an active streaming request, based on the original request ID.

Parameter Type Format Description
requestId string - A unique string identifying the request
type string ENUM The message type (for unsubscriptions, must be Unsubscribe)
payload object - An object holding the unsubscription parameters
payload.subscribeRequestId string - The request id for which the unsubscription is done

Possible response codes for unsubscriptions messages:

Code Description
300 All OK
301 Subscription not found
302 Duplicated requestId

3.3 Token refresh requests
Token refreshes are used to replace an expiring token with a newly generated one.

Token refresh request example:


socket.send({
  "requestId": "96113dcc-734d-42d3-b347-965a4218e0a2",
  "type": "TokenRefresh",
  "payload": {
    "accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJSZWFsVGltZUFQSSIsImlzcyI6IkNhc3BpYW4gVGVjaCIsImV4cCI6MTY0MTg5OTE0NH0.0YItnz0Uwc3Gf11IKHAuzeO_c5N1LZb__S51OQwh-NY"
  }
});

Parameter Type Format Description
requestId string - A unique string identifying the request
type string ENUM The message type (for unsubscriptions, must be Unsubscribe)
payload object - An object holding the refresh request details
payload.accessToken string - The newly obtained access token that will replace the old one

4. Outbound messages

By outbound messages, we are referring to messages sent by the server to the client.

4.1 Level1 updates

An example of Level1 update:


{
    "requestId":"344300cc-734d-42d3-b347-965a4218e0a2",
    "type":"Level1",
    "payload":
    {
      "ask":1.06495,
      "askSize":1000000,
      "bid":1.06493,
      "bidSize":1000000,
      "tradePrice":1.06494
    }
}

As a result of a successful subscribe for Level1, the server will send quote and trade updates to the client. The updates can contain one or more of the below fields as part of payload:

Field Type Format Description
ask number DEC The last ask price
askSize number DEC The last ask size
bid number DEC The last bid price
bidSize number DEC The last bid size
tradePrice number DEC The last traded price
tradeSize number DEC The last traded size
volume string - Traded volume
percentChange string - Price percentage change as compared to the open price
vwap string - Volume weighted average price for the day
tick string enum The market tone, U for up-tick, D for down-tick
open string - Price at market open
close string - Price at market close
high string - Highest recorded price during the market session
low string - Lowest recorded price during the market session

4.2 Level2 updates

An example of Level2 update:


{
    "requestId": "45953af9-e9fc-4809-8974-fb1badc022ee",
    "type": "Level2",
    "payload": [
      {
        "side":"ask",
        "price":1.06486,
        "size":"11000000"
      },
      {
        "side":"ask",
        "price":1.06485,
        "size":"5000000"
      },
      {
        "side":"ask",
        "price":1.06484,
        "size":"1000000"
      },
      {
        "side":"ask",
        "price":1.06483,
        "size":"0"
      },
      {
        "side":"bid",
        "price":1.0648,
        "size":"4000000"
      },
      {
        "side":"bid",
        "price":1.06479,
        "size":"8000000"
      },
      {
        "side":"bid",
        "price":1.06478,
        "size":"5000000"
      },
      {
        "side":"bid",
        "price":1.06477,
        "size":"0"
      }
    ]
}

As a result of a successful subscribe for Level2, the server will send depth updates to the client. The very first update will represent the order book snapshot. Subsequent updates will only contain changes to that initial image. To be noted that: * A non-zero size translates to a change of size for a specific price level, for that specific side * A zero size means that the specified price level no longer contains orders

The response will contain the following fields:

Field Type Format Description
requestId string - A unique string identifying the request
type string ENUM The message type (in this case Level2)
exchangeTimestamp string DATETIME The time of the last Level2 update (expressed in YYYY-MM-DDTHH:MM:SS.mmmmmm) reported by the exchange. If not available, this field is absent
caspianTimestamp string DATETIME The time of the last Level2 update (expressed in YYYY-MM-DDTHH:MM:SS.mmmmmm) received by Caspian
payload[].price number DEC The price level for the array entry
payload[].size number DEC The size for the array entry
payload[].side number DEC The side for the array entry; can be ask or bid

4.3 Token refresh response

A response example for Token refresh


{
    "requestId": "96113dcc-734d-42d3-b347-965a4218e0a2",
    "type": "TokenRefreshResponse",
    "payload": {
        "code": 200,
        "message": "All OK"
    }
}

{
       "code": int,
       "message": string
}

where:

A message sent by the service to confirm the status of a TokenRefresh request.

4.4 General Protocol Errors

A protocol error message for an incorrectly formatted subscription request:


{
    "requestId": "N/A", // requestId is always set to N/A for ProtocolError messages
    "type": "ProtocolError",
    "payload": {
        "code": 100,
        "message": "Request was not properly formatted as JSON"
    }
}

A protocol error is sent by the server when it receives a message that was not properly formatted. The payload of this response will look like this:

{
"code": int,
"message": string
}

where:

Errors

The TORA API uses the following error codes:

Error Code Meaning
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your API key is missing.
403 Forbidden -- Your API key is invalid.
404 Not Found -- The requested resource could not be found.
405 Method Not Allowed -- You tried to access a resource with an invalid HTTP method.
406 Not Acceptable -- You requested a format that isn't JSON.
500 Internal Server Error -- We had a problem with our server. Please try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.

Extra Order Samples

Equities; Index Futures; Stock Futures; Index Options; Stock Options; Calendar Spreads; MultiLeg Instruments

Will be using 2 orders subscriptions:

Equities

Register parent order symbolType: tora: cash stock: CS.NULL.JAPAN.T.JPY.7203
Then register and send child order on the parent.
Receive fills updates at child level and parent level.

Register Parent order

{
  "messageId": "2025-02-06-003",
    "service": "orders",
    "action": "register",
    "params": {
    "order": {
      "symbol": "CS.NULL.JAPAN.T.JPY.7203",
        "broker": "citi",
        "side": "BUY",
        "quantity": "1000.0",
        "limitPrice": "166.0",
        "flowType": "DMA",
        "brokerAccount": "TestAcc1",
        "allocationMethod": "METHOD_1",
        "internalAccount": "IA1",
        "tradeBook": "trdx",
        "tag": "forA",
        "synthType": "swp",
        "openClose": "OPEN",
        "condition": "WORKED",
        "orderType": "CD",
        "skipLimitChecks": "false",
        "clientOrderId": "Tt5vhmehgJwAAADR",
        "symbolType": "TORA"
    }
  }
}

Update on TORA symbolType subscription

{
  "messageId": "c2c9ab18-ceb9-43ae-a9e2-2a84e0f45c18",
    "service": "orders",
    "event": "update",
    "params": {
    "subscriptionId": "orders_sub_1"
  },
  "data": {
    "orders": [
      {
        "orderId": "AAAS7GekV8gAAACd",
        "clientOrderId": "Tt5vhmehgJwAAADR",
        "isParent": true,
        "symbol": "CS.NULL.JAPAN.T.JPY.7203",
        "exchange": "T",
        "broker": "citi",
        "side": "BUY",
        "quantity": 1000.0,
        "limitPrice": 166.0,
        "owner": "wsgw_user",
        "flowType": "WORKED",
        "brokerAccount": "TestAcc1",
        "internalAccount": "IA1",
        "tradeBook": "trdx",
        "state": "REDG",
        "executedQuantity": 0.0,
        "creationTime": "2025-02-06T06:42:01.502000Z",
        "lastUpdateTime": "2025-02-06T06:42:01.566000Z",
        "allocationMethod": "METHOD_1",
        "tag": "forA",
        "status": "OK",
        "executedValue": 0.0,
        "notionalValue": 166000.0,
        "previousExecutedQuantity": 0.0,
        "previousExecutedValue": 0.0,
        "synthType": "swp",
        "condition": "WORKED",
        "orderType": "CD",
        "openClose": "OPEN",
        "externalId": "Tt5vhmehgJwAAADR",
        "lastUpdateOwner": "wsgw_user",
        "limitRequestId": "AAAS7GekV8gAAACi",
        "limitStatus": "APPR",
        "manualExecution": "N",
        "creatorComponent": "WSGW",
        "workType": "CD",
        "originator": "wsgw_user",
        "pendingQuantity": 0.0,
        "productNativeCode": "7203",
        "childQuantity": 0.0
      }
    ]
  }
}

Update on reuters symbolType subscription

{
  "messageId": "1f0e4f0c-573b-4f2d-86bd-46b701492c81",
    "service": "orders",
    "event": "update",
    "params": {
    "subscriptionId": "orders_sub_2"
  },
  "data": {
    "orders": [
      {
        "orderId": "AAAS7GekV8gAAACd",
        "clientOrderId": "Tt5vhmehgJwAAADR",
        "isParent": true,
        "symbol": "7203.T",
        "exchange": "T",
        "broker": "citi",
        "side": "BUY",
        "quantity": 1000.0,
        "limitPrice": 166.0,
        "owner": "wsgw_user",
        "flowType": "WORKED",
        "brokerAccount": "TestAcc1",
        "internalAccount": "IA1",
        "tradeBook": "trdx",
        "state": "REDG",
        "executedQuantity": 0.0,
        "creationTime": "2025-02-06T06:42:01.502000Z",
        "lastUpdateTime": "2025-02-06T06:42:01.566000Z",
        "allocationMethod": "METHOD_1",
        "tag": "forA",
        "status": "OK",
        "executedValue": 0.0,
        "notionalValue": 166000.0,
        "previousExecutedQuantity": 0.0,
        "previousExecutedValue": 0.0,
        "synthType": "swp",
        "condition": "WORKED",
        "orderType": "CD",
        "openClose": "OPEN",
        "externalId": "Tt5vhmehgJwAAADR",
        "lastUpdateOwner": "wsgw_user",
        "limitRequestId": "AAAS7GekV8gAAACi",
        "limitStatus": "APPR",
        "manualExecution": "N",
        "creatorComponent": "WSGW",
        "workType": "CD",
        "originator": "wsgw_user",
        "pendingQuantity": 0.0,
        "productNativeCode": "7203",
        "childQuantity": 0.0
      }
    ]
  }
}

Register and send Child on the Parent order

{
    "messageId": "2025-02-06-003-1",
    "service": "orders",
    "action": "registerAndSend",
    "params": {
        "order": {
            "symbol": "CS.NULL.JAPAN.T.JPY.7203",
            "parentId": "AAAS7GekV8gAAACd",
            "broker": "citi",
            "side": "BUY",
            "quantity": "1000.0",
            "limitPrice": "150.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB1",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAADS",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription

{
    "messageId": "1ba2434a-ed7e-4321-b4e5-f043e5060364",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAACv",
                "clientOrderId": "Tt5vhmehgJwAAADS",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAACd",
                "symbol": "CS.NULL.JAPAN.T.JPY.7203",
                "exchange": "T",
                "broker": "citi",
                "side": "BUY",
                "quantity": 900.0,
                "limitPrice": 150.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADS",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "productNativeCode": "7203",
                "strategyId": "AAAS7GekV8gAAACd",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Update on reuters symbolType subscription

{
    "messageId": "babb546f-b74f-4b8e-99b4-e2ac1e575eb0",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAACv",
                "clientOrderId": "Tt5vhmehgJwAAADS",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAACd",
                "symbol": "7203.T",
                "exchange": "T",
                "broker": "citi",
                "side": "BUY",
                "quantity": 900.0,
                "limitPrice": 150.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADS",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "productNativeCode": "7203",
                "strategyId": "AAAS7GekV8gAAACd",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Child order level fill, TORA symbolType

{
  "messageId": "acdcd854-1f80-40e6-a12b-560a9417e1dd",
    "service": "orders",
    "event": "update",
    "params": {
    "subscriptionId": "orders_sub_1"
  },
  "data": {
    "orders": [{
      "orderId": "AAAS7GekV8gAAACv",
      "clientOrderId": "Tt5vhmehgJwAAADS",
      "isParent": false,
      "parentId": "AAAS7GekV8gAAACd",
      "symbol": "CS.NULL.JAPAN.T.JPY.7203",
      "exchange": "T",
      "broker": "citi",
      "side": "BUY",
      "quantity": 900.0,
      "limitPrice": 150.0,
      "owner": "wsgw_user",
      "flowType": "WORKED",
      "brokerAccount": "TestAcc1",
      "internalAccount": "IA1",
      "tradeBook": "TB1",
      "state": "FILD",
      "executedQuantity": 900.0,
      "creationTime": "2025-02-06T06:48:20.036000Z",
      "sendTime": "2025-02-06T06:48:20.091000Z",
      "lastUpdateTime": "2025-02-06T06:48:28.231000Z",
      "allocationMethod": "METHOD_1",
      "tag": "forA",
      "status": "OK",
      "executedValue": 135000.0,
      "notionalValue": 135000.0,
      "previousExecutedQuantity": 0.0,
      "previousExecutedValue": 0.0,
      "synthType": "swp",
      "condition": "WORKED",
      "orderType": "STLMT",
      "openClose": "OPEN",
      "averagePrice": 150.0,
      "dayAvgPx": 150.0,
      "currentMarginFlag": "None",
      "externalId": "Tt5vhmehgJwAAADS",
      "lastUpdateOwner": "wsgw_user",
      "limitStatus": "APPR",
      "manualExecution": "N",
      "margin": "None",
      "creatorComponent": "WSGW",
      "lastExecutedTime": "2025-02-06 06:48:28.227 GMT 0us",
      "workType": "STLMT",
      "originator": "wsgw_user",
      "pendingQuantity": 0.0,
      "productNativeCode": "7203",
      "strategyId": "AAAS7GekV8gAAACd",
      "strategyType": -1,
      "isHidden": false
    }]
  }
}

Parent order level fill, TORA symbolType

{
    "messageId": "e5e3a204-75f2-4e55-90fd-7e03dd491684",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAACd",
                "clientOrderId": "Tt5vhmehgJwAAADR",
                "isParent": true,
                "symbol": "CS.NULL.JAPAN.T.JPY.7203",
                "exchange": "T",
                "broker": "citi",
                "side": "BUY",
                "quantity": 1000.0,
                "limitPrice": 166.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "trdx",
                "state": "REDG FILD",
                "executedQuantity": 900.0,
                "creationTime": "2025-02-06T06:42:01.502000Z",
                "sendTime": "2025-02-06T06:48:20.091000Z",
                "lastUpdateTime": "2025-02-06T06:48:28.231000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 135000.0,
                "notionalValue": 151600.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "averagePrice": 150.0,
                "dayAvgPx": 150.0,
                "externalId": "Tt5vhmehgJwAAADR",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAACi",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "sender": "wsgw_user",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "7203",
                "childQuantity": 900.0
            }
        ]
    }
}

Child order level fill, reuters symbolType

{
    "messageId": "c0df89c5-9d0b-4b51-901a-d2e1f583c3f9",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAACv",
                "clientOrderId": "Tt5vhmehgJwAAADS",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAACd",
                "symbol": "7203.T",
                "exchange": "T",
                "broker": "citi",
                "side": "BUY",
                "quantity": 900.0,
                "limitPrice": 150.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "FILD",
                "executedQuantity": 900.0,
                "creationTime": "2025-02-06T06:48:20.036000Z",
                "sendTime": "2025-02-06T06:48:20.091000Z",
                "lastUpdateTime": "2025-02-06T06:48:28.231000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 135000.0,
                "notionalValue": 135000.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "STLMT",
                "openClose": "OPEN",
                "averagePrice": 150.0,
                "dayAvgPx": 150.0,
                "currentMarginFlag": "None",
                "externalId": "Tt5vhmehgJwAAADS",
                "lastUpdateOwner": "wsgw_user",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "margin": "None",
                "creatorComponent": "WSGW",
                "lastExecutedTime": "2025-02-06 06:48:28.227 GMT 0us",
                "workType": "STLMT",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "7203",
                "strategyId": "AAAS7GekV8gAAACd",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Parent order level fill, reuters symbolType

{
    "messageId": "81296212-e396-4b5d-9514-a1428d5e3018",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAACd",
                "clientOrderId": "Tt5vhmehgJwAAADR",
                "isParent": true,
                "symbol": "7203.T",
                "exchange": "T",
                "broker": "citi",
                "side": "BUY",
                "quantity": 1000.0,
                "limitPrice": 166.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "trdx",
                "state": "REDG FILD",
                "executedQuantity": 900.0,
                "creationTime": "2025-02-06T06:42:01.502000Z",
                "sendTime": "2025-02-06T06:48:20.091000Z",
                "lastUpdateTime": "2025-02-06T06:48:28.231000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 135000.0,
                "notionalValue": 151600.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "averagePrice": 150.0,
                "dayAvgPx": 150.0,
                "externalId": "Tt5vhmehgJwAAADR",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAACi",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "sender": "wsgw_user",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "7203",
                "childQuantity": 900.0
            }
        ]
    }
}

Index Futures

Register parent order symbolType: tora: cash stock: FUT.IDX.NK225.OS.JPY.202509
Then register and send child order on the parent.

Register Parent order

{
    "messageId": "2025-02-06-004",
    "service": "orders",
    "action": "register",
    "params": {
        "order": {
            "symbol": "FUT.IDX.NK225.OS.JPY.202509",
            "broker": "citi",
            "side": "BUY",
            "quantity": "3.0",
            "limitPrice": "39350.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB2",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAAD2",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription

{
    "messageId": "47509f90-e6c1-4043-90d0-1f6aff90e8dc",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAEm",
                "clientOrderId": "Tt5vhmehgJwAAAD2",
                "isParent": true,
                "symbol": "FUT.IDX.NK225.OS.JPY.202509",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 39350.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T07:12:03.862000Z",
                "lastUpdateTime": "2025-02-06T07:12:03.873000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 1.1805E8,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD2",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAEr",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160090018",
                "childQuantity": 0.0
            }
        ]
    }
}

Update on reuters symbolType subscription

{
    "messageId": "7f8e7a1c-bf1e-4fb4-a694-76ea5b018706",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAEm",
                "clientOrderId": "Tt5vhmehgJwAAAD2",
                "isParent": true,
                "symbol": "JNIU5",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 39350.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T07:12:03.862000Z",
                "lastUpdateTime": "2025-02-06T07:12:03.873000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 1.1805E8,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD2",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAEr",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160090018",
                "childQuantity": 0.0
            }
        ]
    }
}

Register and send Child on the Parent order

{
    "messageId": "2025-02-06-004-1",
    "service": "orders",
    "action": "registerAndSend",
    "params": {
        "order": {
            "symbol": "FUT.IDX.NK225.OS.JPY.202509",
            "orderId": "AAAS7GekV8gAAAEn",
            "parentId": "AAAS7GekV8gAAAEm",
            "broker": "citi",
            "side": "BUY",
            "quantity": "3.0",
            "limitPrice": "39340.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB2",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAAD3",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription

{
    "messageId": "9a4f1a02-8bfe-48cd-91cd-d7f6646122c8",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAE3",
                "clientOrderId": "Tt5vhmehgJwAAAD3",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAEm",
                "symbol": "FUT.IDX.NK225.OS.JPY.202509",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 39340.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD3",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "productNativeCode": "160090018",
                "strategyId": "AAAS7GekV8gAAAEm",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }

Update on reuters symbolType subscription

{
    "messageId": "c2e42869-8df9-4dab-9628-23f16652b1dd",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAE3",
                "clientOrderId": "Tt5vhmehgJwAAAD3",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAEm",
                "symbol": "JNIU5",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 39340.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD3",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "productNativeCode": "160090018",
                "strategyId": "AAAS7GekV8gAAAEm",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Stock Futures

Register parent order symbolType: tora: cash stock: FUT.CS.KOREA.KS.KRW.HYD-202503
Then register and send child order on the parent.

Register Parent order

{
  "messageId": "2025-02-06-007",
    "service": "orders",
    "action": "register",
    "params": {
    "order": {
      "symbol": "FUT.CS.KOREA.KS.KRW.HYD-202503",
        "broker": "citi",
        "side": "BUY",
        "quantity": "4.0",
        "limitPrice": "77500.0",
        "flowType": "DMA",
        "brokerAccount": "TestAcc1",
        "allocationMethod": "METHOD_1",
        "internalAccount": "IA1",
        "tradeBook": "TB2",
        "tag": "forA",
        "synthType": "swp",
        "openClose": "OPEN",
        "condition": "WORKED",
        "orderType": "CD",
        "skipLimitChecks": "false",
        "clientOrderId": "Tt5vhmehgJwAAAD3",
        "symbolType": "TORA"
    }
  }
}

Update on TORA symbolType subscription

{
    "messageId": "5e93e137-1d03-40ec-8e20-b13fd28272f4",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAGo",
                "clientOrderId": "Tt5vhmehgJwAAAD3",
                "isParent": true,
                "symbol": "FUT.CS.KOREA.KS.KRW.HYD-202503",
                "exchange": "KS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 4.0,
                "limitPrice": 77500.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:16:15.802000Z",
                "lastUpdateTime": "2025-02-06T08:16:15.813000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 3100000.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD3",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAGt",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "K1FHW3000",
                "childQuantity": 0.0
            }
        ]
    }
}

Update on reuters symbolType subscription

{
    "messageId": "4df88e9e-a9ae-430a-919c-d3449f4e7706",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAGo",
                "clientOrderId": "Tt5vhmehgJwAAAD3",
                "isParent": true,
                "symbol": "HYDH5:KE",
                "exchange": "KS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 4.0,
                "limitPrice": 77500.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:16:15.802000Z",
                "lastUpdateTime": "2025-02-06T08:16:15.813000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 3100000.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD3",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAGt",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "K1FHW3000",
                "childQuantity": 0.0
            }
        ]
    }
}

Register and send Child on the Parent order

{
    "messageId": "2025-02-06-007-1",
    "service": "orders",
    "action": "registerAndSend",
    "params": {
        "order": {
            "symbol": "FUT.CS.KOREA.KS.KRW.HYD-202503",
            "parentId": "AAAS7GekV8gAAAGo",
            "broker": "citi",
            "side": "BUY",
            "quantity": "3.0",
            "limitPrice": "77300.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB2",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAAD8",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription, child level

{
    "messageId": "490f735d-a073-4f85-9009-ca155be3f308",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAG5",
                "clientOrderId": "Tt5vhmehgJwAAAD8",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAGo",
                "symbol": "FUT.CS.KOREA.KS.KRW.HYD-202503",
                "exchange": "KS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 77300.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD8",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "productNativeCode": "K1FHW3000",
                "strategyId": "AAAS7GekV8gAAAGo",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Update on Tora symbolType subscription, parent level

{
    "messageId": "548fe5ff-d184-4c1c-9297-1d0a15b20f4b",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAGo",
                "clientOrderId": "Tt5vhmehgJwAAAD3",
                "isParent": true,
                "symbol": "FUT.CS.KOREA.KS.KRW.HYD-202503",
                "exchange": "KS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 4.0,
                "limitPrice": 77500.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:16:15.802000Z",
                "lastUpdateTime": "2025-02-06T08:20:38.223000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 775000.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD3",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAGt",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "K1FHW3000",
                "childQuantity": 3.0
            }
        ]
    }
}

Update on reuters symbolType subscription, child level

{
    "messageId": "ffed5dd2-b2a6-4171-908e-28631d63bacc",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAG5",
                "clientOrderId": "Tt5vhmehgJwAAAD8",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAGo",
                "symbol": "HYDH5:KE",
                "exchange": "KS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 77300.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD8",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "productNativeCode": "K1FHW3000",
                "strategyId": "AAAS7GekV8gAAAGo",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Update on reuters symbolType subscription, parent level

{
    "messageId": "925f4d95-92b4-4012-bafd-4abf96e18df2",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAGo",
                "clientOrderId": "Tt5vhmehgJwAAAD3",
                "isParent": true,
                "symbol": "HYDH5:KE",
                "exchange": "KS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 4.0,
                "limitPrice": 77500.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:16:15.802000Z",
                "lastUpdateTime": "2025-02-06T08:20:38.223000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 775000.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD3",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAGt",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "K1FHW3000",
                "childQuantity": 3.0
            }
        ]
    }
}

Index Options

Register parent order symbolType: tora: cash stock: OPT.IDX.NK225.OS.JPY.202509C31250
Then register and send child order on the parent.
Updates on fills, child and parent level

Register Parent order

{
    "messageId": "2025-02-06-008",
    "service": "orders",
    "action": "register",
    "params": {
        "order": {
            "symbol": "OPT.IDX.NK225.OS.JPY.202509C31250",
            "broker": "citi",
            "side": "BUY",
            "quantity": "5.0",
            "limitPrice": "8930.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB1",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAAD8",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription

{
    "messageId": "b94ca4e9-5b10-4083-811c-5b1af794ebfd",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAH6",
                "clientOrderId": "Tt5vhmehgJwAAAD8",
                "isParent": true,
                "symbol": "OPT.IDX.NK225.OS.JPY.202509C31250",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 5.0,
                "limitPrice": 8930.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:23:08.102000Z",
                "lastUpdateTime": "2025-02-06T08:23:08.102000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 4.465E7,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD8",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "UNKNOWN",
                "limitStatus": "PLIM",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 0.0
            }
        ]
    }
}

Update on reuters symbolType subscription

{
    "messageId": "92e20eb7-8d7e-444a-bc26-1a064bcacef2",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAH6",
                "clientOrderId": "Tt5vhmehgJwAAAD8",
                "isParent": true,
                "symbol": "JNI312I5.OS",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 5.0,
                "limitPrice": 8930.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:23:08.102000Z",
                "lastUpdateTime": "2025-02-06T08:23:08.102000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 4.465E7,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD8",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "UNKNOWN",
                "limitStatus": "PLIM",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 0.0
            }
        ]
    }
}

Register and send Child on the Parent order

{
  "messageId": "2025-02-06-008-1",
    "service": "orders",
    "action": "registerAndSend",
    "params": {
    "order": {
      "symbol": "OPT.IDX.NK225.OS.JPY.202509C31250",
        "parentId": "AAAS7GekV8gAAAH6",
        "broker": "citi",
        "side": "BUY",
        "quantity": "3.0",
        "limitPrice": "8910.0",
        "flowType": "DMA",
        "brokerAccount": "TestAcc1",
        "allocationMethod": "METHOD_1",
        "internalAccount": "IA1",
        "tradeBook": "TB2",
        "tag": "forA",
        "synthType": "swp",
        "openClose": "OPEN",
        "condition": "WORKED",
        "orderType": "CD",
        "skipLimitChecks": "false",
        "clientOrderId": "Tt5vhmehgJwAAAD9",
        "symbolType": "TORA"
    }
  }
}

Update on TORA symbolType subscription - child

{
    "messageId": "f1225be1-8ca7-40b8-ab63-5bb076b14ac0",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAIL",
                "clientOrderId": "Tt5vhmehgJwAAAD9",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAH6",
                "symbol": "OPT.IDX.NK225.OS.JPY.202509C31250",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 8910.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD9",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "strategyId": "AAAS7GekV8gAAAH6",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }

Update on TORA symbolType subscription - parent

{
  "messageId": "e884b916-f533-4e12-bfe8-9bf46bf833fc",
    "service": "orders",
    "event": "update",
    "params": {
    "subscriptionId": "orders_sub_1"
  },
  "data": {
    "orders": [{
      "orderId": "AAAS7GekV8gAAAH6",
      "clientOrderId": "Tt5vhmehgJwAAAD8",
      "isParent": true,
      "symbol": "OPT.IDX.NK225.OS.JPY.202509C31250",
      "exchange": "OS",
      "broker": "citi",
      "side": "BUY",
      "quantity": 5.0,
      "limitPrice": 8930.0,
      "owner": "wsgw_user",
      "flowType": "WORKED",
      "brokerAccount": "TestAcc1",
      "internalAccount": "IA1",
      "tradeBook": "TB1",
      "state": "REDG",
      "executedQuantity": 0.0,
      "creationTime": "2025-02-06T08:23:08.102000Z",
      "lastUpdateTime": "2025-02-06T08:26:10.578000Z",
      "allocationMethod": "METHOD_1",
      "tag": "forA",
      "status": "OK",
      "executedValue": 0.0,
      "notionalValue": 1.786E7,
      "previousExecutedQuantity": 0.0,
      "previousExecutedValue": 0.0,
      "synthType": "swp",
      "condition": "WORKED",
      "orderType": "CD",
      "openClose": "OPEN",
      "externalId": "Tt5vhmehgJwAAAD8",
      "lastUpdateOwner": "wsgw_user",
      "limitRequestId": "AAAS7GekV8gAAAH/",
      "limitStatus": "APPR",
      "manualExecution": "N",
      "creatorComponent": "WSGW",
      "workType": "CD",
      "originator": "wsgw_user",
      "pendingQuantity": 0.0,
      "childQuantity": 3.0
    }]
  }
}

Update on reuters symbolType subscription - child

{
    "messageId": "1eb6c06e-af7b-4e64-b5d6-dc9370f0adbe",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAIL",
                "clientOrderId": "Tt5vhmehgJwAAAD9",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAH6",
                "symbol": "JNI312I5.OS",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 8910.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD9",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "strategyId": "AAAS7GekV8gAAAH6",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Update on reuters symbolType subscription - parent

{
    "messageId": "c6aea382-872a-4a4f-abbf-6df451f6c8d6",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAH6",
                "clientOrderId": "Tt5vhmehgJwAAAD8",
                "isParent": true,
                "symbol": "JNI312I5.OS",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 5.0,
                "limitPrice": 8930.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:23:08.102000Z",
                "lastUpdateTime": "2025-02-06T08:26:10.578000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 1.786E7,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAAD8",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAH/",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 3.0
            }
        ]
    }
}

Fill on TORA symbolType subscription - child

{
    "messageId": "ec776f8b-7372-4065-a333-cc25149890ba",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAIL",
                "clientOrderId": "Tt5vhmehgJwAAAD9",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAH6",
                "symbol": "OPT.IDX.NK225.OS.JPY.202509C31250",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 3.0,
                "limitPrice": 8910.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "FILD",
                "executedQuantity": 3.0,
                "creationTime": "2025-02-06T08:26:10.579000Z",
                "sendTime": "2025-02-06T08:26:10.581000Z",
                "lastUpdateTime": "2025-02-06T08:26:12.606000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 26730.0,
                "notionalValue": 26730.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "STLMT",
                "openClose": "OPEN",
                "averagePrice": 8910.0,
                "dayAvgPx": 8910.0,
                "currentMarginFlag": "None",
                "externalId": "Tt5vhmehgJwAAAD9",
                "lastUpdateOwner": "wsgw_user",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "margin": "None",
                "creatorComponent": "WSGW",
                "lastExecutedTime": "2025-02-06 08:26:12.603 GMT 0us",
                "workType": "STLMT",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "strategyId": "AAAS7GekV8gAAAH6",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Fill on TORA symbolType subscription - parent


{
    "messageId": "34d48b63-652f-4264-a68e-e38ce627b9b1",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAH6",
                "clientOrderId": "Tt5vhmehgJwAAAD8",
                "isParent": true,
                "symbol": "OPT.IDX.NK225.OS.JPY.202509C31250",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 5.0,
                "limitPrice": 8930.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG FILD",
                "executedQuantity": 3.0,
                "creationTime": "2025-02-06T08:23:08.102000Z",
                "sendTime": "2025-02-06T08:26:10.581000Z",
                "lastUpdateTime": "2025-02-06T08:26:12.606000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 26730.0,
                "notionalValue": 1.788673E7,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "averagePrice": 8910.0,
                "dayAvgPx": 8910.0,
                "externalId": "Tt5vhmehgJwAAAD8",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAH/",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "sender": "wsgw_user",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 3.0
            }
        ]
    }
}

Stock Options

Register parent order symbolType: tora: cash stock: OPT.CS.JAPAN.OS.JPY.7201-202506P350
Then register and send child order on the parent.

Register Parent order

{
        "messageId": "2025-02-06-009",
        "service": "orders",
        "action": "register",
        "params": {
            "order": {
                "symbol": "OPT.CS.JAPAN.OS.JPY.7201-202506P350",
                "broker": "citi",
                "side": "BUY",
                "quantity": "6.0",
                "limitPrice": "200.0",
                "flowType": "DMA",
                "brokerAccount": "TestAcc1",
                "allocationMethod": "METHOD_1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "tag": "forA",
                "synthType": "swp",
                "openClose": "OPEN",
                "condition": "WORKED",
                "orderType": "CD",
                "skipLimitChecks": "false",
                "clientOrderId": "Tt5vhmehgJwAAAD9",
                "symbolType": "TORA"
            }
        }
    }

Update on TORA symbolType subscription


Update on reuters symbolType subscription

{
  "messageId": "ebe02e2d-b335-4d0c-ad10-a36c192afe77",
    "service": "orders",
    "event": "update",
    "params": {
    "subscriptionId": "orders_sub_1"
  },
  "data": {
    "orders": [{
      "orderId": "AAAS7GekV8gAAAJM",
      "clientOrderId": "Tt5vhmehgJwAAAD9",
      "isParent": true,
      "symbol": "OPT.CS.JAPAN.OS.JPY.7201-202506P350",
      "exchange": "OS",
      "broker": "citi",
      "side": "BUY",
      "quantity": 6.0,
      "limitPrice": 200.0,
      "owner": "wsgw_user",
      "flowType": "WORKED",
      "brokerAccount": "TestAcc1",
      "internalAccount": "IA1",
      "tradeBook": "TB1",
      "state": "REDG",
      "executedQuantity": 0.0,
      "creationTime": "2025-02-06T08:40:12.026000Z",
      "lastUpdateTime": "2025-02-06T08:40:12.026000Z",
      "allocationMethod": "METHOD_1",
      "tag": "forA",
      "status": "OK",
      "executedValue": 0.0,
      "notionalValue": 120000.0,
      "previousExecutedQuantity": 0.0,
      "previousExecutedValue": 0.0,
      "synthType": "swp",
      "condition": "WORKED",
      "orderType": "CD",
      "openClose": "OPEN",
      "externalId": "Tt5vhmehgJwAAAD9",
      "lastUpdateOwner": "wsgw_user",
      "limitRequestId": "UNKNOWN",
      "limitStatus": "PLIM",
      "manualExecution": "N",
      "creatorComponent": "WSGW",
      "workType": "CD",
      "originator": "wsgw_user",
      "pendingQuantity": 0.0,
      "childQuantity": 0.0
    }]
  }
}

Register and send Child on the Parent order

{
    "messageId": "2025-02-06-009-2",
    "service": "orders",
    "action": "register",
    "params": {
        "order": {
            "symbol": "OPT.CS.JAPAN.OS.JPY.7201-202506P350",
            "parentId": "AAAS7GekV8gAAAJM",
            "broker": "citi",
            "side": "BUY",
            "quantity": "6.0",
            "limitPrice": "200.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB1",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAADB",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription

{
  "messageId": "3501e3c9-98b8-4eca-96f9-91a812802a56",
    "service": "orders",
    "event": "update",
    "params": {
    "subscriptionId": "orders_sub_1"
  },
  "data": {
    "orders": [
      {
        "orderId": "AAAS7GekV8gAAAJl",
        "clientOrderId": "Tt5vhmehgJwAAADB",
        "isParent": false,
        "parentId": "AAAS7GekV8gAAAJM",
        "symbol": "OPT.CS.JAPAN.OS.JPY.7201-202506P350",
        "exchange": "OS",
        "broker": "citi",
        "side": "BUY",
        "quantity": 6.0,
        "limitPrice": 200.0,
        "owner": "wsgw_user",
        "flowType": "WORKED",
        "brokerAccount": "TestAcc1",
        "internalAccount": "IA1",
        "tradeBook": "TB1",
        "state": "REDG",
        "lastUpdateTime": "",
        "allocationMethod": "METHOD_1",
        "tag": "forA",
        "synthType": "swp",
        "condition": "WORKED",
        "orderType": "CD",
        "openClose": "OPEN",
        "externalId": "Tt5vhmehgJwAAADB",
        "lastUpdateOwner": "wsgw_user",
        "manualExecution": "N",
        "creatorComponent": "WSGW",
        "workType": "CD",
        "originator": "wsgw_user",
        "strategyId": "AAAS7GekV8gAAAJM",
        "strategyType": -1,
        "isHidden": false
      }
    ]
  }
}

Update on reuters symbolType subscription

{
    "messageId": "d10a2f8d-296b-4f83-bb7c-f4700cfe4d48",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAJl",
                "clientOrderId": "Tt5vhmehgJwAAADB",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAJM",
                "symbol": "7201Y350R5.OS",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 200.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADB",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "strategyId": "AAAS7GekV8gAAAJM",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Calendar Spreads

Register parent order symbolType: tora: cash stock: SPR.FUT.NK225.OS.JPY.202503-202509
Then register and send child order on the parent.
Receive fills updates at child level and parent level.

Register Parent order

{
  "messageId": "2025-02-06-010",
    "service": "orders",
    "action": "register",
    "params": {
    "order": {
      "symbol": "SPR.FUT.NK225.OS.JPY.202503-202509",
        "broker": "citi",
        "side": "BUY",
        "quantity": "6.0",
        "limitPrice": "0.0",
        "flowType": "DMA",
        "brokerAccount": "TestAcc1",
        "allocationMethod": "METHOD_1",
        "internalAccount": "IA1",
        "tradeBook": "TB2",
        "tag": "forA",
        "synthType": "swp",
        "openClose": "OPEN",
        "condition": "WORKED",
        "orderType": "CD",
        "skipLimitChecks": "false",
        "clientOrderId": "Tt5vhmehgJwAAADB",
        "symbolType": "TORA"
    }
  }
}

Update on TORA symbolType subscription

{
    "messageId": "19128889-34cd-4b69-b888-6f5dc2503f18",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAJ/",
                "clientOrderId": "Tt5vhmehgJwAAADB",
                "isParent": true,
                "symbol": "SPR.FUT.NK225.OS.JPY.202503-202509",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:51:20.186000Z",
                "lastUpdateTime": "2025-02-06T08:51:20.186000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADB",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "UNKNOWN",
                "limitStatus": "PLIM",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160030218",
                "childQuantity": 0.0
            }
        ]
    }
}

Update on reuters symbolType subscription

{
    "messageId": "866d6afd-7f11-4fec-b42a-eed677961cfa",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAJ/",
                "clientOrderId": "Tt5vhmehgJwAAADB",
                "isParent": true,
                "symbol": "JNIH5-U5",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:51:20.186000Z",
                "lastUpdateTime": "2025-02-06T08:51:20.186000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADB",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "UNKNOWN",
                "limitStatus": "PLIM",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160030218",
                "childQuantity": 0.0
            }
        ]
    }
}

Register and send Child on the Parent order

{
    "messageId": "2025-02-06-010-2",
    "service": "orders",
    "action": "register",
    "params": {
        "order": {
            "symbol": "SPR.FUT.NK225.OS.JPY.202503-202509",
            "parentId": "AAAS7GekV8gAAAJ/",
            "broker": "citi",
            "side": "BUY",
            "quantity": "6.0",
            "limitPrice": "0.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB1",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAADC",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription - child level

{
    "messageId": "d21bd7c4-480c-4129-8984-a0e1bf718638",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKQ",
                "clientOrderId": "Tt5vhmehgJwAAADC",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAJ/",
                "symbol": "SPR.FUT.NK225.OS.JPY.202503-202509",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADC",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "productNativeCode": "160030218",
                "strategyId": "AAAS7GekV8gAAAJ/",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Update on TORA symbolType subscription - parent level

{
    "messageId": "d72fc4d7-1026-4f76-a146-90d196a11f38",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAJ/",
                "clientOrderId": "Tt5vhmehgJwAAADB",
                "isParent": true,
                "symbol": "SPR.FUT.NK225.OS.JPY.202503-202509",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:51:20.186000Z",
                "lastUpdateTime": "2025-02-06T08:53:52.674000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADB",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAKE",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160030218",
                "childQuantity": 6.0
            }
        ]
    }
}

Update on reuters symbolType subscription - child level

{
    "messageId": "0e617a19-121a-487b-a6e2-d017622dd691",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKQ",
                "clientOrderId": "Tt5vhmehgJwAAADC",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAJ/",
                "symbol": "JNIH5-U5",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADC",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "productNativeCode": "160030218",
                "strategyId": "AAAS7GekV8gAAAJ/",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Update on reuters symbolType subscription - parent level

{
    "messageId": "d42880e6-25bd-400c-9ee3-f872e7b2ea6a",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAJ/",
                "clientOrderId": "Tt5vhmehgJwAAADB",
                "isParent": true,
                "symbol": "JNIH5-U5",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:51:20.186000Z",
                "lastUpdateTime": "2025-02-06T08:53:52.674000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADB",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAKE",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160030218",
                "childQuantity": 6.0
            }
        ]
    }
}

Fill update on TORA symbolType subscription - child level

{
    "messageId": "0a98310c-24bf-4b7a-a038-92d0de8e42e6",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKQ",
                "clientOrderId": "Tt5vhmehgJwAAADC",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAJ/",
                "symbol": "SPR.FUT.NK225.OS.JPY.202503-202509",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:53:52.682000Z",
                "lastUpdateTime": "2025-02-06T08:53:52.688000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "currentMarginFlag": "None",
                "externalId": "Tt5vhmehgJwAAADC",
                "lastUpdateOwner": "wsgw_user",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "margin": "None",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160030218",
                "strategyId": "AAAS7GekV8gAAAJ/",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Fill update on TORA symbolType subscription - parent level

{
    "messageId": "73ef80ea-8a79-455d-93c1-3496879e3fa5",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAJ/",
                "clientOrderId": "Tt5vhmehgJwAAADB",
                "isParent": true,
                "symbol": "SPR.FUT.NK225.OS.JPY.202503-202509",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:51:20.186000Z",
                "lastUpdateTime": "2025-02-06T08:53:52.682000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADB",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAKE",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160030218",
                "childQuantity": 6.0
            }
        ]
    }
}

Fill update on reuters symbolType subscription - child level

{
    "messageId": "97ed70ba-4917-413f-8f6d-70c3dabd6d45",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKQ",
                "clientOrderId": "Tt5vhmehgJwAAADC",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAJ/",
                "symbol": "JNIH5-U5",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:53:52.682000Z",
                "lastUpdateTime": "2025-02-06T08:53:52.688000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "currentMarginFlag": "None",
                "externalId": "Tt5vhmehgJwAAADC",
                "lastUpdateOwner": "wsgw_user",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "margin": "None",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160030218",
                "strategyId": "AAAS7GekV8gAAAJ/",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Fill update on reuters symbolType subscription - parent level

{
    "messageId": "33c47769-dde9-4a23-b32c-a01ff09cf566",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAJ/",
                "clientOrderId": "Tt5vhmehgJwAAADB",
                "isParent": true,
                "symbol": "JNIH5-U5",
                "exchange": "OS",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:51:20.186000Z",
                "lastUpdateTime": "2025-02-06T08:53:52.682000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADB",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAKE",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "productNativeCode": "160030218",
                "childQuantity": 6.0
            }
        ]
    }
}

MultiLeg Instruments

Register parent order symbolType: tora: cash stock: SPR.FUT.WTCLLCO.ICE.USD.202509-202509
Then register and send child order on the parent.
Receive fills updates at child level and parent level.

Register Parent order

{
    "messageId": "2025-02-06-011",
    "service": "orders",
    "action": "register",
    "params": {
        "order": {
            "symbol": "SPR.FUT.WTCLLCO.ICE.USD.202509-202509",
            "broker": "citi",
            "side": "BUY",
            "quantity": "11.0",
            "limitPrice": "0.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB1",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAADM",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription

{
    "messageId": "625b00f6-b861-4c6a-8128-53b5d3c3e281",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKq",
                "clientOrderId": "Tt5vhmehgJwAAADM",
                "isParent": true,
                "symbol": "SPR.FUT.WTCLLCO.ICE.USD.202509-202509",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 11.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:58:47.706000Z",
                "lastUpdateTime": "2025-02-06T08:58:47.706000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADM",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "UNKNOWN",
                "limitStatus": "PLIM",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 0.0
            }
        ]
    }
}

Update on reuters symbolType subscription

{
    "messageId": "1036a3ed-3af8-4ddc-8386-d2882a504621",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKq",
                "clientOrderId": "Tt5vhmehgJwAAADM",
                "isParent": true,
                "symbol": "WTCL-LCOU5",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 11.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:58:47.706000Z",
                "lastUpdateTime": "2025-02-06T08:58:47.706000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADM",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "UNKNOWN",
                "limitStatus": "PLIM",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 0.0
            }
        ]
    }
}

Register and send Child on the Parent order

{
    "messageId": "2025-02-06-011-3",
    "service": "orders",
    "action": "register",
    "params": {
        "order": {
            "symbol": "SPR.FUT.WTCLLCO.ICE.USD.202509-202509",
            "parentId": "AAAS7GekV8gAAAKq",
            "broker": "citi",
            "side": "BUY",
            "quantity": "6.0",
            "limitPrice": "0.0",
            "flowType": "DMA",
            "brokerAccount": "TestAcc1",
            "allocationMethod": "METHOD_1",
            "internalAccount": "IA1",
            "tradeBook": "TB2",
            "tag": "forA",
            "synthType": "swp",
            "openClose": "OPEN",
            "condition": "WORKED",
            "orderType": "CD",
            "skipLimitChecks": "false",
            "clientOrderId": "Tt5vhmehgJwAAADG",
            "symbolType": "TORA"
        }
    }
}

Update on TORA symbolType subscription - child level

{
    "messageId": "fc4bff35-2b6d-4db3-8b97-814ef188f5c0",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAALA",
                "clientOrderId": "Tt5vhmehgJwAAADG",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAKq",
                "symbol": "SPR.FUT.WTCLLCO.ICE.USD.202509-202509",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADG",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "strategyId": "AAAS7GekV8gAAAKq",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Update on TORA symbolType subscription - parent level

{
    "messageId": "564ae409-0610-42ce-85e3-dc5f273d4057",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKq",
                "clientOrderId": "Tt5vhmehgJwAAADM",
                "isParent": true,
                "symbol": "SPR.FUT.WTCLLCO.ICE.USD.202509-202509",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 11.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:58:47.706000Z",
                "lastUpdateTime": "2025-02-06T09:03:06.645000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADM",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAKv",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 6.0
            }
        ]
    }
}

Update on reuters symbolType subscription - child level

{
    "messageId": "15142a6d-db0d-4738-a277-989079118a78",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAALA",
                "clientOrderId": "Tt5vhmehgJwAAADG",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAKq",
                "symbol": "WTCL-LCOU5",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "lastUpdateTime": "",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADG",
                "lastUpdateOwner": "wsgw_user",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "strategyId": "AAAS7GekV8gAAAKq",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Update on reuters symbolType subscription - parent level

{
    "messageId": "bad2b00a-c287-4d45-ae3a-af21ee1220dd",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKq",
                "clientOrderId": "Tt5vhmehgJwAAADM",
                "isParent": true,
                "symbol": "WTCL-LCOU5",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 11.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:58:47.706000Z",
                "lastUpdateTime": "2025-02-06T09:03:06.645000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADM",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAKv",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 6.0
            }
        ]
    }
}

Fill update on TORA symbolType subscription - child level

{
    "messageId": "f9b7b334-a986-47c4-aa0b-51db0348e9c6",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAALA",
                "clientOrderId": "Tt5vhmehgJwAAADG",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAKq",
                "symbol": "SPR.FUT.WTCLLCO.ICE.USD.202509-202509",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T09:03:06.667000Z",
                "lastUpdateTime": "2025-02-06T09:03:06.724000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "currentMarginFlag": "None",
                "externalId": "Tt5vhmehgJwAAADG",
                "lastUpdateOwner": "wsgw_user",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "margin": "None",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "strategyId": "AAAS7GekV8gAAAKq",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Fill update on TORA symbolType subscription - parent level

{
    "messageId": "bf9bbc2e-5e4b-4348-a3fa-7586ca02762e",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKq",
                "clientOrderId": "Tt5vhmehgJwAAADM",
                "isParent": true,
                "symbol": "SPR.FUT.WTCLLCO.ICE.USD.202509-202509",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 11.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG:2",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:58:47.706000Z",
                "lastUpdateTime": "2025-02-06T09:03:06.667000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADM",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAKv",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 6.0
            }
        ]
    }
}

Fill update on reuters symbolType subscription - child level

{
    "messageId": "f9b7b334-a986-47c4-aa0b-51db0348e9c6",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_1"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAALA",
                "clientOrderId": "Tt5vhmehgJwAAADG",
                "isParent": false,
                "parentId": "AAAS7GekV8gAAAKq",
                "symbol": "SPR.FUT.WTCLLCO.ICE.USD.202509-202509",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 6.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB2",
                "state": "REDG",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T09:03:06.667000Z",
                "lastUpdateTime": "2025-02-06T09:03:06.724000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "currentMarginFlag": "None",
                "externalId": "Tt5vhmehgJwAAADG",
                "lastUpdateOwner": "wsgw_user",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "margin": "None",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "strategyId": "AAAS7GekV8gAAAKq",
                "strategyType": -1,
                "isHidden": false
            }
        ]
    }
}

Fill update on reuters symbolType subscription - parent level

{
    "messageId": "75fa0328-c94c-46fc-a539-4a1bfa5a0e11",
    "service": "orders",
    "event": "update",
    "params": {
        "subscriptionId": "orders_sub_2"
    },
    "data": {
        "orders": [
            {
                "orderId": "AAAS7GekV8gAAAKq",
                "clientOrderId": "Tt5vhmehgJwAAADM",
                "isParent": true,
                "symbol": "WTCL-LCOU5",
                "exchange": "ICE",
                "broker": "citi",
                "side": "BUY",
                "quantity": 11.0,
                "limitPrice": 0.0,
                "owner": "wsgw_user",
                "flowType": "WORKED",
                "brokerAccount": "TestAcc1",
                "internalAccount": "IA1",
                "tradeBook": "TB1",
                "state": "REDG:2",
                "executedQuantity": 0.0,
                "creationTime": "2025-02-06T08:58:47.706000Z",
                "lastUpdateTime": "2025-02-06T09:03:06.667000Z",
                "allocationMethod": "METHOD_1",
                "tag": "forA",
                "status": "OK",
                "executedValue": 0.0,
                "notionalValue": 0.0,
                "previousExecutedQuantity": 0.0,
                "previousExecutedValue": 0.0,
                "synthType": "swp",
                "condition": "WORKED",
                "orderType": "CD",
                "openClose": "OPEN",
                "externalId": "Tt5vhmehgJwAAADM",
                "lastUpdateOwner": "wsgw_user",
                "limitRequestId": "AAAS7GekV8gAAAKv",
                "limitStatus": "APPR",
                "manualExecution": "N",
                "creatorComponent": "WSGW",
                "workType": "CD",
                "originator": "wsgw_user",
                "pendingQuantity": 0.0,
                "childQuantity": 6.0
            }
        ]
    }
}