
<!doctype html>
<html>
  <head>
    <link href="images/favicon-32x32-942411f0.png" rel="icon" type="image/png" />
    <meta charset="utf-8">
    <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
        <meta
            name="description"
            content="Documentation for the Extended API"
        >
    <title>API Documentation</title>

    <style media="screen">
      .highlight table td { padding: 5px; }
.highlight table pre { margin: 0; }
.highlight .gh {
  color: #999999;
}
.highlight .sr {
  color: #f6aa11;
}
.highlight .go {
  color: #888888;
}
.highlight .gp {
  color: #555555;
}
.highlight .gs {
}
.highlight .gu {
  color: #aaaaaa;
}
.highlight .nb {
  color: #f6aa11;
}
.highlight .cm {
  color: #75715e;
}
.highlight .cp {
  color: #75715e;
}
.highlight .c1 {
  color: #75715e;
}
.highlight .cs {
  color: #75715e;
}
.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf {
  color: #75715e;
}
.highlight .err {
  color: #960050;
}
.highlight .gr {
  color: #960050;
}
.highlight .gt {
  color: #960050;
}
.highlight .gd {
  color: #49483e;
}
.highlight .gi {
  color: #49483e;
}
.highlight .ge {
  color: #49483e;
}
.highlight .kc {
  color: #66d9ef;
}
.highlight .kd {
  color: #66d9ef;
}
.highlight .kr {
  color: #66d9ef;
}
.highlight .no {
  color: #66d9ef;
}
.highlight .kt {
  color: #66d9ef;
}
.highlight .mf {
  color: #ae81ff;
}
.highlight .mh {
  color: #ae81ff;
}
.highlight .il {
  color: #ae81ff;
}
.highlight .mi {
  color: #ae81ff;
}
.highlight .mo {
  color: #ae81ff;
}
.highlight .m, .highlight .mb, .highlight .mx {
  color: #ae81ff;
}
.highlight .sc {
  color: #ae81ff;
}
.highlight .se {
  color: #ae81ff;
}
.highlight .ss {
  color: #ae81ff;
}
.highlight .sd {
  color: #e6db74;
}
.highlight .s2 {
  color: #e6db74;
}
.highlight .sb {
  color: #e6db74;
}
.highlight .sh {
  color: #e6db74;
}
.highlight .si {
  color: #e6db74;
}
.highlight .sx {
  color: #e6db74;
}
.highlight .s1 {
  color: #e6db74;
}
.highlight .s, .highlight .sa, .highlight .dl {
  color: #e6db74;
}
.highlight .na {
  color: #a6e22e;
}
.highlight .nc {
  color: #a6e22e;
}
.highlight .nd {
  color: #a6e22e;
}
.highlight .ne {
  color: #a6e22e;
}
.highlight .nf, .highlight .fm {
  color: #a6e22e;
}
.highlight .vc {
  color: #ffffff;
}
.highlight .nn {
  color: #ffffff;
}
.highlight .ni {
  color: #ffffff;
}
.highlight .bp {
  color: #ffffff;
}
.highlight .vg {
  color: #ffffff;
}
.highlight .vi {
  color: #ffffff;
}
.highlight .nv, .highlight .vm {
  color: #ffffff;
}
.highlight .w {
  color: #ffffff;
}
.highlight {
  color: #ffffff;
}
.highlight .n, .highlight .py, .highlight .nx {
  color: #ffffff;
}
.highlight .nl {
  color: #f92672;
}
.highlight .ow {
  color: #f92672;
}
.highlight .nt {
  color: #f92672;
}
.highlight .k, .highlight .kv {
  color: #f92672;
}
.highlight .kn {
  color: #f92672;
}
.highlight .kp {
  color: #f92672;
}
.highlight .o {
  color: #f92672;
}
    </style>
    <style media="print">
      * {
        -webkit-transition:none!important;
        transition:none!important;
      }
      .highlight table td { padding: 5px; }
.highlight table pre { margin: 0; }
.highlight, .highlight .w {
  color: #586e75;
}
.highlight .err {
  color: #002b36;
  background-color: #dc322f;
}
.highlight .c, .highlight .ch, .highlight .cd, .highlight .cm, .highlight .cpf, .highlight .c1, .highlight .cs {
  color: #657b83;
}
.highlight .cp {
  color: #b58900;
}
.highlight .nt {
  color: #b58900;
}
.highlight .o, .highlight .ow {
  color: #93a1a1;
}
.highlight .p, .highlight .pi {
  color: #93a1a1;
}
.highlight .gi {
  color: #859900;
}
.highlight .gd {
  color: #dc322f;
}
.highlight .gh {
  color: #268bd2;
  background-color: #002b36;
  font-weight: bold;
}
.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {
  color: #6c71c4;
}
.highlight .kc {
  color: #cb4b16;
}
.highlight .kt {
  color: #cb4b16;
}
.highlight .kd {
  color: #cb4b16;
}
.highlight .s, .highlight .sb, .highlight .sc, .highlight .dl, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {
  color: #859900;
}
.highlight .sa {
  color: #6c71c4;
}
.highlight .sr {
  color: #2aa198;
}
.highlight .si {
  color: #d33682;
}
.highlight .se {
  color: #d33682;
}
.highlight .nn {
  color: #b58900;
}
.highlight .nc {
  color: #b58900;
}
.highlight .no {
  color: #b58900;
}
.highlight .na {
  color: #268bd2;
}
.highlight .m, .highlight .mb, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mx {
  color: #859900;
}
.highlight .ss {
  color: #859900;
}
    </style>
    <link href="stylesheets/screen-53017ba4.css" rel="stylesheet" media="screen" />
    <link href="stylesheets/print-966d6edc.css" rel="stylesheet" media="print" />
      <script src="javascripts/all-024da600.js"></script>

    <script>
      $(function() { setupCodeCopy(); });
    </script>
  </head>

  <body class="index" data-languages="[&quot;json&quot;]">
    <a href="#" id="nav-button">
      <span>
        NAV
        <img src="images/navbar-cad8cdcb.png" alt="" />
      </span>
    </a>
    <div class="toc-wrapper">
      <img src="images/logo-e44bffd5.svg" class="logo" alt="" />
        <div class="lang-selector">
              <a href="#" data-language-name="json">json</a>
        </div>
        <div class="search">
          <input type="text" class="search" id="input-search" placeholder="Search">
        </div>
        <ul class="search-results"></ul>
      <ul id="toc" class="toc-list-h1">
          <li>
            <a href="#extended-api-documentation" class="toc-h1 toc-link" data-title="Extended API Documentation">Extended API Documentation</a>
          </li>
          <li>
            <a href="#introduction" class="toc-h1 toc-link" data-title="Introduction">Introduction</a>
              <ul class="toc-list-h2">
                  <li>
                    <a href="#python-sdk" class="toc-h2 toc-link" data-title="Python SDK">Python SDK</a>
                  </li>
                  <li>
                    <a href="#mainnet" class="toc-h2 toc-link" data-title="Mainnet">Mainnet</a>
                  </li>
                  <li>
                    <a href="#testnet" class="toc-h2 toc-link" data-title="Testnet">Testnet</a>
                  </li>
                  <li>
                    <a href="#allowed-http-verbs" class="toc-h2 toc-link" data-title="Allowed HTTP Verbs">Allowed HTTP Verbs</a>
                  </li>
                  <li>
                    <a href="#authentication" class="toc-h2 toc-link" data-title="Authentication">Authentication</a>
                  </li>
                  <li>
                    <a href="#server-location" class="toc-h2 toc-link" data-title="Server Location">Server Location</a>
                  </li>
                  <li>
                    <a href="#rate-limits" class="toc-h2 toc-link" data-title="Rate Limits">Rate Limits</a>
                  </li>
                  <li>
                    <a href="#pagination" class="toc-h2 toc-link" data-title="Pagination">Pagination</a>
                  </li>
              </ul>
          </li>
          <li>
            <a href="#rfq-markets" class="toc-h1 toc-link" data-title="RFQ markets">RFQ markets</a>
              <ul class="toc-list-h2">
                  <li>
                    <a href="#the-indicative-and-the-real-order-book" class="toc-h2 toc-link" data-title="The indicative and the real order book">The indicative and the real order book</a>
                  </li>
                  <li>
                    <a href="#placing-orders-on-rfq-markets" class="toc-h2 toc-link" data-title="Placing orders on RFQ markets">Placing orders on RFQ markets</a>
                  </li>
                  <li>
                    <a href="#picking-up-user-orders-as-a-market-maker" class="toc-h2 toc-link" data-title="Picking up user orders as a market maker">Picking up user orders as a market maker</a>
                  </li>
                  <li>
                    <a href="#migration-of-order-book-based-market-to-rfq" class="toc-h2 toc-link" data-title="Migration of order book based market to RFQ">Migration of order book based market to RFQ</a>
                  </li>
              </ul>
          </li>
          <li>
            <a href="#spot-trading" class="toc-h1 toc-link" data-title="Spot Trading">Spot Trading</a>
              <ul class="toc-list-h2">
                  <li>
                    <a href="#identifying-spot-markets-and-assets" class="toc-h2 toc-link" data-title="Identifying spot markets and assets">Identifying spot markets and assets</a>
                  </li>
                  <li>
                    <a href="#account-model" class="toc-h2 toc-link" data-title="Account model">Account model</a>
                  </li>
                  <li>
                    <a href="#what-is-the-same-as-perpetuals" class="toc-h2 toc-link" data-title="What is the same as perpetuals">What is the same as perpetuals</a>
                  </li>
              </ul>
          </li>
          <li>
            <a href="#public-rest-api" class="toc-h1 toc-link" data-title="Public REST-API">Public REST-API</a>
              <ul class="toc-list-h2">
                  <li>
                    <a href="#get-markets" class="toc-h2 toc-link" data-title="Get markets">Get markets</a>
                  </li>
                  <li>
                    <a href="#get-assets" class="toc-h2 toc-link" data-title="Get assets">Get assets</a>
                  </li>
                  <li>
                    <a href="#get-asset-index-price" class="toc-h2 toc-link" data-title="Get asset index price">Get asset index price</a>
                  </li>
                  <li>
                    <a href="#get-market-statistics" class="toc-h2 toc-link" data-title="Get market statistics">Get market statistics</a>
                  </li>
                  <li>
                    <a href="#get-market-order-book" class="toc-h2 toc-link" data-title="Get market order book">Get market order book</a>
                  </li>
                  <li>
                    <a href="#get-market-last-trades" class="toc-h2 toc-link" data-title="Get market last trades">Get market last trades</a>
                  </li>
                  <li>
                    <a href="#get-candles-history" class="toc-h2 toc-link" data-title="Get candles history">Get candles history</a>
                  </li>
                  <li>
                    <a href="#get-funding-rates-history" class="toc-h2 toc-link" data-title="Get funding rates history">Get funding rates history</a>
                  </li>
                  <li>
                    <a href="#get-open-interest-history" class="toc-h2 toc-link" data-title="Get open interest history">Get open interest history</a>
                  </li>
                  <li>
                    <a href="#get-builder-dashboard" class="toc-h2 toc-link" data-title="Get builder dashboard">Get builder dashboard</a>
                  </li>
                  <li>
                    <a href="#get-builder-trades" class="toc-h2 toc-link" data-title="Get builder trades">Get builder trades</a>
                  </li>
              </ul>
          </li>
          <li>
            <a href="#private-rest-api" class="toc-h1 toc-link" data-title="Private REST-API">Private REST-API</a>
              <ul class="toc-list-h2">
                  <li>
                    <a href="#account" class="toc-h2 toc-link" data-title="Account">Account</a>
                  </li>
                  <li>
                    <a href="#get-account-details" class="toc-h2 toc-link" data-title="Get account details">Get account details</a>
                  </li>
                  <li>
                    <a href="#get-sub-accounts" class="toc-h2 toc-link" data-title="Get sub-accounts">Get sub-accounts</a>
                  </li>
                  <li>
                    <a href="#get-balance" class="toc-h2 toc-link" data-title="Get balance">Get balance</a>
                  </li>
                  <li>
                    <a href="#get-spot-balances" class="toc-h2 toc-link" data-title="Get spot balances">Get spot balances</a>
                  </li>
                  <li>
                    <a href="#get-deposits-withdrawals-transfers-history" class="toc-h2 toc-link" data-title="Get deposits, withdrawals, transfers history">Get deposits, withdrawals, transfers history</a>
                  </li>
                  <li>
                    <a href="#get-positions" class="toc-h2 toc-link" data-title="Get positions">Get positions</a>
                  </li>
                  <li>
                    <a href="#get-positions-history" class="toc-h2 toc-link" data-title="Get positions history">Get positions history</a>
                  </li>
                  <li>
                    <a href="#get-open-orders" class="toc-h2 toc-link" data-title="Get open orders">Get open orders</a>
                  </li>
                  <li>
                    <a href="#get-orders-history" class="toc-h2 toc-link" data-title="Get orders history">Get orders history</a>
                  </li>
                  <li>
                    <a href="#get-order-by-id" class="toc-h2 toc-link" data-title="Get order by id">Get order by id</a>
                  </li>
                  <li>
                    <a href="#get-orders-by-external-id" class="toc-h2 toc-link" data-title="Get orders by external id">Get orders by external id</a>
                  </li>
                  <li>
                    <a href="#get-trades" class="toc-h2 toc-link" data-title="Get trades">Get trades</a>
                  </li>
                  <li>
                    <a href="#get-funding-payments" class="toc-h2 toc-link" data-title="Get funding payments">Get funding payments</a>
                  </li>
                  <li>
                    <a href="#get-rebates" class="toc-h2 toc-link" data-title="Get rebates">Get rebates</a>
                  </li>
                  <li>
                    <a href="#get-current-leverage" class="toc-h2 toc-link" data-title="Get current leverage">Get current leverage</a>
                  </li>
                  <li>
                    <a href="#update-leverage" class="toc-h2 toc-link" data-title="Update leverage">Update leverage</a>
                  </li>
                  <li>
                    <a href="#get-fees" class="toc-h2 toc-link" data-title="Get fees">Get fees</a>
                  </li>
                  <li>
                    <a href="#order-management" class="toc-h2 toc-link" data-title="Order management">Order management</a>
                  </li>
                  <li>
                    <a href="#create-or-edit-order" class="toc-h2 toc-link" data-title="Create or edit order">Create or edit order</a>
                  </li>
                  <li>
                    <a href="#cancel-order-by-id" class="toc-h2 toc-link" data-title="Cancel order by ID">Cancel order by ID</a>
                  </li>
                  <li>
                    <a href="#cancel-order-by-external-id" class="toc-h2 toc-link" data-title="Cancel order by external id">Cancel order by external id</a>
                  </li>
                  <li>
                    <a href="#mass-cancel" class="toc-h2 toc-link" data-title="Mass Cancel">Mass Cancel</a>
                  </li>
                  <li>
                    <a href="#mass-auto-cancel-dead-man-39-s-switch" class="toc-h2 toc-link" data-title="Mass auto-cancel (dead man's switch)">Mass auto-cancel (dead man's switch)</a>
                  </li>
                  <li>
                    <a href="#bridge-config" class="toc-h2 toc-link" data-title="Bridge Config">Bridge Config</a>
                  </li>
                  <li>
                    <a href="#get-bridge-quote" class="toc-h2 toc-link" data-title="Get bridge quote">Get bridge quote</a>
                  </li>
                  <li>
                    <a href="#commit-quote" class="toc-h2 toc-link" data-title="Commit quote">Commit quote</a>
                  </li>
                  <li>
                    <a href="#deposits" class="toc-h2 toc-link" data-title="Deposits">Deposits</a>
                  </li>
                  <li>
                    <a href="#withdrawals" class="toc-h2 toc-link" data-title="Withdrawals">Withdrawals</a>
                  </li>
                  <li>
                    <a href="#create-transfer" class="toc-h2 toc-link" data-title="Create transfer">Create transfer</a>
                  </li>
                  <li>
                    <a href="#referrals" class="toc-h2 toc-link" data-title="Referrals">Referrals</a>
                  </li>
                  <li>
                    <a href="#get-affiliate-data" class="toc-h2 toc-link" data-title="Get affiliate data">Get affiliate data</a>
                  </li>
                  <li>
                    <a href="#get-referral-status" class="toc-h2 toc-link" data-title="Get referral status">Get referral status</a>
                  </li>
                  <li>
                    <a href="#get-referral-links" class="toc-h2 toc-link" data-title="Get referral links">Get referral links</a>
                  </li>
                  <li>
                    <a href="#get-referral-dashboard" class="toc-h2 toc-link" data-title="Get referral dashboard">Get referral dashboard</a>
                  </li>
                  <li>
                    <a href="#use-referral-link" class="toc-h2 toc-link" data-title="Use referral link">Use referral link</a>
                  </li>
                  <li>
                    <a href="#create-referral-link-code" class="toc-h2 toc-link" data-title="Create referral link code">Create referral link code</a>
                  </li>
                  <li>
                    <a href="#update-referral-link-code" class="toc-h2 toc-link" data-title="Update referral link code">Update referral link code</a>
                  </li>
                  <li>
                    <a href="#points" class="toc-h2 toc-link" data-title="Points">Points</a>
                  </li>
                  <li>
                    <a href="#get-earned-points" class="toc-h2 toc-link" data-title="Get Earned Points">Get Earned Points</a>
                  </li>
                  <li>
                    <a href="#get-points-leaderboard-stats" class="toc-h2 toc-link" data-title="Get points leaderboard stats">Get points leaderboard stats</a>
                  </li>
                  <li>
                    <a href="#points-league-levels" class="toc-h2 toc-link" data-title="Points league levels">Points league levels</a>
                  </li>
                  <li>
                    <a href="#get-account-equity-history" class="toc-h2 toc-link" data-title="Get account equity history">Get account equity history</a>
                  </li>
                  <li>
                    <a href="#get-account-pnl-history" class="toc-h2 toc-link" data-title="Get account PnL history">Get account PnL history</a>
                  </li>
                  <li>
                    <a href="#get-account-pnl-percentage-history" class="toc-h2 toc-link" data-title="Get account PnL percentage history">Get account PnL percentage history</a>
                  </li>
                  <li>
                    <a href="#get-cumulative-account-pnl-history" class="toc-h2 toc-link" data-title="Get cumulative account PnL history">Get cumulative account PnL history</a>
                  </li>
                  <li>
                    <a href="#get-cumulative-account-pnl-percentage-history" class="toc-h2 toc-link" data-title="Get cumulative account PnL percentage history">Get cumulative account PnL percentage history</a>
                  </li>
                  <li>
                    <a href="#get-account-vault-equity-history" class="toc-h2 toc-link" data-title="Get account vault equity history">Get account vault equity history</a>
                  </li>
                  <li>
                    <a href="#get-account-max-drawdown-history" class="toc-h2 toc-link" data-title="Get account max drawdown history">Get account max drawdown history</a>
                  </li>
                  <li>
                    <a href="#get-account-funding-chart" class="toc-h2 toc-link" data-title="Get account funding chart">Get account funding chart</a>
                  </li>
                  <li>
                    <a href="#get-account-portfolio-summary" class="toc-h2 toc-link" data-title="Get account portfolio summary">Get account portfolio summary</a>
                  </li>
                  <li>
                    <a href="#get-account-health" class="toc-h2 toc-link" data-title="Get account health">Get account health</a>
                  </li>
                  <li>
                    <a href="#get-account-performance" class="toc-h2 toc-link" data-title="Get account performance">Get account performance</a>
                  </li>
                  <li>
                    <a href="#get-account-funding-stats" class="toc-h2 toc-link" data-title="Get account funding stats">Get account funding stats</a>
                  </li>
                  <li>
                    <a href="#get-account-funding-history" class="toc-h2 toc-link" data-title="Get account funding history">Get account funding history</a>
                  </li>
                  <li>
                    <a href="#get-vault-performance" class="toc-h2 toc-link" data-title="Get Vault performance">Get Vault performance</a>
                  </li>
                  <li>
                    <a href="#get-vault-summary" class="toc-h2 toc-link" data-title="Get Vault summary">Get Vault summary</a>
                  </li>
              </ul>
          </li>
          <li>
            <a href="#interest" class="toc-h1 toc-link" data-title="Interest">Interest</a>
              <ul class="toc-list-h2">
                  <li>
                    <a href="#get-interest-rate-curves-history" class="toc-h2 toc-link" data-title="Get interest rate curves history">Get interest rate curves history</a>
                  </li>
                  <li>
                    <a href="#get-latest-interest-rate-curve" class="toc-h2 toc-link" data-title="Get latest interest rate curve">Get latest interest rate curve</a>
                  </li>
                  <li>
                    <a href="#get-interest-key-metrics" class="toc-h2 toc-link" data-title="Get interest key metrics">Get interest key metrics</a>
                  </li>
                  <li>
                    <a href="#get-interest-daily-metrics" class="toc-h2 toc-link" data-title="Get interest daily metrics">Get interest daily metrics</a>
                  </li>
                  <li>
                    <a href="#get-interest-payment-chart" class="toc-h2 toc-link" data-title="Get interest payment chart">Get interest payment chart</a>
                  </li>
                  <li>
                    <a href="#get-interest-payments-history" class="toc-h2 toc-link" data-title="Get interest payments history">Get interest payments history</a>
                  </li>
              </ul>
          </li>
          <li>
            <a href="#public-websocket-streams" class="toc-h1 toc-link" data-title="Public WebSocket streams">Public WebSocket streams</a>
              <ul class="toc-list-h2">
                  <li>
                    <a href="#order-book-stream" class="toc-h2 toc-link" data-title="Order book stream">Order book stream</a>
                  </li>
                  <li>
                    <a href="#trades-stream" class="toc-h2 toc-link" data-title="Trades stream">Trades stream</a>
                  </li>
                  <li>
                    <a href="#funding-rates-stream" class="toc-h2 toc-link" data-title="Funding rates stream">Funding rates stream</a>
                  </li>
                  <li>
                    <a href="#candles-stream" class="toc-h2 toc-link" data-title="Candles stream">Candles stream</a>
                  </li>
                  <li>
                    <a href="#mark-price-stream" class="toc-h2 toc-link" data-title="Mark price stream">Mark price stream</a>
                  </li>
                  <li>
                    <a href="#index-price-stream" class="toc-h2 toc-link" data-title="Index price stream">Index price stream</a>
                  </li>
              </ul>
          </li>
          <li>
            <a href="#private-websocket-streams" class="toc-h1 toc-link" data-title="Private WebSocket streams">Private WebSocket streams</a>
              <ul class="toc-list-h2">
                  <li>
                    <a href="#account-updates-stream" class="toc-h2 toc-link" data-title="Account updates stream">Account updates stream</a>
                  </li>
              </ul>
          </li>
          <li>
            <a href="#error-responses" class="toc-h1 toc-link" data-title="Error responses">Error responses</a>
          </li>
      </ul>
    </div>
    <div class="page-wrapper">
      <div class="dark-box"></div>
      <div class="content">
        <h1 id='extended-api-documentation'>Extended API Documentation</h1>
<p>By using the Extended API, you agree to the <a href="https://docs.extended.exchange/extended-resources/legal/terms-of-use">Extended Terms</a> &amp; <a href="https://docs.extended.exchange/extended-resources/legal/privacy-policy">Privacy Policy</a>. If you do not agree to the foregoing terms, do not use the Extended API.</p>
<h1 id='introduction'>Introduction</h1>
<aside class="notice">
This documentation will be updated regularly to reflect new functionality and user feedback.
</aside>

<p>Welcome to the Extended API Documentation. This guide is designed to help traders and developers integrate with our perpetuals DEX.</p>

<p>Extended is a perpetuals DEX built on Arc. All user funds are fully self-custodied in on-chain smart contracts, with no custodial access by Extended.</p>

<p>The protocol minimises reliance on trust by enforcing trading logic, transaction validation, and core risk checks directly on-chain. All transactions are validated and settled on Arc, ensuring transparent and verifiable state transitions. Extended’s smart contracts are open source (<a href="https://explorer.arc.io/address/0x4445AACaCC2dE174B77b37Eb27529ce0B36bC580">link</a>).</p>

<p>At the protocol level, every transaction involving collateral movement, including trades, funding payments, transfers, liquidations, and ADLs, triggers a full on-chain health check. This ensures that all participating accounts remain solvent or become more solvent as a result of the transaction, with system solvency continuously enforced on-chain.</p>

<p>For more on Extended’s vision and architecture, refer to the <a href="https://docs.extended.exchange/">docs</a>.</p>

<p>To support high-frequency trading, the Extended API is asynchronous. Order placement returns an order ID immediately, before the order is recorded in the book. To track order status in real time, subscribe to the Order WebSocket stream for updates on confirmations, cancellations, and rejections.</p>
<h2 id='python-sdk'>Python SDK</h2>
<blockquote>
<p>SDK configuration</p>
</blockquote>
<div class="highlight"><pre class="highlight plaintext"><code>from dataclasses import dataclass


@dataclass
class EndpointConfig:
    chain_rpc_url: str
    api_base_url: str
    stream_url: str
    onboarding_url: str
    signing_domain: str
    collateral_asset_contract: str
    asset_operations_contract: str
    collateral_asset_on_chain_id: str
    collateral_decimals: int


STARKNET_TESTNET_CONFIG = EndpointConfig(
    chain_rpc_url="https://rpc.sepolia.org",
    api_base_url="https://api.starknet.sepolia.extended.exchange/api/v1",
    stream_url="wss://starknet.sepolia.extended.exchange/stream.extended.exchange/v1",
    onboarding_url="https://api.starknet.sepolia.extended.exchange",
    signing_domain="starknet.sepolia.extended.exchange",
    collateral_asset_contract="",
    asset_operations_contract="",
    collateral_asset_on_chain_id="",
    collateral_decimals=6,
    starknet_domain=StarknetDomain(name="Perpetuals", version="v0", chain_id="SN_SEPOLIA", revision="1"),
    collateral_asset_id="0x1",
)

STARKNET_MAINNET_CONFIG = EndpointConfig(
    chain_rpc_url="",
    api_base_url="https://api.starknet.extended.exchange/api/v1",
    stream_url="wss://api.starknet.extended.exchange/stream.extended.exchange/v1",
    onboarding_url="https://api.starknet.extended.exchange",
    signing_domain="extended.exchange",
    collateral_asset_contract="",
    asset_operations_contract="",
    collateral_asset_on_chain_id="0x1",
    collateral_decimals=6,
    starknet_domain=StarknetDomain(name="Perpetuals", version="v0", chain_id="SN_MAIN", revision="1"),
    collateral_asset_id="0x1",
)
</code></pre></div>
<aside class="notice">
The SDK and the SDK documentation will be updated regularly to include additional functionality and more examples.
</aside>

<p>Getting Started:</p>

<ul>
<li><p>For installation instructions, please refer to the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/README.md">description</a> provided.</p></li>
<li><p>For reference implementations, explore the <a href="https://github.com/x10xchange/python_sdk/tree/starknet/examples">examples folder</a>.</p></li>
<li><p>For SDK configuration, please refer to the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/x10/perpetual/configuration.py">config description</a>.</p></li>
</ul>

<p>Supported Features:</p>

<ul>
<li><p>Account creation and authorisation.</p></li>
<li><p>Order Management.</p></li>
<li><p>Account Management.</p></li>
<li><p>Transfers.</p></li>
<li><p>Withdrawals (for Starknet wallets only).</p></li>
<li><p>Market Information.</p></li>
</ul>

<p>We are committed to enhancing the SDK with more functionalities based on user feedback and evolving market needs.</p>
<h2 id='mainnet'>Mainnet</h2>
<p>Our Mainnet is running on <code>Arc</code>.</p>

<p>Base URL for the Mainnet API endpoints: <code>https://api.starknet.extended.exchange/</code>.</p>
<h2 id='testnet'>Testnet</h2>
<p>Our Testnet is running on <code>Sepolia</code>.</p>

<p>Base URL for the Testnet API endpoints: <code>https://api.starknet.sepolia.extended.exchange/</code>.</p>

<p>On the testnet, users can claim $1,000 worth of test USDC per hour for each wallet. This can be done by clicking the &#39;Claim&#39; button in the &#39;Account&#39; section, located at the bottom right of the Extended Testnet Trade screen.</p>
<h2 id='allowed-http-verbs'>Allowed HTTP Verbs</h2>
<p><code>GET</code>: Retrieves a resource or list of resources.</p>

<p><code>POST</code>: Creates a resource.</p>

<p><code>PATCH</code>: Updates a resource.</p>

<p><code>DELETE</code>: Deletes a resource.</p>
<h2 id='authentication'>Authentication</h2>
<p>Due to the trustless, self-custody nature of the Extended exchange, different operations require different authentication methods:</p>

<ul>
<li><strong>Read-only operations</strong> (market data, account information, order history): Require only an <strong>API key</strong></li>
<li><strong>Write operations</strong> (create orders, transfer funds, withdraw): Require both an <strong>API key</strong> and a valid <strong>Stark signature</strong></li>
</ul>
<h3 id='api-key-read-only-access'>API Key – Read-Only Access</h3>
<p>The API key provides <strong>read-only access</strong> to your account data and public market information. It allows you to:</p>

<ul>
<li>Retrieve market data and statistics</li>
<li>Query your account information</li>
<li>View order history and positions</li>
<li>Monitor portfolio performance</li>
</ul>

<p>The API key alone <strong>cannot</strong> be used to create orders, transfer funds, or withdraw assets.</p>
<h3 id='account-private-key-full-access'>Account Private Key – Full Access</h3>
<p>The account&#39;s <strong>private Stark key</strong> is required for all write operations (state-changing transactions). It is used to generate cryptographic signatures that authorize:</p>

<ul>
<li>Creating and canceling orders</li>
<li>Transferring funds between accounts</li>
<li>Withdrawing assets from the exchange</li>
</ul>

<p><strong>Security Note</strong>: Never share your private key with anyone. The private key is essential for securing your account and should be stored securely.</p>
<h3 id='account-creation-api-and-stark-key-management'>Account Creation, API and Stark Key Management</h3>
<p>Currently, accounts can be created through the SDK or the User Interface:</p>

<ol>
<li><p>SDK - refer to the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/examples/onboarding_example.py">onboarding example</a>.</p></li>
<li><p>User Interface - connect your wallet on <a href="https://app.extended.exchange/">extended.exchange</a> to create your Extended account.</p></li>
</ol>

<p>You can create up to ten Extended sub-accounts per one wallet address. You can add and manage all sub-accounts associated with your connected wallet in the &#39;Account&#39; section, located at the bottom right of the <a href="https://app.extended.exchange/">Extended Trade screen</a>.</p>

<p>On the <a href="https://app.extended.exchange/api-management">API management</a> page, you can obtain API keys, Stark keys, and Vault numbers for each of your sub-accounts. Note that each sub-account is a separate position and therefore has unique API and Stark keys.</p>
<h3 id='authenticate-using-api-key'>Authenticate Using API Key</h3>
<p>Extended uses a simplified authentication scheme for API access. Include your API key in the HTTP header as follows: <code>X-Api-Key: &lt;API_KEY_FROM_API_MANAGEMENT_PAGE_OF_UI&gt;</code>.</p>

<p>This header is used for read-only requests. For write operations requiring a Stark signature, refer to the Stark signature authentication section below.</p>
<h3 id='stark-signature-authentication'>Stark Signature Authentication</h3>
<p>For write operations (order management, transfers, withdrawals), you must include a Stark signature in your request along with your API key. Stark signatures are generated using your private Stark key in accordance with the SNIP12 standard (EIP712 for Starknet). Extended retains the Starknet-compatible signature scheme on Arc for backward compatibility; native Arc signature support may be added in a future release.</p>

<p>Refer to the <a href="https://github.com/x10xchange/python_sdk/tree/starknet/examples">Python SDK examples</a> for implementation details on how to generate and include Stark signatures in your requests.</p>
<h3 id='mandatory-headers'>Mandatory headers</h3>
<p>For both REST and WebSocket API requests, the <code>User-Agent</code> header is required.</p>
<h2 id='server-location'>Server Location</h2>
<p>The exchange servers are hosted in <strong>AWS Tokyo</strong> region.</p>

<table><thead>
<tr>
<th>Parameter</th>
<th>Value</th>
</tr>
</thead><tbody>
<tr>
<td>Region</td>
<td>ap-northeast-1</td>
</tr>
<tr>
<td>AZ</td>
<td>ap-northeast-1a</td>
</tr>
<tr>
<td>AZ ID</td>
<td>apne1-az4</td>
</tr>
</tbody></table>

<p>For optimal latency, we recommend co-locating your trading infrastructure in the same availability zone.</p>
<h2 id='rate-limits'>Rate Limits</h2>
<p>REST API endpoints are subject to rate limits. All endpoints are throttled by IP address. For real-time data, consider using the WebSockets API instead.</p>

<p>When a REST API rate limit is exceeded, a 429 status code will be returned.</p>
<h3 id='standard-rate-limit-tiers'>Standard Rate Limit Tiers</h3>
<p>The following rate limit tiers are available:</p>

<table><thead>
<tr>
<th>Tier</th>
<th>Rate Limit</th>
<th>Max IPs</th>
<th>Requirements</th>
</tr>
</thead><tbody>
<tr>
<td>Default</td>
<td>1,000 requests/minute</td>
<td>N/A</td>
<td>Standard account</td>
</tr>
<tr>
<td>Tier 1</td>
<td>4,000 requests/minute</td>
<td>1</td>
<td>By request</td>
</tr>
<tr>
<td>Tier 2</td>
<td>8,000 requests/minute</td>
<td>2</td>
<td>30-day trading volume &gt; $50M</td>
</tr>
<tr>
<td>Tier 3</td>
<td>12,000 requests/minute</td>
<td>3</td>
<td>30-day trading volume &gt; $150M</td>
</tr>
</tbody></table>

<p>To request a rate limit increase, please reach out to our team on <a href="https://discord.com/channels/1193905940076953660/1441518584085090304">Discord</a>.</p>
<h3 id='rfq-order-creation-rate-limit'>RFQ Order Creation Rate Limit</h3>
<p>RFQ order creation rate limit is 1 request/second.</p>
<h3 id='high-volume-trader-classification-and-implications'>High-volume Trader Classification and Implications</h3>
<p>Once an account is classified as a High-volume Trader and granted increased rate limits, the following implications apply:</p>

<p><strong>Referral Program Exclusion:</strong>
- The account is excluded from the referral program
- Any existing referral codes associated with the account will be removed
- This applies retroactively to all classified accounts</p>

<p><strong>Order History Retention:</strong>
- Orders with zero executed quantity and final status (e.g., canceled, rejected) are <strong>not archived</strong> in the order history
- In contrast, regular accounts retain such orders for 7 days
- This reduced retention allows for cleaner order history management at scale for high-volume traders</p>

<p>If you have questions about your account classification or the implications of MM status, please contact our team on <a href="https://discord.com/channels/1193905940076953660/1441518584085090304">Discord</a>.</p>
<h2 id='pagination'>Pagination</h2>
<blockquote>
<p>Paginated response schema:</p>
</blockquote>
<div class="highlight"><pre class="highlight typescript tab-typescript"><code><span class="kd">type</span> <span class="nx">PaginatedResponse</span> <span class="o">=</span> <span class="p">{</span>
  <span class="dl">"</span><span class="s2">status</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">OK</span><span class="dl">"</span> <span class="o">|</span> <span class="dl">"</span><span class="s2">ERROR</span><span class="dl">"</span>
  <span class="dl">"</span><span class="s2">data</span><span class="dl">"</span><span class="p">:</span> <span class="nx">object</span> <span class="o">|</span> <span class="nx">object</span><span class="p">[]</span> <span class="o">|</span> <span class="kr">string</span> <span class="o">|</span> <span class="kr">number</span><span class="p">,</span>
  <span class="dl">"</span><span class="s2">error</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
    <span class="dl">"</span><span class="s2">code</span><span class="dl">"</span><span class="p">:</span> <span class="kr">number</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">message</span><span class="dl">"</span><span class="p">:</span> <span class="kr">string</span>
  <span class="p">},</span>
  <span class="dl">"</span><span class="s2">pagination</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
    <span class="dl">"</span><span class="s2">cursor</span><span class="dl">"</span><span class="p">:</span> <span class="kr">number</span> <span class="c1">// Current cursor</span>
    <span class="dl">"</span><span class="s2">count</span><span class="dl">"</span><span class="p">:</span> <span class="kr">number</span>  <span class="c1">// Count of the items in the response</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<blockquote>
<p>General not paginated response schema:</p>
</blockquote>
<div class="highlight"><pre class="highlight typescript tab-typescript"><code><span class="kd">type</span> <span class="nx">GeneralResponse</span> <span class="o">=</span> <span class="p">{</span>
  <span class="dl">"</span><span class="s2">status</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">OK</span><span class="dl">"</span> <span class="o">|</span> <span class="dl">"</span><span class="s2">ERROR</span><span class="dl">"</span><span class="p">,</span>
  <span class="dl">"</span><span class="s2">data</span><span class="dl">"</span><span class="p">:</span> <span class="nx">object</span> <span class="o">|</span> <span class="nx">object</span><span class="p">[]</span> <span class="o">|</span> <span class="kr">string</span> <span class="o">|</span> <span class="kr">number</span><span class="p">,</span>
  <span class="dl">"</span><span class="s2">error</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
    <span class="dl">"</span><span class="s2">code</span><span class="dl">"</span><span class="p">:</span> <span class="kr">number</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">message</span><span class="dl">"</span><span class="p">:</span> <span class="kr">string</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<p>The Extended API uses a cursor-based pagination model across all endpoints that may return large volumes of items.</p>

<p>Items are automatically sorted in descending order by ID unless otherwise specified in the endpoint description. As IDs increase over time, the most recent items are always returned first.</p>

<p>Pagination parameters are passed via the query string. These parameters include:</p>

<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>cursor</td>
<td>no</td>
<td>number</td>
<td>Determines the offset of the returned result. It represents the ID of the item after which you want to retrieve the next result. To get the next result page, use the cursor from the pagination section of the previous response.</td>
</tr>
<tr>
<td>limit</td>
<td>no</td>
<td>number</td>
<td>The maximum number of items that should be returned.</td>
</tr>
</tbody></table>
<h1 id='rfq-markets'>RFQ markets</h1>
<p>In addition to its order book markets, Extended offers RFQ (Request for Quote) markets across both crypto and RWAs. On RFQ markets, trades are executed by market makers picking up user orders, rather than through matching in a public order book.</p>

<p>How Orders Execute on RFQ Markets:</p>

<ul>
<li>The order book displayed on the trading screen is indicative only and does not represent resting orders from other traders.</li>
<li>Limit orders are placed as regular limit orders. Market makers see them and pick them up when they see fit. The standard limit-order price bands of ±15% around the Mark Price apply.</li>
<li>Market orders create a quote that walks from the market&#39;s current best bid/best ask towards the price on your order, and is sent to market makers. If a market maker picks up the quote, the order is filled. If no market maker picks it up, the order is cancelled - market orders never rest.</li>
<li>Everything else works the same. RFQ markets use the same accounts, collateral, unified margin, and trading fee structure as all other Extended markets.</li>
</ul>
<h2 id='the-indicative-and-the-real-order-book'>The indicative and the real order book</h2>
<p>An RFQ market has two order books, and they are entirely independent - neither one contains anything from the other:</p>

<ul>
<li>The <strong>indicative book</strong> is derived from market maker quotes and contains no user orders. It is what the standard <a href="#order-book-stream">Order book stream</a> and <a href="#get-market-order-book">Get market order book</a> return for an RFQ market, and it is the source of <code>bidPrice</code> and <code>askPrice</code> in the market statistics of <a href="#get-markets">Get markets</a>.</li>
<li>The <strong>real book</strong> contains the orders actually resting on the market: user orders, and the child quotes of market orders. It is available only on the dedicated stream <code>GET /stream.extended.exchange/v1/orderbooks/rfq/{market}</code>, and it is the book market makers watch and trade against.</li>
</ul>

<p>Your own orders never appear in the indicative book, and market maker quotes never appear in the real book. The two are used for different things:</p>

<ul>
<li>The indicative book decides how your order is treated when it is accepted: whether a limit order is aggressive and is therefore converted to a market order, and where the quote walk of a market order starts.</li>
<li>The real book is where matching actually happens.</li>
</ul>

<p>So the book you see by default is not the book you trade against. A price that would rest passively in the real book can still be aggressive against the indicative book and be converted, and a resting order that you could pick up is invisible on the indicative book. Subscribe to the RFQ stream when you need to see what is really resting on the market.</p>
<h2 id='placing-orders-on-rfq-markets'>Placing orders on RFQ markets</h2>
<p>Orders for RFQ markets must be submitted to the dedicated endpoint <code>POST /api/v1/user/order/rfq</code>. The two endpoints are mutually exclusive: submitting an order for an RFQ market to <code>POST /api/v1/user/order</code>, or a non-RFQ order to the RFQ endpoint, is rejected with <code>ActionNotAllowed</code>. The RFQ endpoint has a lower rate limit of 60 requests/minute.</p>

<p>Cancelling and editing are not affected by RFQ. There is no RFQ-specific cancel path: use the same <a href="#cancel-order-by-id">Cancel order by ID</a>, <a href="#cancel-order-by-external-id">Cancel order by external id</a> and <a href="#mass-cancel">Mass Cancel</a> endpoints as on order book markets, and RFQ markets can be named in the <code>markets</code> filter of a mass cancel like any other market. To edit (replace) a resting order, send the replacement to <code>POST /api/v1/user/order/rfq</code> with <code>cancelId</code> set, exactly as described in <a href="#create-or-edit-order">Create or edit order</a> - but note that if the new price crosses the indicative book, the replacement is converted to a market order and will not rest.</p>
<h3 id='supported-time-in-force'>Supported time in force</h3>
<table><thead>
<tr>
<th>Time in force</th>
<th>Supported</th>
<th>Notes</th>
</tr>
</thead><tbody>
<tr>
<td><code>GTT</code></td>
<td>yes</td>
<td>Resting limit orders. An aggressive <code>GTT</code> limit order is converted to a market order - see below.</td>
</tr>
<tr>
<td><code>IOC</code></td>
<td>yes</td>
<td>Required for market orders.</td>
</tr>
<tr>
<td><code>TOB</code></td>
<td>no</td>
<td>Rejected with error <code>1158</code>. Top-of-book pegging has no meaning against an indicative book.</td>
</tr>
</tbody></table>
<h3 id='fees'>Fees</h3>
<p>Fees on RFQ markets are assigned by role in the quote flow, not by whether your order rested on the book. This is the reverse of the order book markets, so it is worth reading carefully:</p>

<ul>
<li><strong>Orders you place on an RFQ market always pay the taker fee</strong>, whether they execute immediately or rest until a market maker picks them up. Resting does not earn you the maker fee here.</li>
<li><strong>Picking up someone else&#39;s order pays the maker fee</strong> - see <a href="#picking-up-user-orders-as-a-market-maker">Picking up user orders as a market maker</a>.</li>
</ul>

<p>The fee rates themselves are the same schedule as every other Extended market; only the side each party is charged differs.</p>

<p>The <code>fee</code> you send and sign is a <strong>maximum</strong>, not the rate you are charged, and on an RFQ market it must always be at least your <strong>taker</strong> fee - including on an order you send to pick up someone else&#39;s resting order, which is charged the maker fee. A lower value is rejected with <code>InvalidTradingFees</code> before the order reaches the matching engine. The rate you are actually charged is taken from your own fee schedule by role, as described above.</p>
<h3 id='market-orders'>Market orders</h3>
<p>A market order on an RFQ market carries a <code>price</code>, which is the worst price you are willing to accept - it bounds the order, it is not what the quote starts at. The order is offered to market makers as a series of quotes that walk from a <strong>start price</strong> towards your price:</p>

<ul>
<li>The quote is split into 11 child quotes, each live for 100ms.</li>
<li>The child prices are evenly spaced between the start price and your order price - <code>0%, 10%, 20% ... 100%</code> of the distance.</li>
<li>A market maker picking up a child fills against that quote. Anything not filled by the last step is cancelled: market orders never rest.</li>
</ul>

<p>The start price is set as follows:</p>

<ul>
<li>If you set <code>rfqStartPrice</code> on the request, that value is used. It must be on the correct side of your order price - at or below it for a buy, at or above it for a sell - otherwise the order is rejected with <code>InvalidPriceAmount</code>.</li>
<li>Otherwise the <strong>best price on the opposite side of the indicative book</strong> is used - the best ask for a buy, the best bid for a sell - capped by your order price so that the start is at least as good for you as the bound: for a buy the lower of the two, for a sell the higher of the two.</li>
<li>If that side of the indicative book is empty, the <strong>Mark Price</strong> is used instead, capped by your order price in the same way.</li>
</ul>

<p>Market orders must use <code>timeInForce: IOC</code>.</p>

<p>A market order must be given enough time to complete it: <code>expiryEpochMillis</code> - an absolute timestamp in epoch milliseconds, not a duration - must be at least 1.1 seconds (11 child quotes of 100ms) after the order is created, otherwise it is rejected with <code>InvalidOrderExpiration</code>. This applies to <code>market</code> orders, to conditional orders with market execution, and to limit orders that are converted to market orders. Resting limit orders are not affected and keep the usual expiry limits.</p>
<h3 id='aggressive-limit-orders'>Aggressive limit orders</h3>
<p>A <code>GTT</code> limit order that crosses the opposite side of the indicative order book is <strong>converted to a market order</strong>, because there is no resting liquidity for it to sit against - leaving it on the book would simply make it invisible to market makers.</p>

<ul>
<li>A buy is aggressive when its price is at or above the indicative best ask; a sell when its price is at or below the indicative best bid. When that side of the indicative book is unavailable, the Mark Price is used instead to decide whether the order is aggressive.</li>
<li>The start price is the price it crossed - the indicative best ask for a buy, the indicative best bid for a sell. If that side of the indicative book is unavailable, the Mark Price is used, capped by your limit price as for a market order. From there the quote walks towards your limit price exactly as a market order does.</li>
<li><strong>The converted order becomes <code>IOC</code></strong>, so any quantity not filled by the last child quote is cancelled rather than resting on the book.</li>
<li>The order is reported back with <code>type: MARKET</code> and <code>timeInForce: IOC</code>.</li>
</ul>

<p>Orders that do not cross - a buy below the indicative best ask, or a sell above the indicative best bid - are unaffected and rest as normal <code>GTT</code> limit orders. If neither the indicative book nor the Mark Price yields a usable start price, the order is left as a resting limit order rather than being rejected.</p>
<h3 id='post-only-orders'>Post-only orders</h3>
<p>Post-only is <strong>not supported on RFQ markets</strong>. There is no public order book to post to, so the flag has no meaning: a resting order on an RFQ market waits for a market maker to pick it up regardless. Post-only orders are rejected with <code>InvalidOrderParameters</code>.</p>
<h3 id='conditional-and-tp-sl-orders'>Conditional and TP/SL orders</h3>
<p>Conditional and TP/SL orders are supported on RFQ markets, with two differences from order book markets:</p>

<ul>
<li>The <code>last</code> trigger price type follows the <strong>indicative order book</strong>. A <code>last</code> trigger fires on the mid of the best indicative bid and ask, checked about once a second, and on the prices of RFQ trades. It needs both an indicative bid and ask; while one side is empty, only RFQ trades can fire it. This applies to the conditional trigger and to the Take Profit and Stop Loss triggers alike.</li>
<li>A leg that executes as a market order goes through the quote walk described above when it triggers, and its start price is its own trigger price - for a Stop Loss leg, its order price. <code>rfqStartPrice</code> does not apply to these orders. A leg that executes as a limit order rests as a normal limit order.</li>
</ul>

<p>TWAP orders are <strong>not supported</strong> on RFQ markets and are rejected with <code>InvalidOrderParameters</code>.</p>
<h2 id='picking-up-user-orders-as-a-market-maker'>Picking up user orders as a market maker</h2>
<p>Orders resting on an RFQ market are visible to market makers in the <strong>real</strong> order book, which is a different stream from the indicative book shown to traders:</p>

<ul>
<li>Subscribe to <code>GET /stream.extended.exchange/v1/orderbooks/rfq/{market}</code> for the real book - the orders actually resting on the market. The default <code>GET /stream.extended.exchange/v1/orderbooks/{market}</code> returns the indicative book instead, which is derived from maker quotes and contains no user orders. Both accept <code>?depth=1</code>.</li>
<li>To take a resting order, submit an opposing limit order to <code>POST /api/v1/user/order/rfq</code> at a price that crosses it, with <code>timeInForce: IOC</code>. IOC ensures that if the order you were aiming at is gone, your order is cancelled rather than left resting on the market.</li>
<li>Because the taking order is <code>IOC</code>, it is never converted to a market order - the conversion described above applies only to <code>GTT</code> limit orders.</li>
<li>The order you submit to pick up a resting order is charged the <strong>maker</strong> fee, while the order being picked up is charged the <strong>taker</strong> fee. The roles are the opposite way round from an order book market, where crossing an existing order would make you the taker.</li>
</ul>

<p>The real book is an ordinary aggregated order book: same message format, same snapshot and delta semantics and the same push frequencies as the standard <a href="#order-book-stream">Order book stream</a>, with quantities aggregated per price level.</p>

<p>Market orders reach market makers through that same book, and there is no separate quote feed to subscribe to. Each child quote of a market order appears in the real book as a short-lived resting order at the current step price: it lives for 100ms, and is then replaced by the next step walking towards the price on the taker&#39;s order. A market order that no market maker picks up before its last child expires is cancelled with the status reason <code>NO_LIQUIDITY</code>.</p>

<p>Fills arrive on the standard <a href="#account-updates-stream">Account updates stream</a>; there is no RFQ-specific fill feed.</p>

<p>Note that <a href="#get-market-order-book">Get market order book</a> returns the indicative book for an RFQ market. The real book is available over the websocket stream only, so a market maker restoring state after a disconnect must resubscribe rather than read a REST snapshot.</p>
<h3 id='taking-liquidity-with-a-short-lived-limit-order'>Taking liquidity with a short-lived limit order</h3>
<p><code>IOC</code> is the simplest way to take a resting order, but a <code>GTT</code> limit order with a very short lifetime - say 100ms - is also possible if you would raither leave the order n the real book for a moment than have it cancelled immediately. It works only while the price stays passive against the <strong>indicative</strong> book, which is a different book from the one holding the order you are aiming at.</p>

<p>The lifetime is set through <code>expiryEpochMillis</code>, so a 100ms order is one whose <code>expiryEpochMillis</code> is the current time plus <code>100</code>. The expiry signed in the settlement is derived from the same value, so both must be built from that one timestamp - and since the signed settlement expiry carries its own 14 day buffer, a short order lifetime does not shorten the settlement window.</p>

<p>Take a market where the indicative book is <code>99.50</code> bid / <code>100.50</code> ask, and a user sell order for 1 unit is resting at <code>100.00</code> in the real book.</p>

<ul>
<li><strong>Buy <code>GTT</code> limit, price <code>100.00</code>, <code>expiryEpochMillis</code> set to the current time plus <code>100</code>.</strong> <code>100.00</code> is below the indicative best ask of <code>100.50</code>, so the order is not aggressive: it is not converted and reaches the matching engine as a limit order. There it crosses the sell resting at <code>100.00</code> and fills, and you pay the <strong>maker</strong> fee. If that sell is already gone, your order rests in the real book instead and expires shortly after - and while it rests, another participant can pick it up, in which case you are the resting side and pay the <strong>taker</strong> fee.</li>
<li><strong>The same order when the indicative best ask has moved to <code>99.90</code>.</strong> Now <code>100.00</code> crosses the indicative ask, so the order is converted to a market order with a quote walk, and a quote walk needs an expiry at least 1.1 seconds away. The 100ms expiry is rejected with <code>InvalidOrderExpiration</code>.</li>
</ul>

<p>So a short-lived limit order is usable only below the indicative best ask (above the indicative best bid for a sell). To take liquidity at a price that crosses the indicative book, use <code>timeInForce: IOC</code> instead: an IOC order is never converted, so it either fills against what is resting or is cancelled immediately, and it carries no minimum expiry.</p>

<p>Expiry is swept rather than exact: orders with a lifetime under 6 seconds are expired on a 100ms sweep, longer-lived orders on a 10 second sweep. A 100ms order therefore leaves the book promptly, but do not rely on it being gone at a precise millisecond.</p>
<h2 id='migration-of-order-book-based-market-to-rfq'>Migration of order book based market to RFQ</h2>
<p>When order book based market is migrated to RFQ, separate RFQ endpoint must be used for order placement as described in <a href="#create-or-edit-order"><code>Create or edit order</code></a>. Order book updates stream is also affected by migration: stream from standard order book subscription will start returning the indicative order book. To get quotes order book updates, separate endpoint must be used, as described in <a href="#order-book-stream"><code>Order book stream</code></a></p>

<p>A market becomes an RFQ market when its <code>isRfq</code> flag in <a href="#get-markets">Get markets</a> turns <code>true</code>. What happens to the orders you already have on that market at that moment:</p>

<ul>
<li><strong>Resting orders are kept.</strong> They are not cancelled and not repriced, and they stay on the market as RFQ orders that market makers can pick up. The conversion of aggressive limit orders to market orders described above applies to newly submitted orders only, never to orders that were already resting.</li>
<li><strong>Untriggered conditional and TP/SL orders that trigger on the <code>last</code> price are switched to the <code>mark</code> price.</strong> Their trigger price is unchanged. Orders placed after the migration can use <code>last</code>, which on RFQ markets follows the indicative order book, as described in <a href="#conditional-and-tp-sl-orders">Conditional and TP/SL orders</a>.</li>
<li><strong>Untriggered conditional orders and TP/SL legs that execute as market orders</strong> are given a quote walk, so they go through the RFQ flow when they trigger. The walk starts from the trigger price, or for a Stop Loss leg from its order price.</li>
<li><strong>TWAP orders are cancelled</strong>, with the status reason <code>NO_LIQUIDITY</code>, because TWAP is not supported on RFQ markets.</li>
</ul>

<p>Nothing else about your orders changes: order IDs, quantities, prices and expiry times are preserved. From this point on, new orders for the market must go to <code>POST /api/v1/user/order/rfq</code> - the standard endpoint rejects them with <code>ActionNotAllowed</code>.</p>
<h1 id='spot-trading'>Spot Trading</h1>
<p>Extended Exchange supports spot trading alongside its perpetuals product. A spot trade is an atomic asset-vs-collateral swap: when you buy on the <code>BTCSPOT</code> spot market, USDC collateral leaves your account and an equivalent amount of <code>BTC</code> lands in your spot balance. There is no funding rate, no leverage, no liquidation, and no position to manage — only the asset balance you hold.</p>

<p>Spot trades settle on Arc through the same on-chain solvency checks that govern perpetuals.</p>
<h2 id='identifying-spot-markets-and-assets'>Identifying spot markets and assets</h2>
<p>Markets returned by <a href="#get-markets"><code>Get markets</code></a> carry a <code>type</code> field whose value is <code>&quot;SPOT&quot;</code> or <code>&quot;PERPETUAL&quot;</code>. Branch on <code>type</code> when consuming the response — it is the authoritative discriminator. To resolve spot vs. perpetual for an order, trade, or balance row that carries only a <code>market</code> name, look the market up via <a href="#get-markets"><code>Get markets</code></a> and read its <code>type</code>.</p>

<p>The same <code>type</code> field is exposed on <a href="#get-assets"><code>Get assets</code></a>, which lists every asset the account can hold — including the collateral asset and every tradable spot asset — and supports <code>?type=SPOT</code> to scope the response.</p>
<h2 id='account-model'>Account model</h2>
<p>Each Extended account holds a single <strong>collateral balance</strong> (USDC) plus a <strong>per-asset spot balance</strong> for every spot asset the account has acquired. Both contribute to the account&#39;s overall equity:</p>

<ul>
<li>Collateral balance (USDC) is returned by <a href="#get-balance"><code>Get balance</code></a> and continues to back perpetual margin.</li>
<li>Spot balances are returned by <a href="#get-spot-balances"><code>Get spot balances</code></a>. Each entry has an <code>equityContribution</code> (notional value haircut by a per-asset <code>contributionFactor</code>) that is added to account equity, so spot holdings can transparently support perpetual margin requirements.</li>
<li>When a spot order is open, the collateral required to fund a buy (or the asset required to deliver on a sell) is reserved and reflected on <code>Get balance</code> as <code>collateralReservedForSpotOrders</code>.</li>
<li>Spot holdings do <strong>not</strong> create a <code>Position</code>. Positions exist only for perpetual markets; spot exposure lives entirely in the per-asset balance.</li>
</ul>
<h2 id='what-is-the-same-as-perpetuals'>What is the same as perpetuals</h2>
<p>Spot reuses the rest of the API surface unchanged:</p>

<ul>
<li>Authentication, API key headers, and Stark signatures behave identically.</li>
<li>Order placement uses <a href="#create-or-edit-order"><code>POST /api/v1/user/order</code></a>; the server selects the spot or perpetual code path from the <code>market</code> field.</li>
<li>Cancel and mass-cancel endpoints accept spot order IDs.</li>
<li><a href="#get-open-orders"><code>Get open orders</code></a>, <a href="#get-orders-history"><code>Get orders history</code></a>, and <a href="#get-trades"><code>Get trades</code></a> return spot and perpetual results in a single mixed list — filter by <code>market</code> to scope the response.</li>
<li>Withdrawals work for any tradable spot asset (including the collateral asset USDC) — see <a href="#withdrawals">Withdrawals</a>.</li>
<li>The public market data WebSocket streams (order book, trades, mark price, candles) and the private account stream all carry spot markets and spot balance updates.</li>
</ul>
<h1 id='public-rest-api'>Public REST-API</h1>
<p>The following Public REST API endpoints enable users to access comprehensive information about available markets, their configurations, and trading statistics.</p>
<h2 id='get-markets'>Get markets</h2><h3 id='http-request'>HTTP Request</h3>
<p><code>GET /api/v1/info/markets?market={market}</code></p>

<p>Get a list of available markets, their configurations, and trading statistics.</p>

<p>To request data for several markets, use the following format: <code>GET /api/v1/info/markets?market=market1&amp;market=market2</code>.</p>

<p>Please note that the margin schedule by market is not covered by this endpoint. For more details on the margin schedule, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/margin-schedule">documentation</a>.</p>

<aside class="notice">
The same response shape is used for both perpetual and spot markets. Use <code>data[].type</code> (<code>"SPOT"</code> or <code>"PERPETUAL"</code>) as the discriminator. On spot rows, the following perpetual-specific fields are not meaningful and may be reported as <code>0</code>: <code>marketStats.markPrice</code>, <code>marketStats.fundingRate</code>, <code>marketStats.nextFundingRate</code>, <code>marketStats.openInterest</code>, <code>marketStats.openInterestBase</code>, <code>tradingConfig.maxLeverage</code>, and <code>tradingConfig.hourlyFundingRateCap</code>. See <a href="#spot-trading">Spot Trading</a> for the trading model.
</aside>
<h3 id='market-statuses'>Market statuses</h3>
<table><thead>
<tr>
<th>Status</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>ACTIVE</code></td>
<td>Market is active, and all types of orders are permitted.</td>
</tr>
<tr>
<td><code>REDUCE_ONLY</code></td>
<td>Market is in reduce only mode, and only reduce only orders are allowed.</td>
</tr>
<tr>
<td><code>DELISTED</code></td>
<td>Market is delisted, and trading is no longer permitted.</td>
</tr>
<tr>
<td><code>PRELISTED</code></td>
<td>Market is in prelisting stage, and trading not yet available.</td>
</tr>
<tr>
<td><code>DISABLED</code></td>
<td>Market is completly disabled, and trading is not allowed.</td>
</tr>
</tbody></table>
<h3 id='trading-hours'>Trading hours</h3>
<blockquote>
<p>Trading hours response example (requested on a weekday during the overnight session):</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ENA-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACTIVE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isRfq"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isOffHours"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradingHours"</span><span class="p">:</span><span class="w"> </span><span class="s2">"CONTINUOUS"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TSLA_24_5-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACTIVE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isRfq"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isOffHours"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradingHours"</span><span class="p">:</span><span class="w"> </span><span class="s2">"CONTINUOUS"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"IREN_24_5-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACTIVE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isRfq"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isOffHours"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradingHours"</span><span class="p">:</span><span class="w"> </span><span class="s2">"WEEKDAYS"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SHOP-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACTIVE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isRfq"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isOffHours"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradingHours"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NO_OVERNIGHT"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Each market has a trading schedule, returned in <code>data[].tradingHours</code>. <code>data[].isOffHours</code> shows whether the market is currently outside that schedule: <code>true</code> means the market is closed, <code>false</code> means it is open.</p>

<table><thead>
<tr>
<th>Value</th>
<th>Schedule</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>CONTINUOUS</code></td>
<td>24/7</td>
<td>Market trades around the clock, including weekends and public holidays.</td>
</tr>
<tr>
<td><code>WEEKDAYS</code></td>
<td>24/5</td>
<td>Market trades around the clock from Monday to Friday. It is closed on weekends and on public holidays of the underlying market.</td>
</tr>
<tr>
<td><code>NO_OVERNIGHT</code></td>
<td>Pre-market, regular and post-market sessions</td>
<td>Market trades during the pre-market, regular and post-market sessions of the underlying market, Monday to Friday. It is closed during overnight sessions, on weekends and on public holidays of the underlying market.</td>
</tr>
<tr>
<td><code>REGULAR</code></td>
<td>Regular market hours</td>
<td>Market trades only while the regular trading session of the underlying market is open. There is no extended-hours trading.</td>
</tr>
</tbody></table>

<p>Read the schedule from <code>tradingHours</code> for every market. Do not infer it from the market name, asset class or <code>isRfq</code>: many RWA markets are <code>CONTINUOUS</code>, and a <code>_24_5</code> suffix in a market name does not mean <code>WEEKDAYS</code>.</p>

<aside class="notice">
While <code>isOffHours</code> is <code>true</code>, order placement and execution are unavailable. Open positions remain open, and margin requirements continue to apply. Trading hours do not affect <code>status</code>, which reflects the market's listing state: an <code>ACTIVE</code> market stays <code>ACTIVE</code> while it is closed.
</aside>
<h3 id='query-parameters'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string[]</td>
<td>List of names of the requested markets.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"PERPETUAL"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"assetName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"assetPrecision"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w">
      </span><span class="nl">"collateralAssetName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"collateralAssetPrecision"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w">
      </span><span class="nl">"active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACTIVE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isRfq"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isOffHours"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradingHours"</span><span class="p">:</span><span class="w"> </span><span class="s2">"CONTINUOUS"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"marketStats"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"dailyVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39659164065"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"dailyVolumeBase"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39659164065"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"dailyPriceChangePercentage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5.57"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"dailyLow"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39512"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"dailyHigh"</span><span class="p">:</span><span class="w"> </span><span class="s2">"42122"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"lastPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"42000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"askPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"42005"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"bidPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39998"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"markPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39950"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"indexPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39940"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"fundingRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.001"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"nextFundingRate"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440</span><span class="p">,</span><span class="w">
        </span><span class="nl">"openInterest"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1245.2"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"openInterestBase"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1245.2"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"tradingConfig"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"minOrderSize"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.001"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"minOrderSizeChange"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.001"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"minPriceChange"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.001"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"maxMarketOrderValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"maxLimitOrderValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"maxPositionValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"maxLeverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"50"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"maxNumOrders"</span><span class="p">:</span><span class="w"> </span><span class="s2">"200"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"openInterestLimit"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"limitPriceCap"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"limitPriceFloor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"hourlyFundingRateCap"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"riskFactorConfig"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
          </span><span class="p">{</span><span class="w">
            </span><span class="nl">"upperBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000000"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"riskFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2"</span><span class="w">
          </span><span class="p">}</span><span class="w">
        </span><span class="p">],</span><span class="w">
        </span><span class="nl">"uPnlWithdrawable"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
        </span><span class="nl">"postWithdrawalMarginFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"l2Config"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"STARKX"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"collateralId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x35596841893e0d17079c27b2d72db1694f26a1932a7429144b439ba0807d29c"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"collateralResolution"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000000</span><span class="p">,</span><span class="w">
        </span><span class="nl">"syntheticId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x4254432d3130000000000000000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"syntheticResolution"</span><span class="p">:</span><span class="w"> </span><span class="mi">10000000000</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].name</td>
<td>yes</td>
<td>string</td>
<td>Name of the market.</td>
</tr>
<tr>
<td>data[].type</td>
<td>yes</td>
<td>string</td>
<td>Market type. One of <code>PERPETUAL</code> or <code>SPOT</code>. Use this to branch behaviour for spot vs. perpetual rows.</td>
</tr>
<tr>
<td>data[].assetName</td>
<td>yes</td>
<td>string</td>
<td>Name of the base asset.</td>
</tr>
<tr>
<td>data[].assetPrecision</td>
<td>yes</td>
<td>number</td>
<td>Number of decimals for the base asset.</td>
</tr>
<tr>
<td>data[].collateralAssetName</td>
<td>yes</td>
<td>string</td>
<td>Name of the collateral asset.</td>
</tr>
<tr>
<td>data[].collateralAssetPrecision</td>
<td>yes</td>
<td>number</td>
<td>Number of decimals for the collateral asset.</td>
</tr>
<tr>
<td>data[].active</td>
<td>yes</td>
<td>boolean</td>
<td>Indicates if the market is currently active. Can be <code>true</code> or <code>false</code>.</td>
</tr>
<tr>
<td>data[].status</td>
<td>yes</td>
<td>string</td>
<td>Market status.</td>
</tr>
<tr>
<td>data[].isRfq</td>
<td>yes</td>
<td>boolean</td>
<td>Indicates if the market is RFQ or orderbook based. Can be <code>true</code> or <code>false</code>.</td>
</tr>
<tr>
<td>data[].isOffHours</td>
<td>yes</td>
<td>boolean</td>
<td>Indicates if the market is outside of regular trading hours.. Can be <code>true</code> or <code>false</code>.</td>
</tr>
<tr>
<td>data[].tradingHours</td>
<td>yes</td>
<td>string</td>
<td>Trading schedule of the market. Can be <code>CONTINUOUS</code>, <code>WEEKDAYS</code>, <code>NO_OVERNIGHT</code> or <code>REGULAR</code>. See <a href="#trading-hours">Trading hours</a>.</td>
</tr>
<tr>
<td>data[].marketStats.dailyVolume</td>
<td>yes</td>
<td>string</td>
<td>Trading volume of the market in the previous 24 hours in the collateral asset.</td>
</tr>
<tr>
<td>data[].marketStats.dailyVolumeBase</td>
<td>yes</td>
<td>string</td>
<td>Trading volume of the market in the previous 24 hours in the base asset.</td>
</tr>
<tr>
<td>data[].marketStats.dailyPriceChange</td>
<td>yes</td>
<td>string</td>
<td>Absolute price change of the last trade price over the past 24 hours.</td>
</tr>
<tr>
<td>data[].marketStats.dailyPriceChangePercentage</td>
<td>yes</td>
<td>string</td>
<td>Percent price change of the last trade price over the past 24 hours.</td>
</tr>
<tr>
<td>data[].marketStats.dailyLow</td>
<td>yes</td>
<td>string</td>
<td>Lowest trade price over the past 24 hours.</td>
</tr>
<tr>
<td>data[].marketStats.dailyHigh</td>
<td>yes</td>
<td>string</td>
<td>Highest trade price over the past 24 hours.</td>
</tr>
<tr>
<td>data[].marketStats.lastPrice</td>
<td>yes</td>
<td>string</td>
<td>Last price of the market.</td>
</tr>
<tr>
<td>data[].marketStats.askPrice</td>
<td>yes</td>
<td>string</td>
<td>Current best ask price of the market.</td>
</tr>
<tr>
<td>data[].marketStats.bidPrice</td>
<td>yes</td>
<td>string</td>
<td>Current best bid price of the market.</td>
</tr>
<tr>
<td>data[].marketStats.markPrice</td>
<td>yes</td>
<td>string</td>
<td>Current mark price of the market.</td>
</tr>
<tr>
<td>data[].marketStats.indexPrice</td>
<td>yes</td>
<td>string</td>
<td>Current index price of the market.</td>
</tr>
<tr>
<td>data[].marketStats.fundingRate</td>
<td>yes</td>
<td>string</td>
<td>Current funding rate, calculated every minute.</td>
</tr>
<tr>
<td>data[].marketStats.nextFundingRate</td>
<td>yes</td>
<td>number</td>
<td>Timestamp of the next funding update.</td>
</tr>
<tr>
<td>data[].marketStats.openInterest</td>
<td>yes</td>
<td>string</td>
<td>Open interest in collateral asset.</td>
</tr>
<tr>
<td>data[].marketStats.openInterestBase</td>
<td>yes</td>
<td>string</td>
<td>Open interest in base asset.</td>
</tr>
<tr>
<td>data[].tradingConfig.minOrderSize</td>
<td>yes</td>
<td>string</td>
<td>Minimum order size for the market.</td>
</tr>
<tr>
<td>data[].tradingConfig.minOrderSizeChange</td>
<td>yes</td>
<td>string</td>
<td>Minimum order size change for the market.</td>
</tr>
<tr>
<td>data[].tradingConfig.minPriceChange</td>
<td>yes</td>
<td>string</td>
<td>Minimum price change for the market.</td>
</tr>
<tr>
<td>data[].tradingConfig.maxMarketOrderValue</td>
<td>yes</td>
<td>string</td>
<td>Maximum market order value for the market.</td>
</tr>
<tr>
<td>data[].tradingConfig.maxLimitOrderValue</td>
<td>yes</td>
<td>string</td>
<td>Maximum limit order value for the market.</td>
</tr>
<tr>
<td>data[].tradingConfig.maxPositionValue</td>
<td>yes</td>
<td>string</td>
<td>Maximum position value for the market.</td>
</tr>
<tr>
<td>data[].tradingConfig.openInterestLimit</td>
<td>yes</td>
<td>string</td>
<td>Maximum open interest limit for the market. When market reaches this limit, it goes to the reduce only mode.</td>
</tr>
<tr>
<td>data[].tradingConfig.maxLeverage</td>
<td>yes</td>
<td>string</td>
<td>Maximum leverage available for the market.</td>
</tr>
<tr>
<td>data[].tradingConfig.maxNumOrders</td>
<td>yes</td>
<td>string</td>
<td>Maximum number of open orders for the market.</td>
</tr>
<tr>
<td>data[].tradingConfig.limitPriceCap</td>
<td>yes</td>
<td>string</td>
<td>Limit order price cap.</td>
</tr>
<tr>
<td>data[].tradingConfig.limitPriceFloor</td>
<td>yes</td>
<td>string</td>
<td>Limit order floor ratio.</td>
</tr>
<tr>
<td>data[].tradingConfig.hourlyFundingRateCap</td>
<td>yes</td>
<td>string</td>
<td>Funding rate cap limit per hour in %.</td>
</tr>
<tr>
<td>data[].tradingConfig.riskFactorConfig[].upperBound</td>
<td>yes</td>
<td>string</td>
<td>Upper bound of asset value, which defines applied risk factor.</td>
</tr>
<tr>
<td>data[].tradingConfig.riskFactorConfig[].riskFactor</td>
<td>yes</td>
<td>string</td>
<td>Risk factor of asset for this group, defined in decimals.</td>
</tr>
<tr>
<td>data[].tradingConfig.uPnlWithdrawable</td>
<td>yes</td>
<td>boolean</td>
<td>Whether unrealised profit on this market counts towards the account&#39;s withdrawal capacity. When <code>false</code>, profit on this market is excluded until it is realised; unrealised losses always count, on every market. See <a href="#withdrawals">Withdrawals</a>.</td>
</tr>
<tr>
<td>data[].tradingConfig.postWithdrawalMarginFactor</td>
<td>yes</td>
<td>string</td>
<td>Flat fraction of position notional that a position on this market must retain as margin once withdrawable profit is taken (<code>0.1</code> = 10%). The charge is the shortfall over what the position&#39;s own leverage already covers, so it is <code>0</code> when <code>1 / leverage &gt;= factor</code>. <code>0</code> on markets where <code>uPnlWithdrawable</code> is <code>false</code>.</td>
</tr>
<tr>
<td>data[].l2Config.type</td>
<td>yes</td>
<td>string</td>
<td>Type of Layer 2 solution. Currently, only &#39;STARKX&#39; is supported.</td>
</tr>
<tr>
<td>data[].l2Config.collateralId</td>
<td>yes</td>
<td>string</td>
<td>Collateral asset ID.</td>
</tr>
<tr>
<td>data[].l2Config.collateralResolution</td>
<td>yes</td>
<td>number</td>
<td>Collateral asset resolution, the number of quantums that fit within one &quot;human-readable&quot; unit of the collateral asset.</td>
</tr>
<tr>
<td>data[].l2Config.syntheticId</td>
<td>yes</td>
<td>string</td>
<td>Synthetic asset ID.</td>
</tr>
<tr>
<td>data[].l2Config.syntheticResolution</td>
<td>yes</td>
<td>number</td>
<td>Synthetic asset resolution, the number of quantums that fit within one &quot;human-readable&quot; unit of the synthetic asset.</td>
</tr>
</tbody></table>
<h2 id='get-assets'>Get assets</h2><h3 id='http-request-2'>HTTP Request</h3>
<p><code>GET /api/v1/info/assets</code></p>

<p>List all assets registered on Extended — both the collateral asset (<code>USDC</code>) and the tradable spot assets (e.g. <code>BTC</code>, <code>ETH</code>). Each entry carries a <code>type</code> field (<code>SPOT</code> or <code>PERPETUAL</code>) along with the L2 and L1 identifiers needed to construct settlement payloads.</p>

<p>To request a specific asset (or several), pass <code>asset</code> one or more times: <code>GET /api/v1/info/assets?asset=USDC&amp;asset=BTC</code>. Use the <code>type</code> and <code>collateral</code> query parameters to scope the response to spot or perpetual assets, or to the collateral asset only.</p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USDC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"symbol"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USDC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USD Coin"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"precision"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isActive"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isCollateral"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"starkexId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x35596841893e0d17079c27b2d72db1694f26a1932a7429144b439ba0807d29c"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"starkexResolution"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l1Id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l1Resolution"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"version"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
      </span><span class="nl">"createdAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-01T00:00:00Z"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SPOT"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"canBeUsedAsCollateral"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"riskFactors"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"upperBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000000"</span><span class="p">,</span><span class="w"> </span><span class="nl">"riskFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">],</span><span class="w">
      </span><span class="nl">"availableForTradeFactors"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"upperBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000000"</span><span class="p">,</span><span class="w"> </span><span class="nl">"riskFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"symbol"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Bitcoin"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"precision"</span><span class="p">:</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isActive"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isCollateral"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"starkexId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x4254432d3130000000000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"starkexResolution"</span><span class="p">:</span><span class="w"> </span><span class="mi">10000000000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l1Id"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l1Resolution"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
      </span><span class="nl">"version"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
      </span><span class="nl">"createdAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-01T00:00:00Z"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SPOT"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"canBeUsedAsCollateral"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"riskFactors"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"upperBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100000"</span><span class="p">,</span><span class="w"> </span><span class="nl">"riskFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.95"</span><span class="w"> </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"upperBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000000"</span><span class="p">,</span><span class="w"> </span><span class="nl">"riskFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.85"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">],</span><span class="w">
      </span><span class="nl">"availableForTradeFactors"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"upperBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100000"</span><span class="p">,</span><span class="w"> </span><span class="nl">"riskFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.9"</span><span class="w"> </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"upperBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000000"</span><span class="p">,</span><span class="w"> </span><span class="nl">"riskFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.8"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='query-parameters-2'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>asset</td>
<td>no</td>
<td>string[]</td>
<td>List of asset names to return. Repeat the parameter for each name (<code>?asset=USDC&amp;asset=BTC</code>). When omitted, all known assets are returned.</td>
</tr>
<tr>
<td>type</td>
<td>no</td>
<td>string</td>
<td>Filter by asset type. One of <code>SPOT</code> or <code>PERPETUAL</code>.</td>
</tr>
<tr>
<td>collateral</td>
<td>no</td>
<td>boolean</td>
<td>When <code>true</code>, return only the asset(s) flagged as collateral. When <code>false</code>, exclude them. Omit to return both.</td>
</tr>
</tbody></table>
<h3 id='response-2'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Internal numeric ID of the asset.</td>
</tr>
<tr>
<td>data[].name</td>
<td>yes</td>
<td>string</td>
<td>Display name (e.g. <code>USDC</code>, <code>BTC</code>).</td>
</tr>
<tr>
<td>data[].symbol</td>
<td>yes</td>
<td>string</td>
<td>Asset symbol — usually equal to <code>name</code>.</td>
</tr>
<tr>
<td>data[].description</td>
<td>yes</td>
<td>string</td>
<td>Human-readable description.</td>
</tr>
<tr>
<td>data[].precision</td>
<td>yes</td>
<td>number</td>
<td>Number of decimal places used for the asset&#39;s &quot;human&quot; amounts.</td>
</tr>
<tr>
<td>data[].isActive</td>
<td>yes</td>
<td>boolean</td>
<td><code>true</code> when the asset is currently usable; <code>false</code> when it has been disabled.</td>
</tr>
<tr>
<td>data[].isCollateral</td>
<td>yes</td>
<td>boolean</td>
<td><code>true</code> for the account&#39;s collateral asset (e.g. <code>USDC</code>). Exactly one asset is the collateral.</td>
</tr>
<tr>
<td>data[].type</td>
<td>yes</td>
<td>string</td>
<td>Asset type. One of <code>SPOT</code> or <code>PERPETUAL</code>. Spot assets — including the collateral — can be held as a balance and traded on spot markets; perpetual entries describe synthetic instruments backing perpetual contracts.</td>
</tr>
<tr>
<td>data[].canBeUsedAsCollateral</td>
<td>yes</td>
<td>boolean</td>
<td>When <code>true</code>, holdings of this asset count toward the account&#39;s available collateral via the <code>availableForTradeFactors</code> haircut. The collateral asset itself is always <code>true</code>.</td>
</tr>
<tr>
<td>data[].starkexId</td>
<td>yes</td>
<td>string</td>
<td>L2 asset ID used in settlement payloads.</td>
</tr>
<tr>
<td>data[].starkexResolution</td>
<td>yes</td>
<td>number</td>
<td>Number of L2 quantums per &quot;human&quot; unit.</td>
</tr>
<tr>
<td>data[].l1Id</td>
<td>yes</td>
<td>string</td>
<td>L1 contract address (or empty string for assets without an L1 representation).</td>
</tr>
<tr>
<td>data[].l1Resolution</td>
<td>yes</td>
<td>number</td>
<td>L1 quantum resolution.</td>
</tr>
<tr>
<td>data[].version</td>
<td>yes</td>
<td>number</td>
<td>Asset version; incremented when the on-chain definition changes.</td>
</tr>
<tr>
<td>data[].createdAt</td>
<td>yes</td>
<td>string</td>
<td>ISO-8601 timestamp at which the asset was registered.</td>
</tr>
<tr>
<td>data[].riskFactors[].upperBound</td>
<td>yes</td>
<td>string</td>
<td>Upper bound (in collateral asset units) of a notional bracket where the corresponding <code>riskFactor</code> applies. Ordered ascending; the last segment effectively covers the unbounded tail.</td>
</tr>
<tr>
<td>data[].riskFactors[].riskFactor</td>
<td>yes</td>
<td>string</td>
<td>Margin-side risk factor for this notional bracket, in decimal (e.g. <code>0.85</code>). Used when sizing margin requirements that involve this asset.</td>
</tr>
<tr>
<td>data[].availableForTradeFactors[].upperBound</td>
<td>yes</td>
<td>string</td>
<td>Upper bound of a notional bracket for the available-for-trade contribution.</td>
</tr>
<tr>
<td>data[].availableForTradeFactors[].riskFactor</td>
<td>yes</td>
<td>string</td>
<td>Haircut applied to this asset&#39;s notional value when computing the account&#39;s <code>availableForTrade</code> and <code>spotEquityForAvailableForTrade</code> (decimal, e.g. <code>0.9</code>).</td>
</tr>
</tbody></table>
<h2 id='get-asset-index-price'>Get asset index price</h2><h3 id='http-request-3'>HTTP Request</h3>
<p><code>GET /api/v1/info/assets/{asset}/price</code></p>

<p>Get the latest index price for a given asset, expressed in the collateral asset. Returns <code>0</code> if the asset has no published index price.</p>
<h3 id='url-parameters'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>asset</td>
<td>yes</td>
<td>string</td>
<td>Asset name as returned by <a href="#get-assets">Get assets</a>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65000.00"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-3'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data</td>
<td>yes</td>
<td>string</td>
<td>Latest index price expressed in the collateral asset; <code>0</code> if unavailable.</td>
</tr>
</tbody></table>
<h2 id='get-market-statistics'>Get market statistics</h2><h3 id='http-request-4'>HTTP Request</h3>
<p><code>GET /api/v1/info/markets/{market}/stats</code></p>

<p>Get the latest trading statistics for an individual market.</p>

<p>Please note that the returned funding rate represents the most recent funding rate, which is calculated every minute.</p>
<h3 id='url-parameters-2'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Name of the requested market.</td>
</tr>
</tbody></table>

<blockquote>
<p>Successful response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"dailyVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10283410.122959"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"dailyVolumeBase"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3343.1217"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"dailyPriceChange"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-26.00"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"dailyPriceChangePercentage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-0.0084"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"dailyLow"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3057.98"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"dailyHigh"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3133.53"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"lastPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3085.70"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"askPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3089.05"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"bidPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3087.50"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"markPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3088.439710293828"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"indexPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3089.556987078441"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"fundingRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-0.000059"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"nextFundingRate"</span><span class="p">:</span><span class="w"> </span><span class="mi">1716192000000</span><span class="p">,</span><span class="w">
    </span><span class="nl">"openInterest"</span><span class="p">:</span><span class="w"> </span><span class="s2">"35827242.257619"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"openInterestBase"</span><span class="p">:</span><span class="w"> </span><span class="s2">"11600.4344"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"deleverageLevels"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"shortPositions"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rankingLowerBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-1354535.1454"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rankingLowerBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-6.3450"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rankingLowerBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-0.3419"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rankingLowerBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0000"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">],</span><span class="w">
      </span><span class="nl">"longPositions"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rankingLowerBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-2978.4427"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rankingLowerBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0000"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rankingLowerBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0000"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rankingLowerBound"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0001"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<blockquote>
<p>Error response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ERROR"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"error"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"code"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NOT_FOUND"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Market not found"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-4'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.dailyVolume</td>
<td>yes</td>
<td>string</td>
<td>Trading volume of the market in the previous 24 hours in the collateral asset.</td>
</tr>
<tr>
<td>data.dailyVolumeBase</td>
<td>yes</td>
<td>string</td>
<td>Trading volume of the market in the previous 24 hours in the base asset.</td>
</tr>
<tr>
<td>data.dailyPriceChange</td>
<td>yes</td>
<td>string</td>
<td>Absolute price change of the last trade price over the past 24 hours.</td>
</tr>
<tr>
<td>data.dailyPriceChangePercentage</td>
<td>yes</td>
<td>string</td>
<td>Percent price change of the last trade price over the past 24 hours.</td>
</tr>
<tr>
<td>data.dailyLow</td>
<td>yes</td>
<td>string</td>
<td>Lowest trade price over the past 24 hours.</td>
</tr>
<tr>
<td>data.dailyHigh</td>
<td>yes</td>
<td>string</td>
<td>Highest trade price over the past 24 hours.</td>
</tr>
<tr>
<td>data.lastPrice</td>
<td>yes</td>
<td>string</td>
<td>Last price of the market.</td>
</tr>
<tr>
<td>data.askPrice</td>
<td>yes</td>
<td>string</td>
<td>Current best ask price of the market.</td>
</tr>
<tr>
<td>data.bidPrice</td>
<td>yes</td>
<td>string</td>
<td>Current best bid price of the market.</td>
</tr>
<tr>
<td>data.markPrice</td>
<td>yes</td>
<td>string</td>
<td>Current mark price of the market.</td>
</tr>
<tr>
<td>data.indexPrice</td>
<td>yes</td>
<td>string</td>
<td>Current index price of the market.</td>
</tr>
<tr>
<td>data.fundingRate</td>
<td>yes</td>
<td>string</td>
<td>Current funding rate, calculated every minute.</td>
</tr>
<tr>
<td>data.nextFundingRate</td>
<td>yes</td>
<td>number</td>
<td>Timestamp of the next funding update.</td>
</tr>
<tr>
<td>data.openInterest</td>
<td>yes</td>
<td>string</td>
<td>Open interest in collateral asset.</td>
</tr>
<tr>
<td>data.openInterestBase</td>
<td>yes</td>
<td>string</td>
<td>Open interest in base asset.</td>
</tr>
<tr>
<td>data.deleverageLevels</td>
<td>yes</td>
<td>enum</td>
<td>Auto Deleveraging (ADL) levels for long and short positions, ranging from level 1 (lowest risk) to level 4 (highest risk) of ADL. For details, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/liquidation-logic">documentation</a>.</td>
</tr>
</tbody></table>
<h2 id='get-market-order-book'>Get market order book</h2><h3 id='http-request-5'>HTTP Request</h3>
<p><code>GET /api/v1/info/markets/{market}/orderbook</code></p>

<p>Get the latest orderbook for an individual market.</p>
<h3 id='url-parameters-3'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Name of the requested market.</td>
</tr>
</tbody></table>

<blockquote>
<p>Successful response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"bid"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.04852"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"61827.7"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.50274"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"61820.5"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"ask"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.04852"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"61840.3"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.4998"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"61864.1"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<blockquote>
<p>Error response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ERROR"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"error"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"code"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NOT_FOUND"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Market not found"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-5'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.bid</td>
<td>yes</td>
<td>object[]</td>
<td>List of bid orders.</td>
</tr>
<tr>
<td>data.bid[].qty</td>
<td>yes</td>
<td>string</td>
<td>Qty for the price level.</td>
</tr>
<tr>
<td>data.bid[].price</td>
<td>yes</td>
<td>string</td>
<td>Bid price.</td>
</tr>
<tr>
<td>data.ask</td>
<td>yes</td>
<td>object[]</td>
<td>List of ask orders.</td>
</tr>
<tr>
<td>data.ask[].qty</td>
<td>yes</td>
<td>string</td>
<td>Qty for the price level.</td>
</tr>
<tr>
<td>data.ask[].price</td>
<td>yes</td>
<td>string</td>
<td>Ask price.</td>
</tr>
</tbody></table>
<h2 id='get-market-last-trades'>Get market last trades</h2><h3 id='http-request-6'>HTTP Request</h3>
<p><code>GET /api/v1/info/markets/{market}/trades</code></p>

<p>Get the latest trade for an individual market.</p>
<h3 id='url-parameters-4'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Name of the requested market.</td>
</tr>
</tbody></table>

<blockquote>
<p>Successful response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"i"</span><span class="p">:</span><span class="w"> </span><span class="mi">1844000421446684673</span><span class="p">,</span><span class="w">
      </span><span class="nl">"m"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"S"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SELL"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tT"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TRADE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"T"</span><span class="p">:</span><span class="w"> </span><span class="mi">1728478935001</span><span class="p">,</span><span class="w">
      </span><span class="nl">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"61998.5"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"q"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.04839"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"i"</span><span class="p">:</span><span class="w"> </span><span class="mi">1844000955650019328</span><span class="p">,</span><span class="w">
      </span><span class="nl">"m"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"S"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SELL"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tT"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TRADE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"T"</span><span class="p">:</span><span class="w"> </span><span class="mi">1728479062365</span><span class="p">,</span><span class="w">
      </span><span class="nl">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"61951.4"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"q"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.00029"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<blockquote>
<p>Error response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ERROR"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"error"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"code"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NOT_FOUND"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Market not found"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-6'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data[].i</td>
<td>number</td>
<td>Trade ID.</td>
</tr>
<tr>
<td>data[].m</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].S</td>
<td>string</td>
<td>Side of taker trades. Can be <code>BUY</code> or <code>SELL</code>.</td>
</tr>
<tr>
<td>data[].tT</td>
<td>string</td>
<td>Trade type. Can be <code>TRADE</code>, <code>LIQUIDATION</code> or <code>DELEVERAGE</code>.</td>
</tr>
<tr>
<td>data[].T</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the trade happened.</td>
</tr>
<tr>
<td>data[].p</td>
<td>string</td>
<td>Trade price.</td>
</tr>
<tr>
<td>data[].q</td>
<td>string</td>
<td>Trade quantity in base asset.</td>
</tr>
</tbody></table>
<h2 id='get-candles-history'>Get candles history</h2><h3 id='http-request-7'>HTTP Request</h3>
<p><code>GET /api/v1/info/candles/{market}/{candleType}</code></p>

<p>Get the candles history for an individual market for the timeframe specified in the request. Candles are sorted by timestamp in descending order.</p>

<p>Available price types include:</p>

<ol>
<li><p>Trades (last) price: <code>GET /api/v1/info/candles/{market}/trades</code>.</p></li>
<li><p>Mark price: <code>GET /api/v1/info/candles/{market}/mark-prices</code>.</p></li>
<li><p>Index price: <code>GET /api/v1/info/candles/{market}/index-prices</code>.</p></li>
</ol>

<p>The endpoint returns a maximum of 10,000 records.</p>
<h3 id='url-parameters-5'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Name of the requested market.</td>
</tr>
<tr>
<td>candleType</td>
<td>yes</td>
<td>string</td>
<td>Price type. Can be <code>trades</code>, <code>mark-prices</code>, or <code>index-prices</code>.</td>
</tr>
</tbody></table>
<h3 id='query-parameters-3'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>The time interval between data points.</td>
</tr>
<tr>
<td>limit</td>
<td>yes</td>
<td>number</td>
<td>The maximum number of items that should be returned.</td>
</tr>
<tr>
<td>endTime</td>
<td>no</td>
<td>number</td>
<td>End timestamp (in epoch milliseconds) for the requested period.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"o"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65206.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65206.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"h"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65206.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"c"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65206.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"v"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"T"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715797320000</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-7'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code></td>
</tr>
<tr>
<td>data[].o</td>
<td>yes</td>
<td>string</td>
<td>Open price.</td>
</tr>
<tr>
<td>data[].c</td>
<td>yes</td>
<td>string</td>
<td>Close price.</td>
</tr>
<tr>
<td>data[].h</td>
<td>yes</td>
<td>string</td>
<td>Highest price.</td>
</tr>
<tr>
<td>data[].l</td>
<td>yes</td>
<td>string</td>
<td>Lowest price.</td>
</tr>
<tr>
<td>data[].v</td>
<td>yes</td>
<td>string</td>
<td>Trading volume (Only for <code>trades</code> candles).</td>
</tr>
<tr>
<td>data[].T</td>
<td>yes</td>
<td>number</td>
<td>Starting timestamp (in epoch milliseconds) for the candle.</td>
</tr>
</tbody></table>
<h2 id='get-funding-rates-history'>Get funding rates history</h2><h3 id='http-request-8'>HTTP Request</h3>
<p><code>GET /api/v1/info/{market}/funding?startTime={startTime}&amp;endTime={endTime}</code></p>

<p>Get the funding rates history for an individual market for the timeframe specified in the request. The funding rates are sorted by timestamp in descending order.</p>

<p>The endpoint returns a maximum of 10,000 records; pagination should be used to access records beyond this limit.</p>

<p>While the funding rate is calculated every minute, it is only applied once per hour. The records represent the 1-hour rates that were applied for the payment of funding fees.</p>

<p>For details on how the funding rate is calculated on Extended, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/funding-payments">documentation</a>.</p>

<aside class="notice">
Perpetual markets only — spot markets do not have funding rates.
</aside>
<h3 id='url-parameters-6'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Names of the requested market.</td>
</tr>
</tbody></table>
<h3 id='query-parameters-4'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>startTime</td>
<td>yes</td>
<td>number</td>
<td>Starting timestamp (in epoch milliseconds) for the requested period.</td>
</tr>
<tr>
<td>endTime</td>
<td>yes</td>
<td>number</td>
<td>Ending timestamp (in epoch milliseconds) for the requested period.</td>
</tr>
<tr>
<td>cursor</td>
<td>no</td>
<td>number</td>
<td>Determines the offset of the returned result. To get the next result page, you can use the cursor from the pagination section of the previous response.</td>
</tr>
<tr>
<td>limit</td>
<td>no</td>
<td>number</td>
<td>Maximum number of items that should be returned.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"m"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"T"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440</span><span class="p">,</span><span class="w">
      </span><span class="nl">"f"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.001"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"pagination"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"cursor"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
    </span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-8'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].m</td>
<td>yes</td>
<td>string</td>
<td>Name of the requested market.</td>
</tr>
<tr>
<td>data[].T</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the funding rate was calculated and applied.</td>
</tr>
<tr>
<td>data[].f</td>
<td>yes</td>
<td>string</td>
<td>Funding rates used for funding fee payments.</td>
</tr>
</tbody></table>
<h2 id='get-open-interest-history'>Get open interest history</h2><h3 id='http-request-9'>HTTP Request</h3>
<p><code>GET /api/v1/info/{market}/open-interests?interval={interval}&amp;startTime={startTime}&amp;endTime={endTime}</code></p>

<p>Get the open interest history for an individual market for the timeframe specified in the request. The open interests are sorted by timestamp in descending order.</p>

<p>The endpoint returns a maximum of 300 records; proper combination of start and end time should be used to access records beyond this limit.</p>

<aside class="notice">
Perpetual markets only — open interest is not tracked for spot markets.
</aside>
<h3 id='url-parameters-7'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Names of the requested market.</td>
</tr>
</tbody></table>
<h3 id='query-parameters-5'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>startTime</td>
<td>yes</td>
<td>number</td>
<td>Starting timestamp (in epoch milliseconds) for the requested period.</td>
</tr>
<tr>
<td>endTime</td>
<td>yes</td>
<td>number</td>
<td>Ending timestamp (in epoch milliseconds) for the requested period.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>enum</td>
<td>P1H for hour and P1D for day</td>
</tr>
<tr>
<td>limit</td>
<td>no</td>
<td>number</td>
<td>Maximum number of items that should be returned.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"i"</span><span class="p">:</span><span class="w"> </span><span class="s2">"151193.8952300000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"I"</span><span class="p">:</span><span class="w"> </span><span class="s2">"430530.0000000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"t"</span><span class="p">:</span><span class="w"> </span><span class="mi">1749513600000</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"i"</span><span class="p">:</span><span class="w"> </span><span class="s2">"392590.9522500000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"I"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1147356.0000000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"t"</span><span class="p">:</span><span class="w"> </span><span class="mi">1749600000000</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"i"</span><span class="p">:</span><span class="w"> </span><span class="s2">"397721.7285100000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"I"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1224362.0000000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"t"</span><span class="p">:</span><span class="w"> </span><span class="mi">1749686400000</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-9'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].i</td>
<td>yes</td>
<td>string</td>
<td>Open interest in USD.</td>
</tr>
<tr>
<td>data[].I</td>
<td>yes</td>
<td>string</td>
<td>Open interest in synthetic asset.</td>
</tr>
<tr>
<td>data[].t</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the funding rate was calculated and applied.</td>
</tr>
</tbody></table>
<h2 id='get-builder-dashboard'>Get builder dashboard</h2>
<p><code>GET /api/v1/info/builder/dashboard</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"total"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"builderName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FlowBot"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"volume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"439912489.2299"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"extendedFees"</span><span class="p">:</span><span class="w"> </span><span class="s2">"106512.842391"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"activeUsers"</span><span class="p">:</span><span class="w"> </span><span class="mi">181</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"daily"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-12-15"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"builderName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FlowBot"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"volume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12720299.02594"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"extendedFees"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3180.074578"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"activeUsers"</span><span class="p">:</span><span class="w"> </span><span class="mi">24</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-12-16"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"builderName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FlowBot"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"volume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"11827429.94026"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"extendedFees"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2956.857352"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"activeUsers"</span><span class="p">:</span><span class="w"> </span><span class="mi">21</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Returns builder dashboard statistics including total and daily trading volume, fees, and active users for the authenticated builder.</p>
<h3 id='response-10'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data.total</td>
<td>yes</td>
<td>object[]</td>
<td>Array containing total aggregated statistics.</td>
</tr>
<tr>
<td>data.total[].builderName</td>
<td>yes</td>
<td>string</td>
<td>Name of the builder.</td>
</tr>
<tr>
<td>data.total[].volume</td>
<td>yes</td>
<td>string</td>
<td>Total trading volume generated by the builder.</td>
</tr>
<tr>
<td>data.total[].extendedFees</td>
<td>yes</td>
<td>string</td>
<td>Total fees earned by the builder to the extended exchange.</td>
</tr>
<tr>
<td>data.total[].activeUsers</td>
<td>yes</td>
<td>number</td>
<td>Total number of active users for the builder.</td>
</tr>
<tr>
<td>data.daily</td>
<td>yes</td>
<td>object[]</td>
<td>Array containing daily statistics.</td>
</tr>
<tr>
<td>data.daily[].date</td>
<td>yes</td>
<td>string</td>
<td>Date in YYYY-MM-DD format.</td>
</tr>
<tr>
<td>data.daily[].builderName</td>
<td>yes</td>
<td>string</td>
<td>Name of the builder.</td>
</tr>
<tr>
<td>data.daily[].volume</td>
<td>yes</td>
<td>string</td>
<td>Daily trading volume generated by the builder.</td>
</tr>
<tr>
<td>data.daily[].extendedFees</td>
<td>yes</td>
<td>string</td>
<td>Daily fees earned by the builder to the extended exchange.</td>
</tr>
<tr>
<td>data.daily[].activeUsers</td>
<td>yes</td>
<td>number</td>
<td>Number of active users for the builder on that date.</td>
</tr>
</tbody></table>
<h2 id='get-builder-trades'>Get builder trades</h2>
<p><code>GET /api/v1/builder/trades</code></p>

<p>Returns the trade history for the authenticated builder, ordered by trade ID descending (newest first). This endpoint requires API key authentication and only returns trades in which the authenticated builder participated.</p>

<p>Each trade exposes only the side on which the authenticated builder acted. If the builder is the maker builder, the maker-side fields are populated and the taker-side fields are returned as <code>null</code>; if the builder is the taker builder, the taker-side fields are populated and the maker-side fields are returned as <code>null</code>.</p>

<p>The endpoint returns up to 1000 records per request; use the <code>cursor</code> parameter to paginate through older trades.</p>
<h3 id='query-parameters-6'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>limit</td>
<td>no</td>
<td>number</td>
<td>Maximum number of records to return. Defaults to <code>1000</code> and is capped at <code>1000</code>.</td>
</tr>
<tr>
<td>cursor</td>
<td>no</td>
<td>number</td>
<td>Determines the offset of the returned result. It represents the trade ID after which you want to retrieve the next result. To get the next result page, use the cursor from the pagination section of the previous response.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
      </span><span class="nl">"time"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerId"</span><span class="p">:</span><span class="w"> </span><span class="mi">3017</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerBuilderId"</span><span class="p">:</span><span class="w"> </span><span class="mi">5021</span><span class="p">,</span><span class="w">
      </span><span class="nl">"volume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5296.8060000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2.6484030000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerBuilderFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.5296806000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerId"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerBuilderId"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerFee"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerBuilderFee"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016831</span><span class="p">,</span><span class="w">
      </span><span class="nl">"time"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563439000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerId"</span><span class="p">:</span><span class="w"> </span><span class="mi">4088</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerBuilderId"</span><span class="p">:</span><span class="w"> </span><span class="mi">5021</span><span class="p">,</span><span class="w">
      </span><span class="nl">"volume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1200.0000000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.6000000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerBuilderFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1200000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerId"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerBuilderId"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerFee"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerBuilderFee"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"pagination"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"cursor"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016831</span><span class="p">,</span><span class="w">
    </span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-11'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Trade ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].time</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the trade happened.</td>
</tr>
<tr>
<td>data[].volume</td>
<td>yes</td>
<td>string</td>
<td>Trade volume in USD.</td>
</tr>
<tr>
<td>data[].makerId</td>
<td>no</td>
<td>number</td>
<td>Client ID of the maker. Populated only when the authenticated builder is the maker builder, otherwise <code>null</code>.</td>
</tr>
<tr>
<td>data[].makerBuilderId</td>
<td>no</td>
<td>number</td>
<td>Client ID of the maker builder. Populated only when the authenticated builder is the maker builder, otherwise <code>null</code>.</td>
</tr>
<tr>
<td>data[].makerFee</td>
<td>no</td>
<td>string</td>
<td>Fee paid by the maker. Populated only when the authenticated builder is the maker builder, otherwise <code>null</code>.</td>
</tr>
<tr>
<td>data[].makerBuilderFee</td>
<td>no</td>
<td>string</td>
<td>Builder fee earned on the maker side. Populated only when the authenticated builder is the maker builder, otherwise <code>null</code>.</td>
</tr>
<tr>
<td>data[].takerId</td>
<td>no</td>
<td>number</td>
<td>Client ID of the taker. Populated only when the authenticated builder is the taker builder, otherwise <code>null</code>.</td>
</tr>
<tr>
<td>data[].takerBuilderId</td>
<td>no</td>
<td>number</td>
<td>Client ID of the taker builder. Populated only when the authenticated builder is the taker builder, otherwise <code>null</code>.</td>
</tr>
<tr>
<td>data[].takerFee</td>
<td>no</td>
<td>string</td>
<td>Fee paid by the taker. Populated only when the authenticated builder is the taker builder, otherwise <code>null</code>.</td>
</tr>
<tr>
<td>data[].takerBuilderFee</td>
<td>no</td>
<td>string</td>
<td>Builder fee earned on the taker side. Populated only when the authenticated builder is the taker builder, otherwise <code>null</code>.</td>
</tr>
</tbody></table>
<h1 id='private-rest-api'>Private REST-API</h1><h2 id='account'>Account</h2>
<p>You can create up to ten Extended sub-accounts for each wallet address. For more details, please refer to the <a href="https://api.docs.extended.exchange/#authentication">Authentication section</a> of the API Documentation.</p>

<p>The Private API endpoints listed below grant access to details specific to each sub-account, such as balances, transactions, positions, orders, trades, and the fee rates applied. Additionally, there are endpoints for retrieving the current leverage and adjusting it.</p>

<p>Please note that all endpoints in this section will only return records for the authenticated sub-account.</p>
<h2 id='get-account-details'>Get account details</h2><h3 id='http-request-10'>HTTP Request</h3>
<p><code>GET /api/v1/user/account/info</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACTIVE"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"l2Key"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x123"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"l2Vault"</span><span class="p">:</span><span class="w"> </span><span class="mi">321</span><span class="p">,</span><span class="w">
    </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">123</span><span class="p">,</span><span class="w">
    </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"abc"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"bridgeStarknetAddress"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x21be84f913dbddbfc0a3993e1f949933139f427f88eb6bfd247ab3ef7174487"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Get current account details.</p>
<h3 id='response-12'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.status</td>
<td>yes</td>
<td>string</td>
<td>Account status.</td>
</tr>
<tr>
<td>data.l2Key</td>
<td>yes</td>
<td>string</td>
<td>Account public key in perp contract.</td>
</tr>
<tr>
<td>data.l2Vault</td>
<td>yes</td>
<td>string</td>
<td>Position ID in perp contract.</td>
</tr>
<tr>
<td>data.accountId</td>
<td>yes</td>
<td>string</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data.description</td>
<td>no</td>
<td>string</td>
<td>Account description (name).</td>
</tr>
<tr>
<td>data.bridgeStarknetAddress</td>
<td>yes</td>
<td>string</td>
<td>L2 account address for EVM bridging</td>
</tr>
</tbody></table>
<h2 id='get-sub-accounts'>Get sub-accounts</h2><h3 id='http-request-11'>HTTP Request</h3>
<p><code>GET /api/v1/user/accounts</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">123</span><span class="p">,</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Main"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountIndex"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACTIVE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l2Key"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x123"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l2Vault"</span><span class="p">:</span><span class="w"> </span><span class="s2">"321"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"bridgeStarknetAddress"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0xabc"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountIndexForKeyGeneration"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">999</span><span class="p">,</span><span class="w">
      </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Vault Balance"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountIndex"</span><span class="p">:</span><span class="w"> </span><span class="mi">1001</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACTIVE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l2Key"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x123"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l2Vault"</span><span class="p">:</span><span class="w"> </span><span class="s2">"999"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"bridgeStarknetAddress"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0xabc"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountIndexForKeyGeneration"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Get the list of all sub-accounts associated with the authenticated wallet.</p>
<h3 id='response-13'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Sub-account ID.</td>
</tr>
<tr>
<td>data[].description</td>
<td>no</td>
<td>string</td>
<td>Sub-account description (name) as set by the user.</td>
</tr>
<tr>
<td>data[].accountIndex</td>
<td>yes</td>
<td>number</td>
<td>Zero-based index of the sub-account on the wallet (<code>0</code> for the main account, <code>1</code>–<code>9</code> for the additional trading sub-accounts).</td>
</tr>
<tr>
<td>data[].status</td>
<td>yes</td>
<td>string</td>
<td>Sub-account status (e.g. <code>ACTIVE</code>).</td>
</tr>
<tr>
<td>data[].l2Key</td>
<td>yes</td>
<td>string</td>
<td>Account public Stark key in the perp contract.</td>
</tr>
<tr>
<td>data[].l2Vault</td>
<td>yes</td>
<td>string</td>
<td>Position (vault) ID in the perp contract.</td>
</tr>
<tr>
<td>data[].bridgeStarknetAddress</td>
<td>yes</td>
<td>string</td>
<td>L2 account address used for EVM bridging.</td>
</tr>
<tr>
<td>data[].accountIndexForKeyGeneration</td>
<td>yes</td>
<td>number</td>
<td>Index used to derive the sub-account&#39;s Stark key from the wallet.</td>
</tr>
</tbody></table>
<h2 id='get-balance'>Get balance</h2><h3 id='http-request-12'>HTTP Request</h3>
<p><code>GET /api/v1/user/balance</code></p>

<p>Get key balance details for the authenticated sub-account. Returns a 404 error if the user’s balance is 0.</p>

<ol>
<li><p>Account Balance = Deposits - Withdrawals + Realised PnL.</p></li>
<li><p>Equity = Account Balance + Unrealised PnL.</p></li>
<li><p>Available Balance for Trading = Equity - Initial Margin Requirement.</p></li>
<li><p>Available Balance for Withdrawals = max(0, Wallet Balance + Withdrawable Unrealised PnL + min(0, Unrealised PnL - Withdrawable Unrealised PnL) - Initial Margin Requirement - Post-Withdrawal Margin Requirement).</p></li>
</ol>

<p>- Withdrawable Unrealised PnL = the net unrealised PnL of the positions held on markets where <code>tradingConfig.uPnlWithdrawable</code> is <code>true</code> (see <a href="#get-markets">Get markets</a>). Unrealised profit on any other market is excluded from the withdrawal capacity, while unrealised losses always count in full on every market. Reported as <code>withdrawableUnrealisedPnl</code> below.
    - Post-Withdrawal Margin Requirement = for each position on such a market, max(0, Position Notional * <code>tradingConfig.postWithdrawalMarginFactor</code> - Position Notional / Leverage), summed across positions. It is zero when the account has no withdrawable unrealised PnL, or when the position&#39;s own leverage already covers the fraction.
    - Withdrawing unrealised profit can take the Wallet Balance negative. The balance is restored when the position is closed and the profit is realised.</p>

<ol>
<li><p>Unrealised PnL (mark-price-based) = The sum of unrealised PnL across open positions, calculated as Position Size * (Mark Price - Entry Price).</p></li>
<li><p>Unrealised PnL (mid-price-based) = The sum of unrealised PnL across open positions, calculated as Position Size * (Mid Price - Entry Price).</p></li>
<li><p>Initial Margin Requirement for a given market = Max(Abs(Position Value + Value of Buy Orders), Abs(Position Value + Value of Sell Orders))*1/Leverage.</p></li>
<li><p>Account Margin Ratio = Maintenance Margin requirement of all open positions / Equity. Liquidation is triggered when Account Margin Ratio &gt; 100%.</p></li>
<li><p>Account Exposure = Sum(All positions value)</p></li>
<li><p>Account Leverage = Exposure / Equity.</p></li>
</ol>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"collateralName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USDC"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"balance"</span><span class="p">:</span><span class="w"> </span><span class="s2">"13500"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"equity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"availableForTrade"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1200"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"availableForWithdrawal"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"unrealisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-10.1"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"withdrawableUnrealisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"initialMargin"</span><span class="p">:</span><span class="w"> </span><span class="s2">"160"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"marginRatio"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.5"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"exposure"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12751.859629"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1275.1860"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"spotEquity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"30875"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"spotEquityForAvailableForTrade"</span><span class="p">:</span><span class="w"> </span><span class="s2">"30875"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"collateralReservedForSpotOrders"</span><span class="p">:</span><span class="w"> </span><span class="s2">"500"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"updatedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-14'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.collateralName</td>
<td>yes</td>
<td>string</td>
<td>Name of the collateral asset used for the account.</td>
</tr>
<tr>
<td>data.balance</td>
<td>yes</td>
<td>string</td>
<td>Account balance expressed in the collateral asset, also known as Wallet balance.</td>
</tr>
<tr>
<td>data.equity</td>
<td>yes</td>
<td>string</td>
<td>Equity of the account, including both collateral PnL and the equity contribution from spot holdings.</td>
</tr>
<tr>
<td>data.availableForTrade</td>
<td>yes</td>
<td>string</td>
<td>Available Balance for Trading.</td>
</tr>
<tr>
<td>data.availableForWithdrawal</td>
<td>yes</td>
<td>string</td>
<td>Available Balance for Withdrawals (collateral asset only — see <a href="#withdrawals">Withdrawals</a> for the spot asset rules). Includes unrealised profit only from markets where <code>tradingConfig.uPnlWithdrawable</code> is <code>true</code>, and is reduced by the post-withdrawal margin those positions must retain.</td>
</tr>
<tr>
<td>data.unrealisedPnl</td>
<td>yes</td>
<td>string</td>
<td>Current unrealised PnL of the account.</td>
</tr>
<tr>
<td>data.withdrawableUnrealisedPnl</td>
<td>yes</td>
<td>string</td>
<td>The portion of <code>unrealisedPnl</code> held on markets where <code>tradingConfig.uPnlWithdrawable</code> is <code>true</code>. Signed: a losing position on such a market reports a negative value. <code>0</code> when the account holds no positions on those markets.</td>
</tr>
<tr>
<td>data.initialMargin</td>
<td>yes</td>
<td>string</td>
<td>Collateral used to open the positions and orders.</td>
</tr>
<tr>
<td>data.marginRatio</td>
<td>yes</td>
<td>string</td>
<td>Margin ratio of the account.</td>
</tr>
<tr>
<td>data.exposure</td>
<td>yes</td>
<td>string</td>
<td>Exposure of the account.</td>
</tr>
<tr>
<td>data.leverage</td>
<td>yes</td>
<td>string</td>
<td>Leverage of the account.</td>
</tr>
<tr>
<td>data.spotEquity</td>
<td>yes</td>
<td>string</td>
<td>Sum of <code>equityContribution</code> across the account&#39;s spot balances. The portion of account equity that comes from non-collateral spot holdings. <code>0</code> for accounts with no spot holdings.</td>
</tr>
<tr>
<td>data.spotEquityForAvailableForTrade</td>
<td>yes</td>
<td>string</td>
<td>Portion of <code>spotEquity</code> recognised when computing <code>availableForTrade</code> (subject to additional risk haircuts).</td>
</tr>
<tr>
<td>data.collateralReservedForSpotOrders</td>
<td>yes</td>
<td>string</td>
<td>Collateral that is currently reserved to back the user&#39;s open spot orders (buy orders reserve collateral; sell orders reserve the spot asset). <code>0</code> when the account has no open spot orders.</td>
</tr>
<tr>
<td>data.updatedTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the server generated the balance message.</td>
</tr>
</tbody></table>
<h2 id='get-spot-balances'>Get spot balances</h2><h3 id='http-request-13'>HTTP Request</h3>
<p><code>GET /api/v1/user/spot/balances?accountId={accountId}</code></p>

<p>Get the per-asset spot balances for the authenticated sub-account. The response also includes one entry for the collateral asset (<code>USDC</code>) with <code>indexPrice</code> and <code>contributionFactor</code> set to <code>1</code>, so the same payload represents the account&#39;s full asset inventory.</p>

<p>Returns <code>404 Not Found</code> when the account has no balances at all (no collateral and no spot assets).</p>

<p>The optional <code>accountId</code> query parameter can be repeated to fetch balances for multiple sub-accounts in a single call (each ID must belong to the authenticated wallet). When omitted, the currently selected account is used.</p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">123</span><span class="p">,</span><span class="w">
      </span><span class="nl">"asset"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USDC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"balance"</span><span class="p">:</span><span class="w"> </span><span class="s2">"13500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"indexPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"notionalValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"13500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"contributionFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"equityContribution"</span><span class="p">:</span><span class="w"> </span><span class="s2">"13500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"availableToWithdraw"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"updatedAt"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">123</span><span class="p">,</span><span class="w">
      </span><span class="nl">"asset"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"balance"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.5"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"indexPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"notionalValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"32500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"contributionFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.95"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"equityContribution"</span><span class="p">:</span><span class="w"> </span><span class="s2">"30875"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"availableToWithdraw"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.5"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"absolutePnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"pnlPercentage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.083333"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"averageEntryPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"60000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"updatedAt"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='query-parameters-7'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>no</td>
<td>number</td>
<td>Sub-account ID to fetch balances for. Can be repeated (<code>?accountId=1&amp;accountId=2</code>). Must belong to the authenticated wallet. Defaults to the selected sub-account.</td>
</tr>
</tbody></table>
<h3 id='response-15'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Sub-account that holds this asset.</td>
</tr>
<tr>
<td>data[].asset</td>
<td>yes</td>
<td>string</td>
<td>Asset symbol (e.g. <code>USDC</code>, <code>BTC</code>, <code>ETH</code>).</td>
</tr>
<tr>
<td>data[].balance</td>
<td>yes</td>
<td>string</td>
<td>Quantity of the asset held by the sub-account.</td>
</tr>
<tr>
<td>data[].indexPrice</td>
<td>yes</td>
<td>string</td>
<td>Current index price of the asset, denominated in the collateral asset. Always <code>1</code> for the collateral entry.</td>
</tr>
<tr>
<td>data[].notionalValue</td>
<td>yes</td>
<td>string</td>
<td><code>balance * indexPrice</code>, expressed in the collateral asset.</td>
</tr>
<tr>
<td>data[].contributionFactor</td>
<td>yes</td>
<td>string</td>
<td>Risk haircut applied to this asset when it backs perpetual margin. Always <code>1</code> for the collateral entry; less than <code>1</code> for non-collateral spot assets.</td>
</tr>
<tr>
<td>data[].equityContribution</td>
<td>yes</td>
<td>string</td>
<td><code>notionalValue * contributionFactor</code> — the amount this asset adds to the account&#39;s equity for margin purposes.</td>
</tr>
<tr>
<td>data[].availableToWithdraw</td>
<td>no</td>
<td>string</td>
<td>Amount of this asset that can be withdrawn right now: the account&#39;s withdrawal capacity converted into this asset&#39;s units, capped by the balance actually held, rounded down to the asset&#39;s precision. For the collateral asset this equals <code>availableForWithdrawal</code>. For other assets, withdrawable unrealised profit raises the cap but is never added to the asset&#39;s own balance, so the figure never exceeds <code>balance</code>. See <a href="#withdrawals">Withdrawals</a> for the formula. Use this value when constructing a <a href="#withdrawals">Withdrawal</a> request for the corresponding <code>asset</code>.</td>
</tr>
<tr>
<td>data[].absolutePnl</td>
<td>no</td>
<td>string</td>
<td>Unrealised P&amp;L on the holding, denominated in the collateral asset. Omitted for the collateral entry and when portfolio stats are unavailable.</td>
</tr>
<tr>
<td>data[].pnlPercentage</td>
<td>no</td>
<td>string</td>
<td>Unrealised P&amp;L as a fraction of cost basis (<code>absolutePnl / (averageEntryPrice * balance)</code>), to 6 decimal places. Omitted when cost basis is zero or portfolio stats are unavailable.</td>
</tr>
<tr>
<td>data[].averageEntryPrice</td>
<td>no</td>
<td>string</td>
<td>Volume-weighted average entry price of the holding, denominated in the collateral asset. Omitted when portfolio stats are unavailable.</td>
</tr>
<tr>
<td>data[].updatedAt</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the balance was last updated.</td>
</tr>
</tbody></table>
<h2 id='get-deposits-withdrawals-transfers-history'>Get deposits, withdrawals, transfers history</h2><h3 id='http-request-14'>HTTP Request</h3>
<p><code>GET /api/v1/user/assetOperations?&amp;type={type}&amp;status={status}</code></p>

<p>Get the history of deposits, withdrawals, and transfers between sub-accounts for the authenticated sub-account. Optionally, the request can be filtered by a specific transaction type or status.</p>

<p>The endpoint returns 50 records per page; pagination should be used to access records beyond this limit. Transactions are sorted by timestamp in descending order.</p>
<h3 id='transactions-types'>Transactions types</h3>
<table><thead>
<tr>
<th>Transaction</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>DEPOSIT</code></td>
<td>Deposit.</td>
</tr>
<tr>
<td><code>CLAIM</code></td>
<td>Testing funds claim. Available only on Extended Testnet.</td>
</tr>
<tr>
<td><code>TRANSFER</code></td>
<td>Transfer between sub-accounts within one wallet.</td>
</tr>
<tr>
<td><code>WITHDRAWAL</code></td>
<td>Withdrawal.</td>
</tr>
</tbody></table>
<h3 id='transactions-statuses'>Transactions statuses</h3>
<table><thead>
<tr>
<th>Status</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>CREATED</code></td>
<td>Transaction created on Extended.</td>
</tr>
<tr>
<td><code>IN_PROGRESS</code></td>
<td>Transaction is being processed by Extended, Arc or bridge provider.</td>
</tr>
<tr>
<td><code>COMPLETED</code></td>
<td>Transaction completed.</td>
</tr>
<tr>
<td><code>REJECTED</code></td>
<td>Transaction rejected.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
    </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
            </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1951255127004282880"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TRANSFER"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"COMPLETED"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-3.0000000000000000"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"fee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"asset"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
            </span><span class="nl">"time"</span><span class="p">:</span><span class="w"> </span><span class="mi">1754050449502</span><span class="p">,</span><span class="w">
            </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">100009</span><span class="p">,</span><span class="w">
            </span><span class="nl">"counterpartyAccountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">100023</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
            </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x6795eac4ebbdd9fb88f85e3ce4ce4e61895049591c89ad5db8046a4546d2cdd"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"DEPOSIT"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"COMPLETED"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4.9899990000000000"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"fee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0000000000000000"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"asset"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
            </span><span class="nl">"time"</span><span class="p">:</span><span class="w"> </span><span class="mi">1753872990528</span><span class="p">,</span><span class="w">
            </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">100009</span><span class="p">,</span><span class="w">
            </span><span class="nl">"transactionHash"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x93829e61480b528bb18c1b94f0afbc672fb2b340fbfd2f329dffc4180e24b894"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"chain"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ETH"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
            </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1950490023665475584"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"WITHDRAWAL"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"COMPLETED"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-4.0000000000000000"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"fee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0001000000000000"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"asset"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
            </span><span class="nl">"time"</span><span class="p">:</span><span class="w"> </span><span class="mi">1753868034651</span><span class="p">,</span><span class="w">
            </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">100009</span><span class="p">,</span><span class="w">
            </span><span class="nl">"transactionHash"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x6d89968d72fc766691d4772048edaf667c88894aedf71f0490c2592c1d268691"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"chain"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ETH"</span><span class="w">
        </span><span class="p">}</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"pagination"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"cursor"</span><span class="p">:</span><span class="w"> </span><span class="mi">23</span><span class="p">,</span><span class="w">
        </span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">23</span><span class="w">
    </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='query-parameters-8'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>type</td>
<td>no</td>
<td>string</td>
<td>Transaction type. Refer to the list of transaction types in the endpoint description above.</td>
</tr>
<tr>
<td>status</td>
<td>no</td>
<td>string</td>
<td>Transaction status. Refer to the list of statuses in the endpoint description above.</td>
</tr>
<tr>
<td>cursor</td>
<td>no</td>
<td></td>
<td>Determines the offset of the returned result. It represents the ID of the item after which you want to retrieve the next result. To get the next result page, you can use the cursor from the pagination section of the previous response.</td>
</tr>
<tr>
<td>limit</td>
<td>no</td>
<td>number</td>
<td>Maximum number of items that should be returned.</td>
</tr>
</tbody></table>
<h3 id='response-16'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Response status. Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number or string</td>
<td>Transaction ID. A number assigned by Extended for transfers and withdrawals. An onchain id string for deposits.</td>
</tr>
<tr>
<td>data[].type</td>
<td>yes</td>
<td>string</td>
<td>Transaction type. Refer to the list of transaction types in the endpoint description above.</td>
</tr>
<tr>
<td>data[].status</td>
<td>yes</td>
<td>string</td>
<td>Transaction status. Refer to the list of statuses in the endpoint description above.</td>
</tr>
<tr>
<td>data[].amount</td>
<td>yes</td>
<td>string</td>
<td>Transaction amount, absolute value in collateral asset.</td>
</tr>
<tr>
<td>data[].fee</td>
<td>yes</td>
<td>string</td>
<td>Fee paid.</td>
</tr>
<tr>
<td>data[].asset</td>
<td>yes</td>
<td>string</td>
<td>Collateral asset name.</td>
</tr>
<tr>
<td>data[].time</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (epoch milliseconds) when the transaction was updated.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID; source account for transfers and withdrawals; destination account for deposits.</td>
</tr>
<tr>
<td>data[].counterpartyAccountId</td>
<td>no</td>
<td>number</td>
<td>Account ID; destination account for transfers.</td>
</tr>
<tr>
<td>data[].transactionHash</td>
<td>no</td>
<td>string</td>
<td>Onchain transaction hash. Not available for transfers.</td>
</tr>
<tr>
<td>data[].chain</td>
<td>no</td>
<td>string</td>
<td>Source chain name for deposits; target chain name for withdrawals.</td>
</tr>
</tbody></table>
<h2 id='get-positions'>Get positions</h2><h3 id='http-request-15'>HTTP Request</h3>
<p><code>GET /api/v1/user/positions?market={market}&amp;side={side}</code></p>

<p>Get all open positions for the authenticated sub-account. Optionally, the request can be filtered by a specific market or position side (<code>long</code> or <code>short</code>).</p>

<p>To request data for multiple markets, use the following format: <code>GET /api/v1/user/positions?market=market1&amp;market2</code>.</p>

<aside class="notice">
Perpetual markets only — spot markets do not produce positions. To see your spot holdings, use <a href="#get-spot-balances">Get spot balances</a>.
</aside>
<h3 id='query-parameters-9'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>List of names of the requested markets.</td>
</tr>
<tr>
<td>side</td>
<td>no</td>
<td>string</td>
<td>Position side. Can be <code>LONG</code> or <code>SHORT</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LONG"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"size"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"openPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"markPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"40000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"liquidationPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"38200"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"margin"</span><span class="p">:</span><span class="w"> </span><span class="s2">"20"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"unrealisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"realisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"paidFundingFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"122"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tpTriggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"41000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tpLimitPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"41500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"slTriggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"slLimitPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"adl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2.5"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"maxPositionSize"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"updatedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-17'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Position ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].side</td>
<td>yes</td>
<td>string</td>
<td>Position side. Can be <code>LONG</code> or <code>SHORT</code>.</td>
</tr>
<tr>
<td>data[].leverage</td>
<td>yes</td>
<td>string</td>
<td>Position leverage.</td>
</tr>
<tr>
<td>data[].size</td>
<td>yes</td>
<td>string</td>
<td>Position size, absolute value in base asset.</td>
</tr>
<tr>
<td>data[].value</td>
<td>yes</td>
<td>string</td>
<td>Position value, absolute value in collateral asset.</td>
</tr>
<tr>
<td>data[].openPrice</td>
<td>yes</td>
<td>string</td>
<td>Position&#39;s open (entry) price.</td>
</tr>
<tr>
<td>data[].markPrice</td>
<td>yes</td>
<td>string</td>
<td>Current mark price of the market.</td>
</tr>
<tr>
<td>data[].liquidationPrice</td>
<td>yes</td>
<td>string</td>
<td>Position&#39;s liquidation price.</td>
</tr>
<tr>
<td>data[].margin</td>
<td>yes</td>
<td>string</td>
<td>Position&#39;s margin in collateral asset.</td>
</tr>
<tr>
<td>data[].unrealisedPnl</td>
<td>yes</td>
<td>string</td>
<td>Position&#39;s Unrealised PnL.</td>
</tr>
<tr>
<td>data[].realisedPnl</td>
<td>yes</td>
<td>string</td>
<td>Position&#39;s Realised PnL.</td>
</tr>
<tr>
<td>data[].paidFundingFee</td>
<td>yes</td>
<td>string</td>
<td>Position&#39;s Paid Funding Fee.</td>
</tr>
<tr>
<td>data[].tpTriggerPrice</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price.</td>
</tr>
<tr>
<td>data[].tpLimitPrice</td>
<td>no</td>
<td>string</td>
<td>Take Profit Limit price.</td>
</tr>
<tr>
<td>data[].slTriggerPrice</td>
<td>no</td>
<td>string</td>
<td>Stop Loss Trigger price.</td>
</tr>
<tr>
<td>data[].slLimitPrice</td>
<td>no</td>
<td>string</td>
<td>Stop Loss Limit price.</td>
</tr>
<tr>
<td>data[].maxPositionSize</td>
<td>yes</td>
<td>string</td>
<td>Maximum allowed position size, absolute value in base asset.</td>
</tr>
<tr>
<td>data[].adl</td>
<td>yes</td>
<td>string</td>
<td>Position&#39;s Auto-Deleveraging (ADL) ranking in the queue, expressed as a percentile. A value closer to 100 indicates a higher likelihood of being ADLed.</td>
</tr>
<tr>
<td>data[].createdTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (epoch milliseconds) when the position was created.</td>
</tr>
<tr>
<td>data[].updatedTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (epoch milliseconds) when the position was updated.</td>
</tr>
</tbody></table>
<h2 id='get-positions-history'>Get positions history</h2><h3 id='http-request-16'>HTTP Request</h3>
<p><code>GET /api/v1/user/positions/history?market={market}&amp;side={side}</code></p>

<p>Get all open and closed positions for the authenticated sub-account. Optionally, the request can be filtered by a specific market or position side (<code>long</code> or <code>short</code>).</p>

<p>To request data for several markets, use the following format: GET /api/v1/user/positions/history?market=market1&amp;market2.</p>

<p>The endpoint returns a maximum of 10,000 records; pagination should be used to access records beyond this limit.</p>

<aside class="notice">
Perpetual markets only — spot markets do not produce positions.
</aside>
<h3 id='query-parameters-10'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>List of names of the requested markets.</td>
</tr>
<tr>
<td>side</td>
<td>no</td>
<td>string</td>
<td>Position side. Can be <code>long</code> or <code>short</code>.</td>
</tr>
<tr>
<td>cursor</td>
<td>no</td>
<td>number</td>
<td>Determines the offset of the returned result. It represents the ID of the item after which you want to retrieve the next result. To get the next result page, you can use the cursor from the pagination section of the previous response.</td>
</tr>
<tr>
<td>limit</td>
<td>no</td>
<td>number</td>
<td>Maximum number of items that should be returned.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LONG"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"exitType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TRADE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"size"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"maxPositionSize"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"openPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"exitPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"40000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"realisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"closedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"pagination"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"cursor"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
    </span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-18'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Position ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].side</td>
<td>yes</td>
<td>string</td>
<td>Position side. Can be <code>LONG</code> or <code>SHORT</code>.</td>
</tr>
<tr>
<td>data[].exitType</td>
<td>no</td>
<td>string</td>
<td>The exit type of the last trade that reduced the position. Can be <code>TRADE</code>, <code>LIQUIDATION</code>, or <code>DELEVERAGE</code>.</td>
</tr>
<tr>
<td>data[].leverage</td>
<td>yes</td>
<td>string</td>
<td>Position leverage.</td>
</tr>
<tr>
<td>data[].size</td>
<td>yes</td>
<td>string</td>
<td>Position size, absolute value in base asset.</td>
</tr>
<tr>
<td>data[].maxPositionSize</td>
<td>yes</td>
<td>string</td>
<td>Maximum position size during the position&#39;s lifetime, absolute value in base asset.</td>
</tr>
<tr>
<td>data[].openPrice</td>
<td>yes</td>
<td>string</td>
<td>The weighted average price of trades that contributed to increasing the position.</td>
</tr>
<tr>
<td>data[].exitPrice</td>
<td>no</td>
<td>string</td>
<td>The weighted average price of trades that contributed to decreasing the position.</td>
</tr>
<tr>
<td>data[].realisedPnl</td>
<td>yes</td>
<td>string</td>
<td>Position Realised PnL.</td>
</tr>
<tr>
<td>data[].createdTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the position was created.</td>
</tr>
<tr>
<td>data[].closedTime</td>
<td>no</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the position was closed, applicable only for closed positions.</td>
</tr>
</tbody></table>
<h2 id='get-open-orders'>Get open orders</h2><h3 id='http-request-17'>HTTP Request</h3>
<p><code>GET /api/v1/user/orders?market={market}&amp;type={type}&amp;side={side}</code></p>

<p>Get all open orders for the authenticated sub-account. Optionally, the request can be filtered by a specific market or order type (<code>limit</code>, <code>conditional</code>, <code>tpsl</code> or <code>twap</code>). </p>

<p>Open orders correspond to the following order statuses from the list below: <code>new</code>, <code>partially filled</code>, <code>untriggered</code>.</p>

<p>To request data for several markets, use the following format: <code>GET /api/v1/user/orders?market=market1&amp;market2</code>.</p>

<aside class="notice">
Spot and perpetual orders are returned in a single mixed list. Pass an explicit <code>market</code> query parameter, or resolve each row's market via <a href="#get-markets">Get markets</a> to read its <code>type</code>, when you need to scope the result to one product.
</aside>
<h3 id='order-statuses'>Order statuses</h3>
<table><thead>
<tr>
<th>Status</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>NEW</code></td>
<td>Order in the order book, unfilled.</td>
</tr>
<tr>
<td><code>PARTIALLY_FILLED</code></td>
<td>Order in the order book, partially filled.</td>
</tr>
<tr>
<td><code>FILLED</code></td>
<td>Order fully filled.</td>
</tr>
<tr>
<td><code>UNTRIGGERED</code></td>
<td>Conditional order waiting for the trigger price.</td>
</tr>
<tr>
<td><code>CANCELLED</code></td>
<td>Order cancelled.</td>
</tr>
<tr>
<td><code>REJECTED</code></td>
<td>Order rejected.</td>
</tr>
<tr>
<td><code>EXPIRED</code></td>
<td>Order expired.</td>
</tr>
<tr>
<td><code>TRIGGERED</code></td>
<td>Technical status, transition from <code>UNTRIGGERED</code> to <code>NEW</code>.</td>
</tr>
</tbody></table>
<h3 id='order-status-reasons-when-cancelled-or-rejected'>Order status reasons (when cancelled or rejected)</h3>
<table><thead>
<tr>
<th>Reason</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>NONE</code></td>
<td>Order was accepted.</td>
</tr>
<tr>
<td><code>UNKNOWN</code></td>
<td>Technical status reason.</td>
</tr>
<tr>
<td><code>UNKNOWN_MARKET</code></td>
<td>Market does not exist.</td>
</tr>
<tr>
<td><code>DISABLED_MARKET</code></td>
<td>Market is not active.</td>
</tr>
<tr>
<td><code>NOT_ENOUGH_FUNDS</code></td>
<td>Insufficient balance to create order.</td>
</tr>
<tr>
<td><code>NO_LIQUIDITY</code></td>
<td>Not enough liquidity in the market to execute the order.</td>
</tr>
<tr>
<td><code>INVALID_FEE</code></td>
<td>Fee specified in the create order request is invalid.</td>
</tr>
<tr>
<td><code>INVALID_QTY</code></td>
<td>Quantity specified is invalid.</td>
</tr>
<tr>
<td><code>INVALID_PRICE</code></td>
<td>Price specified is invalid.</td>
</tr>
<tr>
<td><code>INVALID_VALUE</code></td>
<td>Order exceeds the maximum value.</td>
</tr>
<tr>
<td><code>UNKNOWN_ACCOUNT</code></td>
<td>Account does not exist.</td>
</tr>
<tr>
<td><code>SELF_TRADE_PROTECTION</code></td>
<td>Order cancelled to prevent self-trading.</td>
</tr>
<tr>
<td><code>POST_ONLY_FAILED</code></td>
<td>Order could not be posted as a post-only order.</td>
</tr>
<tr>
<td><code>REDUCE_ONLY_FAILED</code></td>
<td>Reduce-only order failed due to position size conflict.</td>
</tr>
<tr>
<td><code>INVALID_EXPIRE_TIME</code></td>
<td>Expiration time specified is invalid.</td>
</tr>
<tr>
<td><code>POSITION_TPSL_CONFLICT</code></td>
<td>TPSL order for the entire position already exists.</td>
</tr>
<tr>
<td><code>INVALID_LEVERAGE</code></td>
<td>Leverage specified is invalid.</td>
</tr>
<tr>
<td><code>PREV_ORDER_NOT_FOUND</code></td>
<td>The order to be replaced does not exist.</td>
</tr>
<tr>
<td><code>PREV_ORDER_TRIGGERED</code></td>
<td>The order to be replaced has been triggered and cannot be replaced.</td>
</tr>
<tr>
<td><code>TPSL_OTHER_SIDE_FILLED</code></td>
<td>The opposite side of a TP/SL order has been filled.</td>
</tr>
<tr>
<td><code>PREV_ORDER_CONFLICT</code></td>
<td>Conflict with an existing order during replacement.</td>
</tr>
<tr>
<td><code>ORDER_REPLACED</code></td>
<td>Order has been replaced by another order.</td>
</tr>
<tr>
<td><code>POST_ONLY_MODE</code></td>
<td>Exchange is in post-only mode, only post-only orders are allowed.</td>
</tr>
<tr>
<td><code>REDUCE_ONLY_MODE</code></td>
<td>Exchange is in reduce-only mode, only reduce-only orders are allowed.</td>
</tr>
<tr>
<td><code>TRADING_OFF_MODE</code></td>
<td>Trading is currently disabled.</td>
</tr>
<tr>
<td><code>NEGATIVE_EQUITY</code></td>
<td>Account has negative equity.</td>
</tr>
<tr>
<td><code>ACCOUNT_LIQUIDATION</code></td>
<td>Account is under liquidation.</td>
</tr>
</tbody></table>
<h3 id='query-parameters-11'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>List of names of the requested markets.</td>
</tr>
<tr>
<td>type</td>
<td>no</td>
<td>string</td>
<td>Order type. Can be <code>LIMIT</code>, <code>CONDITIONAL</code>, <code>TPSL</code> or <code>TWAP</code>.</td>
</tr>
<tr>
<td>side</td>
<td>no</td>
<td>string</td>
<td>Order side. Can be <code>BUY</code> or <code>SELL</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1775511783722512384</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">3017</span><span class="p">,</span><span class="w">
      </span><span class="nl">"externalId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2554612759479898620327573136214120486511160383028978112799136270841501275076"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ETH-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"PARTIALLY_FILLED"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3300"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"averagePrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3297.00"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"filledQty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"payedFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0120000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"trigger"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3300"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceDirection"</span><span class="p">:</span><span class="w"> </span><span class="s2">"UP"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"executionPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"takeProfit"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3500"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3340"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"stopLoss"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2800"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2660"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"reduceOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"postOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"updatedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"timeInForce"</span><span class="p">:</span><span class="w"> </span><span class="s2">"IOC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"expireTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1712754771819</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-19'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Order ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].externalId</td>
<td>yes</td>
<td>string</td>
<td>Order ID assigned by user.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].status</td>
<td>yes</td>
<td>string</td>
<td>Order status.</td>
</tr>
<tr>
<td>data[].statusReason</td>
<td>no</td>
<td>string</td>
<td>Reason for <code>REJECTED</code> or <code>CANCELLED</code> status.</td>
</tr>
<tr>
<td>data[].type</td>
<td>yes</td>
<td>string</td>
<td>Order type. Can be <code>LIMIT</code>, <code>CONDITIONAL</code>, <code>TPSL</code> or <code>TWAP</code>.</td>
</tr>
<tr>
<td>data[].side</td>
<td>yes</td>
<td>string</td>
<td>Order side. Can be <code>BUY</code> or <code>SELL</code>.</td>
</tr>
<tr>
<td>data[].price</td>
<td>no</td>
<td>string</td>
<td>Worst accepted price in the collateral asset.</td>
</tr>
<tr>
<td>data[].averagePrice</td>
<td>no</td>
<td>string</td>
<td>Actual filled price, empty if not filled.</td>
</tr>
<tr>
<td>data[].qty</td>
<td>yes</td>
<td>string</td>
<td>Order size in base asset.</td>
</tr>
<tr>
<td>data[].filledQty</td>
<td>no</td>
<td>string</td>
<td>Actual filled quantity in base asset.</td>
</tr>
<tr>
<td>data[].payedFee</td>
<td>no</td>
<td>string</td>
<td>Paid fee.</td>
</tr>
<tr>
<td>data[].reduceOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order is Reduce-only.</td>
</tr>
<tr>
<td>data[].postOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order is Post-only.</td>
</tr>
<tr>
<td>data[].trigger.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Trigger price for conditional orders.</td>
</tr>
<tr>
<td>data[].trigger.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].trigger.triggerPriceDirection</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the order should be triggered when the price is above or below the set trigger price. It can be <code>UP</code> (the order will be triggered when the price reaches or surpasses the set trigger price) or <code>DOWN</code> (the order will be triggered when the price reaches or drops below the set trigger price).</td>
</tr>
<tr>
<td>data[].trigger.executionPriceType</td>
<td>no</td>
<td>string</td>
<td>Execution price type. Can be <code>LIMIT</code> or <code>MARKET</code>.</td>
</tr>
<tr>
<td>data[].tpSlType</td>
<td>no</td>
<td>string</td>
<td>TPSL type determining TPSL order size. Can be <code>ORDER</code> or <code>POSITION</code>.</td>
</tr>
<tr>
<td>data[].takeProfit.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price.</td>
</tr>
<tr>
<td>data[].takeProfit.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].takeProfit.price</td>
<td>no</td>
<td>string</td>
<td>Take Profit order price.</td>
</tr>
<tr>
<td>data[].takeProfit.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Take profit order should be executed as <code>MARKET</code> or <code>LIMIT</code> order.</td>
</tr>
<tr>
<td>data[].stopLoss.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Stop loss Trigger price.</td>
</tr>
<tr>
<td>data[].stopLoss.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Stop Loss Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].stopLoss.price</td>
<td>no</td>
<td>string</td>
<td>Stop loss order price.</td>
</tr>
<tr>
<td>data[].stopLoss.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Stop loss order should be executed as <code>MARKET</code> or <code>LIMIT</code> order.</td>
</tr>
<tr>
<td>data[].createdTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) of order creation.</td>
</tr>
<tr>
<td>data[].updatedTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) of order update.</td>
</tr>
<tr>
<td>data[].timeInForce</td>
<td>yes</td>
<td>string</td>
<td>Time-in-force. Can be <code>GTT</code> (Good till time) or <code>IOC</code> (Immediate or cancel).</td>
</tr>
<tr>
<td>data[].expireTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the order expires.</td>
</tr>
</tbody></table>
<h2 id='get-orders-history'>Get orders history</h2><h3 id='http-request-18'>HTTP Request</h3>
<p><code>GET /api/v1/user/orders/history?market={market}&amp;type={type}&amp;side={side}&amp;id={id}&amp;externalId={externalId}</code></p>

<p>Get orders history for the authenticated sub-account. Optionally, the request can be filtered by a specific market or order type (<code>limit</code>, <code>market</code>, <code>conditional</code>, <code>tpsl</code> or <code>twap</code>). Note: Scaled orders are represented as multiple individual <code>limit</code> orders in the system.</p>

<p>Orders history corresponds to the following order statuses from the list below: <code>filled</code>, <code>cancelled</code>, <code>rejected</code>, <code>expired</code>.</p>

<p>To request data for several markets, use the following format: <code>GET /api/v1/user/orders/history?market=market1&amp;market2</code>.</p>

<aside class="notice">
Spot and perpetual orders share this history. Spot orders are <code>limit</code>-only; resolve each row's market via <a href="#get-markets">Get markets</a> to determine whether it is spot or perpetual.
</aside>

<p>The endpoint returns a maximum of 10,000 records; pagination should be used to access records beyond this limit. The records for closed non-filled orders are available only for the past 7 days.</p>
<h3 id='order-statuses-2'>Order statuses</h3>
<table><thead>
<tr>
<th>Status</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>NEW</code></td>
<td>Order in the order book, unfilled.</td>
</tr>
<tr>
<td><code>PARTIALLY_FILLED</code></td>
<td>Order in the order book, partially filled.</td>
</tr>
<tr>
<td><code>FILLED</code></td>
<td>Order fully filled.</td>
</tr>
<tr>
<td><code>UNTRIGGERED</code></td>
<td>Conditional order waiting for the trigger price.</td>
</tr>
<tr>
<td><code>CANCELLED</code></td>
<td>Order cancelled.</td>
</tr>
<tr>
<td><code>REJECTED</code></td>
<td>Order rejected.</td>
</tr>
<tr>
<td><code>EXPIRED</code></td>
<td>Order expired.</td>
</tr>
<tr>
<td><code>TRIGGERED</code></td>
<td>Technical status, transition from <code>UNTRIGGERED</code> to <code>NEW</code>.</td>
</tr>
</tbody></table>
<h3 id='query-parameters-12'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>id</td>
<td>no</td>
<td>number</td>
<td>List of internal Ids of the requested orders.</td>
</tr>
<tr>
<td>externalId</td>
<td>no</td>
<td>string[]</td>
<td>List of external Ids of the requested orders.</td>
</tr>
<tr>
<td>market</td>
<td>no</td>
<td>string[]</td>
<td>List of names of the requested markets.</td>
</tr>
<tr>
<td>type</td>
<td>no</td>
<td>string</td>
<td>Order type. Can be <code>limit</code>, <code>market</code>, <code>conditional</code>, <code>tpsl</code> or <code>twap</code>.</td>
</tr>
<tr>
<td>side</td>
<td>no</td>
<td>string</td>
<td>Order side. Can be <code>buy</code> or <code>sell</code>.</td>
</tr>
<tr>
<td>cursor</td>
<td>no</td>
<td>number</td>
<td>Determines the offset of the returned result. It represents the ID of the item after which you want to retrieve the next result. To get the next result page, you can use the cursor from the pagination section of the previous response.</td>
</tr>
<tr>
<td>limit</td>
<td>no</td>
<td>number</td>
<td>Maximum number of items that should be returned.</td>
</tr>
<tr>
<td>sort</td>
<td>no</td>
<td>string</td>
<td>Field used to sort the returned orders. Can be <code>ID</code> (sort by order ID) or <code>UPDATED_AT</code> (sort by last update time). Defaults to <code>ID</code>. When sorting by <code>UPDATED_AT</code>, the next page may include some results already returned on the previous page. This happens because a single timestamp can span the page boundary, so the previous page may not contain all records sharing the latest timestamp. Deduplicate by order ID when paginating.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
      </span><span class="nl">"externalId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ExtId-1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FILLED"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"averagePrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"filledQty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"payedFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0120000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"reduceOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"postOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"trigger"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceDirection"</span><span class="p">:</span><span class="w"> </span><span class="s2">"UP"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"executionPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"tpslType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ORDER"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takeProfit"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"35000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"starkExSignature"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"stopLoss"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"35000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"starkExSignature"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"updatedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"timeInForce"</span><span class="p">:</span><span class="w"> </span><span class="s2">"IOC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"expireTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1706563440</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"pagination"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"cursor"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
    </span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-20'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Order ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].externalId</td>
<td>yes</td>
<td>string</td>
<td>Order ID assigned by user.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].status</td>
<td>yes</td>
<td>string</td>
<td>Order status.</td>
</tr>
<tr>
<td>data[].statusReason</td>
<td>no</td>
<td>string</td>
<td>Reason for <code>REJECTED</code> or <code>CANCELLED</code> status.</td>
</tr>
<tr>
<td>data[].type</td>
<td>yes</td>
<td>string</td>
<td>Order type. Can be <code>LIMIT</code>, <code>MARKET</code>, <code>CONDITIONAL</code>, <code>TPSL</code> or <code>TWAP</code>.</td>
</tr>
<tr>
<td>data[].side</td>
<td>yes</td>
<td>string</td>
<td>Order side. Can be <code>BUY</code> or <code>SELL</code>.</td>
</tr>
<tr>
<td>data[].price</td>
<td>no</td>
<td>string</td>
<td>Worst accepted price in the collateral asset.</td>
</tr>
<tr>
<td>data[].averagePrice</td>
<td>no</td>
<td>string</td>
<td>Actual filled price, empty if not filled.</td>
</tr>
<tr>
<td>data[].qty</td>
<td>yes</td>
<td>string</td>
<td>Order size in base asset.</td>
</tr>
<tr>
<td>data[].filledQty</td>
<td>no</td>
<td>string</td>
<td>Actual filled quantity in base asset.</td>
</tr>
<tr>
<td>data[].payedFee</td>
<td>no</td>
<td>string</td>
<td>Paid fee.</td>
</tr>
<tr>
<td>data[].reduceOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order is Reduce-only.</td>
</tr>
<tr>
<td>data[].postOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order is Post-only.</td>
</tr>
<tr>
<td>data[].trigger.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Trigger price for conditional orders.</td>
</tr>
<tr>
<td>data[].trigger.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Trigger price type . Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].trigger.triggerPriceDirection</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the order should be triggered when the price is above or below the set trigger price. It can be <code>UP</code> (the order will be triggered when the price reaches or surpasses the set trigger price) or <code>DOWN</code> (the order will be triggered when the price reaches or drops below the set trigger price).</td>
</tr>
<tr>
<td>data[].trigger.executionPriceType</td>
<td>no</td>
<td>string</td>
<td>Execution price type. Can be <code>LIMIT</code> or <code>MARKET</code>.</td>
</tr>
<tr>
<td>data[].tpSlType</td>
<td>no</td>
<td>string</td>
<td>TPSL type determining TPSL order size. Can be <code>ORDER</code> or <code>POSITION</code>.</td>
</tr>
<tr>
<td>data[].takeProfit.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price.</td>
</tr>
<tr>
<td>data[].takeProfit.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].takeProfit.price</td>
<td>no</td>
<td>string</td>
<td>Take Profit order price.</td>
</tr>
<tr>
<td>data[].takeProfit.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Take profit order should be executed as <code>MARKET</code> or <code>LIMIT</code> order.</td>
</tr>
<tr>
<td>data[].stopLoss.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Stop loss Trigger price.</td>
</tr>
<tr>
<td>data[].stopLoss.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Stop Loss Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].stopLoss.price</td>
<td>no</td>
<td>string</td>
<td>Stop loss order price.</td>
</tr>
<tr>
<td>data[].stopLoss.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Stop loss order should be executed as <code>MARKET</code> or <code>LIMIT</code> order.</td>
</tr>
<tr>
<td>data[].createdTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) of order creation.</td>
</tr>
<tr>
<td>data[].updatedTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) of order update.</td>
</tr>
<tr>
<td>data[].timeInForce</td>
<td>yes</td>
<td>string</td>
<td>Time-in-force. Can be <code>GTT</code> (Good till time) or <code>IOC</code> (Immediate or cancel).</td>
</tr>
<tr>
<td>data[].expireTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the order expires.</td>
</tr>
</tbody></table>
<h2 id='get-order-by-id'>Get order by id</h2><h3 id='http-request-19'>HTTP Request</h3>
<p><code>GET /api/v1/user/orders/{id}</code></p>

<p>Get order by id for the authenticated sub-account.</p>
<h3 id='order-statuses-3'>Order statuses</h3>
<table><thead>
<tr>
<th>Status</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>NEW</code></td>
<td>Order in the order book, unfilled.</td>
</tr>
<tr>
<td><code>PARTIALLY_FILLED</code></td>
<td>Order in the order book, partially filled.</td>
</tr>
<tr>
<td><code>FILLED</code></td>
<td>Order fully filled.</td>
</tr>
<tr>
<td><code>UNTRIGGERED</code></td>
<td>Conditional order waiting for the trigger price.</td>
</tr>
<tr>
<td><code>CANCELLED</code></td>
<td>Order cancelled.</td>
</tr>
<tr>
<td><code>REJECTED</code></td>
<td>Order rejected.</td>
</tr>
<tr>
<td><code>EXPIRED</code></td>
<td>Order expired.</td>
</tr>
<tr>
<td><code>TRIGGERED</code></td>
<td>Technical status, transition from <code>UNTRIGGERED</code> to <code>NEW</code>.</td>
</tr>
</tbody></table>
<h3 id='url-parameters-8'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>id</td>
<td>yes</td>
<td>number</td>
<td>Order to be retrieved, ID assigned by Extended.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
    </span><span class="nl">"externalId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ExtId-1"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
    </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FILLED"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"averagePrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"filledQty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"payedFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0120000000000000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"reduceOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
    </span><span class="nl">"postOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
    </span><span class="nl">"trigger"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"triggerPriceDirection"</span><span class="p">:</span><span class="w"> </span><span class="s2">"UP"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"executionPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"tpslType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ORDER"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"takeProfit"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"35000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"starkExSignature"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"stopLoss"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"35000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"starkExSignature"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
    </span><span class="nl">"updatedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
    </span><span class="nl">"timeInForce"</span><span class="p">:</span><span class="w"> </span><span class="s2">"IOC"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"expireTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1706563440</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-21'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.id</td>
<td>yes</td>
<td>number</td>
<td>Order ID assigned by Extended.</td>
</tr>
<tr>
<td>data.externalId</td>
<td>yes</td>
<td>string</td>
<td>Order ID assigned by user.</td>
</tr>
<tr>
<td>data.accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data.market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.status</td>
<td>yes</td>
<td>string</td>
<td>Order status.</td>
</tr>
<tr>
<td>data.statusReason</td>
<td>no</td>
<td>string</td>
<td>Reason for <code>REJECTED</code> or <code>CANCELLED</code> status.</td>
</tr>
<tr>
<td>data.type</td>
<td>yes</td>
<td>string</td>
<td>Order type. Can be <code>LIMIT</code>, <code>MARKET</code>, <code>CONDITIONAL</code>, <code>TPSL</code> or <code>TWAP</code>.</td>
</tr>
<tr>
<td>data.side</td>
<td>yes</td>
<td>string</td>
<td>Order side. Can be <code>BUY</code> or <code>SELL</code>.</td>
</tr>
<tr>
<td>data.price</td>
<td>no</td>
<td>string</td>
<td>Worst accepted price in the collateral asset.</td>
</tr>
<tr>
<td>data.averagePrice</td>
<td>no</td>
<td>string</td>
<td>Actual filled price, empty if not filled.</td>
</tr>
<tr>
<td>data.qty</td>
<td>yes</td>
<td>string</td>
<td>Order size in base asset.</td>
</tr>
<tr>
<td>data.filledQty</td>
<td>no</td>
<td>string</td>
<td>Actual filled quantity in base asset.</td>
</tr>
<tr>
<td>data.payedFee</td>
<td>no</td>
<td>string</td>
<td>Paid fee.</td>
</tr>
<tr>
<td>data.reduceOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order is Reduce-only.</td>
</tr>
<tr>
<td>data.postOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order is Post-only.</td>
</tr>
<tr>
<td>data.trigger.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Trigger price for conditional orders.</td>
</tr>
<tr>
<td>data.trigger.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Trigger price type . Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data.trigger.triggerPriceDirection</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the order should be triggered when the price is above or below the set trigger price. It can be <code>UP</code> (the order will be triggered when the price reaches or surpasses the set trigger price) or <code>DOWN</code> (the order will be triggered when the price reaches or drops below the set trigger price).</td>
</tr>
<tr>
<td>data.trigger.executionPriceType</td>
<td>no</td>
<td>string</td>
<td>Execution price type. Can be <code>LIMIT</code> or <code>MARKET</code>.</td>
</tr>
<tr>
<td>data.tpSlType</td>
<td>no</td>
<td>string</td>
<td>TPSL type determining TPSL order size. Can be <code>ORDER</code> or <code>POSITION</code>.</td>
</tr>
<tr>
<td>data.takeProfit.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price.</td>
</tr>
<tr>
<td>data.takeProfit.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data.takeProfit.price</td>
<td>no</td>
<td>string</td>
<td>Take Profit order price.</td>
</tr>
<tr>
<td>data.takeProfit.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Take profit order should be executed as <code>MARKET</code> or <code>LIMIT</code> order.</td>
</tr>
<tr>
<td>data.stopLoss.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Stop loss Trigger price.</td>
</tr>
<tr>
<td>data.stopLoss.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Stop Loss Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data.stopLoss.price</td>
<td>no</td>
<td>string</td>
<td>Stop loss order price.</td>
</tr>
<tr>
<td>data.stopLoss.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Stop loss order should be executed as <code>MARKET</code> or <code>LIMIT</code> order.</td>
</tr>
<tr>
<td>data.createdTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) of order creation.</td>
</tr>
<tr>
<td>data.updatedTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) of order update.</td>
</tr>
<tr>
<td>data.timeInForce</td>
<td>yes</td>
<td>string</td>
<td>Time-in-force. Can be <code>GTT</code> (Good till time) or <code>IOC</code> (Immediate or cancel).</td>
</tr>
<tr>
<td>data.expireTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the order expires.</td>
</tr>
</tbody></table>
<h2 id='get-orders-by-external-id'>Get orders by external id</h2><h3 id='http-request-20'>HTTP Request</h3>
<p><code>GET /api/v1/user/orders/external/{externalId}</code></p>

<p>Get orders by external id for the authenticated sub-account.</p>
<h3 id='order-statuses-4'>Order statuses</h3>
<table><thead>
<tr>
<th>Status</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>NEW</code></td>
<td>Order in the order book, unfilled.</td>
</tr>
<tr>
<td><code>PARTIALLY_FILLED</code></td>
<td>Order in the order book, partially filled.</td>
</tr>
<tr>
<td><code>FILLED</code></td>
<td>Order fully filled.</td>
</tr>
<tr>
<td><code>UNTRIGGERED</code></td>
<td>Conditional order waiting for the trigger price.</td>
</tr>
<tr>
<td><code>CANCELLED</code></td>
<td>Order cancelled.</td>
</tr>
<tr>
<td><code>REJECTED</code></td>
<td>Order rejected.</td>
</tr>
<tr>
<td><code>EXPIRED</code></td>
<td>Order expired.</td>
</tr>
<tr>
<td><code>TRIGGERED</code></td>
<td>Technical status, transition from <code>UNTRIGGERED</code> to <code>NEW</code>.</td>
</tr>
</tbody></table>
<h3 id='url-parameters-9'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>externalId</td>
<td>yes</td>
<td>number</td>
<td>Order to be retrieved, ID assigned by user.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
      </span><span class="nl">"externalId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ExtId-1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FILLED"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"averagePrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"39000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"filledQty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"payedFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0120000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"reduceOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"postOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
      </span><span class="nl">"trigger"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceDirection"</span><span class="p">:</span><span class="w"> </span><span class="s2">"UP"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"executionPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"tpslType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ORDER"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takeProfit"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"35000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"starkExSignature"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"stopLoss"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"34000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"35000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MARKET"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"starkExSignature"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"updatedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"timeInForce"</span><span class="p">:</span><span class="w"> </span><span class="s2">"IOC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"expireTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1706563440</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-22'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Order ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].externalId</td>
<td>yes</td>
<td>string</td>
<td>Order ID assigned by user.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].status</td>
<td>yes</td>
<td>string</td>
<td>Order status.</td>
</tr>
<tr>
<td>data[].statusReason</td>
<td>no</td>
<td>string</td>
<td>Reason for <code>REJECTED</code> or <code>CANCELLED</code> status.</td>
</tr>
<tr>
<td>data[].type</td>
<td>yes</td>
<td>string</td>
<td>Order type. Can be <code>LIMIT</code>, <code>MARKET</code>, <code>CONDITIONAL</code>, <code>TPSL</code> or <code>TWAP</code>.</td>
</tr>
<tr>
<td>data[].side</td>
<td>yes</td>
<td>string</td>
<td>Order side. Can be <code>BUY</code> or <code>SELL</code>.</td>
</tr>
<tr>
<td>data[].price</td>
<td>no</td>
<td>string</td>
<td>Worst accepted price in the collateral asset.</td>
</tr>
<tr>
<td>data[].averagePrice</td>
<td>no</td>
<td>string</td>
<td>Actual filled price, empty if not filled.</td>
</tr>
<tr>
<td>data[].qty</td>
<td>yes</td>
<td>string</td>
<td>Order size in base asset.</td>
</tr>
<tr>
<td>data[].filledQty</td>
<td>no</td>
<td>string</td>
<td>Actual filled quantity in base asset.</td>
</tr>
<tr>
<td>data[].payedFee</td>
<td>no</td>
<td>string</td>
<td>Paid fee.</td>
</tr>
<tr>
<td>data[].reduceOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order is Reduce-only.</td>
</tr>
<tr>
<td>data[].postOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order is Post-only.</td>
</tr>
<tr>
<td>data[].trigger.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Trigger price for conditional orders.</td>
</tr>
<tr>
<td>data[].trigger.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Trigger price type . Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].trigger.triggerPriceDirection</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the order should be triggered when the price is above or below the set trigger price. It can be <code>UP</code> (the order will be triggered when the price reaches or surpasses the set trigger price) or <code>DOWN</code> (the order will be triggered when the price reaches or drops below the set trigger price).</td>
</tr>
<tr>
<td>data[].trigger.executionPriceType</td>
<td>no</td>
<td>string</td>
<td>Execution price type. Can be <code>LIMIT</code> or <code>MARKET</code>.</td>
</tr>
<tr>
<td>data[].tpSlType</td>
<td>no</td>
<td>string</td>
<td>TPSL type determining TPSL order size. Can be <code>ORDER</code> or <code>POSITION</code>.</td>
</tr>
<tr>
<td>data[].takeProfit.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price.</td>
</tr>
<tr>
<td>data[].takeProfit.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].takeProfit.price</td>
<td>no</td>
<td>string</td>
<td>Take Profit order price.</td>
</tr>
<tr>
<td>data[].takeProfit.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Take profit order should be executed as <code>MARKET</code> or <code>LIMIT</code> order.</td>
</tr>
<tr>
<td>data[].stopLoss.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Stop loss Trigger price.</td>
</tr>
<tr>
<td>data[].stopLoss.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Stop Loss Trigger price type. Can be <code>LAST</code>, <code>MARK</code> or <code>INDEX</code>.</td>
</tr>
<tr>
<td>data[].stopLoss.price</td>
<td>no</td>
<td>string</td>
<td>Stop loss order price.</td>
</tr>
<tr>
<td>data[].stopLoss.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Stop loss order should be executed as <code>MARKET</code> or <code>LIMIT</code> order.</td>
</tr>
<tr>
<td>data[].createdTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) of order creation.</td>
</tr>
<tr>
<td>data[].updatedTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) of order update.</td>
</tr>
<tr>
<td>data[].timeInForce</td>
<td>yes</td>
<td>string</td>
<td>Time-in-force. Can be <code>GTT</code> (Good till time) or <code>IOC</code> (Immediate or cancel).</td>
</tr>
<tr>
<td>data[].expireTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the order expires.</td>
</tr>
</tbody></table>
<h2 id='get-trades'>Get trades</h2><h3 id='http-request-21'>HTTP Request</h3>
<p><code>GET /api/v1/user/trades?market={market}&amp;type={type}&amp;side={side}</code></p>

<p>Get trades history for the authenticated sub-account. Optionally, the request can be filtered by a specific market, by trade type (<code>trade</code>, <code>liquidation</code> or <code>deleverage</code>) and side (<code>buy</code> or <code>sell</code>). </p>

<p>To request data for several markets, use the following format: <code>GET /api/v1/user/trades?market=market1&amp;market2</code>.</p>

<p>The endpoint returns a maximum of 10,000 records; pagination should be used to access records beyond this limit.</p>

<aside class="notice">
Spot and perpetual fills are returned together. Spot trades always have <code>tradeType: "TRADE"</code> (spot is not subject to liquidation or ADL); resolve each row's market via <a href="#get-markets">Get markets</a> to determine whether it is spot or perpetual.
</aside>
<h3 id='query-parameters-13'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>List of names of the requested markets.</td>
</tr>
<tr>
<td>type</td>
<td>no</td>
<td>string</td>
<td>Trade type. Can be <code>trade</code>, <code>liquidation</code> or <code>deleverage</code>.</td>
</tr>
<tr>
<td>side</td>
<td>no</td>
<td>string</td>
<td>Order side. Can be <code>buy</code> or <code>sell</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">3017</span><span class="p">,</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"orderId"</span><span class="p">:</span><span class="w"> </span><span class="mi">9223372036854775808</span><span class="p">,</span><span class="w">
      </span><span class="nl">"externalId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ext-1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"58853.4000000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0900000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5296.8060000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"fee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0000000000000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradeType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"DELEVERAGE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isTaker"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"pagination"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"cursor"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
    </span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-23'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Trade ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].orderId</td>
<td>yes</td>
<td>string</td>
<td>Order ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].externalOrderId</td>
<td>yes</td>
<td>string</td>
<td>Order ID assigned by user. Populated only on websocket stream.</td>
</tr>
<tr>
<td>data[].side</td>
<td>yes</td>
<td>string</td>
<td>Order side. Can be <code>BUY</code> or <code>SELL</code>.</td>
</tr>
<tr>
<td>data[].averagePrice</td>
<td>yes</td>
<td>string</td>
<td>Actual filled price.</td>
</tr>
<tr>
<td>data[].filledQty</td>
<td>yes</td>
<td>string</td>
<td>Actual filled quantity in base asset.</td>
</tr>
<tr>
<td>data[].value</td>
<td>yes</td>
<td>string</td>
<td>Actual filled absolute nominal value in collateral asset.</td>
</tr>
<tr>
<td>data[].fee</td>
<td>yes</td>
<td>string</td>
<td>Paid fee.</td>
</tr>
<tr>
<td>data[].isTaker</td>
<td>yes</td>
<td>boolean</td>
<td>Whether the trade was executed as a taker.</td>
</tr>
<tr>
<td>data[].tradeType</td>
<td>yes</td>
<td>string</td>
<td>Trade type. Can be <code>TRADE</code> (for regular trades), <code>LIQUIDATION</code> (for liquidaton trades) or <code>DELEVERAGE</code> (for ADL trades).</td>
</tr>
<tr>
<td>data[].createdTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the trade happened.</td>
</tr>
</tbody></table>
<h2 id='get-funding-payments'>Get funding payments</h2><h3 id='http-request-22'>HTTP Request</h3>
<p><code>GET /api/v1/user/funding/history?market={market}&amp;side={side}&amp;startTime={startTime}</code></p>

<p>Get funding payments history for the authenticated sub-account. Optionally, the request can be filtered by a specific market, by side (<code>long</code> or <code>short</code>) and from time as a start point. </p>

<p>To request data for several markets, use the following format: <code>GET /api/v1/user/funding/history?market=market1&amp;market2</code>.</p>

<p>The endpoint returns a maximum of 10,000 records; pagination should be used to access records beyond this limit.</p>

<aside class="notice">
Perpetual markets only — spot markets do not pay or receive funding.
</aside>
<h3 id='query-parameters-14'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>List of names of the requested markets.</td>
</tr>
<tr>
<td>side</td>
<td>no</td>
<td>string</td>
<td>Position side. Can be <code>long</code> or <code>short</code>.</td>
</tr>
<tr>
<td>startTime</td>
<td>yes</td>
<td>number</td>
<td>Starting timestamp (in epoch milliseconds).</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">8341</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">3137</span><span class="p">,</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BNB-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"positionId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1821237954501148672</span><span class="p">,</span><span class="w">
      </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LONG"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"size"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.116"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"560.77401888"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"markPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"502.48568"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"fundingFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"fundingRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"paidTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1723147241346</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"pagination"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"cursor"</span><span class="p">:</span><span class="w"> </span><span class="mi">8341</span><span class="p">,</span><span class="w">
    </span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-24'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data[].id</td>
<td>yes</td>
<td>number</td>
<td>Funding payment ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].positionId</td>
<td>yes</td>
<td>number</td>
<td>Position ID assigned by Extended.</td>
</tr>
<tr>
<td>data[].side</td>
<td>yes</td>
<td>string</td>
<td>Position side. Can be <code>LONG</code> or <code>SHORT</code>.</td>
</tr>
<tr>
<td>data[].value</td>
<td>yes</td>
<td>string</td>
<td>Position value at funding payment time.</td>
</tr>
<tr>
<td>data[].markPrice</td>
<td>yes</td>
<td>string</td>
<td>Mark price at funding payment time</td>
</tr>
<tr>
<td>data[].fundingFee</td>
<td>yes</td>
<td>string</td>
<td>Funding payment size.</td>
</tr>
<tr>
<td>data[].fundingRate</td>
<td>yes</td>
<td>string</td>
<td>Funding rate.</td>
</tr>
<tr>
<td>data[].paidTime</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the funding payment happened.</td>
</tr>
</tbody></table>
<h2 id='get-rebates'>Get rebates</h2><h3 id='http-request-23'>HTTP Request</h3>
<p><code>GET /api/v1/user/rebates/stats</code></p>

<p>Get rebates related data for the authenticated sub-account.</p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"totalPaid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"rebatesRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"marketShare"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.002"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"nextTierMakerShare"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.01"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"nextTierRebateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.00005"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-25'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.totalPaid</td>
<td>yes</td>
<td>string</td>
<td>Total rebates paid.</td>
</tr>
<tr>
<td>data.rebatesRate</td>
<td>yes</td>
<td>string</td>
<td>Current rebates rate.</td>
</tr>
<tr>
<td>data.marketShare</td>
<td>yes</td>
<td>string</td>
<td>Maker volume share.</td>
</tr>
<tr>
<td>data.nextTierMakerShare</td>
<td>yes</td>
<td>string</td>
<td>Maker volume share required to increase rebates.</td>
</tr>
<tr>
<td>data.nextTierRebateRate</td>
<td>yes</td>
<td>string</td>
<td>Rebates rate for next maker share threshold.</td>
</tr>
</tbody></table>
<h2 id='get-current-leverage'>Get current leverage</h2><h3 id='http-request-24'>HTTP Request</h3>
<p><code>GET /api/v1/user/leverage?market={market}</code></p>

<p>Get current leverage for the authenticated sub-account. You can get current leverage for all markets, a single market, or multiple specific markets.</p>

<p>To request data for several markets, use the format <code>GET/api/v1/user/leverage?market=market1&amp;market=market2</code>.</p>

<aside class="notice">
Perpetual markets only — spot markets always trade at <code>1x</code> leverage.
</aside>
<h3 id='query-parameters-15'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Name of the requested market.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SOL-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-26'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.leverage</td>
<td>yes</td>
<td>string</td>
<td>Current leverage.</td>
</tr>
</tbody></table>
<h2 id='update-leverage'>Update leverage</h2><h3 id='http-request-25'>HTTP Request</h3>
<p><code>PATCH /api/v1/user/leverage</code></p>

<p>Update leverage for an individual market.</p>

<p>Modifying your leverage will impact your <code>Available balance</code> and <code>Initial Margin requirements</code> of your open position and orders in the market.</p>

<aside class="notice">
Spot markets always trade at <code>1x</code> — this endpoint accepts only <code>1</code> for a spot market and returns <code>ActionNotAllowed</code> for any other value.
</aside>

<p>To adjust your leverage, you must meet two requirements:</p>

<ol>
<li><p>The total value of your open position and triggered orders must remain below the maximum position value allowed for the selected leverage.</p></li>
<li><p>Your Available balance must be sufficient to cover the additional Margin requirements (if any) associated with the new leverage.</p></li>
</ol>

<p>Failure to meet either of these criteria will result in an error.</p>

<p>For details on Margin requirements, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/margin-schedule">documentation</a>.</p>

<blockquote>
<p>Request example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='body-parameters'>Body Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Name of the requested market.</td>
</tr>
<tr>
<td>leverage</td>
<td>yes</td>
<td>string</td>
<td>Target leverage.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-27'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.leverage</td>
<td>yes</td>
<td>string</td>
<td>Updated leverage.</td>
</tr>
</tbody></table>
<h2 id='get-fees'>Get fees</h2><h3 id='http-request-26'>HTTP Request</h3>
<p><code>GET /api/v1/user/fees?market={market}</code></p>

<p>Get current fees for the sub-account. Currently, Extended features a flat fee structure:</p>

<ul>
<li><p>Taker: 0.025%</p></li>
<li><p>Maker: 0.000%</p></li>
</ul>

<p>The team reserves the right to update the fee schedule going forward.</p>

<p>For updates on the Fee Schedule, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/trading-fees-and-rebates">documentation</a>.</p>
<h3 id='query-parameters-16'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Name of the requested market.</td>
</tr>
<tr>
<td>builderId</td>
<td>no</td>
<td>string</td>
<td>builder client id</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerFeeRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.00000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"takerFeeRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.00025"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"builderFeeRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0001"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-28'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.makerFeeRate</td>
<td>yes</td>
<td>string</td>
<td>Maker fee rate.</td>
</tr>
<tr>
<td>data.takerFeeRate</td>
<td>yes</td>
<td>string</td>
<td>Taker fee rate.</td>
</tr>
<tr>
<td>data.builderFeeRate</td>
<td>yes</td>
<td>string</td>
<td>Builder fee rate.</td>
</tr>
</tbody></table>
<h2 id='order-management'>Order management</h2>
<p>The Private API endpoints listed below allow you to create, cancel, and manage orders from the authenticated sub-account.</p>

<aside class="notice">
The order management endpoints (create, cancel by ID, cancel by external ID, mass cancel, dead man's switch) accept both perpetual and spot orders. Spot orders are subject to the additional rules described in <a href="#spot-order-constraints">Spot order constraints</a>.
</aside>
<h3 id='settlement-logic'>Settlement Logic</h3>
<p>Extended settles all transactions on-chain on Arc. As a result, order creation might differ from centralized exchanges in a few ways:</p>

<ol>
<li><p>Stark Key Signature: Required for all order management endpoints. For details, please refer to the reference implementation in the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/README.md">Python SDK</a>.</p></li>
<li><p>Price Parameter: All orders, including market orders, require a price as a mandatory parameter.</p></li>
<li><p>Fee Parameter: All orders require a fee as a mandatory parameter. The <code>Fee</code> parameter represents the maximum fee a user is willing to pay for an order. Use the maker fee for Post-only orders and the taker fee for all other orders. Enter the fee in decimal format (e.g., 0.1 for 10%). To view current fees, use the <code>Get fees</code> endpoint, which displays applicable fee rates.</p></li>
<li><p>Expiration Timestamp: All orders, including <code>Fill or Kill</code> and <code>Immediate or Cancel</code> orders, require an expiration timestamp as a mandatory parameter. When submitting orders via the API, enter the expiration time as an epoch timestamp in milliseconds. On the Mainnet, the maximum allowable expiration time is 90 days from the order creation date. On the Testnet, 28 days from the order creation date.</p></li>
<li><p>Market Orders: Extended does not natively support market orders. A market order is submitted with <code>type: &quot;MARKET&quot;</code>, but the <code>price</code> parameter is still mandatory because on-chain settlement requires a deterministic order price. The exchange executes the order as a limit <code>Immediate-or-Cancel</code> that must cross the opposite side of the order book; any quantity unfilled within the supplied price is cancelled. The same applies to <code>conditional</code> and <code>tpsl</code> orders with <code>executionPriceType: &quot;MARKET&quot;</code>: the client must include the crossing <code>price</code> in the original request — the exchange does not derive it when the trigger fires.</p>

<p>Clients may select any crossing buffer within the hard cap defined in <a href="#price-requirements">Price requirements</a>. As a reference, the Extended UI applies:</p></li>
</ol>

<p>- <strong>Market orders:</strong> <code>Best Ask × (1 + 1.5%)</code> for buys, <code>Best Bid × (1 − 1.5%)</code> for sells.
    - <strong>Conditional / TPSL orders with market execution:</strong> <code>Trigger Price × (1 + 1.5%)</code> for buys, <code>Trigger Price × (1 − 1.5%)</code> for sells.</p>

<ol>
<li>TPSL Orders: Orders with Take Profit and/or Stop Loss require multiple signatures.</li>
</ol>
<h2 id='create-or-edit-order'>Create or edit order</h2><h3 id='http-request-27'>HTTP Request</h3>
<p><code>POST /api/v1/user/order</code></p>

<p>Create a new order or edit (replace) an open order. When you create an order via our REST API, the initial response will confirm whether the order has been successfully accepted. Please be aware that, although rare, orders can be canceled or rejected by the Matching Engine even after acceptance at the REST API level. To receive real-time updates on your order status, subscribe to the Account updates WebSocket stream. This stream provides immediate notifications of any changes to your orders, including confirmations, cancellations, and rejections.</p>

<p>Currently, we support <code>limit</code>, <code>market</code>, <code>conditional</code> and <code>tpsl</code> order types via API, along with <code>reduce-only</code> and <code>post-only</code> settings. For API trading, we offer the following Time-in-force settings: <code>GTT</code> (Good till time - default) and <code>IOC</code> (Immediate or cancel). On the Mainnet, the maximum allowable expiration time for <code>GTT</code> orders is 90 days from the order creation date. On the Testnet, 28 days from the order creation date. For details on supported order types and settings, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/order-types">documentation</a>.</p>

<p>To successfully place an order, it must meet the following requirements:</p>

<ol>
<li><p>Trading Rules. For detailed information, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/trading-rules">trading rules documentation</a>.</p></li>
<li><p>Order Cost Requirements. For detailed information, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/order-cost">order cost documentation</a>.</p></li>
<li><p>Margin Schedule Requirements. For detailed information, please refer to the <a href="https://docs.extended.exchange/extended-resources/trading/margin-schedule">margin schedule documentation</a>.</p></li>
<li><p>Price requirements, which are described below.</p></li>
</ol>

<p>Orders for RFQ markets must be created through a separate endpoint: <code>POST /api/v1/user/order/rfq</code>. The request body, the settlement signature and the response are identical to the ones described below — only the path differs, plus the optional <code>rfqStartPrice</code> parameter, which is accepted on RFQ markets only. The two paths are mutually exclusive: sending an RFQ market to <code>POST /api/v1/user/order</code>, or a non-RFQ market to <code>POST /api/v1/user/order/rfq</code>, is rejected with <code>ActionNotAllowed</code>. The RFQ endpoint also has a lower rate limit of 1 request/second. For how these orders behave once accepted, see <a href="#rfq-markets">RFQ markets</a>.</p>
<h3 id='price-requirements'>Price requirements</h3>
<ol>
<li>Limit Orders

<ul>
<li>Long Limit Orders: Order Price ≤ Mark Price * (1+Limit Order Price Cap)</li>
<li>Short Limit Orders: Order Price ≥ Mark Price * (1-Limit Order Floor Ratio)</li>
</ul></li>
<li>Market Orders

<ul>
<li>Long Market Order: Order Price ≤ Mark Price * (1 + 5%)</li>
<li>Short Market Order: Order Price ≥ Mark Price * (1 - 5%)</li>
</ul></li>
<li>Conditional Orders

<ul>
<li>Short Conditional Orders: Order Price ≥ Trigger price * (1-Limit Order Floor Ratio)</li>
<li>Long Conditional Orders: Order Price ≤ Trigger Price * (1+Limit Order Price Cap)</li>
</ul></li>
<li>TPSL Orders</li>
</ol>

<p>Entry order: Buy; TPSL order: Sell.</p>

<table><thead>
<tr>
<th>Validation</th>
<th>Stop loss</th>
<th>Take profit</th>
</tr>
</thead><tbody>
<tr>
<td>Trigger price validation</td>
<td>Trigger price &lt; Entry order price</td>
<td>Trigger price &gt; Entry order price.</td>
</tr>
<tr>
<td>Limit price validation</td>
<td>Order Price ≥ Trigger price * (1-Limit Order Floor Ratio)</td>
<td>Order Price ≥ Trigger price * (1-Limit Order Floor Ratio)</td>
</tr>
</tbody></table>

<p>Entry order: Sell; TPSL order: Buy.</p>

<table><thead>
<tr>
<th>Validation</th>
<th>Stop loss</th>
<th>Take profit</th>
</tr>
</thead><tbody>
<tr>
<td>Trigger price validation</td>
<td>Trigger price &gt; Entry order price.</td>
<td>Trigger price &lt; Entry order price.</td>
</tr>
<tr>
<td>Limit price validation</td>
<td>Order Price ≤ Trigger Price * (1+Limit Order Price Cap)</td>
<td>Order Price ≤ Trigger Price * (1+Limit Order Price Cap)</td>
</tr>
</tbody></table>
<h3 id='orders-edit'>Orders Edit</h3>
<p>To edit (replace) an open order, add its ID as the cancelId parameter. You can edit multiple parameters at once. Editing is available for all orders except for triggered TPSL orders.</p>

<p>Order editing and validations:</p>

<ul>
<li>If any updated parameter fails the validations described above, all updates will be rejected.</li>
<li>If validations fail at the REST API level, the initial open order remains unchanged.</li>
<li>In the rare event that validations pass at the REST API level but fail at the Matching Engine, both the updated order and the initial open order will be cancelled.</li>
</ul>

<p>Editable Order Parameters:</p>

<ul>
<li>For All Order Types (except triggered TPSL orders): Order price and Execution Order Price Type (market or limit)</li>
<li>For All Order Types (except untriggered entire position TPSL orders and triggered TPSL orders): Order size</li>
<li>For Conditional and Untriggered TPSL Orders: Trigger price</li>
<li>For Conditional Orders: Trigger price direction (up or down)</li>
<li>For Non-TPSL Orders: All TPSL parameters</li>
</ul>
<h3 id='self-trade-protection'>Self trade protection</h3>
<p>Self-trade protection is a mechanism that prevents orders from the same client or sub-account from executing against each other. When two such orders are about to match, the system applies the self-trade protection mode specified on the taker order to determine how to handle the potential self-match.</p>

<table><thead>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>DISABLED</td>
<td>Self trade protection is disabled</td>
</tr>
<tr>
<td>ACCOUNT</td>
<td>Trades within same sub-account are disabled, trades between sub-accounts are enabled.</td>
</tr>
<tr>
<td>CLIENT</td>
<td>Trades within same sub-account and between sub-accounts are disabled.</td>
</tr>
</tbody></table>
<h3 id='spot-order-constraints'>Spot order constraints</h3>
<p>When <code>market</code> refers to a spot market (i.e. its <code>type</code> from <a href="#get-markets"><code>Get markets</code></a> is <code>SPOT</code>), the order is routed through the spot trading path and the following extra rules apply on top of the validations above:</p>

<ul>
<li><strong>Price requirement:</strong> spot prices are bounded by the <strong>index price</strong> rather than the mark price (mark price is a perpetuals-only concept).</li>
<li><strong>Effective leverage:</strong> spot always trades at <code>1</code>. The <a href="#update-leverage"><code>Update leverage</code></a> endpoint accepts only <code>1</code> for a spot market and returns <code>ActionNotAllowed</code> for any other value.</li>
<li><strong>Spot Terms &amp; Conditions:</strong> the client must accept the Spot Terms &amp; Conditions before placing spot orders. This is done once, in the Extended web app, by signing with the client&#39;s main wallet, and applies to all of the client&#39;s sub-accounts. Until then, every spot order — create or edit, buy or sell — is rejected with error <code>1160</code> (<code>SpotTermsNotAccepted</code>, HTTP 400). Perpetual orders are not affected.</li>
<li><strong>Region restriction:</strong> spot trading is not available in some regions. Spot orders (including scaled orders) sent from a restricted region are rejected with HTTP status 451 and error <code>1159</code> (<code>SpotTradingNotAllowedInRegion</code>). Perpetual orders are not affected.</li>
</ul>

<p>A spot order request is otherwise identical to a perpetual one — same authentication, same Stark signature flow, same response payload.</p>

<blockquote>
<p>Spot order request example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0c4b3df1-1f73-4f31-9d6d-2e4c8a73c6c6"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTCSPOT"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.5"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65000"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"timeInForce"</span><span class="p">:</span><span class="w"> </span><span class="s2">"GTT"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"expiryEpochMillis"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715884049245</span><span class="p">,</span><span class="w">
  </span><span class="nl">"fee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0002"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"nonce"</span><span class="p">:</span><span class="w"> </span><span class="s2">"876542"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"settlement"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"signature"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"r"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x17a89cb97c64f546d2dc9189e1ef73547487b228945dcda406cd0e4b8301bd3"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"s"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x385b65811a0fc92f109d5ebc30731efd158ee4e502945cd2fcb35a4947b045e"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"starkKey"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x23830b00378d17755775b5a73a5967019222997eb2660c2dbfbc74877c2730f"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"collateralPosition"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4272448241247734333"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"postOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
  </span><span class="nl">"selfTradeProtectionLevel"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ACCOUNT"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='request'>Request</h3>
<blockquote>
<p>Request example:</p>
</blockquote>
<div class="highlight"><pre class="highlight plaintext"><code>{
  "id": "e581a9ca-c3a2-4318-9706-3f36a2b858d3",
  "market": "BTC-USDT",
  "type": "CONDITIONAL",
  "side": "BUY",
  "qty": "1",
  "price": "1000",
  "timeInForce": "GTT",
  "expiryEpochMillis": 1715884049245,
  "fee": "0.0002",
  "nonce": "876542",
  "settlement": {
    "signature": {
      "r": "0x17a89cb97c64f546d2dc9189e1ef73547487b228945dcda406cd0e4b8301bd3",
      "s": "0x385b65811a0fc92f109d5ebc30731efd158ee4e502945cd2fcb35a4947b045e"
    },
    "starkKey": "0x23830b00378d17755775b5a73a5967019222997eb2660c2dbfbc74877c2730f",
    "collateralPosition": "4272448241247734333"
  },
  "reduceOnly": true,
  "postOnly": false,
  "selfTradeProtectionLevel": "ACCOUNT",
  "trigger": {
    "triggerPrice": "12000",
    "triggerPriceType": "LAST",
    "direction": "UP",
    "executionPriceType": "LIMIT"
  },
  "tpSlType": "ORDER",
  "takeProfit": {
    "triggerPrice": "1050",
    "triggerPriceType": "LAST",
    "price": "1300",
    "priceType": "LIMIT",
    "settlement": {
      "signature": {
        "r": "0x5b45f0fb2b8e075f6a5f9b4c039ccf1c01c56aa212c63f943337b920103c3a1",
        "s": "0x46133ab89d90a3ae2a3a7680d2a27e30fa015c0c4979931164c51b52b27758a"
      },
      "starkKey": "0x23830b00378d17755775b5a73a5967019222997eb2660c2dbfbc74877c2730f",
      "collateralPosition": "4272448241247734333"
    }
  },
  "stopLoss": {
    "triggerPrice": "950",
    "triggerPriceType": "LAST",
    "price": "900",
    "priceType": "LIMIT",
    "settlement": {
      "signature": {
        "r": "0x5033ad23fe851d16ceec5dd99f2f0c9585c5abec3f09ec89a32a961536ba55",
        "s": "0x1234ee151a8b5c68efb4adaa2eaf1dcc4a5107d4446274a69389ef8abd2dcf"
      },
      "starkKey": "0x23830b00378d17755775b5a73a5967019222997eb2660c2dbfbc74877c2730f",
      "collateralPosition": "4272448241247734333"
    }
  },
  "builderFee": "0.0001",
  "builderId": 2017
}
</code></pre></div><h3 id='body-parameters-2'>Body Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>id</td>
<td>yes</td>
<td>string</td>
<td>Order ID assigned by user.</td>
</tr>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>type</td>
<td>yes</td>
<td>string</td>
<td>Order type. Can be <code>limit</code>, <code>market</code>, <code>conditional</code> or <code>tpsl</code>.</td>
</tr>
<tr>
<td>side</td>
<td>yes</td>
<td>string</td>
<td>Order side. Can be <code>buy</code> or <code>sell</code>.</td>
</tr>
<tr>
<td>qty</td>
<td>yes</td>
<td>string</td>
<td>Order size in base asset.</td>
</tr>
<tr>
<td>price</td>
<td>yes</td>
<td>string</td>
<td>Worst accepted price in collateral asset. Note that price is optional for a tpsl type <code>position</code>.</td>
</tr>
<tr>
<td>reduceOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order should be Reduce-only.</td>
</tr>
<tr>
<td>postOnly</td>
<td>no</td>
<td>boolean</td>
<td>Whether the order should be Post-only.</td>
</tr>
<tr>
<td>timeInForce</td>
<td>yes</td>
<td>string</td>
<td>Time-in-force setting. Can be <code>GTT</code> (Good till time) or <code>IOC</code> (Immediate or cancel). This parameter will default to GTT.</td>
</tr>
<tr>
<td>expiryEpochMillis</td>
<td>yes</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the order expires if not filled. Cannot exceed 3 months from the order creation time. On RFQ markets an order that carries a quote walk must expire at least 1.1 seconds after creation, see <a href="#market-orders">Market orders</a>.</td>
</tr>
<tr>
<td>fee</td>
<td>yes</td>
<td>string</td>
<td>Highest accepted fee for the trade, expressed in decimal format (e.g., 0.1 for 10%). Use the maker fee for Post-only orders and the taker fee for all other orders. On RFQ markets always use the taker fee, see <a href="#fees">Fees</a>.</td>
</tr>
<tr>
<td>cancelId</td>
<td>no</td>
<td>string</td>
<td>External ID of the order that this order is replacing.</td>
</tr>
<tr>
<td>settlement</td>
<td>yes</td>
<td>object</td>
<td>StarkKey signature, including nonce and signed order parameters. For details, please refer to the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/README.md">Python SDK</a> reference implementation.</td>
</tr>
<tr>
<td>nonce</td>
<td>yes</td>
<td>string</td>
<td>Nonce is part of the settlement and must be a number ≥1 and ≤2^31. Please make sure to check the Python SDK reference implementation.</td>
</tr>
<tr>
<td>selfTradeProtectionLevel</td>
<td>yes</td>
<td>string</td>
<td>Level of self trade protection. Can be <code>DISABLED</code>, <code>ACCOUNT</code>(default) and <code>CLIENT</code>.</td>
</tr>
<tr>
<td>trigger.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Price threshold for triggering a conditional order.</td>
</tr>
<tr>
<td>trigger.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Type of price used for the order triggering. Can be <code>last</code>, <code>mark</code> or <code>index</code>. On RFQ markets <code>last</code> follows the indicative order book.</td>
</tr>
<tr>
<td>trigger.triggerPriceDirection</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the order should be triggered when the price is above or below the set trigger price. It can be <code>up</code> (the order will be triggered when the price reaches or surpasses the set trigger price) or <code>down</code> (the order will be triggered when the price reaches or drops below the set trigger price).</td>
</tr>
<tr>
<td>trigger.executionPriceType</td>
<td>no</td>
<td>string</td>
<td>Type of price used for the order execution. Can be <code>limit</code> or <code>market</code>.</td>
</tr>
<tr>
<td>tpSlType</td>
<td>no</td>
<td>string</td>
<td>TPSL type determining TPSL order size. Can be <code>order</code> or <code>position</code>.</td>
</tr>
<tr>
<td>takeProfit.triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Take Profit Trigger price.</td>
</tr>
<tr>
<td>takeProfit.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Type of price used for the Take Profit order triggering. Can be <code>last</code>, <code>mid</code> (to be added soon), <code>mark</code> or <code>index</code>. On RFQ markets <code>last</code> follows the indicative order book.</td>
</tr>
<tr>
<td>takeProfit.price</td>
<td>no</td>
<td>string</td>
<td>Take Profit order price.</td>
</tr>
<tr>
<td>takeProfit.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Take profit order should be executed as <code>market</code> or <code>limit</code> order.</td>
</tr>
<tr>
<td>takeProfit.settlement</td>
<td>no</td>
<td>object</td>
<td>StarkKey signature, including nonce and signed order parameters. For details, please refer to the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/README.md">Python SDK</a> reference implementation.</td>
</tr>
<tr>
<td>triggerPrice</td>
<td>no</td>
<td>string</td>
<td>Stop loss Trigger price.</td>
</tr>
<tr>
<td>stopLoss.triggerPriceType</td>
<td>no</td>
<td>string</td>
<td>Type of price used for the Stop Loss order triggering. Can be <code>last</code>, <code>mid</code> (to be added soon), <code>mark</code> or <code>index</code>. On RFQ markets <code>last</code> follows the indicative order book.</td>
</tr>
<tr>
<td>stopLoss.price</td>
<td>no</td>
<td>string</td>
<td>Stop loss order price.</td>
</tr>
<tr>
<td>stopLoss.priceType</td>
<td>no</td>
<td>string</td>
<td>Indicates whether the Stop loss order should be executed as <code>market</code> or <code>limit</code> order.</td>
</tr>
<tr>
<td>stopLoss.settlement</td>
<td>no</td>
<td>object</td>
<td>StarkKey signature, including nonce and signed order parameters. For details, please refer to the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/README.md">Python SDK</a> reference implementation.</td>
</tr>
<tr>
<td>builderFee</td>
<td>no</td>
<td>number</td>
<td>Amount that user will pay builder (an alternative ui maker) for the trade. Expressed in decimal format (e.g., 0.1 for 10%)</td>
</tr>
<tr>
<td>builderId</td>
<td>no</td>
<td>number</td>
<td>Builder client id that will receive the builderFee</td>
</tr>
<tr>
<td>rfqStartPrice</td>
<td>no</td>
<td>string</td>
<td>RFQ markets only, and only for <code>market</code> type orders: the start price of the quote walk, see <a href="#market-orders">Market orders</a>. Must be positive and within the market price precision. If omitted, the start price is derived automatically. Passing it on a non-RFQ market is rejected with <code>InvalidOrderParameters</code>. It is not part of the <code>settlement</code> signature.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1791389621914243072</span><span class="p">,</span><span class="w">
    </span><span class="nl">"externalId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"31097979600959341921260192820644698907062844065707793749567497227004358262"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-29'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.id</td>
<td>yes</td>
<td>number</td>
<td>Order ID assigned by Extended.</td>
</tr>
<tr>
<td>data.externalId</td>
<td>yes</td>
<td>string</td>
<td>Order ID assigned by user.</td>
</tr>
</tbody></table>
<h2 id='cancel-order-by-id'>Cancel order by ID</h2><h3 id='http-request-28'>HTTP Request</h3>
<p><code>DELETE /api/v1/user/order/{id}</code></p>

<p>Cancel an individual order by Extended ID.</p>

<p>The cancellation process is asynchronous; the endpoint returns only the status of the cancellation.</p>
<h3 id='url-parameters-10'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>id</td>
<td>yes</td>
<td>number</td>
<td>Order to be canceled, ID assigned by Extended.</td>
</tr>
</tbody></table>
<h2 id='cancel-order-by-external-id'>Cancel order by external id</h2><h3 id='http-request-29'>HTTP Request</h3>
<p><code>DELETE /api/v1/user/order?externalId={externalId}</code></p>

<p>Cancel an individual order by user ID.</p>

<p>The cancellation process is asynchronous; the endpoint returns only the status of the cancellation.</p>
<h3 id='url-parameters-11'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>externalId</td>
<td>yes</td>
<td>string</td>
<td>Order to be canceled, Order ID assigned by user.</td>
</tr>
</tbody></table>
<h3 id='response-30'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
</tbody></table>
<h2 id='mass-cancel'>Mass Cancel</h2><h3 id='http-request-30'>HTTP Request</h3>
<p><code>POST /api/v1/user/order/massCancel</code></p>

<p>Mass Cancel enables the cancellation of multiple orders by ID, by specific market, or for all orders within an account.</p>

<p>The cancellation process is asynchronous; the endpoint returns only the status of the cancellation request.</p>

<p>Although all parameters are optional, at least one must be specified.</p>

<blockquote>
<p>Request example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"orderIds"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="mi">1</span><span class="p">,</span><span class="w">
    </span><span class="mi">2</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"externalOrderIds"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="s2">"ExtId-1"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"ExtId-2"</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"markets"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"ETH-USD"</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"cancelAll"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='body-parameters-3'>Body Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>markets</td>
<td>no</td>
<td>string[]</td>
<td>Market names where all orders should be cancelled.</td>
</tr>
<tr>
<td>cancelAll</td>
<td>no</td>
<td>boolean</td>
<td>Indicates whether all open orders for the account should be cancelled.</td>
</tr>
<tr>
<td>orderIds</td>
<td>no</td>
<td>number[]</td>
<td>Cancel by Extended IDs.</td>
</tr>
<tr>
<td>externalOrderIds</td>
<td>no</td>
<td>string[]</td>
<td>Cancel by external IDs.</td>
</tr>
</tbody></table>
<h3 id='response-31'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
</tbody></table>
<h2 id='mass-auto-cancel-dead-man-39-s-switch'>Mass auto-cancel (dead man&#39;s switch)</h2><h3 id='http-request-31'>HTTP Request</h3>
<p><code>POST /api/v1/user/deadmanswitch?countdownTime={countdownTime}</code></p>

<p>The dead man&#39;s switch automatically cancels all open orders for the account at the end of the specified countdown if no Mass Auto-Cancel request is received within this timeframe. Setting the time to zero will remove any outstanding scheduled cancellations.</p>

<p>Positions and account status are not affected by the dead man&#39;s switch.</p>
<h3 id='request-parameters'>Request Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>countdownTime</td>
<td>yes</td>
<td>number</td>
<td>Time till Scheduled Mass Cancel (in seconds), should be non-negative. Setting the time to zero will remove any outstanding scheduled cancellations.</td>
</tr>
</tbody></table>
<h3 id='response-32'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
</tbody></table>
<h2 id='bridge-config'>Bridge Config</h2><h3 id='http-request-32'>HTTP Request</h3>
<p><code>GET /api/v1/user/bridge/config</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"chains"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"chain"</span><span class="p">:</span><span class="s2">"ARB"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"contractAddress"</span><span class="p">:</span><span class="s2">"0x10417734001162Ea139e8b044DFe28DbB8B28ad0"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Returns EVM chains supported for deposits and withdrawals for EVM-wallets.</p>
<h3 id='response-33'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>chains</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>Chain</code> objects.</td>
</tr>
</tbody></table>
<h3 id='chain-object'>Chain object</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>chain</td>
<td>yes</td>
<td>string</td>
<td>Chain name.</td>
</tr>
<tr>
<td>contractAddress</td>
<td>yes</td>
<td>string</td>
<td>Bridge contract address for the chain.</td>
</tr>
</tbody></table>
<h2 id='get-bridge-quote'>Get bridge quote</h2><h3 id='http-request-33'>HTTP Request</h3>
<p><code>GET /api/v1/user/bridge/quote?chainIn=ARB&amp;chainOut=STRK&amp;amount=100&amp;asset=USD</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"68aaa"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"fee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Gets a <a href="https://docs.rhino.fi/get-started/architecture">quote</a> for an EVM deposit/withdrawal.</p>
<h3 id='request-parameters-2'>Request Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>chainIn</td>
<td>yes</td>
<td>string</td>
<td>Chain where bridge will accept funds. For deposit set EVM chain, for withdrawal STRK.</td>
</tr>
<tr>
<td>chainOut</td>
<td>yes</td>
<td>string</td>
<td>Chain where bridge will send funds. For deposit set STRK chain, for withdrawal EVM.</td>
</tr>
<tr>
<td>amount</td>
<td>yes</td>
<td>number</td>
<td>Amount, in the requested asset&#39;s units, that the user should pay to the bridge contract on chainIn.</td>
</tr>
<tr>
<td>asset</td>
<td>no</td>
<td>string</td>
<td>Symbol of the asset being bridged. Must be a symbol supported by the bridge or the request returns <code>AssetIsNotSupported</code>.</td>
</tr>
</tbody></table>
<h3 id='response-34'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>id</td>
<td>yes</td>
<td>string</td>
<td>Quote ID.</td>
</tr>
<tr>
<td>fee</td>
<td>yes</td>
<td>decimal</td>
<td>Bridge fee.</td>
</tr>
</tbody></table>
<h2 id='commit-quote'>Commit quote</h2><h3 id='http-request-34'>HTTP Request</h3>
<p><code>POST /api/v1/user/bridge/quote?id=68aaa</code></p>

<p>Commits a <a href="https://docs.rhino.fi/get-started/architecture">quote</a> for EVM deposit/withdrawal.</p>

<p>If a quote is deemed acceptable it needs to be committed before the bridge can be executed. This tells our bridge provider Rhino.fi to start watching for a transaction on the origin chain that deposits the required funds into the bridge contract. Rhino.fi will then issue a commitment ID to be used when sending the funds to be bridged.</p>
<h2 id='deposits'>Deposits</h2>
<p>For EVM wallets, we support deposits and withdrawals on six major chains via the Rhino.fi bridge—Arbitrum, Ethereum, Base, Binance Smart Chain, Avalanche, and Polygon—currently. Please refer to the <a href="https://docs.extended.exchange/extended-resources/account-operations/deposits-and-withdrawals">documentation</a> for transaction limits and estimated processing times.</p>

<p>For Starknet wallets, we support USDC deposits via on-chain interaction and through the User Interface. To deposit on-chain, invoke the Starknet contract at <code>0x062da0780fae50d68cecaa5a051606dc21217ba290969b302db4dd99d2e9b470</code>.</p>

<p>Extended doesn&#39;t charge fees on deposits or withdrawals, but for EVM chains, bridge fees may apply. All deposits and withdrawals are subject to gas fees.</p>

<p>EVM deposit requires bridging, please read <a href="https://api.docs.extended.exchange/#bridge-config">Bridge section</a> before proceeding.</p>

<p>EVM deposit consists of four steps:</p>

<p>1) User retrieves supported chains and bridge contracts via GET /bridge/config.</p>

<p>2) User requests a quote via GET /bridge/quote.</p>

<p>3) If the user accepts the bridge fee, they confirm the quote using POST /bridge/quote.</p>

<p>4) Finally, the user calls the depositWithId function on the source chain. See the <a href="https://docs.rhino.fi/get-started/architecture">rhino.fi docs</a> for more details.</p>

<aside class="notice">
Incorrectly sent funds are non-recoverable by Extended.

Follow the execution order exactly as described. When calling depositWithId, use the exact same ID, amount, and token address. Test with a small amount first to ensure everything works correctly.
</aside>
<h2 id='withdrawals'>Withdrawals</h2>
<aside class="notice">
Withdrawals are supported for the collateral asset (USDC) and for any tradable spot asset (e.g. <code>BTC</code>, <code>ETH</code>). Specify the asset symbol in the request <code>asset</code> field. The endpoint rejects assets that are unknown (<code>AssetNotFound</code>), perpetual contracts, vault shares, or inactive (all return <code>WithdrawalInvalidAsset</code>).
</aside>

<p>For EVM wallets, we support deposits and withdrawals on six major chains—Arbitrum, Ethereum, Base, Binance Smart Chain, Avalanche, and Polygon. Please refer to the <a href="https://docs.extended.exchange/extended-resources/account-operations/deposits-and-withdrawals">documentation</a> for transaction limits and estimated processing times.</p>

<p>For Starknet wallets, we support withdrawals via the User Interface and API, as described below. </p>

<p>Note that Available Balance for Withdrawals = max(0, Wallet Balance + Withdrawable Unrealised PnL + min(0, Unrealised PnL - Withdrawable Unrealised PnL) - Initial Margin Requirements - Post-Withdrawal Margin Requirements), where <code>withdrawableUnrealisedPnl</code> is reported by <a href="#get-balance">Get balance</a>. Unrealised profit counts towards the withdrawal capacity only on markets where <code>tradingConfig.uPnlWithdrawable</code> is <code>true</code> (see <a href="#get-markets">Get markets</a>); unrealised losses always count in full. See <a href="#get-balance">Get balance</a> for the full definition.</p>

<p>That figure is the capacity for the collateral asset (USDC). For any other spot asset, the capacity is converted into that asset&#39;s units and capped by the balance actually held:</p>

<p>Available to Withdraw (asset) = max(0, min(Asset Balance, Account Withdrawal Capacity / (Contribution Factor × Asset Index Price))), rounded down to the asset&#39;s precision.</p>

<p>Unrealised PnL is never added to a non-collateral asset&#39;s own balance — withdrawable unrealised profit raises the account-level capacity, and therefore the cap, but you can never withdraw more of an asset than you hold. For the collateral asset the conversion is the identity (Index Price = 1, Contribution Factor = 1), so the two formulas coincide.</p>

<p>Extended doesn&#39;t charge fees on deposits or withdrawals, but for EVM chains, bridge fees may apply. All deposits and withdrawals are subject to gas fees. Withdrawals are only permitted to wallets that are linked to the authorised account.</p>
<h3 id='evm-withdrawals'>EVM withdrawals</h3>
<p>EVM withdrawals involve bridging, please read the <a href="#Bridge">Bridge</a> section first before proceeding. The withdrawal process consists of four steps:</p>

<p>1) User retrieves supported chains and bridge contracts via GET /bridge/config.
2) User requests a quote with GET /bridge/quote.
3) If the user accepts the bridge fee, they confirm the quote using POST /bridge/quote.
4) Finally, the user submits a Starknet withdrawal with the quoteId to the bridgeStarknetAddress associated with their account. See <a href="#account">Account</a> for details.</p>
<h3 id='starknet-withdrawals'>Starknet withdrawals</h3>
<p>To initiate a Starknet withdrawal, send a &quot;Create Withdrawal&quot; request as described below or use the corresponding SDK method, signed with a private L2 key. Starknet withdrawals are only available for accounts created with a Starknet wallet.</p>
<h3 id='http-request-35'>HTTP Request</h3>
<p><code>POST /api/v1/user/withdrawal</code></p>
<h3 id='request-2'>Request</h3>
<blockquote>
<p>Request example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"accountId"</span><span class="p">:</span><span class="s2">"100006"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"amount"</span><span class="p">:</span><span class="s2">"2"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"chainId"</span><span class="p">:</span><span class="s2">"STRK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"asset"</span><span class="p">:</span><span class="s2">"USD"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"settlement"</span><span class="p">:{</span><span class="w">
    </span><span class="nl">"recipient"</span><span class="p">:</span><span class="s2">"0x00f7016a6f1281925ef584bdc1fd2276b2fef02d0741acce215bc512857030dc"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"positionId"</span><span class="p">:</span><span class="mi">300006</span><span class="p">,</span><span class="w">
    </span><span class="nl">"collateralId"</span><span class="p">:</span><span class="s2">"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"amount"</span><span class="p">:</span><span class="s2">"2000000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"expiration"</span><span class="p">:{</span><span class="w">
      </span><span class="nl">"seconds"</span><span class="p">:</span><span class="mi">1755690249</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"salt"</span><span class="p">:</span><span class="mi">93763903</span><span class="p">,</span><span class="w">
    </span><span class="nl">"signature"</span><span class="p">:{</span><span class="w">
      </span><span class="nl">"r"</span><span class="p">:</span><span class="s2">"1110b06f591a5495b07c1e6ccc9478cbf2301af3a207c082be4c63fde19dd0b"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"s"</span><span class="p">:</span><span class="s2">"cc93ea79708889869c94c95efdb005f0f15c16dec94a93e7efda33eaf7bcbd"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='body-parameters-4'>Body Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>chainId</td>
<td>yes</td>
<td>string</td>
<td>Target chain. Use <code>STRK</code> for Starknet withdrawals; for EVM withdrawals use the chain code returned by <code>GET /bridge/config</code> (e.g. <code>ARB</code>, <code>ETH</code>, <code>BASE</code>, <code>BSC</code>, <code>AVAX</code>, <code>POLYGON</code>).</td>
</tr>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Source account ID.</td>
</tr>
<tr>
<td>amount</td>
<td>yes</td>
<td>string</td>
<td>Withdrawal amount, absolute value in the requested asset&#39;s units.</td>
</tr>
<tr>
<td>asset</td>
<td>yes</td>
<td>string</td>
<td>Symbol of the asset to withdraw. Accepts the collateral asset (<code>USD</code>) or any active tradable spot asset (e.g. <code>BTC</code>, <code>ETH</code>). Unknown assets return <code>AssetNotFound</code>; perpetual contracts, vault shares, and inactive assets return <code>WithdrawalInvalidAsset</code>.</td>
</tr>
<tr>
<td>settlement</td>
<td>yes</td>
<td>object</td>
<td>Withdrawal object StarkKey signature. For details, please refer to the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/x10/perpetual/withdrawal_object.py">Python SDK</a>.</td>
</tr>
<tr>
<td>quoteId</td>
<td>no</td>
<td>string</td>
<td>Bridge quote ID returned by <code>POST /bridge/quote</code>. Required for EVM withdrawals (where <code>chainId</code> is not <code>STRK</code>); ignored for Starknet withdrawals.</td>
</tr>
<tr>
<td>description</td>
<td>no</td>
<td>string</td>
<td>Optional free-form description. Up to 250 characters.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="mi">1820796462590083072</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-35'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data</td>
<td>yes</td>
<td>number</td>
<td>Withdrawal ID, assigned by Extended.</td>
</tr>
</tbody></table>
<h2 id='create-transfer'>Create transfer</h2><h3 id='http-request-36'>HTTP Request</h3>
<p><code>POST /api/v1/user/transfer</code></p>

<p>Create a transfer between sub-accounts associated with the same wallet.</p>
<h3 id='request-3'>Request</h3>
<blockquote>
<p>Request example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"fromAccount"</span><span class="p">:</span><span class="w"> </span><span class="mi">3004</span><span class="p">,</span><span class="w">
  </span><span class="nl">"toAccount"</span><span class="p">:</span><span class="w"> </span><span class="mi">7349</span><span class="p">,</span><span class="w">
  </span><span class="nl">"amount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"transferredAsset"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USD"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"settlement"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"amount"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000000000</span><span class="p">,</span><span class="w">
    </span><span class="nl">"assetId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x31857064564ed0ff978e687456963cba09c2c6985d8f9300a1de4962fafa054"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"expirationTimestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">478932</span><span class="p">,</span><span class="w">
    </span><span class="nl">"nonce"</span><span class="p">:</span><span class="w"> </span><span class="mi">758978120</span><span class="p">,</span><span class="w">
    </span><span class="nl">"receiverPositionId"</span><span class="p">:</span><span class="w"> </span><span class="mi">104350</span><span class="p">,</span><span class="w">
    </span><span class="nl">"receiverPublicKey"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x3895139a98a6168dc8b0db251bcd0e6dcf97fd1e96f7a87d9bd3f341753a844"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"senderPositionId"</span><span class="p">:</span><span class="w"> </span><span class="mi">100005</span><span class="p">,</span><span class="w">
    </span><span class="nl">"senderPublicKey"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x3895139a98a6168dc8b0db251bcd0e6dcf97fd1e96f7a87d9bd3f341753a844"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"signature"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"r"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6be1839e2ca76484a1a0fcaca9cbbe3792a23656d42ecee306c31e65aadb877"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"s"</span><span class="p">:</span><span class="w"> </span><span class="s2">"7b8f81258e16f0f90cd12f02e81427e54b4ebf7646e9b14b57f74c2cb44bff6"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='body-parameters-5'>Body Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>fromAccount</td>
<td>yes</td>
<td>number</td>
<td>Source account ID.</td>
</tr>
<tr>
<td>toAccount</td>
<td>yes</td>
<td>number</td>
<td>Destination account ID.</td>
</tr>
<tr>
<td>amount</td>
<td>yes</td>
<td>string</td>
<td>Transfer amount, absolute value in collateral asset.</td>
</tr>
<tr>
<td>transferredAsset</td>
<td>yes</td>
<td>string</td>
<td>Collateral asset name.</td>
</tr>
<tr>
<td>settlement</td>
<td>yes</td>
<td>object</td>
<td>Transfer object StarkKey signature (including nonce and transfer parameters). For details, please refer to the <a href="https://github.com/x10xchange/python_sdk/blob/starknet/x10/perpetual/transfer_object.py">Python SDK</a>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"validSignature"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1820778187672010752</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-36'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>status</td>
<td>yes</td>
<td>string</td>
<td>Can be <code>OK</code> or <code>ERROR</code>.</td>
</tr>
<tr>
<td>data.validSignature</td>
<td>yes</td>
<td>boolean</td>
<td>Indicates whether the signature is valid.</td>
</tr>
<tr>
<td>data.id</td>
<td>yes</td>
<td>number</td>
<td>Transfer ID assigned by Extended.</td>
</tr>
</tbody></table>
<h2 id='referrals'>Referrals</h2>
<p>Extended offers a referral program. The following API endpoints allow you to issue referral codes and retrieve your referral statistics.</p>
<h3 id='glossary'>Glossary</h3>
<ul>
<li><strong>Referral</strong> – A client who was invited by another client.</li>
<li><strong>Referee</strong> – A client who invited another client.</li>
<li><strong>Affiliate</strong> – A client who successfully applied to the <a href="https://docs.extended.exchange/extended-resources/referrals">Affiliate Program</a>.</li>
<li><strong>Subaffiliate</strong> – A referred user who is also an affiliate, and was referred by an affiliate.</li>
<li><strong>Referred volume</strong> – The trading volume of all clients referred by the user (non-transitive).</li>
<li><strong>Rebate</strong> – The reward paid to the referee of affiliate, derived from the trading fees of his referrals.</li>
<li><strong>Rebate rate</strong> – The percentage of fees paid by the referral that the referee or affiliate receive.<br>
<code>Rebate = rebate_rate * (trading_fees - rewards_to_other_programs)</code></li>
<li><strong>Referral schedule</strong> – A set of rules (<code>tiers</code>) that determine the rebate rate based on the L30D referred volume.</li>
</ul>
<h3 id='shared-objects'>Shared objects</h3><h3 id='tier-object'>Tier object</h3>
<blockquote>
<p>Example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"totalVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"rebateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"volumeLimitPerReferral"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p><code>Tier</code> is the lowest-level object that defines the rules of the referral program.</p>

<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>totalVolume</td>
<td>yes</td>
<td>number</td>
<td>Minimum Last 30D referred volume for the rebate rate tier.</td>
</tr>
<tr>
<td>rebateRate</td>
<td>yes</td>
<td>number</td>
<td>The rebate rate.</td>
</tr>
<tr>
<td>volumeLimitPerReferral</td>
<td>yes</td>
<td>number</td>
<td>Maximum trading volume eligible for a fee discount per referral.</td>
</tr>
</tbody></table>
<h3 id='refferal-schedule-object'>Refferal schedule object</h3>
<blockquote>
<p>Example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"tiers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"totalVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"rebateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"volumeLimitPerReferral"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Contains a list of <code>Tiers</code> objects.</p>

<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>tiers</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>Tiers</code> objects.</td>
</tr>
</tbody></table>
<h3 id='refferal-group-object'>Refferal group object</h3>
<blockquote>
<p>Example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="nl">"schedule"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"tiers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"totalVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"rebateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"volumeLimitPerReferral"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"subaffiliateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Contains the <code>Referral schedule</code> object and the sub-affiliate rebate rate. Each affiliate can have two types of Referral groups — the Main group and the Protection-period group.</p>

<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>id</td>
<td>yes</td>
<td>number</td>
<td>Group ID.</td>
</tr>
<tr>
<td>schedule</td>
<td>yes</td>
<td>object</td>
<td><code>Refferal schedule</code> object.</td>
</tr>
<tr>
<td>subaffiliateRate</td>
<td>yes</td>
<td>number</td>
<td>Rebate rate that referee gains from their subaffiliate referral rebates.</td>
</tr>
</tbody></table>
<h3 id='affiliate-object'>Affiliate object</h3>
<blockquote>
<p>Example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"clientId"</span><span class="p">:</span><span class="w"> </span><span class="mi">42</span><span class="p">,</span><span class="w">
  </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ABC"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"onboarded"</span><span class="p">:</span><span class="w"> </span><span class="mi">1746784655000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"mainGroup"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
    </span><span class="nl">"schedule"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"tiers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"totalVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rebateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"volumeLimitPerReferral"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"subaffiliateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"d30ReferredVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2000"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>clientId</td>
<td>yes</td>
<td>number</td>
<td>Affiliate&#39;s client ID on Extended.</td>
</tr>
<tr>
<td>name</td>
<td>yes</td>
<td>string</td>
<td>Affiliate&#39;s name on Extended.</td>
</tr>
<tr>
<td>onboarded</td>
<td>yes</td>
<td>number</td>
<td>Affiliate&#39;s onboarding timestamp (Unix).</td>
</tr>
<tr>
<td>mainGroup</td>
<td>yes</td>
<td>number</td>
<td>Affiliate&#39;s Main <code>Refferal group</code> object.</td>
</tr>
<tr>
<td>d30ReferredVolume</td>
<td>yes</td>
<td>number</td>
<td>Last 30D volume of users referred by the Affiliate.</td>
</tr>
<tr>
<td>protectionPeriodGroup</td>
<td>no</td>
<td>number</td>
<td>Affiliate&#39;s <code>Refferal group</code> during protection period.</td>
</tr>
<tr>
<td>protectionPeriodUntil</td>
<td>no</td>
<td>number</td>
<td>End of protection period (Unix timestamp).</td>
</tr>
</tbody></table>
<h3 id='period'>Period</h3>
<p>Enum that specifies the time period for fetching data. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code>, <code>ALL</code>.</p>
<h3 id='granularity'>Granularity</h3>
<p>Enum that specifies the time period for fetching data. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>.</p>
<h2 id='get-affiliate-data'>Get affiliate data</h2>
<p><code>GET /api/v1/user/affiliate</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"clientId"</span><span class="p">:</span><span class="w"> </span><span class="mi">42</span><span class="p">,</span><span class="w">
  </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ABC"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"onboarded"</span><span class="p">:</span><span class="w"> </span><span class="mi">1746784655000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"mainGroup"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
    </span><span class="nl">"schedule"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"tiers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"totalVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rebateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"volumeLimitPerReferral"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"subaffiliateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"d30ReferredVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2000"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>If the user is an affiliate, returns their affiliate data; otherwise, returns a 404.</p>
<h3 id='response-37'>Response</h3>
<p>See <code>Affiliate</code> object in the Shared objects section of <a href="https://api.docs.extended.exchange/#referrals">Referrals documentation</a>.</p>
<h2 id='get-referral-status'>Get referral status</h2>
<p><code>GET /api/v1/user/referrals/status</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> 
  </span><span class="nl">"limit"</span><span class="p">:</span><span class="w"> </span><span class="mi">10000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"tradedVolume"</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Returns the user’s referral program status.</p>
<h3 id='response-38'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>active</td>
<td>yes</td>
<td>boolean</td>
<td>Program is active for the user - user can issue referral codes. Can be <code>true</code> or <code>false</code>.</td>
</tr>
<tr>
<td>limit</td>
<td>yes</td>
<td>number</td>
<td>Trading volume required to activate the referral program.</td>
</tr>
<tr>
<td>tradedVolume</td>
<td>yes</td>
<td>number</td>
<td>User&#39;s current traded volume.</td>
</tr>
</tbody></table>
<h2 id='get-referral-links'>Get referral links</h2>
<p><code>GET /api/v1/user/referrals/links</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">[</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ABC"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"issuedBy"</span><span class="p">:</span><span class="w"> </span><span class="mi">42</span><span class="p">,</span><span class="w">
    </span><span class="nl">"issuedAt"</span><span class="p">:</span><span class="w"> </span><span class="mi">1746785907329</span><span class="p">,</span><span class="w">
    </span><span class="nl">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ABC"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"isDefault"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
    </span><span class="nl">"hiddenAtUi"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
    </span><span class="nl">"overallRebates"</span><span class="p">:</span><span class="w"> </span><span class="s2">"50"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre></div>
<p>Returns referral links issued by the user.</p>
<h3 id='response-39'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>id</td>
<td>yes</td>
<td>string</td>
<td>Link ID.</td>
</tr>
<tr>
<td>issuedBy</td>
<td>yes</td>
<td>number</td>
<td>Referral client ID.</td>
</tr>
<tr>
<td>issuedAt</td>
<td>yes</td>
<td>number</td>
<td>Link issue timestamp (Unix).</td>
</tr>
<tr>
<td>label</td>
<td>yes</td>
<td>string</td>
<td>Label added by user.</td>
</tr>
<tr>
<td>isDefault</td>
<td>yes</td>
<td>boolean</td>
<td>Link set as default for the client. Can be <code>true</code> or <code>false</code>.</td>
</tr>
<tr>
<td>hiddenAtUi</td>
<td>yes</td>
<td>boolean</td>
<td>Link is visible for the client. Can be <code>true</code> or <code>false</code>.</td>
</tr>
<tr>
<td>overallRebates</td>
<td>yes</td>
<td>number</td>
<td>Total rebates for the link.</td>
</tr>
</tbody></table>
<h2 id='get-referral-dashboard'>Get referral dashboard</h2>
<p><code>GET /api/v1/user/referrals/dashboard?period={PERIOD}</code></p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"referralLinkToDirectKeyMetrics"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"ABC"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"rebateEarned"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"current"</span><span class="p">:</span><span class="w"> </span><span class="s2">"200"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"previous"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"totalFeesPaid"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"current"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"previous"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"tradingVolume"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"current"</span><span class="p">:</span><span class="w"> </span><span class="s2">"20000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"previous"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"activeTraders"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"current"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span><span class="w">
        </span><span class="nl">"previous"</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"subaffiliateToKeyMetrics"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"2"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"rebateEarned"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"current"</span><span class="p">:</span><span class="w"> </span><span class="s2">"200"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"previous"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"subaffiliateEarnings"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"current"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2500"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"previous"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1250"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"activeSubaffiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"current"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
    </span><span class="nl">"previous"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"affiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"clientId"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"RUSLAN"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"onboarded"</span><span class="p">:</span><span class="w"> </span><span class="mi">1746792229516</span><span class="p">,</span><span class="w">
      </span><span class="nl">"mainGroup"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
        </span><span class="nl">"schedule"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"tiers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
            </span><span class="p">{</span><span class="w">
              </span><span class="nl">"totalVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
              </span><span class="nl">"rebateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
              </span><span class="nl">"volumeLimitPerReferral"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
            </span><span class="p">}</span><span class="w">
          </span><span class="p">]</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"subaffiliateRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"users"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"firstTradedOn"</span><span class="p">:</span><span class="w"> </span><span class="mi">1746792228516</span><span class="p">,</span><span class="w">
      </span><span class="nl">"wallet"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0x42...a8a91"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"rebate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradedVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"totalFees"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"daily"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-05-09"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"subaffiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rebate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"activeUsers"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
          </span><span class="nl">"referredTradingVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"earnings"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">],</span><span class="w">
      </span><span class="nl">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"link"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ABC"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"rebate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"activeUsers"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
          </span><span class="nl">"referredTradingVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"200"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"referredFees"</span><span class="p">:</span><span class="w"> </span><span class="s2">"20"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"referredL30Volume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2000"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-05-08"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"subaffiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w">
      </span><span class="nl">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"weekly"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-05-09"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"subaffiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w">
      </span><span class="nl">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-05-02"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"subaffiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w">
      </span><span class="nl">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"monthly"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-05-09"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"subaffiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w">
      </span><span class="nl">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-04-11"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"subaffiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w">
      </span><span class="nl">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-04-13"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"subaffiliates"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w">
      </span><span class="nl">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Returns referral program statistic for the selected period.</p>
<h3 id='request-parameters-3'>Request parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>period</td>
<td>yes</td>
<td>string</td>
<td>Requested period.</td>
</tr>
</tbody></table>
<h3 id='response-40'>Response</h3>
<p>The <code>Affiliate</code> object is described in the Shared objects section of <a href="https://api.docs.extended.exchange/#referrals">Referrals documentation</a>. The descriptions of other objects returned by this endpoint are provided below.</p>

<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>referralLinkToDirectKeyMetrics</td>
<td>yes</td>
<td>object</td>
<td>Metrics aggregated by referral codes (Map<Code,`DirectKeyMetrics`>).</td>
</tr>
<tr>
<td>subaffiliateToKeyMetrics</td>
<td>yes</td>
<td>object</td>
<td>Metrics aggregated by subaffiliates (Map<ClientId,`SubaffiliateKeyMetrics`>).</td>
</tr>
<tr>
<td>activeSubaffiliates</td>
<td>yes</td>
<td>number</td>
<td>Number of active subaffiliates.</td>
</tr>
<tr>
<td>affiliates</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>Affiliate</code> objects for subaffiliates active during the period.</td>
</tr>
<tr>
<td>users</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>UserStat</code> objects for users active during the period.</td>
</tr>
<tr>
<td>daily</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>AffiliateStat</code> objects for the period with 1 day granularity.</td>
</tr>
<tr>
<td>weekly</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>AffiliateStat</code> objects for the period with 1 week granularity.</td>
</tr>
<tr>
<td>monthly</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>AffiliateStat</code> objects for the period with 1 month granularity.</td>
</tr>
</tbody></table>
<h3 id='currenttoprevious-lt-t-gt'>CurrentToPrevious&lt;<em>T</em>&gt;</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>current</td>
<td>yes</td>
<td>object</td>
<td>&lt;<em>T</em>&gt; data for current period.</td>
</tr>
<tr>
<td>previous</td>
<td>yes</td>
<td>object</td>
<td>&lt;<em>T</em>&gt; data for previous period.</td>
</tr>
</tbody></table>
<h3 id='directkeymetrics'>DirectKeyMetrics</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>rebateEarned</td>
<td>yes</td>
<td>object</td>
<td>CurrentToPrevious&lt;<em>Number</em>&gt;. Rebates earned during the period.</td>
</tr>
<tr>
<td>totalFeesPaid</td>
<td>yes</td>
<td>object</td>
<td>CurrentToPrevious&lt;<em>Number</em>&gt;. Total amount of fees paid by referrals during the period.</td>
</tr>
<tr>
<td>tradingVolume</td>
<td>yes</td>
<td>object</td>
<td>CurrentToPrevious&lt;<em>Number</em>&gt;. Referred volume during the period.</td>
</tr>
<tr>
<td>activeTraders</td>
<td>yes</td>
<td>object</td>
<td>CurrentToPrevious&lt;<em>Number</em>&gt;. Number of active traders among referrals during the period.</td>
</tr>
</tbody></table>
<h3 id='subaffiliatekeymetrics'>SubaffiliateKeyMetrics</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>rebateEarned</td>
<td>yes</td>
<td>object</td>
<td>CurrentToPrevious&lt;<em>Number</em>&gt;. Rebates earned during the period.</td>
</tr>
<tr>
<td>subaffiliateEarnings</td>
<td>yes</td>
<td>object</td>
<td>CurrentToPrevious&lt;<em>Number</em>&gt;. Total rebates earned by subaffiliates during the period.</td>
</tr>
</tbody></table>
<h3 id='userstat'>UserStat</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>firstTradedOn</td>
<td>no</td>
<td>number</td>
<td>Referral&#39;s first trade timestamp (Unix).</td>
</tr>
<tr>
<td>wallet</td>
<td>yes</td>
<td>string</td>
<td>Masked referral&#39;s wallet.</td>
</tr>
<tr>
<td>referredBy</td>
<td>no</td>
<td>number</td>
<td>User&#39;s referee.</td>
</tr>
<tr>
<td>referralLink</td>
<td>no</td>
<td>string</td>
<td>Referral link code used by the referral.</td>
</tr>
<tr>
<td>rebate</td>
<td>yes</td>
<td>number</td>
<td>Rebate.</td>
</tr>
<tr>
<td>tradedVolume</td>
<td>yes</td>
<td>number</td>
<td>Referral&#39;s traded volume during the period.</td>
</tr>
<tr>
<td>totalFees</td>
<td>yes</td>
<td>number</td>
<td>Total fees paid by the referral during the period.</td>
</tr>
</tbody></table>
<h3 id='affiliatestat'>AffiliateStat</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>date</td>
<td>yes</td>
<td>string</td>
<td>Last date of the period.</td>
</tr>
<tr>
<td>subaffiliates</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>SubaffiliateStat</code> objects for the period grouped by subaffiliates.</td>
</tr>
<tr>
<td>links</td>
<td>yes</td>
<td>object[]</td>
<td>List of <code>LinkStat</code> objects for the period grouped by links.</td>
</tr>
</tbody></table>
<h3 id='subaffiliatestat'>SubaffiliateStat</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>id</td>
<td>yes</td>
<td>number</td>
<td>Subaffiliate&#39;s client ID on Extended.</td>
</tr>
<tr>
<td>rebate</td>
<td>yes</td>
<td>number</td>
<td>Rebate earned by Subaffiliate (rebate from referrals of his referrals).</td>
</tr>
<tr>
<td>activeUsers</td>
<td>yes</td>
<td>number</td>
<td>Number of active traders among Subaffiliate&#39;s referrals.</td>
</tr>
<tr>
<td>referredTradingVolume</td>
<td>yes</td>
<td>number</td>
<td>Subaffiliate&#39;s referred volume.</td>
</tr>
<tr>
<td>earnings</td>
<td>yes</td>
<td>number</td>
<td>Subaffiliate&#39;s rebate.</td>
</tr>
</tbody></table>
<h3 id='linkstat'>LinkStat</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>link</td>
<td>yes</td>
<td>string</td>
<td>Referral link code.</td>
</tr>
<tr>
<td>rebate</td>
<td>yes</td>
<td>number</td>
<td>Rebate earned through the link.</td>
</tr>
<tr>
<td>activeUsers</td>
<td>yes</td>
<td>number</td>
<td>Count of active referrals invited through the link.</td>
</tr>
<tr>
<td>referredTradingVolume</td>
<td>yes</td>
<td>number</td>
<td>Volume referred through the link.</td>
</tr>
<tr>
<td>referredFees</td>
<td>yes</td>
<td>number</td>
<td>Total fees paid by referrals invited through the link.</td>
</tr>
<tr>
<td>referredL30Volume</td>
<td>yes</td>
<td>number</td>
<td>Last 30D volume referred through the link.</td>
</tr>
</tbody></table>
<h2 id='use-referral-link'>Use referral link</h2>
<p><code>POST /api/v1/user/referrals/use</code></p>

<blockquote>
<p>Request example:
<code>json
{
  &quot;code&quot;: &quot;ABC&quot;
}
</code></p>
</blockquote>

<p>Activate referral link for the authenticated client.</p>
<h2 id='create-referral-link-code'>Create referral link code</h2>
<p><code>POST /api/v1/user/referrals</code></p>

<blockquote>
<p>Request example:
<code>json
{
  &quot;id&quot;: &quot;ABC&quot;,
  &quot;isDefault&quot;: true,
  &quot;hiddenAtUi&quot;: false
}
</code></p>
</blockquote>

<p>Create referral link code.</p>
<h2 id='update-referral-link-code'>Update referral link code</h2>
<p><code>PUT /api/v1/user/referrals</code></p>

<p>Update referral link code.</p>

<blockquote>
<p>Request example:
<code>json
{
  &quot;id&quot;: &quot;ABC&quot;,
  &quot;isDefault&quot;: true,
  &quot;hiddenAtUi&quot;: false
}
</code></p>
</blockquote>
<h2 id='points'>Points</h2>
<p>Points-related endpoints let users view their earned points and leaderboard ranking.</p>
<h2 id='get-earned-points'>Get Earned Points</h2><h3 id='http-request-37'>HTTP Request</h3>
<p><code>GET /api/v1/user/rewards/earned</code></p>

<p>Returns points earned by the authenticated client across all seasons and epochs.</p>
<h3 id='authentication-2'>Authentication</h3>
<p>This endpoint requires authentication.</p>

<blockquote>
<p>Response example:
<code>json
{
  &quot;status&quot;: &quot;OK&quot;,
  &quot;data&quot;: [
    {
      &quot;seasonId&quot;: 1,
      &quot;epochRewards&quot;: [
        {
          &quot;epochId&quot;: 1,
          &quot;startDate&quot;: &quot;2023-01-01T00:00:00Z&quot;,
          &quot;endDate&quot;: &quot;2023-01-31T23:59:59Z&quot;,
          &quot;pointsReward&quot;: &quot;50.25&quot;
        }
      ]
    }
  ]
}
</code></p>
</blockquote>
<h3 id='response-41'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data[].seasonId</td>
<td>number</td>
<td>The ID of the reward season.</td>
</tr>
<tr>
<td>data[].epochRewards</td>
<td>array</td>
<td>List of rewards earned in each epoch.</td>
</tr>
<tr>
<td>data[].epochRewards.epochId</td>
<td>number</td>
<td>The ID of the epoch.</td>
</tr>
<tr>
<td>data[].epochRewards.startDate</td>
<td>string</td>
<td>The start date of the epoch (ISO format).</td>
</tr>
<tr>
<td>data[].epochRewards.endDate</td>
<td>string</td>
<td>The end date of the epoch (ISO format).</td>
</tr>
<tr>
<td>data[].epochRewards.pointsReward</td>
<td>string</td>
<td>The number of points earned in the epoch.</td>
</tr>
</tbody></table>
<h2 id='get-points-leaderboard-stats'>Get points leaderboard stats</h2><h3 id='http-request-38'>HTTP Request</h3>
<p><code>GET /api/v1/user/rewards/leaderboard/stats</code></p>

<p>Returns the leaderboard statistics for the authenticated client, including total points, leaderboard rank, and points league levels.</p>
<h3 id='authentication-3'>Authentication</h3>
<p>This endpoint requires authentication.</p>

<blockquote>
<p>Response example:
<code>json
{
  &quot;status&quot;: &quot;OK&quot;,
  &quot;data&quot;: {
    &quot;totalPoints&quot;: &quot;1250.75&quot;,
    &quot;rank&quot;: 42,
    &quot;tradingRewardLeague&quot;: &quot;QUEEN&quot;,
    &quot;liquidityRewardLeague&quot;: &quot;PAWN&quot;,
    &quot;referralRewardLeague&quot;: &quot;KING&quot;
  }
}
</code></p>
</blockquote>
<h3 id='response-42'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>totalPoints</td>
<td>string</td>
<td>The total number of points earned.</td>
</tr>
<tr>
<td>rank</td>
<td>number</td>
<td>The client&#39;s rank on the leaderboard.</td>
</tr>
<tr>
<td>tradingRewardLeague</td>
<td>string</td>
<td>The client&#39;s league for trading points.</td>
</tr>
<tr>
<td>liquidityRewardLeague</td>
<td>string</td>
<td>The client&#39;s league for liquidity points.</td>
</tr>
<tr>
<td>referralRewardLeague</td>
<td>string</td>
<td>The client&#39;s league for referral points.</td>
</tr>
</tbody></table>
<h2 id='points-league-levels'>Points league levels</h2>
<p>The following table describes the points-league levels for <code>tradingRewardLeague</code>, <code>liquidityRewardLeague</code>, and <code>referralRewardLeague</code>.</p>

<table><thead>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td><code>KING</code></td>
<td>King league - highest tier.</td>
</tr>
<tr>
<td><code>QUEEN</code></td>
<td>Queen league - second-highest tier.</td>
</tr>
<tr>
<td><code>ROOK</code></td>
<td>Rook league - advanced tier.</td>
</tr>
<tr>
<td><code>KNIGHT</code></td>
<td>Knight league - intermediate tier.</td>
</tr>
<tr>
<td><code>PAWN</code></td>
<td>Pawn league - entry-level tier.</td>
</tr>
</tbody></table>
<h2 id='get-account-equity-history'>Get account equity history</h2><h3 id='http-request-39'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/charts/equities?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns equity history for the chosen accounts per date.
To request data for several accounts, use the format <code>GET /api/v1/portfolio/charts/equities?accountId=1000&amp;accountId=10001&amp;interval=WEEK</code>.</p>
<h3 id='authentication-4'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='request-4'>Request</h3><h3 id='query-parameters-17'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Id of user account.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"700"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1400"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-account-pnl-history'>Get account PnL history</h2><h3 id='http-request-40'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/charts/pnl?accountId={accountId}&amp;interval={interval}&amp;pnlType={pnlType}</code></p>

<p>Returns total or realised Pnl history for the chosen accounts per date.
To request data for several accounts, use the format <code>GET /api/v1/portfolio/charts/pnl?accountId=1000&amp;accountId=10001&amp;interval=WEEK&amp;pnlType=TOTAL_PNL</code>.</p>
<h3 id='authentication-5'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='request-5'>Request</h3><h3 id='query-parameters-18'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>pnlType</td>
<td>yes</td>
<td>string</td>
<td>Pnl type. Can be <code>TOTAL_PNL</code> or <code>REALISED_PNL</code>.</td>
</tr>
<tr>
<td>instrumentType</td>
<td>no</td>
<td>string</td>
<td>Filter by instrument type. Can be <code>ALL</code> (default), <code>PERPS</code> or <code>SPOT</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="w">                </span><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"700"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1400"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-account-pnl-percentage-history'>Get account PnL percentage history</h2><h3 id='http-request-41'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/charts/pnl/percentage?accountId={accountId}&amp;interval={interval}&amp;pnlType={pnlType}</code></p>

<p>Returns the PnL percentage history for the chosen accounts per date, together with the price-change series of any requested reference markets over the same period (useful for benchmarking account performance against the market).</p>
<h3 id='authentication-6'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-19'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts (<code>accountId=1000&amp;accountId=10001</code>).</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>pnlType</td>
<td>yes</td>
<td>string</td>
<td>Pnl type. Can be <code>TOTAL_PNL</code> or <code>REALISED_PNL</code>.</td>
</tr>
<tr>
<td>priceMarket</td>
<td>no</td>
<td>string</td>
<td>Reference market to include a price-change series for. Repeat for several (<code>priceMarket=BTC-USD&amp;priceMarket=ETH-USD</code>).</td>
</tr>
<tr>
<td>instrumentType</td>
<td>no</td>
<td>string</td>
<td>Filter by instrument type. Can be <code>ALL</code> (default), <code>PERPS</code> or <code>SPOT</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"pnl"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.5"</span><span class="w"> </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3.2"</span><span class="w"> </span><span class="p">}</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"priceChanges"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"BTC-USD"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.8"</span><span class="w"> </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2.1"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-43'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data.pnl[].date</td>
<td>string</td>
<td>Date in <code>YYYY-MM-DD</code> format.</td>
</tr>
<tr>
<td>data.pnl[].value</td>
<td>string</td>
<td>Account PnL percentage for the date.</td>
</tr>
<tr>
<td>data.priceChanges</td>
<td>object</td>
<td>Map of reference market name to its price-change series. Empty when no <code>priceMarket</code> is requested.</td>
</tr>
<tr>
<td>data.priceChanges.{market}[].date</td>
<td>string</td>
<td>Date in <code>YYYY-MM-DD</code> format.</td>
</tr>
<tr>
<td>data.priceChanges.{market}[].value</td>
<td>string</td>
<td>Price-change percentage of the market for the date.</td>
</tr>
</tbody></table>
<h2 id='get-cumulative-account-pnl-history'>Get cumulative account PnL history</h2><h3 id='http-request-42'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/charts/pnl/cumulative?accountId={accountId}&amp;interval={interval}&amp;pnlType={pnlType}</code></p>

<p>Returns the cumulative (running total) PnL history for the chosen accounts per date.
To request data for several accounts, use the format <code>GET /api/v1/portfolio/charts/pnl/cumulative?accountId=1000&amp;accountId=10001&amp;interval=WEEK&amp;pnlType=TOTAL_PNL</code>.</p>
<h3 id='authentication-7'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-20'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>pnlType</td>
<td>yes</td>
<td>string</td>
<td>Pnl type. Can be <code>TOTAL_PNL</code> or <code>REALISED_PNL</code>.</td>
</tr>
<tr>
<td>instrumentType</td>
<td>no</td>
<td>string</td>
<td>Filter by instrument type. Can be <code>ALL</code> (default), <code>PERPS</code> or <code>SPOT</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"700"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2100"</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-cumulative-account-pnl-percentage-history'>Get cumulative account PnL percentage history</h2><h3 id='http-request-43'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/charts/pnl/cumulative/percentage?accountId={accountId}&amp;interval={interval}&amp;pnlType={pnlType}</code></p>

<p>Returns the cumulative PnL percentage history for the chosen accounts per date, together with the price-change series of any requested reference markets.</p>
<h3 id='authentication-8'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-21'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>pnlType</td>
<td>yes</td>
<td>string</td>
<td>Pnl type. Can be <code>TOTAL_PNL</code> or <code>REALISED_PNL</code>.</td>
</tr>
<tr>
<td>priceMarket</td>
<td>no</td>
<td>string</td>
<td>Reference market to include a price-change series for. Repeat for several.</td>
</tr>
<tr>
<td>instrumentType</td>
<td>no</td>
<td>string</td>
<td>Filter by instrument type. Can be <code>ALL</code> (default), <code>PERPS</code> or <code>SPOT</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"pnl"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.5"</span><span class="w"> </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4.7"</span><span class="w"> </span><span class="p">}</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"priceChanges"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"BTC-USD"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.8"</span><span class="w"> </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2.9"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>The response shape is identical to <a href="#get-account-pnl-percentage-history">Get account PnL percentage history</a> — <code>data.pnl</code> plus a <code>data.priceChanges</code> map keyed by reference market.</p>
<h2 id='get-account-vault-equity-history'>Get account vault equity history</h2><h3 id='http-request-44'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/charts/vault-equities?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns the vault equity history for the chosen accounts per date (the equity attributable to vault positions).</p>
<h3 id='authentication-9'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-22'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"500"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"650"</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-account-max-drawdown-history'>Get account max drawdown history</h2><h3 id='http-request-45'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/charts/max-drawdown?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns the maximum drawdown history per account per date. Each account is returned as its own series.</p>
<h3 id='authentication-10'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-23'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-0.05"</span><span class="w"> </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-0.12"</span><span class="w"> </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-44'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data[].accountId</td>
<td>number</td>
<td>Account the drawdown series belongs to.</td>
</tr>
<tr>
<td>data[].data[].date</td>
<td>string</td>
<td>Date in <code>YYYY-MM-DD</code> format.</td>
</tr>
<tr>
<td>data[].data[].value</td>
<td>string</td>
<td>Maximum drawdown for the date (as a fraction; negative).</td>
</tr>
</tbody></table>
<h2 id='get-account-funding-chart'>Get account funding chart</h2>
<aside class="notice">
Perpetual markets only — spot markets do not pay or receive funding.
</aside>
<h3 id='http-request-46'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/charts/funding?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns the daily net funding fees for the chosen accounts per date, optionally filtered to specific markets.</p>
<h3 id='authentication-11'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-24'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Market name to filter by. Repeat for several (<code>market=BTC-USD&amp;market=ETH-USD</code>).</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-1.25"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w"> </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.40"</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-account-portfolio-summary'>Get account portfolio summary</h2><h3 id='http-request-47'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/accounts/summary?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns an aggregated portfolio summary across the chosen accounts for the interval — equity, account value breakdown, exposure, and trading performance metrics.</p>
<h3 id='authentication-12'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-25'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to aggregate several accounts (<code>accountId=1000&amp;accountId=10001</code>).</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>instrumentType</td>
<td>no</td>
<td>string</td>
<td>Filter by instrument type. Can be <code>ALL</code> (default), <code>PERPS</code> or <code>SPOT</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"equity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"13500"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"accountValue"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"accountNotionalValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"13500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradingEquity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"vaultNotionalValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"spotNotionalValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3000"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"exposure"</span><span class="p">:</span><span class="w"> </span><span class="s2">"25000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"totalPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1200"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"profitFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.8"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"winRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.62"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"tradingVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1500000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"makerVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"900000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"sharpeRatio"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2.1"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-45'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data.equity</td>
<td>string</td>
<td>Total equity across the requested accounts.</td>
</tr>
<tr>
<td>data.accountValue.accountNotionalValue</td>
<td>string</td>
<td>Total account notional value.</td>
</tr>
<tr>
<td>data.accountValue.tradingEquity</td>
<td>string</td>
<td>Equity available to perpetual trading.</td>
</tr>
<tr>
<td>data.accountValue.vaultNotionalValue</td>
<td>string</td>
<td>Notional value held in vaults.</td>
</tr>
<tr>
<td>data.accountValue.spotNotionalValue</td>
<td>string</td>
<td>Notional value of spot holdings.</td>
</tr>
<tr>
<td>data.exposure</td>
<td>string</td>
<td>Total position exposure.</td>
</tr>
<tr>
<td>data.totalPnl</td>
<td>string</td>
<td>Total PnL over the interval.</td>
</tr>
<tr>
<td>data.profitFactor</td>
<td>string</td>
<td>Gross profit divided by gross loss.</td>
</tr>
<tr>
<td>data.winRate</td>
<td>string</td>
<td>Fraction of winning trades.</td>
</tr>
<tr>
<td>data.tradingVolume</td>
<td>string</td>
<td>Total trading volume over the interval.</td>
</tr>
<tr>
<td>data.makerVolume</td>
<td>string</td>
<td>Maker trading volume over the interval.</td>
</tr>
<tr>
<td>data.sharpeRatio</td>
<td>string</td>
<td>Sharpe ratio. Nullable when not enough data.</td>
</tr>
</tbody></table>
<h2 id='get-account-health'>Get account health</h2><h3 id='http-request-48'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/accounts/health?accountId={accountId}</code></p>

<p>Returns the current health and risk metrics for each requested account.</p>
<h3 id='authentication-13'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-26'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts (<code>accountId=1000&amp;accountId=10001</code>).</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"equity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"13500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"unrealisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"200"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"exposure"</span><span class="p">:</span><span class="w"> </span><span class="s2">"25000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"netExposure"</span><span class="p">:</span><span class="w"> </span><span class="s2">"24000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.85"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"initialMargin"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"marginRatio"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.18"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"availableForTrading"</span><span class="p">:</span><span class="w"> </span><span class="s2">"11000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"availableForSpotTrading"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"availableForWithdrawal"</span><span class="p">:</span><span class="w"> </span><span class="s2">"9000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"health"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.82"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-46'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data[].accountId</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].equity</td>
<td>string</td>
<td>Account equity.</td>
</tr>
<tr>
<td>data[].unrealisedPnl</td>
<td>string</td>
<td>Unrealised PnL on open positions.</td>
</tr>
<tr>
<td>data[].exposure</td>
<td>string</td>
<td>Total position exposure.</td>
</tr>
<tr>
<td>data[].netExposure</td>
<td>string</td>
<td>Net (directional) exposure.</td>
</tr>
<tr>
<td>data[].leverage</td>
<td>string</td>
<td>Account leverage (exposure / equity).</td>
</tr>
<tr>
<td>data[].initialMargin</td>
<td>string</td>
<td>Collateral locked as initial margin.</td>
</tr>
<tr>
<td>data[].marginRatio</td>
<td>string</td>
<td>Margin ratio; liquidation approaches as it nears <code>1</code>.</td>
</tr>
<tr>
<td>data[].availableForTrading</td>
<td>string</td>
<td>Collateral available to open perpetual positions/orders.</td>
</tr>
<tr>
<td>data[].availableForSpotTrading</td>
<td>string</td>
<td>Value available to fund spot orders.</td>
</tr>
<tr>
<td>data[].availableForWithdrawal</td>
<td>string</td>
<td>Amount available to withdraw.</td>
</tr>
<tr>
<td>data[].health</td>
<td>string</td>
<td>Overall account health score.</td>
</tr>
</tbody></table>
<h2 id='get-account-performance'>Get account performance</h2><h3 id='http-request-49'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/accounts/performance?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns per-account performance metrics over the interval.</p>
<h3 id='authentication-14'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-27'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>marketType</td>
<td>no</td>
<td>string</td>
<td>Filter by instrument type. Can be <code>ALL</code> (default), <code>PERPS</code> or <code>SPOT</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"realisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"800"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"unrealisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"400"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"totalPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1200"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"totalPnlPercentage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.09"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"profitFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.8"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"maxDrawdown"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-0.12"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"winRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.62"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tradingVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1500000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"makerVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"900000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"sharpeRatio"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2.1"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-47'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data[].accountId</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].realisedPnl</td>
<td>string</td>
<td>Realised PnL over the interval.</td>
</tr>
<tr>
<td>data[].unrealisedPnl</td>
<td>string</td>
<td>Unrealised PnL over the interval.</td>
</tr>
<tr>
<td>data[].totalPnl</td>
<td>string</td>
<td>Total PnL over the interval.</td>
</tr>
<tr>
<td>data[].totalPnlPercentage</td>
<td>string</td>
<td>Total PnL as a fraction of starting equity.</td>
</tr>
<tr>
<td>data[].profitFactor</td>
<td>string</td>
<td>Gross profit divided by gross loss.</td>
</tr>
<tr>
<td>data[].maxDrawdown</td>
<td>string</td>
<td>Maximum drawdown over the interval (fraction; negative).</td>
</tr>
<tr>
<td>data[].winRate</td>
<td>string</td>
<td>Fraction of winning trades.</td>
</tr>
<tr>
<td>data[].tradingVolume</td>
<td>string</td>
<td>Total trading volume over the interval.</td>
</tr>
<tr>
<td>data[].makerVolume</td>
<td>string</td>
<td>Maker trading volume over the interval.</td>
</tr>
<tr>
<td>data[].sharpeRatio</td>
<td>string</td>
<td>Sharpe ratio. Nullable when not enough data.</td>
</tr>
</tbody></table>

<aside class="notice">
The instrument-type filter on this endpoint uses the query parameter name <code>marketType</code> (not <code>instrumentType</code>).
</aside>
<h2 id='get-account-funding-stats'>Get account funding stats</h2>
<aside class="notice">
Perpetual markets only — spot markets do not pay or receive funding.
</aside>
<h3 id='http-request-50'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/funding/stats?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns aggregated funding statistics over the interval — total funding paid/received and a per-market breakdown.</p>
<h3 id='authentication-15'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-28'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Market name to filter by. Repeat for several.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"totalFunding"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-3.45"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"fundingPerMarket"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"netFundingFees"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-2.10"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"netExposure"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"fundingRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0001"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-48'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data.totalFunding</td>
<td>string</td>
<td>Net funding across all markets over the interval.</td>
</tr>
<tr>
<td>data.fundingPerMarket[].market</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.fundingPerMarket[].netFundingFees</td>
<td>string</td>
<td>Net funding fees for the market. Nullable.</td>
</tr>
<tr>
<td>data.fundingPerMarket[].netExposure</td>
<td>string</td>
<td>Net exposure for the market. Nullable.</td>
</tr>
<tr>
<td>data.fundingPerMarket[].fundingRate</td>
<td>string</td>
<td>Funding rate for the market.</td>
</tr>
</tbody></table>
<h2 id='get-account-funding-history'>Get account funding history</h2>
<aside class="notice">
Perpetual markets only — spot markets do not pay or receive funding. This is the portfolio-service funding view (per account, with interval filtering and pagination); see also <a href="#get-funding-payments">Get funding payments</a>.
</aside>
<h3 id='http-request-51'>HTTP Request</h3>
<p><code>GET /api/v1/portfolio/funding/history?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns the paginated funding payment history for the chosen accounts over the interval.</p>
<h3 id='authentication-16'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-29'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Account ID. Repeat to request several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Market name to filter by. Repeat for several.</td>
</tr>
<tr>
<td>cursor</td>
<td>no</td>
<td>number</td>
<td>Pagination cursor; pass the <code>pagination.cursor</code> from the previous response.</td>
</tr>
<tr>
<td>limit</td>
<td>no</td>
<td>number</td>
<td>Page size. Default <code>50</code>, maximum <code>500</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1791389621914243072</span><span class="p">,</span><span class="w">
      </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LONG"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"size"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.5"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"32500"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"markPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"fundingFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-1.25"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"fundingRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0001"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"paidTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"pagination"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"cursor"</span><span class="p">:</span><span class="w"> </span><span class="mi">1791389621914243072</span><span class="p">,</span><span class="w">
    </span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-49'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>data[].id</td>
<td>number</td>
<td>Funding payment ID.</td>
</tr>
<tr>
<td>data[].accountId</td>
<td>number</td>
<td>Account ID.</td>
</tr>
<tr>
<td>data[].market</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].side</td>
<td>string</td>
<td>Position side. Can be <code>LONG</code> or <code>SHORT</code>.</td>
</tr>
<tr>
<td>data[].size</td>
<td>string</td>
<td>Position size at funding time.</td>
</tr>
<tr>
<td>data[].value</td>
<td>string</td>
<td>Position value at funding time.</td>
</tr>
<tr>
<td>data[].markPrice</td>
<td>string</td>
<td>Mark price at funding time.</td>
</tr>
<tr>
<td>data[].fundingFee</td>
<td>string</td>
<td>Funding payment (negative when paid).</td>
</tr>
<tr>
<td>data[].fundingRate</td>
<td>string</td>
<td>Funding rate applied.</td>
</tr>
<tr>
<td>data[].paidTime</td>
<td>number</td>
<td>Timestamp (epoch milliseconds) when funding was applied.</td>
</tr>
<tr>
<td>pagination.cursor</td>
<td>number</td>
<td>Cursor for the next page (the last item&#39;s <code>id</code>), or <code>null</code> when no more pages.</td>
</tr>
<tr>
<td>pagination.count</td>
<td>number</td>
<td>Number of records returned.</td>
</tr>
</tbody></table>
<h2 id='get-vault-performance'>Get Vault performance</h2><h3 id='http-request-52'>HTTP Request</h3>
<p><code>GET /api/v1/vault/public/performance?interval={interval}</code></p>

<p>Returns performance of vault, which includes data as total pnl, sharpe ratio, profit factor, etc.</p>
<h3 id='authentication-17'>Authentication</h3>
<p>This endpoint does not require authentication.</p>
<h3 id='request-6'>Request</h3><h3 id='query-parameters-30'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"totalPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1156"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"aprPercentage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"17.5495"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"profitFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.5887"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"winRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2881"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"maxDrawdown"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2182"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"tradingVolume"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"sharpeRatio"</span><span class="p">:</span><span class="w"> </span><span class="s2">"252.96"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"aprBreakdown"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"baseApr"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.6551"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"maxExtraApr"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6.8944"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-vault-summary'>Get Vault summary</h2><h3 id='http-request-53'>HTTP Request</h3>
<p><code>GET /api/v1/vault/public/summary</code></p>

<p>Returns a summary of the vault for a whole period.</p>
<h3 id='authentication-18'>Authentication</h3>
<p>This endpoint does not require authentication.</p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"equity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"11000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"walletBalance"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"lastMonthApr"</span><span class="p">:</span><span class="w"> </span><span class="s2">"422.7917"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"exposure"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"numberOfDepositors"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
    </span><span class="nl">"ageDays"</span><span class="p">:</span><span class="w"> </span><span class="mi">227</span><span class="p">,</span><span class="w">
    </span><span class="nl">"profitShare"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"aprBreakdown"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"baseApr"</span><span class="p">:</span><span class="w"> </span><span class="s2">"416.1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"maxExtraApr"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6.6917"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h1 id='interest'>Interest</h1>
<p>Endpoints related to borrowing interest rate curves, account interest metrics and interest payment history.</p>

<p>All amounts (borrowed values, rates, payments) are returned as strings to preserve precision. Time intervals share a common <code>interval</code> query parameter with the following values:</p>

<table><thead>
<tr>
<th>Value</th>
<th>Lookback period</th>
</tr>
</thead><tbody>
<tr>
<td><code>DAY</code></td>
<td>Last 1 day</td>
</tr>
<tr>
<td><code>WEEK</code></td>
<td>Last 7 days</td>
</tr>
<tr>
<td><code>MONTH</code></td>
<td>Last 28 days</td>
</tr>
<tr>
<td><code>YEAR</code></td>
<td>Last 365 days</td>
</tr>
<tr>
<td><code>ALL</code></td>
<td>Entire available history</td>
</tr>
</tbody></table>

<aside class="notice">
Endpoints that accept <code>accountId</code> support multiple accounts. Repeat the parameter to query several accounts at once, e.g. <code>?accountId=1000&accountId=1001&interval=WEEK</code>. All requested accounts must belong to the authenticated user.
</aside>
<h2 id='get-interest-rate-curves-history'>Get interest rate curves history</h2><h3 id='http-request-54'>HTTP Request</h3>
<p><code>GET /api/v1/interest/info/rate-curves?interval={interval}</code></p>

<p>Returns the historical interest rate curves (global and per collateral asset) over the requested time interval.</p>
<h3 id='authentication-19'>Authentication</h3>
<p>This endpoint does not require authentication.</p>
<h3 id='query-parameters-31'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"timestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">1717545600000</span><span class="p">,</span><span class="w">
        </span><span class="nl">"amountBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1250000.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"globalCurve"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"currentUtilization"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.75"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"currentRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"targetUtilization"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.80"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"minRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.01"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"targetRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"maxRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.10"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"assetCurves"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
          </span><span class="p">{</span><span class="w">
            </span><span class="nl">"assetId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
            </span><span class="nl">"curve"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
              </span><span class="nl">"currentUtilization"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.72"</span><span class="p">,</span><span class="w">
              </span><span class="nl">"currentRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.048"</span><span class="p">,</span><span class="w">
              </span><span class="nl">"targetUtilization"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.80"</span><span class="p">,</span><span class="w">
              </span><span class="nl">"minRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.01"</span><span class="p">,</span><span class="w">
              </span><span class="nl">"targetRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
              </span><span class="nl">"maxRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.10"</span><span class="w">
            </span><span class="p">},</span><span class="w">
            </span><span class="nl">"calculatedRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.048"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"amountBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000000.00"</span><span class="w">
          </span><span class="p">}</span><span class="w">
        </span><span class="p">]</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-latest-interest-rate-curve'>Get latest interest rate curve</h2><h3 id='http-request-55'>HTTP Request</h3>
<p><code>GET /api/v1/interest/info/latest-rate-curves</code></p>

<p>Returns the most recent interest rate curve snapshot. The <code>item</code> field is <code>null</code> when no curve data is available yet.</p>
<h3 id='authentication-20'>Authentication</h3>
<p>This endpoint does not require authentication.</p>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"item"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"timestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">1717545600000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"amountBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1250000.00"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"globalCurve"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"currentUtilization"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.75"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"currentRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"targetUtilization"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.80"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"minRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.01"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"targetRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"maxRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.10"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="nl">"assetCurves"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
          </span><span class="nl">"assetId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
          </span><span class="nl">"curve"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
            </span><span class="nl">"currentUtilization"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.72"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"currentRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.048"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"targetUtilization"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.80"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"minRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.01"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"targetRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"maxRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.10"</span><span class="w">
          </span><span class="p">},</span><span class="w">
          </span><span class="nl">"calculatedRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.048"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"amountBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000000.00"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-interest-key-metrics'>Get interest key metrics</h2><h3 id='http-request-56'>HTTP Request</h3>
<p><code>GET /api/v1/interest/key-metrics?accountId={accountId}</code></p>

<p>Returns the current borrowing key metrics for the requested accounts: total amount borrowed, the current one-hour interest rate and the estimated next interest payment.</p>
<h3 id='authentication-21'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-32'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Id of user account. Repeat the parameter to query several accounts.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"borrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5000.00"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"currentInterestRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"estimatedNextPayment"</span><span class="p">:</span><span class="w"> </span><span class="s2">"250.00"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-interest-daily-metrics'>Get interest daily metrics</h2><h3 id='http-request-57'>HTTP Request</h3>
<p><code>GET /api/v1/interest/daily-metrics?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns daily interest statistics per collateral asset for each requested account over the chosen interval. The <code>data</code> object is keyed by account id; each value is a list of daily stats.</p>
<h3 id='authentication-22'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-33'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Id of user account. Repeat the parameter to query several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"1000"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-10"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"assetId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
        </span><span class="nl">"interestPaid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"averageBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"annualizedInterestRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2025-08-11"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"assetId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
        </span><span class="nl">"interestPaid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5.10"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"averageBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1020.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"annualizedInterestRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.05"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-interest-payment-chart'>Get interest payment chart</h2><h3 id='http-request-58'>HTTP Request</h3>
<p><code>GET /api/v1/interest/payment-chart?accountId={accountId}&amp;interval={interval}&amp;bucket={bucket}</code></p>

<p>Returns interest payments aggregated into time buckets, suitable for charting. Each point includes the total interest paid, average borrowed amount, average APR and a per collateral asset breakdown.</p>
<h3 id='authentication-23'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-34'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Id of user account. Repeat the parameter to query several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
<tr>
<td>bucket</td>
<td>no</td>
<td>string</td>
<td>Aggregation bucket size. Can be <code>HOURLY</code> or <code>DAILY</code>. Defaults to <code>HOURLY</code> when <code>interval</code> is <code>DAY</code>, otherwise <code>DAILY</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"resolution"</span><span class="p">:</span><span class="w"> </span><span class="s2">"HOURLY"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"points"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"bucketStartTimestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">1717545600000</span><span class="p">,</span><span class="w">
        </span><span class="nl">"totalInterestPaid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"125.50"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"averageBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"25000.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"averageApr"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.045"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"borrowingByCollateralAsset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
          </span><span class="p">{</span><span class="w">
            </span><span class="nl">"assetId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
            </span><span class="nl">"averageBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"15000.00"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"averageApr"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.045"</span><span class="w">
          </span><span class="p">},</span><span class="w">
          </span><span class="p">{</span><span class="w">
            </span><span class="nl">"assetId"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
            </span><span class="nl">"averageBorrowed"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000.00"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"averageApr"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.045"</span><span class="w">
          </span><span class="p">}</span><span class="w">
        </span><span class="p">]</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='get-interest-payments-history'>Get interest payments history</h2><h3 id='http-request-59'>HTTP Request</h3>
<p><code>GET /api/v1/interest/payments?accountId={accountId}&amp;interval={interval}</code></p>

<p>Returns the individual interest payments for the requested accounts over the chosen interval.</p>
<h3 id='authentication-24'>Authentication</h3>
<p>This endpoint requires authentication.</p>
<h3 id='query-parameters-35'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>accountId</td>
<td>yes</td>
<td>number</td>
<td>Id of user account. Repeat the parameter to query several accounts.</td>
</tr>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Time interval. Can be <code>DAY</code>, <code>WEEK</code>, <code>MONTH</code>, <code>YEAR</code> or <code>ALL</code>.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"OK"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"timestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">1717545600000</span><span class="p">,</span><span class="w">
        </span><span class="nl">"paymentAmount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"50.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"borrowedAmount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10000.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"effectiveOneHourRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.005"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"timestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">1717549200000</span><span class="p">,</span><span class="w">
        </span><span class="nl">"paymentAmount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"50.25"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"borrowedAmount"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10050.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"effectiveOneHourRate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.005"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h1 id='public-websocket-streams'>Public WebSocket streams</h1>
<p>Extended offers a WebSocket API for streaming updates.</p>

<p>Connect to the WebSocket streams using <code>wss://api.starknet.extended.exchange</code> as the host.</p>

<p>The server sends pings every 15 seconds and expects a pong response within 10 seconds. Although the server does not require pings from the client, it will respond with a pong if one is received.</p>

<aside class="notice">
All public market data streams (order book, trades, mark price, candles) accept spot market names alongside perpetual market names. The only exception is the <a href="#funding-rates-stream">Funding rates stream</a>, which is perpetual-only.
</aside>
<h2 id='order-book-stream'>Order book stream</h2><h3 id='http-request-60'>HTTP Request</h3>
<p><code>GET /stream.extended.exchange/v1/orderbooks/{market}</code></p>

<p>Subscribe to the orderbooks stream for a specific market or for all available markets. If the market parameter is not submitted, the stream will include data for all available markets.</p>

<p>In the current version we support the following depth specifications:</p>

<ul>
<li><p>Full orderbook. Push frequency: 100ms. The initial response from the stream will be a snapshot of the order book. Subsequent snapshot updates will occur every minute, while updates between snapshots are delivered in delta format, reflecting only changes since the last update. Best Bid &amp; Ask updates are always provided as snapshots.</p></li>
<li><p>Best bid &amp; ask. Push frequency: 10ms. To subscribe for Best bid &amp; ask use <code>GET /stream.extended.exchange/v1/orderbooks/{market}?depth=1</code>. Best bid &amp; ask updates are always snapshots.</p></li>
</ul>

<p>For RFQ markets by default this endpoint returns the indicative order book, for both depth specifications. To get the quotes order book, use endpoint: <code>GET /stream.extended.exchange/v1/orderbooks/rfq/{market}</code>, which also accepts <code>?depth=1</code>. The <code>rfq</code> endpoint is only available for RFQ markets; for any other market it returns no data.</p>
<h3 id='url-parameters-12'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Select an individual market. If not specified, the subscription includes all markets.</td>
</tr>
</tbody></table>
<h3 id='query-parameters-36'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>depth</td>
<td>no</td>
<td>string</td>
<td>Specify &#39;1&#39; to receive updates for best bid &amp; ask only.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SNAPSHOT"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"m"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"b"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"25670"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"q"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"c"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.3"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"a"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"25770"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"q"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"c"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.2"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-50'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>type</td>
<td>string</td>
<td>Type of message. Can be <code>SNAPSHOT</code> or <code>DELTA</code>.</td>
</tr>
<tr>
<td>ts</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the system generated the data.</td>
</tr>
<tr>
<td>data.m</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.t</td>
<td>string</td>
<td>Type of message. Can be <code>SNAPSHOT</code> or <code>DELTA</code>.</td>
</tr>
<tr>
<td>data.b</td>
<td>object[]</td>
<td>List of bid orders. For a snapshot, bids are sorted by price in descending order.</td>
</tr>
<tr>
<td>data.b[].p</td>
<td>string</td>
<td>Bid price.</td>
</tr>
<tr>
<td>data.b[].q</td>
<td>string</td>
<td>Bid size. For a snapshot, this represents the absolute size; for a delta, the change in size.</td>
</tr>
<tr>
<td>data.b[].c</td>
<td>string</td>
<td>Bid size. For a snapshot and delta, this represents the absolute size.</td>
</tr>
<tr>
<td>data.a</td>
<td>object[]</td>
<td>List of ask orders. For a snapshot, asks are sorted by price in ascending order.</td>
</tr>
<tr>
<td>data.a[].p</td>
<td>string</td>
<td>Ask price.</td>
</tr>
<tr>
<td>data.a[].q</td>
<td>string</td>
<td>Ask size. For a snapshot, this represents the absolute size; for a delta, the change in size.</td>
</tr>
<tr>
<td>data.a[].c</td>
<td>string</td>
<td>Ask size. For a snapshot and delta, this represents the absolute size.</td>
</tr>
<tr>
<td>seq</td>
<td>number</td>
<td>Monothonic sequence number. &#39;1&#39; corresponds to the first snapshot, and all subsequent numbers correspond to deltas. If a client receives a sequence out of order, it should reconnect.</td>
</tr>
</tbody></table>
<h2 id='trades-stream'>Trades stream</h2><h3 id='http-request-61'>HTTP Request</h3>
<p><code>GET /stream.extended.exchange/v1/publicTrades/{market}</code></p>

<p>Subscribe to the trades stream for a specific market or for all available markets. If the market parameter is not submitted, the stream will include data for all available markets.</p>

<p>Historical trade data is currently available only to authorized accounts via the private REST API.</p>
<h3 id='url-parameters-13'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Select an individual market. If not specified, the subscription includes all markets.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"m"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"S"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"tT"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TRADE"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"T"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"25670"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"q"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"i"</span><span class="p">:</span><span class="w"> </span><span class="mi">25124</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-51'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>ts</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the system generated the data.</td>
</tr>
<tr>
<td>data[].m</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].S</td>
<td>string</td>
<td>Side of taker trades. Can be <code>BUY</code> or <code>SELL</code>.</td>
</tr>
<tr>
<td>data[].tT</td>
<td>string</td>
<td>Trade type. Can be <code>TRADE</code>, <code>LIQUIDATION</code> or <code>DELEVERAGE</code>.</td>
</tr>
<tr>
<td>data[].T</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the trade happened.</td>
</tr>
<tr>
<td>data[].p</td>
<td>string</td>
<td>Trade price.</td>
</tr>
<tr>
<td>data[].q</td>
<td>string</td>
<td>Trade quantity in base asset.</td>
</tr>
<tr>
<td>data[].i</td>
<td>number</td>
<td>Trade ID.</td>
</tr>
<tr>
<td>seq</td>
<td>number</td>
<td>Monotonic sequence: Since there are no deltas, clients can skip trades that arrive out of sequence.</td>
</tr>
</tbody></table>
<h2 id='funding-rates-stream'>Funding rates stream</h2><h3 id='http-request-62'>HTTP Request</h3>
<p><code>GET /stream.extended.exchange/v1/funding/{market}</code></p>

<p>Subscribe to the funding rates stream for a specific market or for all available markets. If the market parameter is not submitted, the stream will include data for all available markets.</p>

<p>For historical funding rates data, use the <code>Get funding rates history</code> endpoint.</p>

<p>While the funding rate is calculated every minute, it is applied only once per hour. The records include only those funding rates that were used for funding fee payments.</p>

<aside class="notice">
Perpetual markets only — spot markets do not emit funding rate updates.
</aside>
<h3 id='url-parameters-14'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Select an individual market. If not specified, the subscription includes all markets.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"m"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"T"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"f"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.001"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-52'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>ts</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the system generated the data.</td>
</tr>
<tr>
<td>data[].m</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data[].T</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the funding rate was calculated and applied.</td>
</tr>
<tr>
<td>data[].f</td>
<td>string</td>
<td>Funding rates that were applied for funding fee payments.</td>
</tr>
<tr>
<td>seq</td>
<td>number</td>
<td>Monotonic sequence: Since there are no deltas, clients can skip funding rates that arrive out of sequence.</td>
</tr>
</tbody></table>
<h2 id='candles-stream'>Candles stream</h2><h3 id='http-request-63'>HTTP Request</h3>
<p><code>GET /stream.extended.exchange/v1/candles/{market}/{candleType}?interval={interval}</code></p>

<p>Subscribe to the candles stream for a specific market.</p>

<p>The interval parameter should be specified in the ISO 8601 duration format. Available intervals include: P30D (Calendar month), P7D (Calendar week), PT24H, PT12H, PT8H, PT4H, PT2H, PT1H, PT30M, PT15M, PT5M and PT1M.</p>

<blockquote>
<p>Trades price response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1695738675123</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> 
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"T"</span><span class="p">:</span><span class="w"> </span><span class="mi">1695738674000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"o"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000.0000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l"</span><span class="p">:</span><span class="w"> </span><span class="s2">"800.0000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"h"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2400.0000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"c"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2100.0000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"v"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0000"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<blockquote>
<p>Mark and Index price response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1695738675123</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"T"</span><span class="p">:</span><span class="w"> </span><span class="mi">1695738674000</span><span class="p">,</span><span class="w">
      </span><span class="nl">"o"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1000.0000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"l"</span><span class="p">:</span><span class="w"> </span><span class="s2">"800.0000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"h"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2400.0000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"c"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2100.0000"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Available price types include:</p>

<ol>
<li><p>Last price: <code>GET /stream.extended.exchange/v1/candles/{market}/trades?interval=PT1M</code></p></li>
<li><p>Mark price: <code>GET /stream.extended.exchange/v1/candles/{market}/mark-prices?interval=PT1M</code></p></li>
<li><p>Index price: <code>GET /stream.extended.exchange/v1/candles/{market}/index-prices?interval=PT1M</code></p></li>
</ol>

<p>Push frequency: 1-10s.</p>
<h3 id='url-parameters-15'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>yes</td>
<td>string</td>
<td>Select an individual market.</td>
</tr>
<tr>
<td>candleType</td>
<td>yes</td>
<td>string</td>
<td>Price type. Can be <code>trades</code>, <code>mark-prices</code> or <code>index-prices</code>.</td>
</tr>
</tbody></table>
<h3 id='query-parameters-37'>Query Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>interval</td>
<td>yes</td>
<td>string</td>
<td>Duration of candle (duration in ISO 8601).</td>
</tr>
</tbody></table>
<h3 id='response-53'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>ts</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the system generated the data.</td>
</tr>
<tr>
<td>data[].T</td>
<td>number</td>
<td>Starting timestamp (in epoch milliseconds) of the candle.</td>
</tr>
<tr>
<td>data[].o</td>
<td>string</td>
<td>Open price.</td>
</tr>
<tr>
<td>data[].c</td>
<td>string</td>
<td>Close price.</td>
</tr>
<tr>
<td>data[].h</td>
<td>string</td>
<td>Highest price.</td>
</tr>
<tr>
<td>data[].l</td>
<td>string</td>
<td>Lowest price.</td>
</tr>
<tr>
<td>data[].v</td>
<td>string</td>
<td>Trading volume (only for trade candles).</td>
</tr>
<tr>
<td>seq</td>
<td>number</td>
<td>Monothonic sequence number. &#39;1&#39; corresponds to the first snapshot, and all subsequent numbers correspond to deltas. If a client receives a sequence out of order, it should reconnect.</td>
</tr>
</tbody></table>
<h2 id='mark-price-stream'>Mark price stream</h2><h3 id='http-request-64'>HTTP Request</h3>
<p><code>GET /stream.extended.exchange/v1/prices/mark/{market}</code></p>

<p>Subscribe to the mark price stream for a specific market or for all available markets. If the market parameter is not submitted, the stream will include data for all available markets.</p>

<p>Mark prices are used to calculate unrealized P&amp;L and serve as the reference for liquidations. The stream provides real-time updates whenever a mark price changes.</p>
<h3 id='url-parameters-16'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Select an individual market. If not specified, the subscription includes all markets.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MP"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"m"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"25670"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="nl">"sourceEventId"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-54'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>type</td>
<td>string</td>
<td>Type identifier for mark price stream (&quot;MP&quot;).</td>
</tr>
<tr>
<td>data.m</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.p</td>
<td>string</td>
<td>Mark price value.</td>
</tr>
<tr>
<td>data.ts</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the price was calculated.</td>
</tr>
<tr>
<td>ts</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the system generated the data.</td>
</tr>
<tr>
<td>seq</td>
<td>number</td>
<td>Monotonic sequence number. Clients can use this to ensure they process messages in the correct order. If a client receives a sequence out of order, it should reconnect.</td>
</tr>
<tr>
<td>sourceEventId</td>
<td>number</td>
<td>ID of the source event that triggered this update (null for regular updates).</td>
</tr>
</tbody></table>
<h2 id='index-price-stream'>Index price stream</h2><h3 id='http-request-65'>HTTP Request</h3>
<p><code>GET /stream.extended.exchange/v1/prices/index/{market}</code></p>

<p>Subscribe to the index price stream for a specific market or for all available markets. If the market parameter is not submitted, the stream will include data for all available markets.</p>

<p>An index price is a composite spot price sourced from multiple external providers. It is used as the reference for funding-rate calculations.</p>
<h3 id='url-parameters-17'>URL Parameters</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Required</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>market</td>
<td>no</td>
<td>string</td>
<td>Select an individual market. If not specified, the subscription includes all markets.</td>
</tr>
</tbody></table>

<blockquote>
<p>Response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"IP"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"m"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"25680"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
  </span><span class="nl">"sourceEventId"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h3 id='response-55'>Response</h3>
<table><thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>type</td>
<td>string</td>
<td>Type identifier for index price stream (&quot;IP&quot;).</td>
</tr>
<tr>
<td>data.m</td>
<td>string</td>
<td>Market name.</td>
</tr>
<tr>
<td>data.p</td>
<td>string</td>
<td>Index price value.</td>
</tr>
<tr>
<td>data.ts</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the price was calculated.</td>
</tr>
<tr>
<td>ts</td>
<td>number</td>
<td>Timestamp (in epoch milliseconds) when the system generated the data.</td>
</tr>
<tr>
<td>seq</td>
<td>number</td>
<td>Monotonic sequence number. Clients can use this to ensure they process messages in the correct order. If a client receives a sequence out of order, it should reconnect.</td>
</tr>
<tr>
<td>sourceEventId</td>
<td>number</td>
<td>ID of the source event that triggered this update (null for regular updates).</td>
</tr>
</tbody></table>
<h1 id='private-websocket-streams'>Private WebSocket streams</h1>
<p>Connect to the WebSocket streams using <code>wss://api.starknet.extended.exchange</code> as the host.</p>

<p>The server sends pings every 15 seconds and expects a pong response within 10 seconds. Although the server does not require pings from clients, it will respond with a pong if it receives one.</p>

<p>Extended employs a simplified authentication scheme for API access. Authenticate by using your API key, which should be included in an HTTP header as follows: <code>X-Api-Key: &lt;API_KEY_FROM_API_MANAGEMENT_PAGE_OF_UI&gt;</code>.</p>

<aside class="notice">
The account updates stream covers spot orders, spot trades, and spot balance changes alongside perpetual events. <code>BALANCE</code> messages reflect updates to the collateral balance, and <code>POSITION</code> messages still apply only to perpetual positions. To distinguish spot from perpetual <code>ORDER</code> and <code>TRADE</code> rows, resolve the row's <code>market</code> via <a href="#get-markets">Get markets</a> and read its <code>type</code>. Per-asset spot balances should be re-read via <a href="#get-spot-balances">Get spot balances</a> after relevant events.
</aside>
<h2 id='account-updates-stream'>Account updates stream</h2><h3 id='http-request-66'>HTTP Request</h3>
<p><code>GET /stream.extended.exchange/v1/account</code></p>

<blockquote>
<p>Orders updates response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ORDER"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"orders"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1791181340771614723</span><span class="p">,</span><span class="w">
        </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1791181340771614721</span><span class="p">,</span><span class="w">
        </span><span class="nl">"externalId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"-1771812132822291885"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"NEW"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12400.000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"averagePrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"13140.000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"filledQty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3.513000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"payedFee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.513000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"trigger"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1220.00000"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"direction"</span><span class="p">:</span><span class="w"> </span><span class="s2">"UP"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"executionPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"tpSlType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ORDER"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"takeProfit"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.00000"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.00000"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"stopLoss"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"triggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.00000"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"triggerPriceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LAST"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.00000"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"priceType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LIMIT"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"reduceOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
        </span><span class="nl">"postOnly"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
        </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715885888571</span><span class="p">,</span><span class="w">
        </span><span class="nl">"updatedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715885888571</span><span class="p">,</span><span class="w">
        </span><span class="nl">"expireTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715885888571</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715885884837</span><span class="p">,</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<blockquote>
<p>Trades updates response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TRADE"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"trades"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1784963886257016832</span><span class="p">,</span><span class="w">
        </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">3017</span><span class="p">,</span><span class="w">
        </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"orderId"</span><span class="p">:</span><span class="w"> </span><span class="mi">9223372036854775808</span><span class="p">,</span><span class="w">
        </span><span class="nl">"externalOrderId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ext-1"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BUY"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"price"</span><span class="p">:</span><span class="w"> </span><span class="s2">"58853.4000000000000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"qty"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0900000000000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5296.8060000000000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"fee"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0000000000000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"tradeType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"DELEVERAGE"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"createdTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440000</span><span class="p">,</span><span class="w">
        </span><span class="nl">"isTaker"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715885884837</span><span class="p">,</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<blockquote>
<p>Account balance updates response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BALANCE"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"balance"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"collateralName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"balance"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100.000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"equity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"20.000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"availableForTrade"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3.000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"availableForWithdrawal"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4.000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"unrealisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"withdrawableUnrealisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.000000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"initialMargin"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.140000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"marginRatio"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.500000"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"updatedTime"</span><span class="p">:</span><span class="w"> </span><span class="mi">1699976104901</span><span class="p">,</span><span class="w">
      </span><span class="nl">"exposure"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12751.859629"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1275.1860"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"spotEquity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"30875"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"spotEquityForAvailableForTrade"</span><span class="p">:</span><span class="w"> </span><span class="s2">"30875"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"collateralReservedForSpotOrders"</span><span class="p">:</span><span class="w"> </span><span class="s2">"500"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715885952304</span><span class="p">,</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<blockquote>
<p>Positions updates response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"POSITION"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"positions"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1791183357858545669</span><span class="p">,</span><span class="w">
        </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">1791183357858545665</span><span class="p">,</span><span class="w">
        </span><span class="nl">"market"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC-USD"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"side"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SHORT"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"leverage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5.0"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"size"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.3"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12751.8596295830"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"openPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"42508.00"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"markPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"42506.1987652769"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"liquidationPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"75816.37"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"margin"</span><span class="p">:</span><span class="w"> </span><span class="s2">"637.59"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"unrealisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"100.000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"realisedPnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"200.000000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"tpTriggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1600.0000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"tpLimitPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1500.0000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"slTriggerPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1300.0000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"slLimitPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1250.0000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"adl"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
        </span><span class="nl">"createdAt"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715886365748</span><span class="p">,</span><span class="w">
        </span><span class="nl">"updatedAt"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715886365748</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715886365748</span><span class="p">,</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<blockquote>
<p>Spot balances updates response example:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SPOT_BALANCE"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"spotBalances"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"accountId"</span><span class="p">:</span><span class="w"> </span><span class="mi">123</span><span class="p">,</span><span class="w">
        </span><span class="nl">"asset"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BTC"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"balance"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.5"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"indexPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"65000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"notionalValue"</span><span class="p">:</span><span class="w"> </span><span class="s2">"32500"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"contributionFactor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.95"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"equityContribution"</span><span class="p">:</span><span class="w"> </span><span class="s2">"30875"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"availableToWithdraw"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.5"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"absolutePnl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2500"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"pnlPercentage"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.083333"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"averageEntryPrice"</span><span class="p">:</span><span class="w"> </span><span class="s2">"60000"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"updatedAt"</span><span class="p">:</span><span class="w"> </span><span class="mi">1701563440</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"ts"</span><span class="p">:</span><span class="w"> </span><span class="mi">1715886400000</span><span class="p">,</span><span class="w">
  </span><span class="nl">"seq"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>
<p>Subscribe to the account updates stream.</p>

<p>The initial responses will include comprehensive information about the account, including balance, open positions, open orders, and spot balances, i.e. everything from <code>GET /v1/user/balance</code>, <code>GET /v1/user/positions</code>, <code>GET /v1/user/orders</code>, <code>GET /v1/user/spot/balances</code>.</p>

<p>Subsequent responses will contain all updates related to open orders, trades, account balance, open positions, or spot balances in a single message.</p>

<p>The response attributes will align with the responses from the corresponding REST API endpoints: <code>Get trades</code>, <code>Get positions</code>, <code>Get open orders</code>, <code>Get balance</code> and <code>Get spot balances</code>. Refer to the <a href="https://api.docs.extended.exchange/#account">Account section</a> for details.</p>
<h1 id='error-responses'>Error responses</h1>
<p>Unless specified otherwise for a particular endpoint and HTTP status code, the error response model follows the general
response format and includes an error code along with a descriptive message for most errors.</p>

<table><thead>
<tr>
<th>Error code</th>
<th>Error</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>GENERAL</td>
<td></td>
<td></td>
</tr>
<tr>
<td>400</td>
<td>BadRequest</td>
<td>Invalid or missing parameters.</td>
</tr>
<tr>
<td>401</td>
<td>Unauthorized</td>
<td>Authentication failure.</td>
</tr>
<tr>
<td>403</td>
<td>Forbidden</td>
<td>Access denied.</td>
</tr>
<tr>
<td>404</td>
<td>NotFound</td>
<td>Resource not found.</td>
</tr>
<tr>
<td>422</td>
<td>UnprocessableEntity</td>
<td>Request format is correct, but data is invalid.</td>
</tr>
<tr>
<td>429</td>
<td>RateLimited</td>
<td>Number of calls from the IP address has exceeded the rate limit.</td>
</tr>
<tr>
<td>451</td>
<td>UnavailableForLegalReasons</td>
<td>Country is geoblocked.</td>
</tr>
<tr>
<td>500</td>
<td>InternalServerError</td>
<td>Internal server error.</td>
</tr>
<tr>
<td>MARKET,</td>
<td>ASSET &amp; ACCOUNT</td>
<td></td>
</tr>
<tr>
<td>1000</td>
<td>AssetNotFound</td>
<td>Asset not found.</td>
</tr>
<tr>
<td>1001</td>
<td>MarketNotFound</td>
<td>Market not found.</td>
</tr>
<tr>
<td>1002</td>
<td>MarketDisabled</td>
<td>Market is disabled.</td>
</tr>
<tr>
<td>1003</td>
<td>MarketGroupNotFound</td>
<td>Market group not found.</td>
</tr>
<tr>
<td>1004</td>
<td>AccountNotFound</td>
<td>Account not found.</td>
</tr>
<tr>
<td>1005</td>
<td>NotSupportedInterval</td>
<td>Not supported interval.</td>
</tr>
<tr>
<td>1006</td>
<td>UnhandledError</td>
<td>Application error.</td>
</tr>
<tr>
<td>1008</td>
<td>ClientNotFound</td>
<td>Client not found.</td>
</tr>
<tr>
<td>1009</td>
<td>ActionNotAllowed</td>
<td>Action is not allowed.</td>
</tr>
<tr>
<td>1010</td>
<td>MaintenanceMode</td>
<td>Maintenance mode.</td>
</tr>
<tr>
<td>1011</td>
<td>PostOnlyMode</td>
<td>Post only mode.</td>
</tr>
<tr>
<td>1012</td>
<td>ReduceOnlyMode</td>
<td>Reduce only mode.</td>
</tr>
<tr>
<td>1013</td>
<td>InvalidPercentage</td>
<td>Percentage should be between 0 and 1.</td>
</tr>
<tr>
<td>1014</td>
<td>MarketReduceOnly</td>
<td>Market is in reduce only mode, non-reduce only orders are not allowed.</td>
</tr>
<tr>
<td>LEVERAGE</td>
<td>UPDATE</td>
<td></td>
</tr>
<tr>
<td>1049</td>
<td>InvalidLeverageBelowMinLeverage</td>
<td>Leverage below min leverage.</td>
</tr>
<tr>
<td>1050</td>
<td>InvalidLeverageExceedsMaxLeverage</td>
<td>Leverage exceeds max leverage.</td>
</tr>
<tr>
<td>10501</td>
<td>InvalidLeverageMaxPositionValueExceeded</td>
<td>Max position value exceeded for new leverage.</td>
</tr>
<tr>
<td>1052</td>
<td>InvalidLeverageInsufficientMargin</td>
<td>Insufficient margin for new leverage.</td>
</tr>
<tr>
<td>1053</td>
<td>InvalidLeverageInvalidPrecision</td>
<td>Leverage has invalid precision.</td>
</tr>
<tr>
<td>STARKNET</td>
<td>SIGNATURES</td>
<td></td>
</tr>
<tr>
<td>1100</td>
<td>InvalidStarknetPublicKey</td>
<td>Invalid Starknet public key.</td>
</tr>
<tr>
<td>1101</td>
<td>InvalidStarknetSignature</td>
<td>Invalid Starknet signature.</td>
</tr>
<tr>
<td>1102</td>
<td>InvalidStarknetVault</td>
<td>Invalid Starknet vault.</td>
</tr>
<tr>
<td>ORDER</td>
<td></td>
<td></td>
</tr>
<tr>
<td>1120</td>
<td>OrderQtyLessThanMinTradeSize</td>
<td>Order quantity less than min trade size, based on market-specific trading rules.</td>
</tr>
<tr>
<td>1121</td>
<td>InvalidQtyWrongSizeIncrement</td>
<td>Invalid quantity due to the wrong size increment, based on market-specific Minimum Change in Trade Size trading rule.</td>
</tr>
<tr>
<td>1122</td>
<td>OrderValueExceedsMaxOrderValue</td>
<td>Order value exceeds max order value, based on market-specific trading rules.</td>
</tr>
<tr>
<td>1123</td>
<td>InvalidQtyPrecision</td>
<td>Invalid quantity precision, currently equals to market-specific Minimum Change in Trade Size.</td>
</tr>
<tr>
<td>1124</td>
<td>InvalidPriceWrongPriceMovement</td>
<td>Invalid price due to wrong price movement, based on market-specific Minimum Price Change trading rule.</td>
</tr>
<tr>
<td>1125</td>
<td>InvalidPricePrecision</td>
<td>Invalid price precision, currently equals to market-specific Minimum Price Change.</td>
</tr>
<tr>
<td>1126</td>
<td>MaxOpenOrdersNumberExceeded</td>
<td>Max open orders number exceeded, currently 200 orders per market.</td>
</tr>
<tr>
<td>1127</td>
<td>MaxPositionValueExceeded</td>
<td>Max position value exceeded, based on the <a href="https://docs.extended.exchange/extended-resources/trading/margin-schedule">Margin schedule</a>.</td>
</tr>
<tr>
<td>1128</td>
<td>InvalidTradingFees</td>
<td>Trading fees are invalid. Refer to <a href="https://api.docs.extended.exchange/#Extended-api-documentation">Order management section</a> for details.</td>
</tr>
<tr>
<td>1129</td>
<td>InvalidPositionTpslQty</td>
<td>Invalid quantity for position TP/SL.</td>
</tr>
<tr>
<td>1130</td>
<td>MissingOrderPrice</td>
<td>Order price is missing.</td>
</tr>
<tr>
<td>1131</td>
<td>MissingTpslTrigger</td>
<td>TP/SL order trigger is missing.</td>
</tr>
<tr>
<td>1132</td>
<td>NotAllowedOrderType</td>
<td>Order type is not allowed.</td>
</tr>
<tr>
<td>1133</td>
<td>InvalidOrderParameters</td>
<td>Invalid order parameters.</td>
</tr>
<tr>
<td>1134</td>
<td>DuplicateOrder</td>
<td>Duplicate Order.</td>
</tr>
<tr>
<td>1135</td>
<td>InvalidOrderExpiration</td>
<td>Order expiration date must be within 90 days for the Mainnet, 28 days for the Testnet.</td>
</tr>
<tr>
<td>1136</td>
<td>ReduceOnlyOrderSizeExceedsPositionSize</td>
<td>Reduce-only order size exceeds open position size.</td>
</tr>
<tr>
<td>1137</td>
<td>ReduceOnlyOrderPositionIsMissing</td>
<td>Position is missing for a reduce-only order.</td>
</tr>
<tr>
<td>1138</td>
<td>ReduceOnlyOrderPositionSameSide</td>
<td>Position is the same side as a reduce-only order.</td>
</tr>
<tr>
<td>1139</td>
<td>MarketOrderMustBeIOC</td>
<td>Market order must have time in force IOC.</td>
</tr>
<tr>
<td>1140</td>
<td>OrderCostExceedsBalance</td>
<td>New order cost exceeds available balance.</td>
</tr>
<tr>
<td>1141</td>
<td>InvalidPriceAmount</td>
<td>Invalid price value.</td>
</tr>
<tr>
<td>1142</td>
<td>EditOrderNotFound</td>
<td>Edit order not found.</td>
</tr>
<tr>
<td>1143</td>
<td>MissingConditionalTrigger</td>
<td>Conditional order trigger is missing.</td>
</tr>
<tr>
<td>1144</td>
<td>PostOnlyCantBeOnConditionalMarketOrder</td>
<td>Conditional market order can&#39;t be Post-only.</td>
</tr>
<tr>
<td>1145</td>
<td>NonReduceOnlyOrdersNotAllowed</td>
<td>Non reduce-only orders are not allowed.</td>
</tr>
<tr>
<td>1146</td>
<td>TwapOrderMustBeGTT</td>
<td>Twap order must have time in force GTT.</td>
</tr>
<tr>
<td>1147</td>
<td>OpenLossExceedsEquity</td>
<td>Open loss exceeds equity.</td>
</tr>
<tr>
<td>1148</td>
<td>TPSLOpenLossExceedsEquity</td>
<td>TP/SL open loss exceeds equity.</td>
</tr>
<tr>
<td>SPOT</td>
<td>ORDERS</td>
<td></td>
</tr>
<tr>
<td>1154</td>
<td>ReduceOnlySpotBalanceIsMissing</td>
<td>Reduce-only spot order has no existing spot balance to reduce.</td>
</tr>
<tr>
<td>1155</td>
<td>ReduceOnlyOrderSpotBalanceSameSide</td>
<td>Reduce-only spot order is on the same side as the held spot balance.</td>
</tr>
<tr>
<td>1159</td>
<td>SpotTradingNotAllowedInRegion</td>
<td>Spot trading is not available in your region. Returned with HTTP status 451.</td>
</tr>
<tr>
<td>1160</td>
<td>SpotTermsNotAccepted</td>
<td>Spot Terms &amp; Conditions are not accepted. Accept them once in the Extended web app before placing spot orders.</td>
</tr>
<tr>
<td>RFQ</td>
<td>ORDERS</td>
<td></td>
</tr>
<tr>
<td>1158</td>
<td>TimeInForceNotSupportedForRfqMarket</td>
<td>Time in force is not supported for RFQ market.</td>
</tr>
<tr>
<td>GENERAL</td>
<td>ACCOUNT</td>
<td></td>
</tr>
<tr>
<td>1500</td>
<td>AccountNotSelected</td>
<td>Account not selected.</td>
</tr>
<tr>
<td>WITHDRAWAL</td>
<td></td>
<td></td>
</tr>
<tr>
<td>1600</td>
<td>WithdrawalAmountMustBePositive</td>
<td>Withdrawal amount must be positive.</td>
</tr>
<tr>
<td>1601</td>
<td>WithdrawalDescriptionToLong</td>
<td>Withdrawal description is too long.</td>
</tr>
<tr>
<td>1602</td>
<td>WithdrawalRequestDoesNotMatchSettlement</td>
<td>Withdrawal request does not match settlement.</td>
</tr>
<tr>
<td>1604</td>
<td>WithdrawalExpirationTimeIsTooSoon</td>
<td>Withdrawal expiration time is below the 14 days minimum.</td>
</tr>
<tr>
<td>1605</td>
<td>WithdrawalInvalidAsset</td>
<td>Withdrawal asset is not valid.</td>
</tr>
<tr>
<td>1607</td>
<td>WithdrawalBlockedForAccount</td>
<td>Withdrawals blocked for the account. Please contact the team on <a href="https://discord.com/channels/1193905940076953660/1441518584085090304">Discord</a> to unblock the withdrawals.</td>
</tr>
<tr>
<td>1608</td>
<td>WithdrawalAccountDoesNotBelongToUser</td>
<td>The withdrawal address does not match the account address.</td>
</tr>
<tr>
<td>TRANSFERS</td>
<td></td>
<td></td>
</tr>
<tr>
<td>1650</td>
<td>InvalidVaultTransferAmount</td>
<td>Vault transfer amount is incorrect.</td>
</tr>
<tr>
<td>REFERRAL</td>
<td>CODE</td>
<td></td>
</tr>
<tr>
<td>1700</td>
<td>ReferralCodeAlreadyExist</td>
<td>Referral code already exist.</td>
</tr>
<tr>
<td>1701</td>
<td>ReferralCodeInvalid</td>
<td>Referral code is not valid.</td>
</tr>
<tr>
<td>1703</td>
<td>ReferralProgramIsNotEnabled</td>
<td>Referral program is not enabled.</td>
</tr>
<tr>
<td>1704</td>
<td>ReferralCodeAlreadyApplied</td>
<td>Referral code already applied.</td>
</tr>
</tbody></table>

      </div>
      <div class="dark-box">
          <div class="lang-selector">
                <a href="#" data-language-name="json">json</a>
          </div>
      </div>
    </div>
  </body>
</html>
