{
  "openapi": "3.1.0",
  "info": {
    "title": "DXtrade APIs (independent, unofficial description by Broker API Hub)",
    "version": "2026-10-12",
    "description": "An independent, unofficial description of the DXtrade APIs, built by Broker API Hub from DXtrade APIs's public documentation. It is not DXtrade APIs's own specification, and Broker API Hub is not affiliated with or endorsed by DXtrade APIs.\n\nIt is generated from 21 endpoint records. Every operation carries x-source, the page it was read on, and x-checked, the date that page was last checked. No operation here is recorded as conflicting or unverified. An operation this file does not list is not recorded here, which is not evidence that it does not exist.\n\nSecurity schemes are only the authentication headers the endpoint records list. How a credential is obtained and how long it lasts is on https://openbrokerapi.com/platforms/dxtrade.\n\nResponse schemas: none is recorded.\n\n1 operation carries a mock reply as an example under the default response. Its values are invented.\n\nWhere this file and DXtrade APIs's own documentation differ, the documentation wins. Educational only. Nothing here is advice.",
    "x-independent": true,
    "x-licence": "All rights reserved. Given for reference. Not part of the CC BY 4.0 downloads.",
    "x-cite": "Broker API Hub, DXtrade APIs OpenAPI description, openbrokerapi.com/specs/dxtrade.json, newest check 2026-10-12",
    "x-generated": "2026-10-12",
    "x-generated-basis": "The newest checked date among the endpoint records in this file. It is not the date the file was built.",
    "x-page": "https://openbrokerapi.com/platforms/dxtrade",
    "x-base-addresses": {
      "broker": "Varies by broker. Each broker or firm that offers DXtrade hosts its own, and the REST API sits under /dxsca-web on that host. The specification's own example is https://myhost.com/dxsca-web",
      "demo_portal": "https://demo.dx.trade/dxsca-web"
    },
    "x-base-addresses-note": "The base addresses exactly as the platform record words them. Only an entry that is a plain address is listed under servers. A platform API is hosted for each broker or firm that offers it, so where the record holds no plain address the base address is the one your own broker gives you."
  },
  "externalDocs": {
    "description": "DXtrade APIs's own documentation",
    "url": "https://demo.dx.trade/developers/#/"
  },
  "servers": [
    {
      "url": "https://demo.dx.trade/dxsca-web",
      "description": "Recorded on the DXtrade APIs record as \"demo_portal\"."
    }
  ],
  "tags": [
    {
      "name": "Conversion Rates"
    },
    {
      "name": "Market Data"
    },
    {
      "name": "Reference Data"
    },
    {
      "name": "Sessions"
    },
    {
      "name": "Trading"
    },
    {
      "name": "Users and Accounts"
    }
  ],
  "paths": {
    "/accounts/{accountCode}/close": {
      "post": {
        "operationId": "post-account-close",
        "summary": "Close the open positions on an account, cancel its working orders, or both, in one step, for every instrument or for one.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The page says the operation is complete when the reply comes back, and that a failure to cancel or close is answered 500 with error code 110. It names no reply body.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=bulk-close"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "closePositions": {
                    "type": "boolean",
                    "description": "Marked optional. Whether to close positions. The model says this or cancelOrders, or both, should be set to true."
                  },
                  "cancelOrders": {
                    "type": "boolean",
                    "description": "Marked optional. Whether to cancel working orders."
                  },
                  "instrument": {
                    "type": "string",
                    "description": "Marked optional. Limit the operation to this instrument's positions and orders."
                  },
                  "comment": {
                    "type": "string",
                    "description": "Marked optional. A free comment kept for audit."
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/post-account-close"
      }
    },
    "/accounts/{accountCode}/events": {
      "get": {
        "operationId": "get-account-events",
        "summary": "List events on an account that a trader needs to know of, such as liquidations and margin calls.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of account events, with an ETag header. The page also gives a second address for several accounts at once, /accounts/events, with the account codes as a comma separated accounts query parameter. That form is not recorded separately.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-account-events"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Marked optional. The most events to return.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "of-type",
            "in": "query",
            "required": false,
            "description": "Marked optional. Event types, comma separated.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from-time",
            "in": "query",
            "required": false,
            "description": "Marked optional. Earliest event time in UTC, inclusive.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to-time",
            "in": "query",
            "required": false,
            "description": "Marked optional. Latest event time in UTC, inclusive.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "description": "Marked optional. One of: today, previous-day, week, previous-week.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-account-events"
      }
    },
    "/accounts/{accountCode}/instruments/query": {
      "get": {
        "operationId": "get-account-instruments-query",
        "summary": "Read the details of instruments as they are set for one account, since the platform can configure an instrument differently for different accounts.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of instrument details, with no ETag header. The page lists two more addresses under the same heading, ending /instruments/{symbol} and /instruments/type/{type}.",
        "tags": [
          "Reference Data"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=instrument-details"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "symbols",
            "in": "query",
            "x-required-unmarked": true,
            "description": "A symbol, part of one, or a comma separated list, URL-encoded. An asterisk stands for any characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "types",
            "in": "query",
            "x-required-unmarked": true,
            "description": "One instrument type or a comma separated list. No wildcards.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Marked optional. The most instruments on a page of results.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start-from",
            "in": "query",
            "required": false,
            "description": "Marked optional. Index of the first instrument to return. Default 0.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "sort-by-asc",
            "in": "query",
            "required": false,
            "description": "Marked optional. Sort ascending by TYPE, SYMBOL or both. Not together with sort-by-desc.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort-by-desc",
            "in": "query",
            "required": false,
            "description": "Marked optional. Sort descending by TYPE, SYMBOL or both. Not together with sort-by-asc.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-account-instruments-query"
      }
    },
    "/accounts/{accountCode}/metrics": {
      "get": {
        "operationId": "get-account-metrics",
        "summary": "Read the current metrics of an account, such as equity and profit and loss. The values move with the market, so the page expects polling or the push API.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of account metrics, with no ETag header. The page also gives a second address for several accounts at once, /accounts/metrics, with the account codes as a comma separated accounts query parameter. That form is not recorded separately.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-account-metrics"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include-positions",
            "in": "query",
            "required": false,
            "description": "Marked optional. If true, the result also holds metrics for each position. By default only the account totals are reported.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include-offset",
            "in": "query",
            "required": false,
            "description": "Marked optional. If true and no account codes are given, offset accounts are processed too.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-account-metrics"
      }
    },
    "/accounts/{accountCode}/orders": {
      "get": {
        "operationId": "get-account-orders",
        "summary": "List every open order on an account.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of orders, with an ETag header. The page also gives a second address for several accounts at once, /accounts/orders, with the account codes as a comma separated accounts query parameter. That form is not recorded separately.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-open-orders"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include-offset",
            "in": "query",
            "required": false,
            "description": "Marked optional. If true and no account codes are given, offset accounts are processed too.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-account-orders"
      },
      "post": {
        "operationId": "post-account-orders",
        "summary": "Place a market, limit or stop order, or a group of orders, on an account. The client gives each order a code of its own so a repeat is refused.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The body fields are those of the Single Order Request model, with the model's own required and optional marks. The page also accepts an Order Group Request, which is not recorded here. The call is not idempotent: the page says an order code that already exists is refused with 409 and error code 100. The reply is an Order Response, whose orderId and updateOrderId are both marked required. The mock reply uses those names with invented values.",
        "tags": [
          "Trading"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=place-order"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "orderCode": {
                    "type": "string",
                    "description": "An identifier for the order, unique among the orders on the account. For a new order the client assigns it."
                  },
                  "type": {
                    "type": "string",
                    "description": "One of: MARKET, LIMIT, STOP. It cannot be changed once the order is issued."
                  },
                  "instrument": {
                    "type": "string",
                    "description": "The symbol of the instrument. It cannot be changed once the order is issued."
                  },
                  "side": {
                    "type": "string",
                    "description": "One of: BUY, SELL."
                  },
                  "quantity": {
                    "type": "number",
                    "description": "Marked optional. The size in units, not lots. Left out or zero for a closing order tied to a position, which takes the position's size."
                  },
                  "positionEffect": {
                    "type": "string",
                    "description": "Marked optional. One of: OPEN, CLOSE. The model says it is required for position based trading."
                  },
                  "positionCode": {
                    "type": "string",
                    "description": "Marked optional. The position the order changes. Present when positionEffect is CLOSE and left out otherwise."
                  },
                  "limitPrice": {
                    "type": "number",
                    "description": "Marked optional. The price of a limit order. Absent for market and stop orders."
                  },
                  "stopPrice": {
                    "type": "number",
                    "description": "Marked optional. The price of a stop order. Absent for market and limit orders."
                  },
                  "priceOffset": {
                    "type": "number",
                    "description": "Marked optional. A price offset for a protection order, taken from the fill price of the order that triggers it. Needs priceLink."
                  },
                  "priceLink": {
                    "type": "string",
                    "description": "Marked optional. One of: TRIGGERED_STOP, TRIGGERED_LIMIT."
                  },
                  "tif": {
                    "type": "string",
                    "description": "Marked optional. Time in force. One of: GTC, DAY, GTD. The default depends on how the platform is set up."
                  },
                  "expireDate": {
                    "type": "string",
                    "description": "Marked optional. Expiry in UTC. Present when tif is GTD and left out otherwise."
                  },
                  "metadata": {
                    "type": "object",
                    "description": "Marked optional. Up to 32 key and value pairs of the client's own, stored and returned with the order."
                  }
                },
                "required": [
                  "orderCode",
                  "type",
                  "instrument",
                  "side"
                ]
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "orderId": 1,
                  "updateOrderId": 1
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/post-account-orders"
      },
      "put": {
        "operationId": "put-account-orders",
        "summary": "Change an order that is not yet final by sending the whole order request again with the changed fields.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The body fields are those of the Single Order Request model, with the model's own required and optional marks. The page also accepts an Order Group Request, which is not recorded here. The page says the whole order request must be sent, that some fields cannot change after issue (409), and that an order already in a final status is refused with 409 and error code 1005. The model says the order type is left out of a request that replaces a single order. Here orderCode may be the client's code or the platform's own. The reply is the updated Order Response with an ETag header.",
        "tags": [
          "Trading"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=modify-order"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The ETag last received for the resource. The specification says every PUT and DELETE must carry it: without it the reply is 403, and with a stale value it is 412.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "orderCode": {
                    "type": "string",
                    "description": "An identifier for the order, unique among the orders on the account. For a new order the client assigns it."
                  },
                  "type": {
                    "type": "string",
                    "description": "One of: MARKET, LIMIT, STOP. It cannot be changed once the order is issued."
                  },
                  "instrument": {
                    "type": "string",
                    "description": "The symbol of the instrument. It cannot be changed once the order is issued."
                  },
                  "side": {
                    "type": "string",
                    "description": "One of: BUY, SELL."
                  },
                  "quantity": {
                    "type": "number",
                    "description": "Marked optional. The size in units, not lots. Left out or zero for a closing order tied to a position, which takes the position's size."
                  },
                  "positionEffect": {
                    "type": "string",
                    "description": "Marked optional. One of: OPEN, CLOSE. The model says it is required for position based trading."
                  },
                  "positionCode": {
                    "type": "string",
                    "description": "Marked optional. The position the order changes. Present when positionEffect is CLOSE and left out otherwise."
                  },
                  "limitPrice": {
                    "type": "number",
                    "description": "Marked optional. The price of a limit order. Absent for market and stop orders."
                  },
                  "stopPrice": {
                    "type": "number",
                    "description": "Marked optional. The price of a stop order. Absent for market and limit orders."
                  },
                  "priceOffset": {
                    "type": "number",
                    "description": "Marked optional. A price offset for a protection order, taken from the fill price of the order that triggers it. Needs priceLink."
                  },
                  "priceLink": {
                    "type": "string",
                    "description": "Marked optional. One of: TRIGGERED_STOP, TRIGGERED_LIMIT."
                  },
                  "tif": {
                    "type": "string",
                    "description": "Marked optional. Time in force. One of: GTC, DAY, GTD. The default depends on how the platform is set up."
                  },
                  "expireDate": {
                    "type": "string",
                    "description": "Marked optional. Expiry in UTC. Present when tif is GTD and left out otherwise."
                  },
                  "metadata": {
                    "type": "object",
                    "description": "Marked optional. Up to 32 key and value pairs of the client's own, stored and returned with the order."
                  }
                },
                "required": [
                  "orderCode",
                  "type",
                  "instrument",
                  "side"
                ]
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/put-account-orders"
      }
    },
    "/accounts/{accountCode}/orders/{orderCode}": {
      "delete": {
        "operationId": "delete-account-order",
        "summary": "Cancel one order on an account, named by the client's order code or by the platform's own code.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The page writes the second placeholder as {order code}. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The request is empty and the reply is the Order Response of the cancelled order, with no ETag header. The page gives a second address, /accounts/{account code}/orders/group, that cancels a group named by order-codes and contingency-type query parameters. That form is not recorded separately.",
        "tags": [
          "Trading"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=cancel-order"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderCode",
            "in": "path",
            "required": true,
            "description": "The client order id given when the order was placed, or the platform's internal code for the order chain. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The ETag last received for the resource. The specification says every PUT and DELETE must carry it: without it the reply is 403, and with a stale value it is 412.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/delete-account-order"
      }
    },
    "/accounts/{accountCode}/orders/history": {
      "get": {
        "operationId": "get-account-orders-history",
        "summary": "List an account's orders, both working and final, filtered by status, type, side, instrument or time.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The page lists the same address under POST as well, to get round the length limit of a GET address when a query is long. Only GET is recorded here. Several values in one filter are treated as alternatives. The reply is a historic order list, with no ETag header. The page also gives a second address for several accounts at once, /accounts/orders/history, with the account codes as a comma separated accounts query parameter. That form is not recorded separately.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-orders"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Marked optional. The most orders on a page of results. The server sets the largest value allowed.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "in-status",
            "in": "query",
            "required": false,
            "description": "Marked optional. Order statuses, comma separated.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "of-type",
            "in": "query",
            "required": false,
            "description": "Marked optional. Order types, comma separated. Possible values: market, limit, stop.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "issued-from",
            "in": "query",
            "required": false,
            "description": "Marked optional. Earliest issue time in UTC, inclusive.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "issued-to",
            "in": "query",
            "required": false,
            "description": "Marked optional. Latest issue time in UTC, inclusive.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "description": "Marked optional. A shortcut for the issue time. One of: today, previous-day, week, previous-week.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "transaction-from",
            "in": "query",
            "required": false,
            "description": "Marked optional. Earliest last modification time in UTC, inclusive.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "transaction-to",
            "in": "query",
            "required": false,
            "description": "Marked optional. Latest last modification time in UTC, inclusive.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "at-least-version",
            "in": "query",
            "required": false,
            "description": "Marked optional. Only orders whose last update has this account version or a greater one.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "at-most-version",
            "in": "query",
            "required": false,
            "description": "Marked optional. Only orders whose last update has this account version or a smaller one.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "side",
            "in": "query",
            "required": false,
            "description": "Marked optional. One of: buy, sell.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with-client-id",
            "in": "query",
            "x-required-unmarked": true,
            "description": "Order ids assigned by the client, comma separated, at most 50.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with-order-id",
            "in": "query",
            "x-required-unmarked": true,
            "description": "Numeric order ids assigned by the server, at most 50.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "for-instrument",
            "in": "query",
            "x-required-unmarked": true,
            "description": "Instrument symbols, comma separated.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include-offset",
            "in": "query",
            "required": false,
            "description": "Marked optional. If true and no account codes are given, offset accounts are processed too.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include-links",
            "in": "query",
            "required": false,
            "description": "Marked optional. If true, orders linked to a matched order are returned too.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-account-orders-history"
      }
    },
    "/accounts/{accountCode}/portfolio": {
      "get": {
        "operationId": "get-account-portfolio",
        "summary": "Read an account's portfolio: its open positions and working orders. Closed positions and completed orders are not in it.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of account portfolios, with an ETag header. The page also gives a second address for several accounts at once, /accounts/portfolio, with the account codes as a comma separated accounts query parameter. That form is not recorded separately.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-account-portfolio"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include-offset",
            "in": "query",
            "required": false,
            "description": "Marked optional. If true and no account codes are given, offset accounts are processed too.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-account-portfolio"
      }
    },
    "/accounts/{accountCode}/positions": {
      "get": {
        "operationId": "get-account-positions",
        "summary": "List every open position on an account.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of positions, with an ETag header. The page also gives a second address for several accounts at once, /accounts/positions, with the account codes as a comma separated accounts query parameter. That form is not recorded separately.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-open-positions"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include-offset",
            "in": "query",
            "required": false,
            "description": "Marked optional. If true and no account codes are given, offset accounts are processed too.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-account-positions"
      }
    },
    "/accounts/{accountCode}/transfers": {
      "get": {
        "operationId": "get-account-transfers",
        "summary": "List the cash movements on an account over a period: deposits, withdrawals, commissions, financing and settled profit and loss.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page writes the placeholder in the address as {account code} and names the parameter accountCode or account code. This record uses accountCode. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of cash transfers, with an ETag header. The page also gives a second address for several accounts at once, /accounts/transfers, with the account codes as a comma separated accounts query parameter. That form is not recorded separately.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-cash-transfers"
        },
        "parameters": [
          {
            "name": "accountCode",
            "in": "path",
            "required": true,
            "description": "The account code, two strings joined by a colon in the form clearing:account, assigned by the platform. URL-encode it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Marked optional. The most transfers to return.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start-from",
            "in": "query",
            "required": false,
            "description": "Marked optional. Index of the first transfer to return. Default 0.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "of-type",
            "in": "query",
            "required": false,
            "description": "Marked optional. Transfer reasons, comma separated. Values: COMMISSION, FINANCING, DEPOSIT, WITHDRAWAL, COST, SETTLEMENT, EX_DIVIDEND, REBATE, NEGATIVE_BALANCE_CORRECTION, ADJUSTMENT.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "time-from",
            "in": "query",
            "required": false,
            "description": "Marked optional. Earliest transfer time in UTC, inclusive.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "time-to",
            "in": "query",
            "required": false,
            "description": "Marked optional. Latest transfer time in UTC, inclusive.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "description": "Marked optional. One of: today, previous-day, week, previous-week.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include-offset",
            "in": "query",
            "required": false,
            "description": "Marked optional. If true and no account codes are given, offset accounts are processed too.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-account-transfers"
      }
    },
    "/conversionRates": {
      "get": {
        "operationId": "get-conversion-rates",
        "summary": "Read the current conversion rate between two currencies, or from every currency to one.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The method is recorded as GET: the page shows its GET badge beside this address and describes an empty request with query parameters, although the badge's alternative text in the Markdown reads POST. The reply is a list of conversion rates, each with fromCurrency, toCurrency and convRate, all three marked required.",
        "tags": [
          "Conversion Rates"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=get-conversion-rates"
        },
        "parameters": [
          {
            "name": "toCurrency",
            "in": "query",
            "required": true,
            "description": "The target currency. Marked required.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fromCurrency",
            "in": "query",
            "required": false,
            "description": "Marked optional. The source currency. Without it the rates from every currency to toCurrency are returned.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-conversion-rates"
      }
    },
    "/instruments/{symbol}": {
      "get": {
        "operationId": "get-instrument",
        "summary": "Read the general details of one instrument by its symbol.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of instruments, with no ETag header. The page says a symbol the user is not permitted to see returns an empty list.",
        "tags": [
          "Reference Data"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-instruments"
        },
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "description": "The instrument's symbol on the platform, such as EUR/USD, URL-encoded.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Marked optional. The most instruments on a page of results.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start-from",
            "in": "query",
            "required": false,
            "description": "Marked optional. Index of the first instrument to return. Default 0.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-instrument"
      }
    },
    "/instruments/query": {
      "get": {
        "operationId": "get-instruments-query",
        "summary": "Search the instruments the platform trades by symbol, with a wildcard, or by type, and page through the result.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of instruments, with no ETag header. Instruments the user is not permitted to see are left out. The page lists two more addresses under the same heading, /instruments/{symbol} and /instruments/type/{type}.",
        "tags": [
          "Reference Data"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=list-instruments"
        },
        "parameters": [
          {
            "name": "symbols",
            "in": "query",
            "x-required-unmarked": true,
            "description": "A symbol, part of one, or a comma separated list, URL-encoded. An asterisk stands for any characters. Without it every available instrument is returned.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "types",
            "in": "query",
            "x-required-unmarked": true,
            "description": "One instrument type or a comma separated list, such as FOREX or INDEX,STOCK. No wildcards.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Marked optional. The most instruments on a page of results. The server sets the largest value allowed.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start-from",
            "in": "query",
            "required": false,
            "description": "Marked optional. Index of the first instrument to return. Default 0.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "sort-by-asc",
            "in": "query",
            "required": false,
            "description": "Marked optional. Sort ascending by TYPE, SYMBOL or both, comma separated. Not together with sort-by-desc.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort-by-desc",
            "in": "query",
            "required": false,
            "description": "Marked optional. Sort descending by TYPE, SYMBOL or both, comma separated. Not together with sort-by-asc.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-instruments-query"
      }
    },
    "/login": {
      "post": {
        "operationId": "post-login",
        "summary": "Log in with a username, a domain and a password and receive a session token to send with every later request.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page shows the three body fields in its request example and marks none of them, so the required marks here are not confirmed. The reply carries sessionToken and timeout. The page says the token lapses after a set time without a request, on logout, or when the platform ends the session, after which a request is answered 401.",
        "tags": [
          "Sessions"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=create-session-token"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The client's username. Read it from your own environment."
                  },
                  "domain": {
                    "type": "string",
                    "description": "The client's domain."
                  },
                  "password": {
                    "type": "string",
                    "description": "The client's password. Read it from your own environment. Never type it into this site."
                  }
                },
                "required": [
                  "username",
                  "domain",
                  "password"
                ]
              }
            }
          }
        },
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-required-unconfirmed": true,
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/post-login"
      }
    },
    "/loginByToken": {
      "post": {
        "operationId": "post-login-by-token",
        "summary": "Create a session token from a single sign on token in place of a password, for a system that holds no credentials of its own.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The page shows the three body fields in its request example and marks none of them, so the required marks here are not confirmed. The page says the SSO token is obtained through the DXtrade Administrative REST API. The reply carries sessionToken and timeout.",
        "tags": [
          "Sessions"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=create-session-token-by-sso"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The client's username."
                  },
                  "domain": {
                    "type": "string",
                    "description": "The client's domain."
                  },
                  "token": {
                    "type": "string",
                    "description": "The client's SSO token. Read it from your own environment."
                  }
                },
                "required": [
                  "username",
                  "domain",
                  "token"
                ]
              }
            }
          }
        },
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-required-unconfirmed": true,
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/post-login-by-token"
      }
    },
    "/logout": {
      "post": {
        "operationId": "post-logout",
        "summary": "End a token authentication session at once, so the session token stops working.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The request and the reply are both empty.",
        "tags": [
          "Sessions"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=logout"
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/post-logout"
      }
    },
    "/marketdata": {
      "post": {
        "operationId": "post-marketdata",
        "summary": "Ask for current quotes or for historical candles for one or more instruments. One call serves both, chosen by the event type in the body.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The body is the Market Data Request model and its Market Data Event Type, with the models' own marks. The reply is a market data list. The page says a request for symbols with no quotes is answered 404 with error code 35.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=request-market-data"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "eventTypes": {
                    "type": "array",
                    "description": "The kinds of data wanted, each an object with the fields below."
                  },
                  "eventTypes[].type": {
                    "type": "string",
                    "description": "Either Quote or Candle."
                  },
                  "eventTypes[].format": {
                    "type": "string",
                    "description": "Marked optional. Always COMPACT."
                  },
                  "eventTypes[].candleType": {
                    "type": "string",
                    "description": "Marked optional. The candle size, for candle requests. One of: m, 5m, 15m, 30m, h, 2h, 4h, d, w, mo."
                  },
                  "eventTypes[].fromTime": {
                    "type": "string",
                    "description": "Marked optional in the table, which also says it is required for Candle. UTC time the history starts at."
                  },
                  "eventTypes[].toTime": {
                    "type": "string",
                    "description": "Marked optional in the table, which also says it is required for Candle. UTC time the history ends at."
                  },
                  "eventTypes[].count": {
                    "type": "number",
                    "description": "Marked optional. The most candles to return. When the period holds more, the older ones are dropped."
                  },
                  "symbols": {
                    "type": "string",
                    "description": "Instrument symbols, as a list of strings or one comma separated string."
                  },
                  "account": {
                    "type": "string",
                    "description": "Marked optional. An account code, used only where a user's accounts have different pricing."
                  }
                },
                "required": [
                  "eventTypes",
                  "eventTypes[].type",
                  "symbols"
                ]
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/post-marketdata"
      }
    },
    "/ping": {
      "post": {
        "operationId": "post-ping",
        "summary": "Reset the expiry of a token authentication session without doing anything else. Not needed with HMAC authentication.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The request is empty. The reply carries sessionToken and timeout, described as the token to use from then on and the interval after which it lapses through inactivity.",
        "tags": [
          "Sessions"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=ping-api"
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/post-ping"
      }
    },
    "/users/{username}": {
      "get": {
        "operationId": "get-user",
        "summary": "Read the details of a user, which is how a program finds the accounts a login can use.",
        "description": "Read on 12 Oct 2026 in the DXtrade REST API specification on DXtrade's developer portal. The portal draws its pages in the browser from Markdown files it also serves directly, and the Markdown file of this page (DXtrade-REST-API.md) is what was read, with the model files it includes. The portal writes each address after a base address it fills in from its own settings, which on this portal is https://demo.dx.trade/dxsca-web. A broker or firm that offers DXtrade hosts its own, so the path here is what follows that base. The specification says every request needs authentication unless it says otherwise, and this section says the Authorization header should be included, which is why it is recorded as required. The reply is a list of user details. An ETag header is sent only when one user is asked for. The page says a user can always read their own details and needs a permission to read another's. Each entry of the User Details model carries login, domain, username, version, fullName and accounts, the list of accounts the user owns, all marked required.",
        "tags": [
          "Users and Accounts"
        ],
        "externalDocs": {
          "description": "DXtrade APIs's own reference for this operation",
          "url": "https://demo.dx.trade/developers/#/DXtrade-REST-API?id=get-user"
        },
        "parameters": [
          {
            "name": "username",
            "in": "path",
            "required": true,
            "description": "The full username in the form username@domain, URL-encoded. No wildcards. The page calls the value optional: without it every user the login can see is returned.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Marked optional. The most users to return.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start-from",
            "in": "query",
            "required": false,
            "description": "Marked optional. Index of the first user to return. Default 0.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://demo.dx.trade/developers/#/DXtrade-REST-API",
        "x-checked": "2026-10-12",
        "x-page": "https://openbrokerapi.com/platforms/dxtrade/endpoints/get-user"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "Authorization": {
        "type": "apiKey",
        "in": "header",
        "name": "Authorization",
        "description": "A header the DXtrade APIs endpoint records list on requests. Read its value from your own environment. Never paste it into a web page or a chat."
      }
    }
  }
}