XTB API Documentation
XTB API Documentation
Menu
Introduction
Definitions
General data format
Communication with the API
Connection validation
xAPI
Protocol Documentation
Default login credentials
Input data format
Output data format Version 2.5.0
Time format
Floating number format
Available commands
Login
Logout 1. Introduction
Available streaming commands This document presents information on API communication protocol. The communication protocol of the API uses JSON format.
getBalance
JSON format used by the server doesn't allow extensions (e.g. comments, other flags). JSON format standardization document is available under the following link:
getCandles http://tools.ietf.org/html/rfc4627.
getKeepAlive The connection is performed by clean socket connection. For real trading SSL connection will be used.
getNews
getProfits 2. Definitions
getTickPrices The following definitions will be used in this specification document:
getTrades simple type: type, which value is itself: int, int64, string, double, bool;
getTradeStatus j-value (JSON value): any simple type, j-object or j-array;
j-object (JSON object): a record containing any number of named j-values (pair );
ping
j-array (JSON array): an array where each element is j-value;
Retrieving trading data j-subvalue: j-value which is a component of a j-object.
getAllSymbols
A j-object can contain zero elements. A j-array can have zero length. The name of j-value can be an empty string.
getCalendar
Encoding of strings is set to UTF-8. In this format the server sends and receives data.
getChartLastRequest
Definition of unix-time:
getChartRangeRequest
getCommissionDef Unix time, or POSIX time, is a system for describing points in time, defined as the number of milliseconds elapsed since midnight Coordinated Uni
getCurrentUserData versal Time (UTC) of January 1, 1970.
getIbsHistory
getMarginLevel 3. General data format
getMarginTrade
Each packet consists of exactly one main, unnamed j-value. The data stream consists of consecutive j–values, with no punctuation.
getNews
The main j-value is a j-object containing exactly two j-subvalues which are j-objects. The first j-subobject is named header and consists of at least a field type as a simple type string.
getProfitCalculation This is a packet type. The second j-subobject of the main packet j-object is named data and its content is specific to a given packet type. The specifications for different types of
getServerTime packages are described in the next chapter.
getVersion
Every single command sent to the API is allowed to contain an optional field called customTag. The API guarantees to return the very same customTag in the command’s response. For
ping example, the following command:
tradeTransaction
{
tradeTransactionStatus
"command" : "login",
Error messages "arguments" : {
"userId" : "1000",
"password": "PASSWORD"
},
"customTag": "my_login_command_id"
}
{
"status": true,
"customTag": "my_login_command_id"
}
xapi.xtb.com
Here are the details of DEMO and REAL servers hosted on each of the addresses above:
Furthermore, WebSockets can be used to connect to the API using the following addresses:
wss://ws.xtb.com/demo
wss://ws.xtb.com/demoStream
wss://ws.xtb.com/real
wss://ws.xtb.com/realStream
Communication is established as long as both server and client have opened and connected sockets.
For convenience server guarantees that every separate reply to client command returned by server will be separated by two new line characters ("\n").
1. Connection validation
In order to provide best service for all users API set rules on connection and data send process. If any of the following rules is breached, then connection is closed immediately
without server notification.
List of rules:
At most 50 simultaneous connections from the same client address are allowed (an attempt to obtain the 51st connection returns the error EX008). If you need this rule can be
lenified please contact the XTB Support Team.
Every new connection that fails to deliver data within one second from when it is established may be forced to close with no notification.
Each command invocation should not contain more than 1kB of data.
User should send requests in 200 ms intervals. This rule can be broken, but if it happens 6 times in a row the connection is dropped.
Each command should be a proper JSON object.
Exception:
If the client sends a request that is a valid JSON object, but does not conform to the published API (incorrect command, missing fields, etc.), the response is sent back with the error
description but the connection is not closed.
This rule prevents incorrect messages from reaching further down the processing chain and allows clients to analyze and understand the source of problem.
If optional prettyPrint field is set to true, an output JSON is printed in human-readable format. prettyPrint field can be omitted.
{
"command": "commandName",
"arguments": {
"arg1Name": 10,
"arg2Name": "Some text",
...
},
"prettyPrint": true
}
{
"status": true,
"returnData": JSON value
}
{
"status": false,
"errorCode": "E123",
"errorDescr": "Error description"
}
5. Time format
Time is number of milliseconds from 01.01.1970, 00:00 GMT.
5. Available commands
Request-Reply commands are performed on main connection socket. The reply is sent by main connection socket.
1. Login
In order to perform any action client application have to perform login process. No functionality is available before proper login process.
After initial login, a new session is created and all commands are executed for a logged user until he/she logs out or drops the connection.
Request:
Parameters:
Example:
{
"command": "login",
"arguments": {
"userId": "1000",
"password": "PASSWORD",
"appId": "test",
"appName": "test"
}
}
After successful login the system responds with the status message that can contain the String representing streamSessionId field:
{
"status": true,
"streamSessionId": "8469308861804289383"
}
The streamSessionId field of the string type, if present, is a token that can be used to establish a streaming subscription on a separate network connection. streamSessionId is
used in streaming subscription commands.
streamSessionId is unique for the given main session and will change between login sessions.
2. Logout
Format of input:
{
"command": "logout"
}
Request:
Example:
{
"command": "getAllSymbols"
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [SYMBOL_RECORD, SYMBOL_RECORD, ...]
}
Format of SYMBOL_RECORD :
Please be advised that result values for profit and margin calculation can be used optionally, because server is able to perform all profit/margin calculations for Client application
by commands described later in this document.
high Floating number The highest price of the day in base currency
initialMargin Number Initial margin for 1 lot order, used for profit/margin calculation
lotStep Floating number A value of minimum step by which the size of trade can be changed (within lotMin - lotMax range)
low Floating number The lowest price of the day in base currency
spreadRaw Floating number The difference between raw ask and bid prices
stopsLevel Number Minimal distance (in pips) from the current price where the stopLoss/takeProfit can be set
swapEnable Boolean Indicates whether swap value is added to position on end of day
tickSize Floating number Smallest possible price change, used for profit/margin calculation, null if not applicable
tickValue Floating number Value of smallest possible price change (in base currency), used for profit/margin calculation, null if not applicable
trailingEnabled Boolean Indicates whether trailing stop (offset) is applicable to the instrument.
Example:
{
"ask": 4000.0,
"bid": 4000.0,
"categoryName": "Forex",
"contractSize": 100000,
"currency": "USD",
"currencyPair": true,
"currencyProfit": "SEK",
"description": "USD/PLN",
"expiration": null,
"groupName": "Minor",
"high": 4000.0,
"initialMargin": 0,
"instantMaxVolume": 0,
"leverage": 1.5,
"longOnly": false,
"lotMax": 10.0,
"lotMin": 0.1,
"lotStep": 0.1,
"low": 3500.0,
"marginHedged": 0,
"marginHedgedStrong": false,
"marginMaintenance": null,
"marginMode": 101,
"percentage": 100.0,
"precision": 2,
"profitMode": 5,
"quoteId": 1,
"shortSelling": true,
"spreadRaw": 0.000003,
"spreadTable": 0.00042,
"starting": null,
"stepRuleId": 1,
"stopsLevel": 0,
"swap_rollover3days": 0,
"swapEnable": true,
"swapLong": -2.55929,
"swapShort": 0.131,
"swapType": 0,
"symbol": "USDPLN",
"tickSize": 1.0,
"tickValue": 1.0,
"time": 1272446136891,
"timeString": "Thu May 23 12:23:44 EDT 2013",
"trailingEnabled": true,
"type": 21
}
fixed 1 fixed
float 2 float
depth 3 depth
cross 4 cross
FOREX 5 FOREX
CFD 6 CFD
2. Command: getCalendar
Description: Returns calendar with market events.
Request:
Example:
{
"command": "getCalendar"
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [CALENDAR_RECORD, CALENDAR_RECORD, ...]
}
Format of CALENDAR_RECORD :
current String Market value (current), empty before time of release of this value (time from "time" record)
time Time Time, when the information will be released (in this time empty "current" value should be changed with exact released value)
title String Name of the indicator for which values will be released
Example:
{
"country": "CA",
"current": "",
"forecast": "",
"impact": "3",
"period": "(FEB)",
"previous": "58.3",
"time": 1374846900000,
"title": "Ivey Purchasing Managers Index"
}
low 1 low
medium 2 medium
high 3 high
3. Command: getChartLastRequest
Description: Please note that this function can be usually replaced by its streaming equivalent getCandles which is the preferred way of retrieving current candle
data. Returns chart info, from start date to the current time. If the chosen period of CHART_LAST_INFO_RECORD is greater than 1 minute, the last candle returned by the API
can change until the end of the period (the candle is being automatically updated every minute).
Limitations: there are limitations in charts data availability. Detailed ranges for charts data, what can be accessed with specific period, are as follows:
Note, that specific PERIOD_ is the lowest (i.e. the most detailed) period, accessible in listed range. For instance, in months range <1-7) you can access periods: PERIOD_M30,
PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1. Specific data ranges availability is guaranteed, however those ranges may be wider, e.g.: PERIOD_M1 may
be accessible for 1.5 months back from now, where 1.0 months is guaranteed.
Example scenario:
request charts of 5 minutes period, for 3 months time span, back from now;
response: you are guaranteed to get 1 month of 5 minutes charts; because, 5 minutes period charts are not accessible 2 months and 3 months back from now.
Request:
Parameters:
Example:
{
"command": "getChartLastRequest",
"arguments": {
"info": CHART_LAST_INFO_RECORD
}
}
Format of CHART_LAST_INFO_RECORD :
start Time Start of chart block (rounded down to the nearest interval and excluding)
Example:
{
"period": 5,
"start": 1262944112000,
"symbol": "PKN.PL"
}
PERIOD_M1 1 1 minute
PERIOD_M5 5 5 minutes
PERIOD_M15 15 15 minutes
PERIOD_M30 30 30 minutes
Response:
Parameters:
Example:
{
"status": true,
"returnData": {
"digits": 4,
"rateInfos": [RATE_INFO_RECORD, RATE_INFO_RECORD, ...]
}
}
Format of RATE_INFO_RECORD :
Price values must be divided by 10 to the power of digits in order to obtain exact prices.
close Floating number Value of close price (shift from open price)
ctm Time Candle start time in CET / CEST time zone (see Daylight Saving Time, DST)
high Floating number Highest value in the given period (shift from open price)
low Floating number Lowest value in the given period (shift from open price)
open Floating number Open price (in base currency * 10 to the power of digits)
Example:
{
"close": 1.0,
"ctm": 1389362640000,
"ctmString": "Jan 10, 2014 3:04:00 PM",
"high": 6.0,
"low": 0.0,
"open": 41848.0,
"vol": 0.0
}
4. Command: getChartRangeRequest
Description: Please note that this function can be usually replaced by its streaming equivalent getCandles which is the preferred way of retrieving current candle
data. Returns chart info with data between given start and end dates.
Limitations: there are limitations in charts data availability. Detailed ranges for charts data, what can be accessed with specific period, are as follows:
Note, that specific PERIOD_ is the lowest (i.e. the most detailed) period, accessible in listed range. For instance, in months range <1-7) you can access periods: PERIOD_M30,
PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1. Specific data ranges availability is guaranteed, however those ranges may be wider, e.g.: PERIOD_M1 may
be accessible for 1.5 months back from now, where 1.0 months is guaranteed.
Request:
Parameters:
Example:
{
"command": "getChartRangeRequest",
"arguments": {
"info": CHART_RANGE_INFO_RECORD
}
}
Format of CHART_RANGE_INFO_RECORD :
Ticks field - if ticks is not set or value is 0, getChartRangeRequest works as before (you must send valid start and end time fields).
If ticks value is not equal to 0, field end is ignored.
If ticks >0 (e.g. N) then API returns N candles from time start.
If ticks <0 then API returns N candles to time start.
It is possible for API to return fewer chart candles than set in tick field.
end Time End of chart block (rounded down to the nearest interval and excluding)
start Time Start of chart block (rounded down to the nearest interval and excluding)
ticks Number Number of ticks needed, this field is optional, please read the description above
Example:
{
"end": 1262944412000,
"period": 5,
"start": 1262944112000,
"symbol": "PKN.PL",
"ticks": 0
}
PERIOD_M1 1 1 minute
PERIOD_M5 5 5 minutes
PERIOD_M15 15 15 minutes
PERIOD_M30 30 30 minutes
Response:
Parameters:
Example:
{
"status": true,
"returnData": {
"digits": 4,
"rateInfos": [RATE_INFO_RECORD, RATE_INFO_RECORD, ...]
"rateInfos": [RATE_INFO_RECORD, RATE_INFO_RECORD, ...]
}
}
Format of RATE_INFO_RECORD :
Price values must be divided by 10 to the power of digits in order to obtain exact prices.
close Floating number Value of close price (shift from open price)
ctm Time Candle start time in CET / CEST time zone (see Daylight Saving Time, DST)
high Floating number Highest value in the given period (shift from open price)
low Floating number Lowest value in the given period (shift from open price)
open Floating number Open price (in base currency * 10 to the power of digits)
Example:
{
"close": 1.0,
"ctm": 1389362640000,
"ctmString": "Jan 10, 2014 3:04:00 PM",
"high": 6.0,
"low": 0.0,
"open": 41848.0,
"vol": 0.0
}
5. Command: getCommissionDef
Description: Returns calculation of commission and rate of exchange. The value is calculated as expected value, and therefore might not be perfectly accurate.
Request:
Parameters:
Example:
{
"command": "getCommissionDef",
"arguments": {
"symbol": "T.US",
"volume": 1.0
}
}
Response:
Parameters:
commission Floating number calculated commission in account currency, could be null if not applicable
rateOfExchange Floating number rate of exchange between account currency and instrument base currency, could be null if not applicable
Example:
{
"status": true,
"returnData": {
"commission": 0.51,
"rateOfExchange": 0.1609
}
}
6. Command: getCurrentUserData
Description: Returns information about account currency, and account leverage.
Request:
Example:
{
"command": "getCurrentUserData"
}
Response:
Parameters:
leverage Number This field should not be used. It is inactive and its value is always 1.
leverageMultiplier Floating number The factor used for margin calculations. The actual value of leverage can be calculated by dividing this value by 100.
trailingStop Boolean Indicates whether this account is enabled to use trailing stop.
Example:
{
"status": true,
"returnData": {
"companyUnit": 8,
"currency": "PLN",
"group": "demoPLeurSTANDARD200",
"ibAccount": false,
"leverage": 1,
"leverageMultiplier": 0.25,
"spreadType": "FLOAT",
"trailingStop": false
}
}
7. Command: getIbsHistory
Description: Returns IBs data from the given time range.
Request:
Parameters:
Example:
{
"command": "getIbsHistory",
"arguments": {
"end": 1395053810991,
"start": 1394449010991
}
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [IB_RECORD, IB_RECORD, ...]
}
Format of IB_RECORD :
timestamp Time Time the record was created or null if not allowed to view
Example:
{
"closePrice": 1.39302,
"login": "12345",
"nominal": 6.00,
"openPrice": 1.39376,
"side": 0,
"surname": "IB_Client_1",
"symbol": "EURUSD",
"timestamp": 1395755870000,
"volume": 1.0
}
BUY 0 buy
SELL 1 sell
8. Command: getMarginLevel
Description: Please note that this function can be usually replaced by its streaming equivalent getBalance which is the preferred way of retrieving account
indicators. Returns various account indicators.
Request:
Example:
{
"command": "getMarginLevel"
}
Response:
Parameters:
equity Floating number sum of balance and all profits in account currency
Example:
{
"status": true,
"returnData": {
"balance": 995800269.43,
"credit": 1000.00,
"currency": "PLN",
"equity": 995985397.56,
"margin": 572634.43,
"margin_free": 995227635.00,
"margin_level": 173930.41
}
}
9. Command: getMarginTrade
Description: Returns expected margin for given instrument and volume. The value is calculated as expected margin value, and therefore might not be perfectly accurate.
Request:
Parameters:
Example:
{
"command": "getMarginTrade",
"arguments": {
"symbol": "EURPLN",
"volume": 1.0
}
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": {
"margin": 4399.350
}
}
Request:
Parameters:
Example:
{
"command": "getNews",
"arguments": {
"end": 0,
"start": 1275993488000
}
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [NEWS_TOPIC_RECORD, NEWS_TOPIC_RECORD, ...]
}
Format of NEWS_TOPIC_RECORD :
Example:
{
"body": "<html>...</html>",
"bodylen": 110,
"key": "1f6da766abd29927aa854823f0105c23",
"time": 1262944112000,
"timeString": "May 17, 2013 4:30:00 PM",
"title": "Breaking trend"
}
Request:
Parameters:
Example:
{
"command": "getProfitCalculation",
"arguments": {
"closePrice": 1.3000,
"cmd": 0,
"openPrice": 1.2233,
"symbol": "EURPLN",
"volume": 1.0
}
}
BUY 0 buy
SELL 1 sell
BALANCE 6 Read only. Used in getTradesHistory for manager's deposit/withdrawal operations (profit>0 for deposit, profit<0 for withdrawal).
Response:
Parameters:
Example:
{
"status": true,
"returnData": {
"profit": 714.303
}
}
Request:
Example:
{
"command": "getServerTime"
}
Response:
Parameters:
timeString String Time described in form set on server (local time of server)
Example:
{
"status": true,
"returnData": {
"time": 1392211379731,
"timeString": "Feb 12, 2014 2:22:59 PM"
}
}
Request:
Example:
{
"command": "getStepRules"
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [STEP_RULE_RECORD, STEP_RULE_RECORD, ...]
}
Format of STEP_RULE_RECORD :
Example:
{
"id": 1,
"name": "Forex",
"steps": [STEP_RECORD, STEP_RECORD, ...]
}
Format of STEP_RECORD :
Example:
{
"fromValue": 0.1,
"step": 0.0025
}
Request:
Parameters:
Example:
{
"command": "getSymbol",
"arguments": {
"symbol": "EURPLN"
}
}
Response:
Parameters:
SYMBOL_RECORD SYMBOL_RECORD
Example:
{
"status": true,
"returnData": SYMBOL_RECORD
}
Format of SYMBOL_RECORD :
Please be advised that result values for profit and margin calculation can be used optionally, because server is able to perform all profit/margin calculations for Client application
by commands described later in this document.
high Floating number The highest price of the day in base currency
initialMargin Number Initial margin for 1 lot order, used for profit/margin calculation
lotStep Floating number A value of minimum step by which the size of trade can be changed (within lotMin - lotMax range)
low Floating number The lowest price of the day in base currency
spreadRaw Floating number The difference between raw ask and bid prices
stopsLevel Number Minimal distance (in pips) from the current price where the stopLoss/takeProfit can be set
swapEnable Boolean Indicates whether swap value is added to position on end of day
tickSize Floating number Smallest possible price change, used for profit/margin calculation, null if not applicable
tickValue Floating number Value of smallest possible price change (in base currency), used for profit/margin calculation, null if not applicable
trailingEnabled Boolean Indicates whether trailing stop (offset) is applicable to the instrument.
Example:
{
"ask": 4000.0,
"bid": 4000.0,
"categoryName": "Forex",
"contractSize": 100000,
"currency": "USD",
"currencyPair": true,
"currencyProfit": "SEK",
"description": "USD/PLN",
"expiration": null,
"groupName": "Minor",
"high": 4000.0,
"initialMargin": 0,
"instantMaxVolume": 0,
"leverage": 1.5,
"longOnly": false,
"lotMax": 10.0,
"lotMin": 0.1,
"lotStep": 0.1,
"low": 3500.0,
"marginHedged": 0,
"marginHedgedStrong": false,
"marginMaintenance": null,
"marginMode": 101,
"percentage": 100.0,
"precision": 2,
"profitMode": 5,
"quoteId": 1,
"shortSelling": true,
"spreadRaw": 0.000003,
"spreadTable": 0.00042,
"starting": null,
"stepRuleId": 1,
"stopsLevel": 0,
"swap_rollover3days": 0,
"swapEnable": true,
"swapLong": -2.55929,
"swapShort": 0.131,
"swapType": 0,
"symbol": "USDPLN",
"tickSize": 1.0,
"tickValue": 1.0,
"time": 1272446136891,
"timeString": "Thu May 23 12:23:44 EDT 2013",
"trailingEnabled": true,
"type": 21
}
fixed 1 fixed
float 2 float
depth 3 depth
cross 4 cross
FOREX 5 FOREX
CFD 6 CFD
15. Command: getTickPrices
Description: Please note that this function can be usually replaced by its streaming equivalent getTickPrices which is the preferred way of retrieving ticks data.
Returns array of current quotations for given symbols, only quotations that changed from given timestamp are returned. New timestamp obtained from output will be used as an
argument of the next call of this command.
Request:
Parameters:
timestamp Time The time from which the most recent tick should be looked for. Historical prices cannot be obtained using this parameter. It can only be used to verify
whether a price has changed since the given time.
Example:
{
"command": "getTickPrices",
"arguments": {
"level": 0,
"symbols": ["EURPLN", "AGO.PL", ...],
"timestamp": 1262944112000
}
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": {
"quotations": [TICK_RECORD, TICK_RECORD, ...]
}
}
Format of TICK_RECORD :
askVolume Number Number of available lots to buy at given price or null if not applicable
bidVolume Number Number of available lots to buy at given price or null if not applicable
high Floating number The highest price of the day in base currency
low Floating number The lowest price of the day in base currency
spreadRaw Floating number The difference between raw ask and bid prices
Example:
{
"ask": 4000.0,
"askVolume": 15000,
"bid": 4000.0,
"bidVolume": 16000,
"high": 4000.0,
"level": 0,
"low": 3500.0,
"spreadRaw": 0.000003,
"spreadTable": 0.00042,
"symbol": "KOMB.CZ",
"timestamp": 1272529161605
}
Request:
Parameters:
Example:
{
"command": "getTradeRecords",
"arguments": {
"orders": [7489839, 7489841, ...]
}
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [TRADE_RECORD, TRADE_RECORD, ...]
}
Format of TRADE_RECORD :
cmd is the operation code, for user's trade operations it equals to cmd from TRADE_TRANS_INFO record used as an argument in tradeTransaction command
customComment String The value the customer may provide in order to retrieve it later.
position Number Order number common both for opened and closed transaction
sl Floating number Zero if stop loss is not set (in base currency)
tp Floating number Zero if take profit is not set (in base currency)
Example:
{
"close_price": 1.3256,
"close_time": null,
"close_timeString": null,
"closed": false,
"cmd": 0,
"comment": "Web Trader",
"commission": 0.0,
"customComment": "Some text",
"digits": 4,
"expiration": null,
"expirationString": null,
"margin_rate": 0.0,
"offset": 0,
"open_price": 1.4,
"open_time": 1272380927000,
"open_timeString": "Fri Jan 11 10:03:36 CET 2013",
"order": 7497776,
"order2": 1234567,
"position": 1234567,
"profit": -2196.44,
"sl": 0.0,
"storage": -4.46,
"symbol": "EURUSD",
"timestamp": 1272540251000,
"tp": 0.0,
"volume": 0.10
}
BUY 0 buy
SELL 1 sell
BALANCE 6 Read only. Used in getTradesHistory for manager's deposit/withdrawal operations (profit>0 for deposit, profit<0 for withdrawal).
Request:
Parameters:
Example:
{
"command": "getTrades",
"arguments": {
"openedOnly": true
}
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [TRADE_RECORD, TRADE_RECORD, ...]
}
Format of TRADE_RECORD :
cmd is the operation code, for user's trade operations it equals to cmd from TRADE_TRANS_INFO record used as an argument in tradeTransaction command
customComment String The value the customer may provide in order to retrieve it later.
position Number Order number common both for opened and closed transaction
sl Floating number Zero if stop loss is not set (in base currency)
tp Floating number Zero if take profit is not set (in base currency)
Example:
{
"close_price": 1.3256,
"close_time": null,
"close_timeString": null,
"closed": false,
"cmd": 0,
"comment": "Web Trader",
"commission": 0.0,
"customComment": "Some text",
"digits": 4,
"expiration": null,
"expirationString": null,
"margin_rate": 0.0,
"offset": 0,
"open_price": 1.4,
"open_time": 1272380927000,
"open_timeString": "Fri Jan 11 10:03:36 CET 2013",
"order": 7497776,
"order2": 1234567,
"position": 1234567,
"profit": -2196.44,
"sl": 0.0,
"storage": -4.46,
"symbol": "EURUSD",
"timestamp": 1272540251000,
"tp": 0.0,
"volume": 0.10
}
BUY 0 buy
SELL 1 sell
BALANCE 6 Read only. Used in getTradesHistory for manager's deposit/withdrawal operations (profit>0 for deposit, profit<0 for withdrawal).
Request:
Parameters:
Example:
{
"command": "getTradesHistory",
"arguments": {
"end": 0,
"start": 1275993488000
}
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [TRADE_RECORD, TRADE_RECORD, ...]
}
Format of TRADE_RECORD :
cmd is the operation code, for user's trade operations it equals to cmd from TRADE_TRANS_INFO record used as an argument in tradeTransaction command
customComment String The value the customer may provide in order to retrieve it later.
position Number Order number common both for opened and closed transaction
sl Floating number Zero if stop loss is not set (in base currency)
tp Floating number Zero if take profit is not set (in base currency)
Example:
{
"close_price": 1.3256,
"close_time": null,
"close_timeString": null,
"closed": false,
"cmd": 0,
"comment": "Web Trader",
"commission": 0.0,
"customComment": "Some text",
"digits": 4,
"expiration": null,
"expirationString": null,
"margin_rate": 0.0,
"offset": 0,
"open_price": 1.4,
"open_time": 1272380927000,
"open_timeString": "Fri Jan 11 10:03:36 CET 2013",
"order": 7497776,
"order2": 1234567,
"position": 1234567,
"profit": -2196.44,
"sl": 0.0,
"storage": -4.46,
"symbol": "EURUSD",
"timestamp": 1272540251000,
"tp": 0.0,
"volume": 0.10
}
BUY 0 buy
SELL 1 sell
BALANCE 6 Read only. Used in getTradesHistory for manager's deposit/withdrawal operations (profit>0 for deposit, profit<0 for withdrawal).
Request:
Parameters:
Example:
{
"command": "getTradingHours",
"arguments": {
"symbols": ["EURPLN", "AGO.PL", ...]
}
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": [TRADING_HOURS_RECORD, TRADING_HOURS_RECORD, ...]
}
Format of TRADING_HOURS_RECORD :
Example:
{
"quotes": [QUOTES_RECORD, QUOTES_RECORD, ...],
"symbol": "USDPLN",
"trading": [TRADING_RECORD, TRADING_RECORD, ...]
}
Format of QUOTES_RECORD :
fromT Time Start time in ms from 00:00 CET / CEST time zone (see Daylight Saving Time, DST)
toT Time End time in ms from 00:00 CET / CEST time zone (see Daylight Saving Time, DST)
Example:
{
"day": 2,
"fromT": 63000000,
"toT": 63300000
}
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
Format of TRADING_RECORD :
fromT Time Start time in ms from 00:00 CET / CEST time zone (see Daylight Saving Time, DST)
toT Time End time in ms from 00:00 CET / CEST time zone (see Daylight Saving Time, DST)
Example:
{
"day": 2,
"fromT": 63000000,
"toT": 63300000
}
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
Request:
Example:
{
"command": "getVersion"
}
Response:
Parameters:
Example:
{
"status": true,
"returnData": {
"version": "2.4.15"
}
}
Request:
Example:
{
"command": "ping"
}
Response:
Example:
{
"status": true
}
The status field set to 'true' does not imply that the transaction was accepted. It only means, that the server acquired your request and began to process it. To
analyse the status of the transaction (for example to verify if it was accepted or rejected) use the tradeTransactionStatus command with the order number, that
came back with the response of the tradeTransaction command. You can find the example here: developers.xstore.pro/api/tutorials/opening_and_closing_trades2
Request:
Parameters:
Example:
{
"command": "tradeTransaction",
"arguments": {
"tradeTransInfo": TRADE_TRANS_INFO
}
}
Format of TRADE_TRANS_INFO :
customComment String The value the customer may provide in order to retrieve it later.
Example:
{
"cmd": 2,
"customComment": "Some text",
"expiration": 1462006335000,
"offset": 0,
"order": 82188055,
"price": 1.12,
"sl": 0.0,
"symbol": "EURUSD",
"tp": 0.0,
"type": 0,
"volume": 5.0
}
BUY 0 buy
SELL 1 sell
BALANCE 6 Read only. Used in getTradesHistory for manager's deposit/withdrawal operations (profit>0 for deposit, profit<0 for withdrawal).
Response:
Parameters:
Example:
{
"status": true,
"returnData": {
"order": 43
}
}
Request:
Parameters:
Example:
{
"command": "tradeTransactionStatus",
"arguments": {
"order": 43
}
}
Response:
Parameters:
customComment String The value the customer may provide in order to retrieve it later.
Example:
{
"status": true,
"returnData": {
"ask": 1.392,
"bid": 1.392,
"customComment": "Some text",
"message": null,
"order": 43,
"requestStatus": 3
}
}
ERROR 0 error
PENDING 1 pending
1. Command: getBalance
Description: Allows to get actual account indicators values in real-time, as soon as they are available in the system.
Subscribe format:
Example:
{
"command": "getBalance",
"streamSessionId": "8469308861804289383"
}
Unsubscribe format:
Example:
{
"command": "stopBalance"
}
{
"command": "balance",
"data": STREAMING_BALANCE_RECORD
}
Format of STREAMING_BALANCE_RECORD :
equity Floating number sum of balance and all profits in account currency
Example:
{
"balance": 995800269.43,
"credit": 1000.00,
"equity": 995985397.56,
"margin": 572634.43,
"marginFree": 995227635.00,
"marginLevel": 173930.41
}
2. Command: getCandles
Description: Subscribes for and unsubscribes from API chart candles. The interval of every candle is 1 minute. A new candle arrives every minute.
Subscribe format:
Parameters:
Example:
{
"command": "getCandles",
"streamSessionId": "8469308861804289383",
"symbol": "EURUSD"
}
Unsubscribe format:
Parameters:
Example:
{
"command": "stopCandles",
"symbol": "EURUSD"
}
{
"command": "candle",
"data": STREAMING_CANDLE_RECORD
}
Format of STREAMING_CANDLE_RECORD :
ctm Time Candle start time in CET time zone (Central European Time)
high Floating number Highest value in the given period in base currency
low Floating number Lowest value in the given period in base currency
Example:
{
"close": 4.1849,
"ctm": 1378369375000,
"ctmString": "Sep 05, 2013 10:22:55 AM",
"high": 4.1854,
"low": 4.1848,
"open": 4.1848,
"quoteId": 2,
"symbol": "EURUSD",
"vol": 0.0
}
fixed 1 fixed
float 2 float
depth 3 depth
cross 4 cross
3. Command: getKeepAlive
Description: Subscribes for and unsubscribes from 'keep alive' messages. A new 'keep alive' message is sent by the API every 3 seconds.
Subscribe format:
Example:
{
"command": "getKeepAlive",
"streamSessionId": "8469308861804289383"
}
Unsubscribe format:
Example:
{
"command": "stopKeepAlive"
}
{
"command": "keepAlive",
"data": STREAMING_KEEP_ALIVE_RECORD
}
Format of STREAMING_KEEP_ALIVE_RECORD :
Example:
{
"timestamp": 1362944112000
}
4. Command: getNews
Description: Subscribes for and unsubscribes from news.
Subscribe format:
Example:
{
"command": "getNews",
"streamSessionId": "8469308861804289383"
}
Unsubscribe format:
Example:
{
"command": "stopNews"
}
{
"command": "news",
"data": STREAMING_NEWS_RECORD
}
Format of STREAMING_NEWS_RECORD :
Example:
{
"body": "<html>...</html>",
"key": "1f6da766abd29927aa854823f0105c23",
"time": 1262944112000,
"title": "Breaking trend"
}
5. Command: getProfits
Description: Subscribes for and unsubscribes from profits.
Subscribe format:
Example:
{
"command": "getProfits",
"streamSessionId": "8469308861804289383"
}
Unsubscribe format:
Example:
{
"command": "stopProfits"
}
{
"command": "profit",
"data": STREAMING_PROFIT_RECORD
}
Format of STREAMING_PROFIT_RECORD :
Example:
{
"order": 7497776,
"order2": 7497777,
"position": 7497776,
"profit": 7076.52
}
6. Command: getTickPrices
Description: Establishes subscription for quotations and allows to obtain the relevant information in real-time, as soon as it is available in the system. The getTickPrices
command can be invoked many times for the same symbol, but only one subscription for a given symbol will be created. Please beware that when multiple records are available, the
order in which they are received is not guaranteed.
Subscribe format:
Parameters:
minArrivalTime Number This field is optional and defines the minimal interval in milliseconds between any two consecutive updates. If this field is not present, or it is set to 0
(zero), ticks - if available - are sent to the client with interval equal to 200 milliseconds. In order to obtain ticks as frequently as server allows you, set it
to 1 (one).
maxLevel Number This field is optional and specifies the maximum level of the quote that the user is interested in. If this field is not specified, the subscription is active
for all levels that are managed in the system.
Example:
{
"command": "getTickPrices",
"streamSessionId": "8469308861804289383",
"symbol": "EURUSD",
"minArrivalTime": 5000,
"maxLevel": 2
}
Unsubscribe format:
Parameters:
Example:
{
"command": "stopTickPrices",
"symbol": "EURUSD"
}
{
"command": "tickPrices",
"data": STREAMING_TICK_RECORD
}
Format of STREAMING_TICK_RECORD :
askVolume Number Number of available lots to buy at given price or null if not applicable
bidVolume Number Number of available lots to buy at given price or null if not applicable
high Floating number The highest price of the day in base currency
low Floating number The lowest price of the day in base currency
spreadRaw Floating number The difference between raw ask and bid prices
Example:
{
"ask": 4000.0,
"askVolume": 15000,
"bid": 4000.0,
"bidVolume": 16000,
"high": 4000.0,
"level": 0,
"low": 3500.0,
"quoteId": 0,
"spreadRaw": 0.000003,
"spreadTable": 0.00042,
"symbol": "KOMB.CZ",
"timestamp": 1272529161605
}
fixed 1 fixed
float 2 float
depth 3 depth
cross 4 cross
7. Command: getTrades
Description: Establishes subscription for user trade status data and allows to obtain the relevant information in real-time, as soon as it is available in the system. Please beware that
when multiple records are available, the order in which they are received is not guaranteed.
Subscribe format:
Example:
{
"command": "getTrades",
"streamSessionId": "8469308861804289383"
}
Unsubscribe format:
Example:
{
"command": "stopTrades"
}
{
"command": "trade",
"data": STREAMING_TRADE_RECORD
}
Format of STREAMING_TRADE_RECORD :
Situation that trade was closed can be checked by field closed set to true in STREAMING_TRADE_RECORD format. Also close_time field will NOT be set to null. Various reasons
of trade close could be found out by information in comment field of STREAMING_TRADE_RECORD for closed order. If the comment remained unchanged from that of opened order,
then the order was closed by user. If there is annotation in comment string like:
The annotation are in brackets (regular or square, depending on situation) with additional data about the closing action.
customComment String The value the customer may provide in order to retrieve it later.
position Number Position number (if type is 0 and 2) or transaction parameter (if type is 1)
profit Floating number null unless the trade is closed (type=2) or opened (type=0)
sl Floating number Zero if stop loss is not set (in base currency)
state String Trade state, should be used for detecting pending order's cancellation
tp Floating number Zero if take profit is not set (in base currency)
Example:
{
"close_price": 1.3256,
"close_time": null,
"closed": false,
"cmd": 0,
"comment": "Web Trader",
"commission": 0.0,
"customComment": "Some text",
"digits": 4,
"expiration": null,
"margin_rate": 3.9149000,
"offset": 0,
"open_price": 1.4,
"open_time": 1272380927000,
"order": 7497776,
"order2": 1234567,
"position": 1234567,
"profit": 68.392,
"sl": 0.0,
"state": "Modified",
"storage": -4.46,
"symbol": "EURUSD",
"tp": 0.0,
"type": 0,
"volume": 0.10
}
BUY 0 buy
SELL 1 sell
BALANCE 6 Read only. Used in getTradesHistory for manager's deposit/withdrawal operations (profit>0 for deposit, profit<0 for withdrawal).
8. Command: getTradeStatus
Description: Allows to get status for sent trade requests in real-time, as soon as it is available in the system. Please beware that when multiple records are available, the order in
which they are received is not guaranteed.
Subscribe format:
Example:
{
"command": "getTradeStatus",
"streamSessionId": "8469308861804289383"
}
Unsubscribe format:
Example:
{
"command": "stopTradeStatus"
}
{
"command": "tradeStatus",
"data": STREAMING_TRADE_STATUS_RECORD
}
Format of STREAMING_TRADE_STATUS_RECORD :
customComment String The value the customer may provide in order to retrieve it later.
Example:
{
"customComment": "Some text",
"message": null,
"order": 43,
"price": 1.392,
"requestStatus": 3
}
ERROR 0 error
PENDING 1 pending
9. Command: ping
Description: Description: Regularly calling this function is enough to refresh the internal state of all the components in the system. Streaming connection, when any command is not
sent by client in the session, generates only one way network traffic. It is recommended that any application that does not execute other commands, should call this command at
least once every 10 minutes.
Subscribe format:
Example:
{
"command": "ping",
"streamSessionId": "8469308861804289383"
}
7. Error messages
Main reason of generated transaction server error messages is an error in the business logic of the application.
BE010 Off quotes
EX001, EX002, SExxx, Internal error, in case of such error, please contact support
BE000
EX004 Login credentials are incorrect or this login is not allowed to use an application with this appId
EX006 No access
EX007 userPasswordCheck: Invalid login or password. This login/password is disabled for 10 minutes (the specific login and password pair is blocked after an
unsuccessful login attempt).
EX008 You have reached the connection limit. For details see the Connection validation section.
EX009 Data limit potentially exceeded. Please narrow your request range. The potential data size is calculated by: (end_time - start_time) / interval. The limit is 50
000 candles
EX010 Your login is on the black list, perhaps due to previous misuse. For details please contact support.
EX011 You are not allowed to execute this command. For details please contact support.