{
  "openapi": "3.1.0",
  "info": {
    "title": "Saxo OpenAPI (independent, unofficial description by Broker API Hub)",
    "version": "2026-10-12",
    "description": "An independent, unofficial description of the Saxo OpenAPI, built by Broker API Hub from Saxo OpenAPI's public documentation. It is not Saxo OpenAPI's own specification, and Broker API Hub is not affiliated with or endorsed by Saxo OpenAPI.\n\nIt is generated from 68 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/brokers/saxo.\n\nResponse schemas: 19 of the 68 operations carry a response block written by hand for an earlier file on this site, each schema with its own x-source. Those operations are marked x-carried.\n\n42 operations carry a mock reply as an example under the default response. Its values are invented.\n\nWhere this file and Saxo OpenAPI'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, Saxo OpenAPI OpenAPI description, openbrokerapi.com/specs/saxo.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/brokers/saxo",
    "x-base-addresses": {
      "live": "https://gateway.saxobank.com/openapi",
      "demo": "https://gateway.saxobank.com/sim/openapi",
      "stream_live": "https://live-streaming.saxobank.com/oapi/streaming/ws",
      "stream_demo": "https://sim-streaming.saxobank.com/sim/oapi/streaming/ws"
    },
    "x-base-addresses-note": "The base addresses exactly as the broker record words them. Only an entry that is a plain address is listed under servers."
  },
  "externalDocs": {
    "description": "Saxo OpenAPI's own documentation",
    "url": "https://www.developer.saxo/openapi/learn"
  },
  "servers": [
    {
      "url": "https://gateway.saxobank.com/sim/openapi",
      "description": "Recorded on the Saxo OpenAPI record as \"demo\"."
    },
    {
      "url": "https://gateway.saxobank.com/openapi",
      "description": "Recorded on the Saxo OpenAPI record as \"live\"."
    }
  ],
  "tags": [
    {
      "name": "Accounts and balances"
    },
    {
      "name": "Chart data"
    },
    {
      "name": "Closed positions and history"
    },
    {
      "name": "Instruments"
    },
    {
      "name": "Orders"
    },
    {
      "name": "Positions"
    },
    {
      "name": "Prices"
    },
    {
      "name": "Reference data"
    },
    {
      "name": "Session and user"
    }
  ],
  "paths": {
    "/chart/v3/charts": {
      "get": {
        "operationId": "charts",
        "summary": "Returns timestamped open, high, low and close samples for one instrument, up to 1,200 samples a call. Horizon sets the bar length in minutes.",
        "description": "Saxo's Chart service group lists only v3 (/chart/v3/charts); no v1 or v2 chart resource appears there. FX instruments return bid and ask OHLC fields (OpenBid, OpenAsk and so on) instead of single values. 503 Service Unavailable is also listed. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Chart data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/chart/v3/charts/get__chart"
        },
        "parameters": [
          {
            "name": "Uic",
            "in": "query",
            "required": true,
            "description": "Uic of the instrument.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "AssetType",
            "in": "query",
            "required": true,
            "description": "Asset type of the instrument.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Horizon",
            "in": "query",
            "required": true,
            "description": "Minutes per sample: 1, 2, 3, 5, 10, 15, 30, 60, 120, 180, 240, 300, 360, 480, 1440, 10080, 43200, 129600 or 518400.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "Count",
            "in": "query",
            "required": false,
            "description": "Maximum number of samples to return; max 1200, default 1200.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "Mode",
            "in": "query",
            "required": false,
            "description": "UpTo or From, relative to Time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Time",
            "in": "query",
            "required": false,
            "description": "Time of the first or last sample, depending on Mode.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Account key.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChartsResponse"
                },
                "example": {
                  "ChartInfo": {
                    "DelayedByMinutes": 15,
                    "ExchangeId": "MOCKEX",
                    "FirstSampleTime": "2000-01-01T00:00:00Z",
                    "Horizon": 60
                  },
                  "Data": [
                    {
                      "Time": "2000-01-01T09:00:00Z",
                      "Open": 10,
                      "High": 10.5,
                      "Low": 9.5,
                      "Close": 10.2,
                      "Volume": 1000
                    }
                  ],
                  "DataVersion": 1,
                  "DisplayAndFormat": {
                    "Currency": "EUR",
                    "Decimals": 2,
                    "Description": "Mock Instrument plc",
                    "Format": "Normal",
                    "Symbol": "MOCK:xmock"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/chart/v3/charts/get__chart",
        "x-checked": "2026-10-12",
        "x-version": "v3",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/charts"
      }
    },
    "/chart/v3/charts/subscriptions": {
      "post": {
        "operationId": "charts-subscribe",
        "summary": "Sets up a streaming subscription on chart samples and returns the most recent completed ones as a first snapshot.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. Saxo notes that when a sample closes you usually receive two samples together: the one that closed and the new one. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Chart data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/chart/v3/charts/post__chart__subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection: letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription, up to 50 characters. It cannot start with an underscore."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "ChartSubscriptionRequest: the instrument, asset type and time horizon to chart."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Shortest time in milliseconds between updates. It cannot go below the rate in your service agreement."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of the streamed updates: application/json or application/x-protobuf."
                  },
                  "ReplaceReferenceId": {
                    "type": "string",
                    "description": "Reference id of an existing subscription that this one replaces."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId"
                ]
              }
            }
          }
        },
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "Data": []
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/chart/v3/charts/post__chart__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v3",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/charts-subscribe"
      }
    },
    "/chart/v3/charts/subscriptions/{ContextId}/{ReferenceId}": {
      "delete": {
        "operationId": "charts-unsubscribe",
        "summary": "Removes one chart subscription, identified by its context and reference ids, and frees what it held on the server.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. No response body is documented. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Chart data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/chart/v3/charts/delete__chart__subscriptions_contextid_referenceid"
        },
        "parameters": [
          {
            "name": "ContextId",
            "in": "path",
            "required": true,
            "description": "Id of the streaming connection the subscription was made on.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ReferenceId",
            "in": "path",
            "required": true,
            "description": "The reference id you gave the subscription.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/chart/v3/charts/delete__chart__subscriptions_contextid_referenceid",
        "x-checked": "2026-10-12",
        "x-version": "v3",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/charts-unsubscribe"
      }
    },
    "/hist/v1/transactions": {
      "get": {
        "operationId": "hist-transactions",
        "summary": "Lists historical transactions, such as trades, within a date range for a client or account. Filter by transaction type, asset type or instrument.",
        "description": "Part of Saxo's Account History (hist) service group. Saxo lists 400 for an invalid date range, and 503. Saxo's page describes no required parameters explicitly; which combination of ClientKey or AccountKeys and dates the server insists on was not confirmed. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Closed positions and history"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/hist/v1/transactions/get__hist"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": false,
            "description": "Client to return history for, from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKeys",
            "in": "query",
            "required": false,
            "description": "Account keys to limit the result to.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FromDate",
            "in": "query",
            "required": false,
            "description": "Start of the period (date).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ToDate",
            "in": "query",
            "required": false,
            "description": "End of the period (date).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "TransactionType",
            "in": "query",
            "required": false,
            "description": "Transaction type to return.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AssetTypes",
            "in": "query",
            "required": false,
            "description": "Comma separated asset types.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Uics",
            "in": "query",
            "required": false,
            "description": "Comma separated Uics.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistTransactionsResponse"
                },
                "example": {
                  "Data": [
                    {
                      "AccountId": "MOCK-ACC-01",
                      "TradeId": "MOCK-TRADE-0001",
                      "TransactionType": "Trade",
                      "Date": "2000-01-01T00:00:00Z",
                      "Currency": "EUR",
                      "BookedAmount": -10,
                      "Instrument": {
                        "Symbol": "MOCK:xmock",
                        "Uic": 12345,
                        "AssetType": "Stock"
                      }
                    }
                  ],
                  "MaxRows": 1000
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/hist/v1/transactions/get__hist",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/hist-transactions"
      }
    },
    "/hist/v4/performance/summary": {
      "get": {
        "operationId": "performance-summary",
        "summary": "Returns aggregated trade results and performance figures, such as accumulated profit or loss and win fraction, for a client or account over a period.",
        "description": "Saxo lists Performance in two versions, v3 (/hist/v3/performance) and v4 (/hist/v4/performance); we list v4 as the newer one, but no deprecation notice for v3 was seen. Our page reading only confirmed AllTime as a StandardPeriod value; other values were not captured. FieldGroups example is a placeholder. TradeSummary sub fields not captured. Saxo also lists 404 and 503. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Closed positions and history"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/hist/v4/performance/get__hist__summary"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Client key; Saxo's page describes it as required.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "StandardPeriod",
            "in": "query",
            "required": false,
            "description": "Standard period, for example AllTime; use this or FromDate and ToDate.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FromDate",
            "in": "query",
            "required": false,
            "description": "Start date, as an alternative to StandardPeriod.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ToDate",
            "in": "query",
            "required": false,
            "description": "End date, as an alternative to StandardPeriod.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Limit to one account.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Metrics to return; Saxo encourages limiting them.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PerformanceSummaryResponse"
                },
                "example": {
                  "AccumulatedProfitLoss": 0,
                  "From": "2000-01-01",
                  "Thru": "2000-12-31",
                  "InceptionDay": "2000-01-01",
                  "LastTradeDay": "2000-12-29",
                  "TotalCashBalance": 1000,
                  "TotalOpenPositionsValue": 0,
                  "WinFraction": 0.5,
                  "TradeSummary": {}
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/hist/v4/performance/get__hist__summary",
        "x-checked": "2026-10-12",
        "x-version": "v4",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/performance-summary"
      }
    },
    "/port/v1/accounts": {
      "get": {
        "operationId": "accounts",
        "summary": "Lists the accounts owned by a client. With no ClientKey it answers for the logged in user's own client.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. Saxo lists the permission needed as Read.",
        "tags": [
          "Accounts and balances"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/get__port"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": false,
            "description": "Client whose accounts to list. Defaults to the logged in user's client.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "IncludeSubAccounts",
            "in": "query",
            "required": false,
            "description": "True to include sub accounts.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "$inlinecount",
            "in": "query",
            "required": false,
            "description": "Ask for a count of the entries in the collection to be included.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "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,
                  "__count": 1,
                  "Data": [
                    {
                      "AccountId": "MOCK-ACC-01",
                      "AccountKey": "MOCK-ACCOUNT-KEY",
                      "Active": true,
                      "ClientId": "MOCK-CLIENT",
                      "ClientKey": "MOCK-CLIENT-KEY",
                      "Currency": "GBP"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/get__port",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/accounts"
      }
    },
    "/port/v1/accounts/{AccountKey}": {
      "get": {
        "operationId": "account-by-key",
        "summary": "Details of one account: its identifiers, type, currency, whether it is active and what it is allowed to trade.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Saxo lists the permission needed as Read.",
        "tags": [
          "Accounts and balances"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/get__port__accountkey"
        },
        "parameters": [
          {
            "name": "AccountKey",
            "in": "path",
            "required": true,
            "description": "Key of the account, from the accounts list.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "AccountId": "MOCK-ACC-01",
                  "AccountKey": "MOCK-ACCOUNT-KEY",
                  "Active": true,
                  "ClientId": "MOCK-CLIENT",
                  "ClientKey": "MOCK-CLIENT-KEY",
                  "Currency": "GBP",
                  "CurrencyDecimals": 2,
                  "IsMarginTradingAllowed": true,
                  "IsTrialAccount": true,
                  "LegalAssetTypes": [
                    "FxSpot",
                    "Stock"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/get__port__accountkey",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/account-by-key"
      }
    },
    "/port/v1/accounts/me": {
      "get": {
        "operationId": "accounts-me",
        "summary": "Lists every account under the client the logged in user belongs to. Each account carries the AccountKey you pass to price, order and portfolio calls.",
        "description": "Paged feed with __count, __next, Data and MaxRows. 503 Service Unavailable is also listed. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Accounts and balances"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/get__port__me"
        },
        "parameters": [
          {
            "name": "$inlinecount",
            "in": "query",
            "required": false,
            "description": "Asks for a count of entries to be included in the response.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountsMeResponse"
                },
                "example": {
                  "__count": 1,
                  "Data": [
                    {
                      "AccountGroupKey": "MOCK-GROUP-KEY==",
                      "AccountId": "MOCK-ACC-01",
                      "AccountKey": "MOCK-ACCOUNT-KEY==",
                      "AccountType": "Normal",
                      "Active": true,
                      "ClientId": "MOCK-CLIENT-01",
                      "ClientKey": "MOCK-CLIENT-KEY==",
                      "Currency": "EUR",
                      "CurrencyDecimals": 2,
                      "IsMarginTradingAllowed": true,
                      "IsTrialAccount": true,
                      "LegalAssetTypes": [
                        "FxSpot",
                        "Stock"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/get__port__me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/accounts-me"
      }
    },
    "/port/v1/accounts/subscriptions": {
      "post": {
        "operationId": "accounts-subscribe",
        "summary": "Sets up a streaming subscription on a list of accounts and returns a first snapshot of them.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Accounts and balances"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/post__port__subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection: letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription, up to 50 characters. It cannot start with an underscore."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "AccountsRequest: which accounts to follow."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Shortest time in milliseconds between updates. It cannot go below the rate in your service agreement."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of the streamed updates: application/json or application/x-protobuf."
                  },
                  "ReplaceReferenceId": {
                    "type": "string",
                    "description": "Reference id of an existing subscription that this one replaces."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId"
                ]
              }
            }
          }
        },
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "Data": [
                      {
                        "AccountId": "MOCK-ACC-01",
                        "AccountKey": "MOCK-ACCOUNT-KEY",
                        "Currency": "GBP"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/post__port__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/accounts-subscribe"
      }
    },
    "/port/v1/balances": {
      "get": {
        "operationId": "balances",
        "summary": "Balance figures for a client, an account group or a single account: cash, cash available for trading, collateral and margin.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Saxo lists the permission needed as Read.",
        "tags": [
          "Accounts and balances"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/get__port"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the balances belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's balance.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's balance.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "CashBalance": 10000,
                  "CashAvailableForTrading": 9900,
                  "CashBlocked": 0,
                  "CollateralAvailable": 9900,
                  "ClosedPositionsCount": 0,
                  "ChangesScheduled": false
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/get__port",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/balances"
      }
    },
    "/port/v1/balances/marginoverview": {
      "get": {
        "operationId": "balances-marginoverview",
        "summary": "A margin overview for a client, an account group or a single account, returned as a list of groups.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The page lists one response field, Groups. Its inner fields were not read, so the mock shows an empty list. Saxo lists the permission needed as Read.",
        "tags": [
          "Accounts and balances"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/get__port__marginoverview"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the margin figures belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's margin.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's margin.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "Groups": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/get__port__marginoverview",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/balances-marginoverview"
      }
    },
    "/port/v1/balances/me": {
      "get": {
        "operationId": "balances-me",
        "summary": "Returns cash, margin and total value for the logged in client, rolled up in the client's currency.",
        "description": "No request parameters on the /me variant; GET /port/v1/balances takes ClientKey or AccountKey for a specific client or account. 503 Service Unavailable is also listed. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Accounts and balances"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/get__port__me"
        },
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BalancesMeResponse"
                },
                "example": {
                  "CalculationReliability": "Ok",
                  "CashAvailableForTrading": 1000,
                  "CashBalance": 1000,
                  "CashBlocked": 0,
                  "MarginAvailableForTrading": 1000,
                  "MarginUtilizationPct": 0,
                  "NetEquityForMargin": 1000,
                  "TotalValue": 1000,
                  "UnrealizedMarginProfitLoss": 0,
                  "Currency": "EUR",
                  "OpenPositionsCount": 0
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/get__port__me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/balances-me"
      }
    },
    "/port/v1/balances/subscriptions": {
      "post": {
        "operationId": "balances-subscribe",
        "summary": "Sets up a streaming subscription on a balance and returns a first snapshot of it.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Accounts and balances"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/post__port__subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection: letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription, up to 50 characters. It cannot start with an underscore."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "BalanceRequest: the client, account group or account whose balance to follow."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Shortest time in milliseconds between updates. It cannot go below the rate in your service agreement."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of the streamed updates: application/json or application/x-protobuf."
                  },
                  "ReplaceReferenceId": {
                    "type": "string",
                    "description": "Reference id of an existing subscription that this one replaces."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId"
                ]
              }
            }
          }
        },
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "CashBalance": 10000,
                    "CashAvailableForTrading": 9900
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/post__port__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/balances-subscribe"
      }
    },
    "/port/v1/clients/{ClientKey}": {
      "get": {
        "operationId": "client-by-key",
        "summary": "Details of one client by its key: identifiers, default account, default currency and the netting and trading settings that apply.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Saxo lists the permission needed as Read.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/clients/get__port__clientkey"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "path",
            "required": true,
            "description": "Key of the client.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "ClientId": "MOCK-CLIENT",
                  "ClientKey": "MOCK-CLIENT-KEY",
                  "DefaultAccountId": "MOCK-ACC-01",
                  "DefaultAccountKey": "MOCK-ACCOUNT-KEY",
                  "DefaultCurrency": "GBP",
                  "CurrencyDecimals": 2
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/clients/get__port__clientkey",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/client-by-key"
      }
    },
    "/port/v1/clients/me": {
      "get": {
        "operationId": "clients-me",
        "summary": "Returns the client the logged in user belongs to, including ClientKey, default account and default currency. You need the ClientKey for some history and performance calls.",
        "description": "No request parameters. Saxo's account details guide says to take the client key from /clients/me. 503 Service Unavailable is also listed. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/clients/get__port__me"
        },
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientsMeResponse"
                },
                "example": {
                  "ClientId": "MOCK-CLIENT-01",
                  "ClientKey": "MOCK-CLIENT-KEY==",
                  "Name": "Mock Client",
                  "DefaultAccountId": "MOCK-ACC-01",
                  "DefaultCurrency": "EUR",
                  "IsMarginTradingAllowed": false,
                  "LegalAssetTypes": [
                    "FxSpot",
                    "Stock"
                  ],
                  "PositionNettingMethod": "FIFO"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/clients/get__port__me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/clients-me"
      }
    },
    "/port/v1/closedpositions": {
      "get": {
        "operationId": "closedpositions",
        "summary": "Lists closed positions for a client, an account group or an account, chosen by query parameters.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. Saxo lists the permission needed as Read.",
        "tags": [
          "Closed positions and history"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/get__port"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the closed positions belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's closed positions.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's closed positions.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ClosedPositionId",
            "in": "query",
            "required": false,
            "description": "Return this one closed position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return. Default ClosedPosition.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "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,
                  "__count": 1,
                  "Data": [
                    {
                      "ClosedPositionUniqueId": "MOCK-CLOSED-0001",
                      "NetPositionId": "MOCK_Stock"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/get__port",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/closedpositions"
      }
    },
    "/port/v1/closedpositions/{ClosedPositionId}": {
      "get": {
        "operationId": "closedposition-by-id",
        "summary": "One closed position by its id.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The inner fields of ClosedPosition are not shown in the mock. Saxo lists the permission needed as Read.",
        "tags": [
          "Closed positions and history"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/get__port__closedpositionid"
        },
        "parameters": [
          {
            "name": "ClosedPositionId",
            "in": "path",
            "required": true,
            "description": "Id of the closed position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the closed position belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's closed position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's closed position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return. Default ClosedPosition.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "ClosedPositionUniqueId": "MOCK-CLOSED-0001",
                  "NetPositionId": "MOCK_Stock",
                  "ClosedPosition": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/get__port__closedpositionid",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/closedposition-by-id"
      }
    },
    "/port/v1/closedpositions/me": {
      "get": {
        "operationId": "closedpositions-me",
        "summary": "Lists positions closed for the logged in client, with open and close prices, times and realised profit or loss.",
        "description": "Paged feed. 503 Service Unavailable is also listed. The ClosedPosition sub fields in the mock are from Saxo's page. For older history Saxo's Account History group offers /hist/v3/historicalpositions. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Closed positions and history"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/get__port__me"
        },
        "parameters": [
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return; default ClosedPosition.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClosedpositionsMeResponse"
                },
                "example": {
                  "__count": 1,
                  "Data": [
                    {
                      "ClosedPosition": {
                        "AccountId": "MOCK-ACC-01",
                        "Amount": 10,
                        "AssetType": "Stock",
                        "BuyOrSell": "Buy",
                        "ClientId": "MOCK-CLIENT-01",
                        "ClosedProfitLoss": 2,
                        "ClosedProfitLossInBaseCurrency": 2,
                        "ClosingMethod": "Fifo",
                        "ClosingPositionId": "MOCK-POS-0002",
                        "ClosingPrice": 10.2,
                        "ExecutionTimeClose": "2000-01-02T09:00:00Z",
                        "ExecutionTimeOpen": "2000-01-01T09:00:00Z",
                        "OpeningPositionId": "MOCK-POS-0001",
                        "OpenPrice": 10,
                        "Uic": 12345
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/get__port__me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/closedpositions-me"
      }
    },
    "/port/v1/closedpositions/subscriptions": {
      "post": {
        "operationId": "closedpositions-subscribe",
        "summary": "Sets up a streaming subscription on a list of closed positions and returns a first snapshot of them.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Closed positions and history"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/post__port__subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return in the snapshot.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection: letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription, up to 50 characters. It cannot start with an underscore."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "ClosedPositionRequest: the client or account whose closed positions to follow."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Shortest time in milliseconds between updates. It cannot go below the rate in your service agreement."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of the streamed updates: application/json or application/x-protobuf."
                  },
                  "ReplaceReferenceId": {
                    "type": "string",
                    "description": "Reference id of an existing subscription that this one replaces."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId"
                ]
              }
            }
          }
        },
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "Data": [
                      {
                        "ClosedPositionUniqueId": "MOCK-CLOSED-0001"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/post__port__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/closedpositions-subscribe"
      }
    },
    "/port/v1/exposure/currency/me": {
      "get": {
        "operationId": "exposure-currency-me",
        "summary": "The net exposure in each currency for the logged in user's client.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/exposure/get__port__currency_me"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/exposure/get__port__currency_me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/exposure-currency-me"
      }
    },
    "/port/v1/exposure/fxspot/me": {
      "get": {
        "operationId": "exposure-fxspot-me",
        "summary": "The currency exposure that comes from FX spot positions alone, for the logged in user's client.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/exposure/get__port__fxspot_me"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/exposure/get__port__fxspot_me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/exposure-fxspot-me"
      }
    },
    "/port/v1/exposure/instruments/me": {
      "get": {
        "operationId": "exposure-instruments-me",
        "summary": "The net exposure in each instrument for the logged in user's client.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/exposure/get__port__instruments_me"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/exposure/get__port__instruments_me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/exposure-instruments-me"
      }
    },
    "/port/v1/netpositions": {
      "get": {
        "operationId": "netpositions",
        "summary": "Lists net positions for a client, an account group or an account, with filters by instrument. Each can carry its sub positions if you ask for them.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The page also lists ExpiryDate, PutCall, Strike, LowerBarrier, UpperBarrier and ValueDate, each used only to tell option or forward positions apart. Saxo lists the permission needed as Read.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/get__port"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the positions belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's positions.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's positions.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "NetPositionId",
            "in": "query",
            "required": false,
            "description": "Return this one net position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AssetType",
            "in": "query",
            "required": false,
            "description": "Filter by asset type.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Uic",
            "in": "query",
            "required": false,
            "description": "Filter by instrument, by its Uic.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return. Default NetPositionBase,NetPositionView. Add SubPositions for the positions inside each.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "StrategyGroupingEnabled",
            "in": "query",
            "required": false,
            "description": "True to group positions by strategy. Default false.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "WatchlistId",
            "in": "query",
            "required": false,
            "description": "Return only net positions in instruments on this watchlist.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "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,
                  "__count": 1,
                  "Data": [
                    {
                      "NetPositionId": "MOCK_Stock"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/get__port",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/netpositions"
      }
    },
    "/port/v1/netpositions/{NetPositionId}": {
      "get": {
        "operationId": "netposition-by-id",
        "summary": "One net position by its id, with static details in NetPositionBase and the live view in NetPositionView.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The inner fields of NetPositionBase and NetPositionView are not shown in the mock. Saxo lists the permission needed as Read.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/get__port__netpositionid"
        },
        "parameters": [
          {
            "name": "NetPositionId",
            "in": "path",
            "required": true,
            "description": "Id of the net position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the position belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return. Default NetPositionBase,NetPositionView.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "StrategyGroupingEnabled",
            "in": "query",
            "required": false,
            "description": "True to group positions by strategy. Default false.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "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,
                  "NetPositionId": "MOCK_Stock",
                  "NetPositionBase": {},
                  "NetPositionView": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/get__port__netpositionid",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/netposition-by-id"
      }
    },
    "/port/v1/netpositions/me": {
      "get": {
        "operationId": "netpositions-me",
        "summary": "Lists positions netted per instrument for the logged in client, with average open price and profit or loss. Add SubPositions to FieldGroups to include the underlying positions.",
        "description": "Paged feed. 503 Service Unavailable is also listed. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/get__port__me"
        },
        "parameters": [
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return; default NetPositionBase,NetPositionView.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetpositionsMeResponse"
                },
                "example": {
                  "__count": 1,
                  "Data": [
                    {
                      "NetPositionId": "MOCK_Stock",
                      "NetPositionBase": {
                        "AccountId": "MOCK-ACC-01",
                        "Amount": 10,
                        "AssetType": "Stock",
                        "CanBeClosed": true,
                        "ClientId": "MOCK-CLIENT-01",
                        "OpeningDirection": "Buy",
                        "SinglePositionStatus": "Open",
                        "Uic": 12345,
                        "ValueDate": "2000-01-03T00:00:00Z"
                      },
                      "NetPositionView": {
                        "AverageOpenPrice": 10,
                        "CalculationReliability": "Ok",
                        "CurrentPrice": 10,
                        "Exposure": 10,
                        "PositionCount": 1,
                        "ProfitLossOnTrade": 0,
                        "Status": "Open",
                        "TradeCostsTotal": 0
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/get__port__me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/netpositions-me"
      }
    },
    "/port/v1/netpositions/subscriptions": {
      "post": {
        "operationId": "netpositions-subscribe",
        "summary": "Sets up a streaming subscription on a list of net positions and returns a first snapshot of them.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/post__port__subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection: letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription, up to 50 characters. It cannot start with an underscore."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "NetPositionRequest: the client, account or net position to follow."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Shortest time in milliseconds between updates. It cannot go below the rate in your service agreement."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of the streamed updates: application/json or application/x-protobuf."
                  },
                  "ReplaceReferenceId": {
                    "type": "string",
                    "description": "Reference id of an existing subscription that this one replaces."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId"
                ]
              }
            }
          }
        },
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "Data": [
                      {
                        "NetPositionId": "MOCK_Stock"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/post__port__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/netpositions-subscribe"
      }
    },
    "/port/v1/orders": {
      "get": {
        "operationId": "orders",
        "summary": "Lists the open orders of a client or an account. By default only working orders are returned.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. Saxo lists the permission needed as Read.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/get__port"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the orders belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's orders.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's orders.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "OrderId",
            "in": "query",
            "required": false,
            "description": "Return this one order.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Status",
            "in": "query",
            "required": false,
            "description": "Which subset of open orders to return. Default: working orders only.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return. Empty by default, which leaves out display and formatting details.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "WatchlistId",
            "in": "query",
            "required": false,
            "description": "Return only orders in instruments on this watchlist.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/get__port",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/orders"
      }
    },
    "/port/v1/orders/{ClientKey}/{OrderId}": {
      "get": {
        "operationId": "order-by-id",
        "summary": "One open order of a client, looked up by the client's key and the order id.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The page lists the reply as a feed with the order in Data. It flags FieldGroups as required while describing it as optional: it is recorded as optional here. Saxo lists the permission needed as Read.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/get__port__clientkey_orderid"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "path",
            "required": true,
            "description": "Key of the client that owns the order.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "OrderId",
            "in": "path",
            "required": true,
            "description": "Id of the order.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which field groups to include. Default ExchangeInfo.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/get__port__clientkey_orderid",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/order-by-id"
      }
    },
    "/port/v1/orders/me": {
      "get": {
        "operationId": "orders-me",
        "summary": "Lists all open (working) orders across every account of the logged in client. Filled or cancelled orders do not appear here.",
        "description": "Paged feed. 503 Service Unavailable is also listed. The Status and FieldGroups example values are illustrative; check Saxo's OrderStatusFilter and OrderFieldGroup lists. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/get__port__me"
        },
        "parameters": [
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Field groups to return; Saxo gives ExchangeInfo as the default.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Status",
            "in": "query",
            "required": false,
            "description": "Returns only a subset of open orders by status.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "MultiLegOrderId",
            "in": "query",
            "required": false,
            "description": "Returns only multi leg orders with this common id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrdersMeResponse"
                },
                "example": {
                  "__count": 1,
                  "Data": [
                    {
                      "AccountId": "MOCK-ACC-01",
                      "OrderId": "MOCK-ORDER-0001",
                      "BuySell": "Buy",
                      "Amount": 10,
                      "Price": 9.5,
                      "CurrentPrice": 10,
                      "Status": "Working",
                      "OpenOrderType": "Limit",
                      "AssetType": "Stock",
                      "OrderTime": "2000-01-01T09:00:00Z",
                      "Uic": 12345
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/get__port__me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/orders-me"
      }
    },
    "/port/v1/orders/subscriptions": {
      "post": {
        "operationId": "orders-subscribe",
        "summary": "Sets up a streaming subscription on a list of open orders and returns a first snapshot of them.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. The page also lists the $inlinecount and $skiptoken query parameters. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/post__port__subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return in the snapshot.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip in the snapshot.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection: letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription, up to 50 characters. It cannot start with an underscore."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "OpenOrdersRequest: the client or account whose orders to follow."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Shortest time in milliseconds between updates. It cannot go below the rate in your service agreement."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of the streamed updates: application/json or application/x-protobuf."
                  },
                  "ReplaceReferenceId": {
                    "type": "string",
                    "description": "Reference id of an existing subscription that this one replaces."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId"
                ]
              }
            }
          }
        },
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "Data": []
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/post__port__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/orders-subscribe"
      }
    },
    "/port/v1/positions": {
      "get": {
        "operationId": "positions",
        "summary": "Lists open positions for a client, an account group, an account or one net position, chosen by query parameters.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. Saxo lists the permission needed as Read.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/get__port"
        },
        "parameters": [
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the positions belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's positions.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's positions.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "NetPositionId",
            "in": "query",
            "required": false,
            "description": "Return the positions that make up this net position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "PositionId",
            "in": "query",
            "required": false,
            "description": "Return this one position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return. Default PositionBase,PositionView.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "StrategyGroupingEnabled",
            "in": "query",
            "required": false,
            "description": "True to group positions by strategy.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "WatchlistId",
            "in": "query",
            "required": false,
            "description": "Return only positions in instruments on this watchlist.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "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,
                  "__count": 1,
                  "Data": [
                    {
                      "NetPositionId": "MOCK_Stock",
                      "PositionId": "MOCK-POS-0001"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/get__port",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/positions"
      }
    },
    "/port/v1/positions/{PositionId}": {
      "get": {
        "operationId": "position-by-id",
        "summary": "One open position by its id, with opening details in PositionBase and the live view in PositionView.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The inner fields of PositionBase and PositionView are not shown in the mock. Saxo lists the permission needed as Read.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/get__port__positionid"
        },
        "parameters": [
          {
            "name": "PositionId",
            "in": "path",
            "required": true,
            "description": "Id of the position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ClientKey",
            "in": "query",
            "required": true,
            "description": "Key of the client the position belong to. Read yours from GET /port/v1/clients/me.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account's position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountGroupKey",
            "in": "query",
            "required": false,
            "description": "Narrow the reply to one account group's position.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return. Default PositionBase,PositionView.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "StrategyGroupingEnabled",
            "in": "query",
            "required": false,
            "description": "True to group positions by strategy.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "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,
                  "NetPositionId": "MOCK_Stock",
                  "PositionId": "MOCK-POS-0001",
                  "PositionBase": {},
                  "PositionView": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/get__port__positionid",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/position-by-id"
      }
    },
    "/port/v1/positions/me": {
      "get": {
        "operationId": "positions-me",
        "summary": "Lists each open position for the logged in client, with opening details in PositionBase and live price and profit or loss in PositionView.",
        "description": "Paged feed. 503 Service Unavailable is also listed. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/get__port__me"
        },
        "parameters": [
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which data to return; default PositionBase,PositionView.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PositionsMeResponse"
                },
                "example": {
                  "__count": 1,
                  "Data": [
                    {
                      "NetPositionId": "MOCK_Stock",
                      "PositionId": "MOCK-POS-0001",
                      "PositionBase": {
                        "AccountId": "MOCK-ACC-01",
                        "Amount": 10,
                        "AssetType": "Stock",
                        "CanBeClosed": true,
                        "ClientId": "MOCK-CLIENT-01",
                        "ExecutionTimeOpen": "2000-01-01T09:00:00Z",
                        "OpenPrice": 10,
                        "Status": "Open",
                        "Uic": 12345,
                        "ValueDate": "2000-01-03T00:00:00Z"
                      },
                      "PositionView": {
                        "Ask": 10.02,
                        "Bid": 10,
                        "CalculationReliability": "Ok",
                        "CurrentPrice": 10,
                        "Exposure": 10,
                        "ExposureCurrency": "EUR",
                        "ProfitLossOnTrade": 0,
                        "TradeCostsTotal": 0
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/get__port__me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/positions-me"
      }
    },
    "/port/v1/positions/subscriptions": {
      "post": {
        "operationId": "positions-subscribe",
        "summary": "Sets up a streaming subscription on a list of positions and returns a first snapshot of them.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/post__port__subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return in the snapshot.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection: letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription, up to 50 characters. It cannot start with an underscore."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "PositionRequest: the client, account or position to follow."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Shortest time in milliseconds between updates. It cannot go below the rate in your service agreement."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of the streamed updates: application/json or application/x-protobuf."
                  },
                  "ReplaceReferenceId": {
                    "type": "string",
                    "description": "Reference id of an existing subscription that this one replaces."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId"
                ]
              }
            }
          }
        },
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "Data": [
                      {
                        "NetPositionId": "MOCK_Stock",
                        "PositionId": "MOCK-POS-0001"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/post__port__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/positions-subscribe"
      }
    },
    "/port/v1/users/me": {
      "get": {
        "operationId": "users-me",
        "summary": "Returns details about the logged in user, such as name, language, time zone and the ClientKey of the owning client. A good first call to check a token works.",
        "description": "No request parameters. Saxo lists the required permissions as Community (Read) and Personal (Read). 503 Service Unavailable is also listed. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/users/get__port__me"
        },
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsersMeResponse"
                },
                "example": {
                  "Active": true,
                  "ClientKey": "MOCK-CLIENT-KEY==",
                  "Culture": "en-GB",
                  "Language": "en",
                  "LastLoginStatus": "Successful",
                  "LastLoginTime": "2000-01-01T09:00:00Z",
                  "LegalAssetTypes": [
                    "FxSpot",
                    "Stock"
                  ],
                  "MarketDataViaOpenApiTermsAccepted": false,
                  "Name": "Mock User",
                  "TimeZoneId": 0,
                  "UserId": "MOCK-USER-01",
                  "UserKey": "MOCK-USER-KEY=="
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/users/get__port__me",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/users-me"
      }
    },
    "/port/v1/users/me/entitlements": {
      "get": {
        "operationId": "users-me-entitlements",
        "summary": "The market data entitlements held by the logged in user's client, listed per exchange.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/port/v1/users/get__port__me_entitlements"
        },
        "parameters": [
          {
            "name": "EntitlementFieldSet",
            "in": "query",
            "required": false,
            "description": "Which set of entitlement fields to return. The page gives no description.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/users/get__port__me_entitlements",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/users-me-entitlements"
      }
    },
    "/ref/v1/countries": {
      "get": {
        "operationId": "ref-countries",
        "summary": "The countries Saxo supports, as a list.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. The page documents no parameters. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/countries/get__ref"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/countries/get__ref",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/ref-countries"
      }
    },
    "/ref/v1/cultures": {
      "get": {
        "operationId": "ref-cultures",
        "summary": "The cultures Saxo supports for localising a user's preferences, as a list.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. The page documents no parameters. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/cultures/get__ref"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/cultures/get__ref",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/ref-cultures"
      }
    },
    "/ref/v1/currencies": {
      "get": {
        "operationId": "ref-currencies",
        "summary": "The currencies Saxo supports, as a list.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. The page documents no parameters. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/currencies/get__ref"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/currencies/get__ref",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/ref-currencies"
      }
    },
    "/ref/v1/currencypairs": {
      "get": {
        "operationId": "ref-currencypairs",
        "summary": "The currency pairs Saxo supports, as a list.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/currencypairs/get__ref"
        },
        "parameters": [
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "An account key. The page gives no description.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ClientKey",
            "in": "query",
            "required": false,
            "description": "A client key. The page gives no description.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/currencypairs/get__ref",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/ref-currencypairs"
      }
    },
    "/ref/v1/exchanges": {
      "get": {
        "operationId": "ref-exchanges",
        "summary": "Every exchange Saxo lists, with details of each such as its identifiers, country, currency and sessions.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/exchanges/get__ref"
        },
        "parameters": [
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "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,
                  "__count": 1,
                  "Data": [
                    {
                      "ExchangeId": "MOCKX",
                      "Name": "Mock Exchange",
                      "Mic": "MOCK",
                      "CountryCode": "GB",
                      "Currency": "GBP",
                      "AllDay": false
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/exchanges/get__ref",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/ref-exchanges"
      }
    },
    "/ref/v1/exchanges/{ExchangeId}": {
      "get": {
        "operationId": "ref-exchange-by-id",
        "summary": "Details of one exchange: its identifiers, country, currency, time zone and trading sessions.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/exchanges/get__ref__exchangeid"
        },
        "parameters": [
          {
            "name": "ExchangeId",
            "in": "path",
            "required": true,
            "description": "Id of the exchange.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "ExchangeId": "MOCKX",
                  "Name": "Mock Exchange",
                  "Mic": "MOCK",
                  "IsoMic": "MOCK",
                  "OperatingMic": "MOCK",
                  "CountryCode": "GB",
                  "Currency": "GBP",
                  "AllDay": false,
                  "TimeZone": 1,
                  "TimeZoneAbbreviation": "GMT",
                  "ExchangeSessions": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/exchanges/get__ref__exchangeid",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/ref-exchange-by-id"
      }
    },
    "/ref/v1/instruments": {
      "get": {
        "operationId": "instruments-search",
        "summary": "Searches Saxo's instrument universe by keyword, asset type, exchange or Uic and returns summary rows. Use it to find the Uic you need for prices, charts and orders.",
        "description": "Identifier in each row is the Uic. Saxo lists 400 error codes such as NoSearchCriteriaProvided and AssetTypesParseFailed. 503 Service Unavailable is also listed. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Instruments"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref"
        },
        "parameters": [
          {
            "name": "Keywords",
            "in": "query",
            "required": false,
            "description": "Space separated search terms.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AssetTypes",
            "in": "query",
            "required": false,
            "description": "Comma separated asset types, for example FxSpot,Stock.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ExchangeId",
            "in": "query",
            "required": false,
            "description": "Only instruments from this exchange.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Uics",
            "in": "query",
            "required": false,
            "description": "Comma separated Uics to limit the result to.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Applies the access permissions of this account to the search.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "IncludeNonTradable",
            "in": "query",
            "required": false,
            "description": "Include instruments that cannot be traded.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentsSearchResponse"
                },
                "example": {
                  "__next": "/openapi/ref/v1/instruments/?$top=1&$skip=1",
                  "Data": [
                    {
                      "AssetType": "Stock",
                      "Description": "Mock Instrument plc",
                      "ExchangeId": "MOCKEX",
                      "GroupId": 0,
                      "Identifier": 12345,
                      "IsKeywordMatch": true,
                      "PrimaryListing": 12345,
                      "SummaryType": "Instrument",
                      "Symbol": "MOCK:xmock",
                      "TradableAs": [
                        "Stock"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/instruments-search"
      }
    },
    "/ref/v1/instruments/details": {
      "get": {
        "operationId": "instruments-details-list",
        "summary": "Detailed reference data for a list of instruments in one call, chosen by Uic and asset type.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Instruments"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref__details"
        },
        "parameters": [
          {
            "name": "Uics",
            "in": "query",
            "required": false,
            "description": "Uics of the instruments to return, separated by commas.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AssetTypes",
            "in": "query",
            "required": false,
            "description": "One or more asset types, separated by commas, for example FxSpot,Stock.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "If given, the account's permission to reach each instrument is checked.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Extra groups of fields to return, separated by commas.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Tags",
            "in": "query",
            "required": false,
            "description": "Filter by display hint. Saxo says one tag at a time, on stocks, ETFs and ETCs.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "description": "Number of entries to skip from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "description": "Number of entries to return from the start of the collection.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref__details",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/instruments-details-list"
      }
    },
    "/ref/v1/instruments/details/{Uic}/{AssetType}": {
      "get": {
        "operationId": "instrument-details",
        "summary": "Returns full details for one instrument: symbol, currency, tick size, minimum trade size, exchange and the order types it supports.",
        "description": "Saxo lists 400 error codes InvalidAssetType and InvalidUserKey. 503 Service Unavailable is also listed. The FieldGroups example value is illustrative; check Saxo's InstrumentFieldGroup list. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Instruments"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref__details_uic_assettype"
        },
        "parameters": [
          {
            "name": "Uic",
            "in": "path",
            "required": true,
            "description": "Universal Instrument Code of the instrument.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "AssetType",
            "in": "path",
            "required": true,
            "description": "Asset type of the instrument, for example Stock or FxSpot.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Account to apply when resolving details.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Comma separated list of extra field groups to return.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentDetailsResponse"
                },
                "example": {
                  "Uic": 12345,
                  "AssetType": "Stock",
                  "Symbol": "MOCK:xmock",
                  "Description": "Mock Instrument plc",
                  "CurrencyCode": "EUR",
                  "IsTradable": true,
                  "MinimumTradeSize": 1,
                  "TickSize": 0.01,
                  "SupportedOrderTypes": [
                    "Market",
                    "Limit",
                    "Stop",
                    "StopLimit"
                  ],
                  "TradableAs": [
                    "Stock"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref__details_uic_assettype",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/instrument-details"
      }
    },
    "/ref/v1/instruments/tradingschedule/{Uic}/{AssetType}": {
      "get": {
        "operationId": "instrument-tradingschedule",
        "summary": "The trading schedule of one instrument: its sessions and the time zone they are given in.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Instruments"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref__tradingschedule_uic_assettype"
        },
        "parameters": [
          {
            "name": "Uic",
            "in": "path",
            "required": true,
            "description": "Uic of the instrument.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "AssetType",
            "in": "path",
            "required": true,
            "description": "Asset type of the instrument.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "Sessions": [],
                  "TimeZone": 1,
                  "TimeZoneAbbreviation": "GMT",
                  "TimeZoneOffset": "00:00:00"
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref__tradingschedule_uic_assettype",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/instrument-tradingschedule"
      }
    },
    "/ref/v1/languages": {
      "get": {
        "operationId": "ref-languages",
        "summary": "The languages Saxo supports, as a list.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. The page documents no parameters. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/languages/get__ref"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/languages/get__ref",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/ref-languages"
      }
    },
    "/ref/v1/standarddates/forwardtenor/{Uic}": {
      "get": {
        "operationId": "standarddates-forwardtenor",
        "summary": "The standard forward tenor dates for one instrument.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/standarddates/get__ref__forwardtenor_uic"
        },
        "parameters": [
          {
            "name": "Uic",
            "in": "path",
            "required": true,
            "description": "Uic of the instrument.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Account whose permission for short tenors is checked. Without it short tenors are left out.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/standarddates/get__ref__forwardtenor_uic",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/standarddates-forwardtenor"
      }
    },
    "/ref/v1/timezones": {
      "get": {
        "operationId": "ref-timezones",
        "summary": "The time zones Saxo supports, as a list.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. The page documents no parameters. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Reference data"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/ref/v1/timezones/get__ref"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/timezones/get__ref",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/ref-timezones"
      }
    },
    "/root/v1/diagnostics/get": {
      "get": {
        "operationId": "diagnostics-get",
        "summary": "A test call that does nothing but answer. Use it to check that a GET request reaches the gateway.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. No parameters and no response body are documented. The page lists no permission for it.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/root/v1/diagnostics/get__root__get"
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/root/v1/diagnostics/get__root__get",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/diagnostics-get"
      }
    },
    "/root/v1/features/availability": {
      "get": {
        "operationId": "features-availability",
        "summary": "Which features are currently available, as a list of feature names each with a flag. Saxo marks this call obsolete.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Saxo's page labels this endpoint Obsolete. Each entry carries Feature and Available. The reply is a list, so no mock object is shown. Saxo lists the permission needed as Read.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/root/v1/features/get__root__availability"
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/root/v1/features/get__root__availability",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/features-availability"
      }
    },
    "/root/v1/sessions/capabilities": {
      "get": {
        "operationId": "sessions-capabilities",
        "summary": "What the current session is allowed: its authentication level, data level and trade level.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply carries AuthenticationLevel, DataLevel and TradeLevel. The values each can take were not read, so no mock is shown. Saxo lists the permission needed as Read.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/root/v1/sessions/get__root__capabilities"
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/root/v1/sessions/get__root__capabilities",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/sessions-capabilities"
      },
      "put": {
        "operationId": "put-sessions-capabilities",
        "summary": "Change the trade level of the current session, which decides whether it can trade on quotes and receive real time data.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. No response body is documented: the page says the change is accepted and carried out afterwards. The values TradeLevel can take were not read. Saxo lists the permission needed as Read.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/root/v1/sessions/put__root__capabilities"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "TradeLevel": {
                    "type": "string",
                    "description": "The trade level to switch the session to."
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/root/v1/sessions/put__root__capabilities",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/put-sessions-capabilities"
      }
    },
    "/root/v1/sessions/events/subscriptions": {
      "post": {
        "operationId": "sessions-events-subscribe",
        "summary": "Sets up a streaming subscription on the session's capabilities, so a change in them is pushed to you.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. The page lists no request parameters for this call, so none is recorded beyond the headers. The inner fields of Snapshot were not read.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/root/v1/sessions/post__root__events_subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/root/v1/sessions/post__root__events_subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/sessions-events-subscribe"
      }
    },
    "/root/v1/user": {
      "get": {
        "operationId": "root-user",
        "summary": "The current user's id, client id, roles and the operations the token may perform. Saxo marks this call obsolete.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Saxo's page labels this endpoint Obsolete. Saxo lists the permission needed as Read.",
        "tags": [
          "Session and user"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/root/v1/user/get__root"
        },
        "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,
                  "UserId": 1000001,
                  "ClientId": 1000002,
                  "Roles": [],
                  "Operations": [],
                  "ElevatedAuthenticationOperations": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/root/v1/user/get__root",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/root-user"
      }
    },
    "/trade/v1/infoprices": {
      "get": {
        "operationId": "infoprices",
        "summary": "Returns a one off price snapshot (bid, ask, mid and delay) for one instrument. For a live feed Saxo offers price subscriptions over the streaming connection instead.",
        "description": "Saxo lists 404 IllegalInstrumentId and 400 codes such as InvalidUic and InstrumentNotAllowed. 503 Service Unavailable is also listed. Quote.DelayedByMinutes shows when prices are delayed. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Prices"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v1/infoprices/get__trade"
        },
        "parameters": [
          {
            "name": "Uic",
            "in": "query",
            "required": true,
            "description": "Unique id of the instrument.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "AssetType",
            "in": "query",
            "required": true,
            "description": "The instrument's asset type.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Account used to retrieve the price; Saxo says it is only required when the calling context is an authenticated user.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Amount",
            "in": "query",
            "required": false,
            "description": "Order size; defaults to the minimal order size for the instrument.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Comma separated field groups to return, for example Quote,PriceInfo.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InfopricesResponse"
                },
                "example": {
                  "AssetType": "Stock",
                  "Uic": 12345,
                  "DisplayAndFormat": {
                    "Currency": "EUR",
                    "Decimals": 2,
                    "Description": "Mock Instrument plc",
                    "Symbol": "MOCK:xmock"
                  },
                  "Quote": {
                    "Amount": 1,
                    "Ask": 10.02,
                    "Bid": 10,
                    "Mid": 10.01,
                    "DelayedByMinutes": 15,
                    "ErrorCode": "None",
                    "PriceTypeAsk": "Indicative",
                    "PriceTypeBid": "Indicative"
                  },
                  "PriceInfo": {
                    "High": 10.5,
                    "Low": 9.5,
                    "NetChange": 0.01,
                    "PercentChange": 0.1
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/infoprices/get__trade",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/infoprices"
      }
    },
    "/trade/v1/infoprices/list": {
      "get": {
        "operationId": "infoprices-list",
        "summary": "Info prices for several instruments of one asset type in a single call. Info prices are for display, not prices you can trade on.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The page also lists AmountType, ForwardDate, ForwardDateFarLeg, ForwardDateNearLeg, QuoteCurrency and ToOpenClose. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read, at the Restricted level.",
        "tags": [
          "Prices"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v1/infoprices/get__trade__list"
        },
        "parameters": [
          {
            "name": "Uics",
            "in": "query",
            "required": true,
            "description": "Uics of the instruments, separated by commas.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AssetType",
            "in": "query",
            "required": true,
            "description": "Asset type shared by the instruments.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": false,
            "description": "Account used to price the request. A default account is assumed if it is left out.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Amount",
            "in": "query",
            "required": false,
            "description": "Order size to price for. Defaults to the instrument's minimum order size.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "FieldGroups",
            "in": "query",
            "required": false,
            "description": "Which groups of fields to return. Default Quote.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "OrderAskPrice",
            "in": "query",
            "required": false,
            "description": "Ask price to work out the cost of buying at, in place of the market ask.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "OrderBidPrice",
            "in": "query",
            "required": false,
            "description": "Bid price to work out the cost of selling at, in place of the market bid.",
            "schema": {
              "type": "number"
            }
          }
        ],
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/infoprices/get__trade__list",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/infoprices-list"
      }
    },
    "/trade/v1/infoprices/subscriptions": {
      "post": {
        "operationId": "infoprices-subscribe",
        "summary": "Sets up a streaming subscription on info prices for a list of instruments and returns a first snapshot.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. Needs an open WebSocket connection with the same ContextId. Updates after the first snapshot arrive on that connection, not in the reply to this call. Remove the subscription when you are done with it. Saxo lists the permission needed as Subscribe, at the Restricted level.",
        "tags": [
          "Prices"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v1/infoprices/post__trade__subscriptions"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection: letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription, up to 50 characters. It cannot start with an underscore."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "InfoPriceListRequest: the instruments and asset type to follow."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Shortest time in milliseconds between updates. It cannot go below the rate in your service agreement."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of the streamed updates: application/json or application/x-protobuf."
                  },
                  "ReplaceReferenceId": {
                    "type": "string",
                    "description": "Reference id of an existing subscription that this one replaces."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId",
                  "Arguments"
                ]
              }
            }
          }
        },
        "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,
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "Data": []
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/infoprices/post__trade__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/infoprices-subscribe"
      }
    },
    "/trade/v1/messages": {
      "get": {
        "operationId": "trade-messages",
        "summary": "Trade messages for the current user that have not yet been marked as seen.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The reply is a paged feed: Data holds the entries and __next links to the next page. The fields of each entry were not read, so the mock shows an empty list. Saxo lists the permission needed as Read.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v1/messages/get__trade"
        },
        "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,
                  "__count": 0,
                  "Data": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/messages/get__trade",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/trade-messages"
      }
    },
    "/trade/v1/positions/{PositionId}": {
      "patch": {
        "operationId": "patch-position",
        "summary": "Change a property of an existing position. The documented use is clearing its force open flag so that it can net against an opposite position.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The page also lists ExerciseMethod, marked Obsolete. Saxo lists the permission needed as Write.",
        "tags": [
          "Positions"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v1/positions/patch__trade__positionid"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "PositionId",
            "in": "path",
            "required": true,
            "description": "Id of the position.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "AccountKey": {
                    "type": "string",
                    "description": "Key of the account the position is on."
                  },
                  "DisableForceOpen": {
                    "type": "boolean",
                    "description": "True to clear the force open flag, which lets the position net against an opposite one."
                  }
                },
                "required": [
                  "AccountKey"
                ]
              }
            }
          }
        },
        "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,
                  "PositionId": "MOCK-POS-0001"
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/positions/patch__trade__positionid",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/patch-position"
      }
    },
    "/trade/v1/prices/subscriptions": {
      "post": {
        "operationId": "prices-subscribe",
        "summary": "Sets up a streaming price subscription on one instrument and returns an initial snapshot. Updates then arrive on your WebSocket connection under the same ContextId and ReferenceId.",
        "description": "Needs an open WebSocket connection with the same ContextId (see Saxo's streaming guide). Saxo lists 409 on this call when the subscription limit is exceeded, and 404 for an unknown instrument. 503 Service Unavailable is also listed. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Prices"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v1/prices/post__trade__subscriptions"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContextId": {
                    "type": "string",
                    "description": "Id of your streaming connection; letters, digits, dash and underscore, up to 50 characters."
                  },
                  "ReferenceId": {
                    "type": "string",
                    "description": "Your own id for this subscription; up to 50 characters."
                  },
                  "Arguments": {
                    "type": "object",
                    "description": "PriceRequest: AccountKey, Uic, AssetType, Amount and optional FieldGroups."
                  },
                  "RefreshRate": {
                    "type": "integer",
                    "description": "Optional minimum time in milliseconds between updates."
                  },
                  "Format": {
                    "type": "string",
                    "description": "Media type of updates, application/json or application/x-protobuf."
                  }
                },
                "required": [
                  "ContextId",
                  "ReferenceId",
                  "Arguments"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricesSubscribeResponse"
                },
                "example": {
                  "ContextId": "MOCKCONTEXT01",
                  "ReferenceId": "MOCKREF01",
                  "RefreshRate": 1000,
                  "InactivityTimeout": 30,
                  "Format": "application/json",
                  "State": "Active",
                  "Snapshot": {
                    "Uic": 12345,
                    "AssetType": "Stock",
                    "LastUpdated": "2000-01-01T09:00:00Z",
                    "Quote": {
                      "Bid": 10,
                      "Ask": 10.02,
                      "Mid": 10.01
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/prices/post__trade__subscriptions",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/prices-subscribe"
      }
    },
    "/trade/v1/prices/subscriptions/{ContextId}/{ReferenceId}": {
      "delete": {
        "operationId": "prices-unsubscribe",
        "summary": "Removes one price subscription from the current streaming session, identified by its context and reference ids.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. No response body is documented. The page's parameter table lists ReferenceId only: ContextId is recorded from the path. Saxo lists the permission needed as Subscribe.",
        "tags": [
          "Prices"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v1/prices/delete__trade__subscriptions_contextid_referenceid"
        },
        "parameters": [
          {
            "name": "ContextId",
            "in": "path",
            "required": true,
            "description": "Id of the streaming connection the subscription was made on.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ReferenceId",
            "in": "path",
            "required": true,
            "description": "The reference id you gave the subscription.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/prices/delete__trade__subscriptions_contextid_referenceid",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/prices-unsubscribe"
      }
    },
    "/trade/v2/orders": {
      "delete": {
        "operationId": "cancel-orders-by-instrument",
        "summary": "Cancels every order in one instrument on one account in a single call.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The one response field listed is ErrorInfo, so no mock is shown. Saxo lists the permission needed as Write.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/delete__trade"
        },
        "parameters": [
          {
            "name": "AccountKey",
            "in": "query",
            "required": true,
            "description": "Account the orders are on.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AssetType",
            "in": "query",
            "required": true,
            "description": "Asset type of the instrument.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Uic",
            "in": "query",
            "required": true,
            "description": "Uic of the instrument.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/delete__trade",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/cancel-orders-by-instrument"
      },
      "patch": {
        "operationId": "change-order",
        "summary": "Changes one or more existing open orders, for example the price, size or duration. The order is identified by OrderId in the body, not in the path.",
        "description": "As with placing, check the response for OrderId and ErrorInfo. Saxo's page also lists 204 and 503. The 1 order a second limit and the 15 second duplicate rule on Saxo's rate limiting page cover order operations generally. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/patch__trade"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "AccountKey": {
                    "type": "string",
                    "description": "Account the order belongs to."
                  },
                  "OrderId": {
                    "type": "string",
                    "description": "Id of the order to change."
                  },
                  "AssetType": {
                    "type": "string",
                    "description": "The instrument's asset type; Saxo says it is used for validation."
                  },
                  "OrderType": {
                    "type": "string",
                    "description": "The order type."
                  },
                  "OrderPrice": {
                    "type": "number",
                    "description": "New order price; optional for market orders."
                  },
                  "Amount": {
                    "type": "number",
                    "description": "Order size."
                  },
                  "OrderDuration": {
                    "type": "object",
                    "description": "The order duration."
                  }
                },
                "required": [
                  "AccountKey",
                  "OrderId",
                  "AssetType",
                  "OrderType"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChangeOrderResponse"
                },
                "example": {
                  "OrderId": "MOCK-ORDER-0001",
                  "Orders": [
                    {
                      "OrderId": "MOCK-ORDER-0001"
                    }
                  ]
                }
              }
            }
          },
          "201": {
            "description": "Success. Example is mock data, not real account data."
          },
          "204": {
            "description": "No Content. Example is mock data, not real account data."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/patch__trade",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/change-order"
      },
      "post": {
        "operationId": "place-order",
        "summary": "Places a new order, optionally with related limit and stop orders as children. A 200 reply can still carry ErrorInfo, so check for OrderId before treating the order as placed.",
        "description": "Saxo's page lists 200 with the advice to check OrderId and ErrorInfo, 400 codes such as InsufficientCash, MarketClosed and WouldExceedMargin, and 503. Default limit of 1 order a second per session. Saxo's order placement return codes page also describes a TradeNotCompleted case when broker confirmation takes more than 60 seconds. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field. The x-request-id header is not on this call's reference page: its source is Saxo's rate limiting page (https://www.developer.saxo/openapi/learn/rate-limiting), read on 12 Oct 2026.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/post__trade"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": false,
            "description": "Optional unique id per request. Not listed on the endpoint page itself. It is on Saxo's rate limiting page (https://www.developer.saxo/openapi/learn/rate-limiting, read 12 Oct 2026): identical order operations on the same account within a rolling 15 second window are rejected with 409 Conflict unless each request carries a different x-request-id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "AccountKey": {
                    "type": "string",
                    "description": "Account to place the order on, from GET /port/v1/accounts/me."
                  },
                  "Uic": {
                    "type": "integer",
                    "description": "Unique id of the instrument."
                  },
                  "AssetType": {
                    "type": "string",
                    "description": "The instrument's asset type."
                  },
                  "BuySell": {
                    "type": "string",
                    "description": "Buy or Sell."
                  },
                  "Amount": {
                    "type": "number",
                    "description": "Order size."
                  },
                  "OrderType": {
                    "type": "string",
                    "description": "Placeable order type, for example Market, Limit or Stop."
                  },
                  "OrderPrice": {
                    "type": "number",
                    "description": "Order price; optional for market orders."
                  },
                  "OrderDuration": {
                    "type": "object",
                    "description": "Duration, for example DurationType DayOrder or GoodTillCancel."
                  },
                  "ManualOrder": {
                    "type": "boolean",
                    "description": "Whether a person placed the order (true) or an automated system did (false)."
                  },
                  "ExternalReference": {
                    "type": "string",
                    "description": "Your own reference, up to 50 characters."
                  },
                  "Orders": {
                    "type": "array",
                    "description": "Optional related take profit and stop orders, or an OCO order."
                  }
                },
                "required": [
                  "AccountKey",
                  "Uic",
                  "AssetType",
                  "BuySell",
                  "Amount",
                  "OrderType",
                  "OrderDuration"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlaceOrderResponse"
                },
                "example": {
                  "OrderId": "MOCK-ORDER-0001",
                  "Orders": [
                    {
                      "OrderId": "MOCK-ORDER-0001"
                    }
                  ]
                }
              }
            }
          },
          "201": {
            "description": "Success. Example is mock data, not real account data."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/post__trade",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/place-order"
      }
    },
    "/trade/v2/orders/{OrderIds}": {
      "delete": {
        "operationId": "cancel-orders",
        "summary": "Cancels one or more open orders. Pass a comma separated list of order ids in the path and the AccountKey as a query parameter.",
        "description": "Each item in Orders can carry ErrorInfo (ErrorCode and Message) if that cancel failed; Saxo lists 400 codes such as OrderNotFound and TooLateToCancelOrder, plus 503. A separate DELETE /trade/v2/orders cancels all orders for one instrument and account. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/delete__trade__orderids"
        },
        "parameters": [
          {
            "name": "OrderIds",
            "in": "path",
            "required": true,
            "description": "Comma separated order ids to cancel.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "AccountKey",
            "in": "query",
            "required": true,
            "description": "Account the orders belong to.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelOrdersResponse"
                },
                "example": {
                  "Orders": [
                    {
                      "OrderId": "MOCK-ORDER-0001"
                    }
                  ]
                }
              }
            }
          },
          "201": {
            "description": "Success. Example is mock data, not real account data."
          },
          "204": {
            "description": "No Content. Example is mock data, not real account data."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/delete__trade__orderids",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/cancel-orders"
      }
    },
    "/trade/v2/orders/multileg": {
      "post": {
        "operationId": "place-multileg-order",
        "summary": "Places a combined options order whose legs must all fill together, for strategies such as straddles and calendar spreads. Saxo says only some options exchanges support it.",
        "description": "Read on Saxo's own reference page on 12 Oct 2026: method, path, parameters and response fields. The page also lists TraderId. Saxo lists the permission needed as Write.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/post__trade__multileg"
        },
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Legs": {
                    "type": "array",
                    "description": "The legs of the strategy, as a list of orders to be filled together."
                  },
                  "OrderType": {
                    "type": "string",
                    "description": "Order type."
                  },
                  "AccountKey": {
                    "type": "string",
                    "description": "Account to place the order on."
                  },
                  "OrderPrice": {
                    "type": "number",
                    "description": "Price of the order. Optional for a market order."
                  },
                  "OrderDuration": {
                    "type": "object",
                    "description": "How long the order stays open."
                  },
                  "ManualOrder": {
                    "type": "boolean",
                    "description": "Whether a person placed the order by hand or a program placed it."
                  },
                  "ExternalReference": {
                    "type": "string",
                    "description": "Your own reference for the order, up to 50 characters."
                  }
                },
                "required": [
                  "Legs",
                  "OrderType"
                ]
              }
            }
          }
        },
        "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": "MOCK-ORDER-0002",
                  "Orders": []
                }
              }
            }
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/post__trade__multileg",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/place-multileg-order"
      }
    },
    "/trade/v2/orders/precheck": {
      "post": {
        "operationId": "precheck-order",
        "summary": "Checks an order without placing it and returns the expected costs, cash required and margin impact. Useful to show a cost preview before the user confirms.",
        "description": "Does not place an order. Saxo's page advises checking ErrorInfo on a 200 reply and also lists 503. ManualOrder does not appear in this call's parameter table. Saxo's parameter table for this call has no required or optional column; the required flags here are our reading of Saxo's descriptions and example request, not markers on Saxo's page. Method, path and parameter names were re-read on Saxo's reference page for this call on 12 Oct 2026 and agree with this record. That page does not mark which parameters are required, so the required flags here were not re-checked, and the mock reply was not compared field by field.",
        "tags": [
          "Orders"
        ],
        "externalDocs": {
          "description": "Saxo OpenAPI's own reference for this operation",
          "url": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/post__trade__precheck"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "AccountKey": {
                    "type": "string",
                    "description": "Account to place the order on, from GET /port/v1/accounts/me."
                  },
                  "Uic": {
                    "type": "integer",
                    "description": "Unique id of the instrument."
                  },
                  "AssetType": {
                    "type": "string",
                    "description": "The instrument's asset type."
                  },
                  "BuySell": {
                    "type": "string",
                    "description": "Buy or Sell."
                  },
                  "Amount": {
                    "type": "number",
                    "description": "Order size."
                  },
                  "OrderType": {
                    "type": "string",
                    "description": "Placeable order type, for example Market, Limit or Stop."
                  },
                  "OrderPrice": {
                    "type": "number",
                    "description": "Order price; optional for market orders."
                  },
                  "OrderDuration": {
                    "type": "object",
                    "description": "Duration, for example DurationType DayOrder or GoodTillCancel."
                  },
                  "ExternalReference": {
                    "type": "string",
                    "description": "Your own reference, up to 50 characters."
                  },
                  "Orders": {
                    "type": "array",
                    "description": "Optional related take profit and stop orders, or an OCO order."
                  },
                  "FieldGroups": {
                    "type": "array",
                    "description": "Extra results to return, for example Costs and MarginImpactBuySell."
                  }
                },
                "required": [
                  "AccountKey",
                  "Uic",
                  "AssetType",
                  "BuySell",
                  "Amount",
                  "OrderType",
                  "OrderDuration"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrecheckOrderResponse"
                },
                "example": {
                  "PreCheckResult": "Ok",
                  "EstimatedCashRequired": 10,
                  "EstimatedCashRequiredCurrency": "EUR",
                  "Cost": {
                    "Commission": 1,
                    "ExchangeFee": 0,
                    "StampDuty": 0
                  },
                  "EstimatedTotalCost": 1,
                  "EstimatedTotalCostInAccountCurrency": 1,
                  "InstrumentToAccountConversionRate": 1,
                  "MarginImpactBuySell": {
                    "Currency": "EUR",
                    "InitialMarginBuy": 0,
                    "MaintenanceMarginBuy": 0
                  }
                }
              }
            }
          },
          "201": {
            "description": "Success. Example is mock data, not real account data."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "Authorization": []
          }
        ],
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/post__trade__precheck",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-required-unconfirmed": true,
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/saxo/endpoints/precheck-order"
      }
    }
  },
  "components": {
    "schemas": {
      "ChartsResponse": {
        "type": "object",
        "properties": {
          "ChartInfo": {
            "type": "object",
            "properties": {
              "DelayedByMinutes": {
                "type": "integer"
              },
              "ExchangeId": {
                "type": "string"
              },
              "FirstSampleTime": {
                "type": "string"
              },
              "Horizon": {
                "type": "integer"
              }
            }
          },
          "Data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "Time": {
                  "type": "string"
                },
                "Open": {
                  "type": "number"
                },
                "High": {
                  "type": "number"
                },
                "Low": {
                  "type": "number"
                },
                "Close": {
                  "type": "number"
                },
                "Volume": {
                  "type": "integer"
                }
              }
            }
          },
          "DataVersion": {
            "type": "integer"
          },
          "DisplayAndFormat": {
            "type": "object",
            "properties": {
              "Currency": {
                "type": "string"
              },
              "Decimals": {
                "type": "integer"
              },
              "Description": {
                "type": "string"
              },
              "Format": {
                "type": "string"
              },
              "Symbol": {
                "type": "string"
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/chart/v3/charts/get__chart",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "Error": {
        "type": "object",
        "description": "Error body. Shape varies by endpoint; check the linked reference page.",
        "properties": {
          "ErrorCode": {
            "type": "string"
          },
          "Message": {
            "type": "string"
          },
          "ModelState": {
            "type": "object"
          }
        },
        "x-source": "https://www.developer.saxo/openapi/learn/openapi-request-response",
        "x-verified": false,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo publishes no single error schema page. This shape is this site's reading of the ErrorInfo objects shown on the order operation pages, not a vendor schema."
      },
      "HistTransactionsResponse": {
        "type": "object",
        "properties": {
          "Data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "AccountId": {
                  "type": "string"
                },
                "TradeId": {
                  "type": "string"
                },
                "TransactionType": {
                  "type": "string"
                },
                "Date": {
                  "type": "string"
                },
                "Currency": {
                  "type": "string"
                },
                "BookedAmount": {
                  "type": "number"
                },
                "Instrument": {
                  "type": "object",
                  "properties": {
                    "Symbol": {
                      "type": "string"
                    },
                    "Uic": {
                      "type": "integer"
                    },
                    "AssetType": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "MaxRows": {
            "type": "integer"
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/hist/v1/transactions/get__hist",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "PerformanceSummaryResponse": {
        "type": "object",
        "properties": {
          "AccumulatedProfitLoss": {
            "type": "number"
          },
          "From": {
            "type": "string"
          },
          "Thru": {
            "type": "string"
          },
          "InceptionDay": {
            "type": "string"
          },
          "LastTradeDay": {
            "type": "string"
          },
          "TotalCashBalance": {
            "type": "number"
          },
          "TotalOpenPositionsValue": {
            "type": "number"
          },
          "WinFraction": {
            "type": "number"
          },
          "TradeSummary": {
            "type": "object",
            "properties": {}
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/hist/v4/performance/get__hist__summary",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "AccountsMeResponse": {
        "type": "object",
        "properties": {
          "__count": {
            "type": "integer"
          },
          "Data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "AccountGroupKey": {
                  "type": "string"
                },
                "AccountId": {
                  "type": "string"
                },
                "AccountKey": {
                  "type": "string"
                },
                "AccountType": {
                  "type": "string"
                },
                "Active": {
                  "type": "boolean"
                },
                "ClientId": {
                  "type": "string"
                },
                "ClientKey": {
                  "type": "string"
                },
                "Currency": {
                  "type": "string"
                },
                "CurrencyDecimals": {
                  "type": "integer"
                },
                "IsMarginTradingAllowed": {
                  "type": "boolean"
                },
                "IsTrialAccount": {
                  "type": "boolean"
                },
                "LegalAssetTypes": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/accounts/get__port__me",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "BalancesMeResponse": {
        "type": "object",
        "properties": {
          "CalculationReliability": {
            "type": "string"
          },
          "CashAvailableForTrading": {
            "type": "number"
          },
          "CashBalance": {
            "type": "number"
          },
          "CashBlocked": {
            "type": "integer"
          },
          "MarginAvailableForTrading": {
            "type": "number"
          },
          "MarginUtilizationPct": {
            "type": "number"
          },
          "NetEquityForMargin": {
            "type": "number"
          },
          "TotalValue": {
            "type": "number"
          },
          "UnrealizedMarginProfitLoss": {
            "type": "number"
          },
          "Currency": {
            "type": "string"
          },
          "OpenPositionsCount": {
            "type": "integer"
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/balances/get__port__me",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "ClientsMeResponse": {
        "type": "object",
        "properties": {
          "ClientId": {
            "type": "string"
          },
          "ClientKey": {
            "type": "string"
          },
          "Name": {
            "type": "string"
          },
          "DefaultAccountId": {
            "type": "string"
          },
          "DefaultCurrency": {
            "type": "string"
          },
          "IsMarginTradingAllowed": {
            "type": "boolean"
          },
          "LegalAssetTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "PositionNettingMethod": {
            "type": "string"
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/clients/get__port__me",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "ClosedpositionsMeResponse": {
        "type": "object",
        "properties": {
          "__count": {
            "type": "integer"
          },
          "Data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "ClosedPosition": {
                  "type": "object",
                  "properties": {
                    "AccountId": {
                      "type": "string"
                    },
                    "Amount": {
                      "type": "integer"
                    },
                    "AssetType": {
                      "type": "string"
                    },
                    "BuyOrSell": {
                      "type": "string"
                    },
                    "ClientId": {
                      "type": "string"
                    },
                    "ClosedProfitLoss": {
                      "type": "number"
                    },
                    "ClosedProfitLossInBaseCurrency": {
                      "type": "number"
                    },
                    "ClosingMethod": {
                      "type": "string"
                    },
                    "ClosingPositionId": {
                      "type": "string"
                    },
                    "ClosingPrice": {
                      "type": "number"
                    },
                    "ExecutionTimeClose": {
                      "type": "string"
                    },
                    "ExecutionTimeOpen": {
                      "type": "string"
                    },
                    "OpeningPositionId": {
                      "type": "string"
                    },
                    "OpenPrice": {
                      "type": "number"
                    },
                    "Uic": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/closedpositions/get__port__me",
        "x-verified": false,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page. Opened 4 Oct 2026 and the response envelope fields were confirmed; the per-item field list was not read back, so the item properties here are this site's reading and not yet the vendor's."
      },
      "NetpositionsMeResponse": {
        "type": "object",
        "properties": {
          "__count": {
            "type": "integer"
          },
          "Data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "NetPositionId": {
                  "type": "string"
                },
                "NetPositionBase": {
                  "type": "object",
                  "properties": {
                    "AccountId": {
                      "type": "string"
                    },
                    "Amount": {
                      "type": "integer"
                    },
                    "AssetType": {
                      "type": "string"
                    },
                    "CanBeClosed": {
                      "type": "boolean"
                    },
                    "ClientId": {
                      "type": "string"
                    },
                    "OpeningDirection": {
                      "type": "string"
                    },
                    "SinglePositionStatus": {
                      "type": "string"
                    },
                    "Uic": {
                      "type": "integer"
                    },
                    "ValueDate": {
                      "type": "string"
                    }
                  }
                },
                "NetPositionView": {
                  "type": "object",
                  "properties": {
                    "AverageOpenPrice": {
                      "type": "number"
                    },
                    "CalculationReliability": {
                      "type": "string"
                    },
                    "CurrentPrice": {
                      "type": "number"
                    },
                    "Exposure": {
                      "type": "integer"
                    },
                    "PositionCount": {
                      "type": "integer"
                    },
                    "ProfitLossOnTrade": {
                      "type": "number"
                    },
                    "Status": {
                      "type": "string"
                    },
                    "TradeCostsTotal": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/netpositions/get__port__me",
        "x-verified": false,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page. Opened 4 Oct 2026 and the response envelope fields were confirmed; the per-item field list was not read back, so the item properties here are this site's reading and not yet the vendor's."
      },
      "OrdersMeResponse": {
        "type": "object",
        "properties": {
          "__count": {
            "type": "integer"
          },
          "Data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "AccountId": {
                  "type": "string"
                },
                "OrderId": {
                  "type": "string"
                },
                "BuySell": {
                  "type": "string"
                },
                "Amount": {
                  "type": "integer"
                },
                "Price": {
                  "type": "number"
                },
                "CurrentPrice": {
                  "type": "number"
                },
                "Status": {
                  "type": "string"
                },
                "OpenOrderType": {
                  "type": "string"
                },
                "AssetType": {
                  "type": "string"
                },
                "OrderTime": {
                  "type": "string"
                },
                "Uic": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/orders/get__port__me",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "PositionsMeResponse": {
        "type": "object",
        "properties": {
          "__count": {
            "type": "integer"
          },
          "Data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "NetPositionId": {
                  "type": "string"
                },
                "PositionId": {
                  "type": "string"
                },
                "PositionBase": {
                  "type": "object",
                  "properties": {
                    "AccountId": {
                      "type": "string"
                    },
                    "Amount": {
                      "type": "integer"
                    },
                    "AssetType": {
                      "type": "string"
                    },
                    "CanBeClosed": {
                      "type": "boolean"
                    },
                    "ClientId": {
                      "type": "string"
                    },
                    "ExecutionTimeOpen": {
                      "type": "string"
                    },
                    "OpenPrice": {
                      "type": "number"
                    },
                    "Status": {
                      "type": "string"
                    },
                    "Uic": {
                      "type": "integer"
                    },
                    "ValueDate": {
                      "type": "string"
                    }
                  }
                },
                "PositionView": {
                  "type": "object",
                  "properties": {
                    "Ask": {
                      "type": "number"
                    },
                    "Bid": {
                      "type": "number"
                    },
                    "CalculationReliability": {
                      "type": "string"
                    },
                    "CurrentPrice": {
                      "type": "number"
                    },
                    "Exposure": {
                      "type": "integer"
                    },
                    "ExposureCurrency": {
                      "type": "string"
                    },
                    "ProfitLossOnTrade": {
                      "type": "number"
                    },
                    "TradeCostsTotal": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/positions/get__port__me",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "UsersMeResponse": {
        "type": "object",
        "properties": {
          "Active": {
            "type": "boolean"
          },
          "ClientKey": {
            "type": "string"
          },
          "Culture": {
            "type": "string"
          },
          "Language": {
            "type": "string"
          },
          "LastLoginStatus": {
            "type": "string"
          },
          "LastLoginTime": {
            "type": "string"
          },
          "LegalAssetTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "MarketDataViaOpenApiTermsAccepted": {
            "type": "boolean"
          },
          "Name": {
            "type": "string"
          },
          "TimeZoneId": {
            "type": "integer"
          },
          "UserId": {
            "type": "string"
          },
          "UserKey": {
            "type": "string"
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/port/v1/users/get__port__me",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "InstrumentsSearchResponse": {
        "type": "object",
        "properties": {
          "__next": {
            "type": "string"
          },
          "Data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "AssetType": {
                  "type": "string"
                },
                "Description": {
                  "type": "string"
                },
                "ExchangeId": {
                  "type": "string"
                },
                "GroupId": {
                  "type": "integer"
                },
                "Identifier": {
                  "type": "integer"
                },
                "IsKeywordMatch": {
                  "type": "boolean"
                },
                "PrimaryListing": {
                  "type": "integer"
                },
                "SummaryType": {
                  "type": "string"
                },
                "Symbol": {
                  "type": "string"
                },
                "TradableAs": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "InstrumentDetailsResponse": {
        "type": "object",
        "properties": {
          "Uic": {
            "type": "integer"
          },
          "AssetType": {
            "type": "string"
          },
          "Symbol": {
            "type": "string"
          },
          "Description": {
            "type": "string"
          },
          "CurrencyCode": {
            "type": "string"
          },
          "IsTradable": {
            "type": "boolean"
          },
          "MinimumTradeSize": {
            "type": "integer"
          },
          "TickSize": {
            "type": "number"
          },
          "SupportedOrderTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "TradableAs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/ref/v1/instruments/get__ref__details_uic_assettype",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "InfopricesResponse": {
        "type": "object",
        "properties": {
          "AssetType": {
            "type": "string"
          },
          "Uic": {
            "type": "integer"
          },
          "DisplayAndFormat": {
            "type": "object",
            "properties": {
              "Currency": {
                "type": "string"
              },
              "Decimals": {
                "type": "integer"
              },
              "Description": {
                "type": "string"
              },
              "Symbol": {
                "type": "string"
              }
            }
          },
          "Quote": {
            "type": "object",
            "properties": {
              "Amount": {
                "type": "integer"
              },
              "Ask": {
                "type": "number"
              },
              "Bid": {
                "type": "number"
              },
              "Mid": {
                "type": "number"
              },
              "DelayedByMinutes": {
                "type": "integer"
              },
              "ErrorCode": {
                "type": "string"
              },
              "PriceTypeAsk": {
                "type": "string"
              },
              "PriceTypeBid": {
                "type": "string"
              }
            }
          },
          "PriceInfo": {
            "type": "object",
            "properties": {
              "High": {
                "type": "number"
              },
              "Low": {
                "type": "number"
              },
              "NetChange": {
                "type": "number"
              },
              "PercentChange": {
                "type": "number"
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/infoprices/get__trade__list",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "PricesSubscribeResponse": {
        "type": "object",
        "properties": {
          "ContextId": {
            "type": "string"
          },
          "ReferenceId": {
            "type": "string"
          },
          "RefreshRate": {
            "type": "integer"
          },
          "InactivityTimeout": {
            "type": "integer"
          },
          "Format": {
            "type": "string"
          },
          "State": {
            "type": "string"
          },
          "Snapshot": {
            "type": "object",
            "properties": {
              "Uic": {
                "type": "integer"
              },
              "AssetType": {
                "type": "string"
              },
              "LastUpdated": {
                "type": "string"
              },
              "Quote": {
                "type": "object",
                "properties": {
                  "Bid": {
                    "type": "number"
                  },
                  "Ask": {
                    "type": "number"
                  },
                  "Mid": {
                    "type": "number"
                  }
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v1/prices/post__trade__subscriptions",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "ChangeOrderResponse": {
        "type": "object",
        "properties": {
          "OrderId": {
            "type": "string"
          },
          "Orders": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "OrderId": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/patch__trade",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "PlaceOrderResponse": {
        "type": "object",
        "properties": {
          "OrderId": {
            "type": "string"
          },
          "Orders": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "OrderId": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/post__trade",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "CancelOrdersResponse": {
        "type": "object",
        "properties": {
          "Orders": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "OrderId": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/delete__trade__orderids",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      },
      "PrecheckOrderResponse": {
        "type": "object",
        "properties": {
          "PreCheckResult": {
            "type": "string"
          },
          "EstimatedCashRequired": {
            "type": "number"
          },
          "EstimatedCashRequiredCurrency": {
            "type": "string"
          },
          "Cost": {
            "type": "object",
            "properties": {
              "Commission": {
                "type": "number"
              },
              "ExchangeFee": {
                "type": "number"
              },
              "StampDuty": {
                "type": "number"
              }
            }
          },
          "EstimatedTotalCost": {
            "type": "number"
          },
          "EstimatedTotalCostInAccountCurrency": {
            "type": "number"
          },
          "InstrumentToAccountConversionRate": {
            "type": "integer"
          },
          "MarginImpactBuySell": {
            "type": "object",
            "properties": {
              "Currency": {
                "type": "string"
              },
              "InitialMarginBuy": {
                "type": "number"
              },
              "MaintenanceMarginBuy": {
                "type": "number"
              }
            }
          }
        },
        "x-source": "https://www.developer.saxo/openapi/referencedocs/trade/v2/orders/post__trade__precheck",
        "x-verified": true,
        "x-checked": "2026-10-04",
        "x-source-note": "Saxo's own per-operation reference page, which publishes Request Parameters and Response Parameters tables. Opened and read 4 Oct 2026."
      }
    },
    "responses": {
      "BadRequest": {
        "description": "400 Bad Request. Saxo returns 400 when the request is malformed or breaks a business rule; the body carries an ErrorCode and Message, such as InvalidModelState, that says what to fix.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Unauthorised": {
        "description": "401 Unauthorised. Saxo rejected the request because the Authorization header was missing or contained an invalid security token.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "429 Too Many Requests. Saxo returns 429 when a request quota is exceeded, such as 120 requests a minute per session per service group or 1 order a second; the X-RateLimit headers show when the quota resets. Header names follow the X-RateLimit-<dimension>-Limit, -Remaining and -Reset pattern, with the dimension segment left as a placeholder: Saxo's rate limiting page does not list the concrete dimension names, and we will not invent them. Source: https://www.developer.saxo/openapi/learn/rate-limiting (checked 2026-09-18).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        },
        "headers": {
          "X-RateLimit-<dimension>-Limit": {
            "description": "Quota for the dimension named in the header. The dimension segment is a placeholder, not a real header name. Source: https://www.developer.saxo/openapi/learn/rate-limiting (checked 2026-09-18).",
            "schema": {
              "type": "string"
            }
          },
          "X-RateLimit-<dimension>-Remaining": {
            "description": "Requests left against that dimension. The dimension segment is a placeholder, not a real header name. Source: https://www.developer.saxo/openapi/learn/rate-limiting (checked 2026-09-18).",
            "schema": {
              "type": "string"
            }
          },
          "X-RateLimit-<dimension>-Reset": {
            "description": "When that dimension resets. The dimension segment is a placeholder, not a real header name. Source: https://www.developer.saxo/openapi/learn/rate-limiting (checked 2026-09-18).",
            "schema": {
              "type": "string"
            }
          }
        }
      },
      "ServiceUnavailable": {
        "description": "503 Service Unavailable. Saxo lists 503 Service Unavailable in the response codes table on this endpoint's reference page: the service is temporarily unavailable, so retry later with a growing delay rather than at once.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "NotFound": {
        "description": "404 Not Found. Saxo returns 404 when the resource does not exist, for example an unknown instrument on an info price request.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Conflict": {
        "description": "409 Conflict. Saxo rejects an identical order operation repeated within a rolling 15 second window with 409; send a different x-request-id header on each request if the repeat is intended.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    },
    "securitySchemes": {
      "Authorization": {
        "type": "apiKey",
        "in": "header",
        "name": "Authorization",
        "description": "A header the Saxo OpenAPI endpoint records list on requests. Read its value from your own environment. Never paste it into a web page or a chat."
      }
    }
  }
}