Developers
indexer
Indexer API

Indexer API v1.0.0

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

Base URLs:

Note: Messages on Indexer WebSocket feeds are typically more recent than data fetched via Indexer's REST API, because the latter is backed by read replicas of the databases that feed the former. Ordinarily this difference is minimal (less than a second), but it might become prolonged under load. Please see Indexer Architecture (opens in a new tab) for more information.

Authentication

Default

GetAddress

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/addresses/{address}', headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/addresses/${address}`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /addresses/{address}

Parameters

NameInTypeRequiredDescription
addresspathstringtruenone

Example responses

200 Response

{
  "subaccounts": [
    {
      "address": "string",
      "subaccountNumber": 0,
      "equity": "string",
      "freeCollateral": "string",
      "openPerpetualPositions": {
        "property1": {
          "market": "string",
          "status": "OPEN",
          "side": "LONG",
          "size": "string",
          "maxSize": "string",
          "entryPrice": "string",
          "realizedPnl": "string",
          "createdAt": "string",
          "createdAtHeight": "string",
          "sumOpen": "string",
          "sumClose": "string",
          "netFunding": "string",
          "unrealizedPnl": "string",
          "closedAt": null,
          "exitPrice": "string"
        },
        "property2": {
          "market": "string",
          "status": "OPEN",
          "side": "LONG",
          "size": "string",
          "maxSize": "string",
          "entryPrice": "string",
          "realizedPnl": "string",
          "createdAt": "string",
          "createdAtHeight": "string",
          "sumOpen": "string",
          "sumClose": "string",
          "netFunding": "string",
          "unrealizedPnl": "string",
          "closedAt": null,
          "exitPrice": "string"
        }
      },
      "assetPositions": {
        "property1": {
          "symbol": "string",
          "side": "LONG",
          "size": "string",
          "assetId": "string"
        },
        "property2": {
          "symbol": "string",
          "side": "LONG",
          "size": "string",
          "assetId": "string"
        }
      },
      "marginEnabled": true
    }
  ],
  "totalTradingRewards": "string"
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkAddressResponse

GetSubaccount

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/addresses/{address}/subaccountNumber/{subaccountNumber}', headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/addresses/${address}/subaccountNumber/${subaccountNumber}`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /addresses/{address}/subaccountNumber/{subaccountNumber}

Parameters

NameInTypeRequiredDescription
addresspathstringtruenone
subaccountNumberpathnumber(double)truenone

Example responses

200 Response

{
  "address": "string",
  "subaccountNumber": 0,
  "equity": "string",
  "freeCollateral": "string",
  "openPerpetualPositions": {
    "property1": {
      "market": "string",
      "status": "OPEN",
      "side": "LONG",
      "size": "string",
      "maxSize": "string",
      "entryPrice": "string",
      "realizedPnl": "string",
      "createdAt": "string",
      "createdAtHeight": "string",
      "sumOpen": "string",
      "sumClose": "string",
      "netFunding": "string",
      "unrealizedPnl": "string",
      "closedAt": "string",
      "exitPrice": "string"
    },
    "property2": {
      "market": "string",
      "status": "OPEN",
      "side": "LONG",
      "size": "string",
      "maxSize": "string",
      "entryPrice": "string",
      "realizedPnl": "string",
      "createdAt": "string",
      "createdAtHeight": "string",
      "sumOpen": "string",
      "sumClose": "string",
      "netFunding": "string",
      "unrealizedPnl": "string",
      "closedAt": "string",
      "exitPrice": "string"
    }
  },
  "assetPositions": {
    "property1": {
      "symbol": "string",
      "side": "LONG",
      "size": "string",
      "assetId": "string"
    },
    "property2": {
      "symbol": "string",
      "side": "LONG",
      "size": "string",
      "assetId": "string"
    }
  },
  "marginEnabled": true
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkSubaccountResponseObject

GetAssetPositions

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/assetPositions', params={
  'address': 'string',  'subaccountNumber': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/assetPositions?address=${address}&subaccountNumber=${subaccountNumber}`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /assetPositions

Parameters

NameInTypeRequiredDescription
addressquerystringtruenone
subaccountNumberquerynumber(double)truenone

Example responses

200 Response

{
  "positions": [
    {
      "symbol": "string",
      "side": "LONG",
      "size": "string",
      "assetId": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkAssetPositionResponse

GetCandles

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/candles/perpetualMarkets/{ticker}', params={
  'resolution': '1MIN',  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/candles/perpetualMarkets/{ticker}?resolution=1MIN&limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /candles/perpetualMarkets/{ticker}

Parameters

NameInTypeRequiredDescription
tickerpathstringtruenone
resolutionqueryCandleResolutiontruenone
limitquerynumber(double)truenone
fromISOquerystringfalsenone
toISOquerystringfalsenone

Enumerated Values

ParameterValue
resolution1MIN
resolution5MINS
resolution15MINS
resolution30MINS
resolution1HOUR
resolution4HOURS
resolution1DAY

Example responses

200 Response

{
  "candles": [
    {
      "startedAt": "string",
      "ticker": "string",
      "resolution": "1MIN",
      "low": "string",
      "high": "string",
      "open": "string",
      "close": "string",
      "baseTokenVolume": "string",
      "usdVolume": "string",
      "trades": 0,
      "startingOpenInterest": "string",
      "id": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkCandleResponse

Screen

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/screen', params={
  'address': 'string'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/screen?address=string`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /screen

Parameters

NameInTypeRequiredDescription
addressquerystringtruenone

Example responses

200 Response

{
  "restricted": true,
  "reason": "string"
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkComplianceResponse

GetFills

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/fills', params={
  'address': 'string',  'subaccountNumber': '0',  'market': 'string',  'marketType': 'PERPETUAL',  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/fills?address=string&subaccountNumber=0&market=string&marketType=PERPETUAL&limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /fills

Parameters

NameInTypeRequiredDescription
addressquerystringtruenone
subaccountNumberquerynumber(double)truenone
marketquerystringfalsenone
marketTypequeryMarketTypefalsenone
limitquerynumber(double)falsenone
createdBeforeOrAtHeightquerynumber(double)falsenone
createdBeforeOrAtqueryIsoStringfalsenone

Enumerated Values

ParameterValue
marketTypePERPETUAL
marketTypeSPOT

Example responses

200 Response

{
  "fills": [
    {
      "id": "string",
      "side": "BUY",
      "liquidity": "TAKER",
      "type": "LIMIT",
      "market": "string",
      "marketType": "PERPETUAL",
      "price": "string",
      "size": "string",
      "fee": "string",
      "createdAt": "string",
      "createdAtHeight": "string",
      "orderId": "string",
      "clientMetadata": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkFillResponse

GetHeight

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/height', headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/height`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /height

Example responses

200 Response

{
  "height": "string",
  "time": "string"
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkHeightResponse

GetTradingRewards

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/historicalBlockTradingRewards/{address}', params={
  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/historicalBlockTradingRewards/{address}?limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /historicalBlockTradingRewards/{address}

Parameters

NameInTypeRequiredDescription
addresspathstringtruenone
limitquerynumber(double)truenone
startingBeforeOrAtqueryIsoStringfalsenone
startingBeforeOrAtHeightquerystringfalsenone

Example responses

200 Response

{
  "rewards": [
    {
      "tradingReward": "string",
      "createdAt": "string",
      "createdAtHeight": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkHistoricalBlockTradingRewardsResponse

GetHistoricalFunding

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/historicalFunding/{ticker}', params={
  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/historicalFunding/{ticker}?limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /historicalFunding/{ticker}

Parameters

NameInTypeRequiredDescription
tickerpathstringtruenone
limitquerynumber(double)truenone
effectiveBeforeOrAtHeightquerynumber(double)falsenone
effectiveBeforeOrAtqueryIsoStringfalsenone

Example responses

200 Response

{
  "historicalFunding": [
    {
      "ticker": "string",
      "rate": "string",
      "price": "string",
      "effectiveAt": "string",
      "effectiveAtHeight": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkHistoricalFundingResponse

GetHistoricalPnl

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/historical-pnl', params={
  'address': 'string',  'subaccountNumber': '0',  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/historical-pnl?address=string&subaccountNumber=0&limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /historical-pnl

Parameters

NameInTypeRequiredDescription
addressquerystringtruenone
subaccountNumberquerynumber(double)truenone
limitquerynumber(double)truenone
createdBeforeOrAtHeightquerynumber(double)falsenone
createdBeforeOrAtqueryIsoStringfalsenone
createdOnOrAfterHeightquerynumber(double)falsenone
createdOnOrAfterqueryIsoStringfalsenone

Example responses

200 Response

{
  "historicalPnl": [
    {
      "id": "string",
      "subaccountId": "string",
      "equity": "string",
      "totalPnl": "string",
      "netTransfers": "string",
      "createdAt": "string",
      "blockHeight": "string",
      "blockTime": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkHistoricalPnlResponse

GetAggregations

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/historicalTradingRewardAggregations/{address}', params={
  'period': 'DAILY',  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/historicalTradingRewardAggregations/{address}?period=DAILY&limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /historicalTradingRewardAggregations/{address}

Parameters

NameInTypeRequiredDescription
addresspathstringtruenone
periodqueryTradingRewardAggregationPeriodtruenone
limitquerynumber(double)truenone
startingBeforeOrAtqueryIsoStringfalsenone
startingBeforeOrAtHeightquerystringfalsenone

Enumerated Values

ParameterValue
periodDAILY
periodWEEKLY
periodMONTHLY

Example responses

200 Response

{
  "rewards": [
    {
      "tradingReward": "string",
      "startedAt": "string",
      "startedAtHeight": "string",
      "endedAt": "string",
      "endedAtHeight": "string",
      "period": "DAILY"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkHistoricalTradingRewardAggregationsResponse

GetPerpetualMarket

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/orderbooks/perpetualMarket/{ticker}', headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/orderbooks/perpetualMarket/{ticker}`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /orderbooks/perpetualMarket/{ticker}

Parameters

NameInTypeRequiredDescription
tickerpathstringtruenone

Example responses

200 Response

{
  "bids": [
    {
      "price": "string",
      "size": "string"
    }
  ],
  "asks": [
    {
      "price": "string",
      "size": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkOrderbookResponseObject

ListOrders

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/orders', params={
  'address': 'string',  'subaccountNumber': '0',  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/orders?address=string&subaccountNumber=0&limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /orders

Parameters

NameInTypeRequiredDescription
addressquerystringtruenone
subaccountNumberquerynumber(double)truenone
limitquerynumber(double)truenone
tickerquerystringfalsenone
sidequeryOrderSidefalsenone
typequeryOrderTypefalsenone
statusqueryarray[any]falsenone
goodTilBlockBeforeOrAtquerynumber(double)falsenone
goodTilBlockTimeBeforeOrAtqueryIsoStringfalsenone
returnLatestOrdersquerybooleanfalsenone

Enumerated Values

ParameterValue
sideBUY
sideSELL
typeLIMIT
typeMARKET
typeSTOP_LIMIT
typeSTOP_MARKET
typeTRAILING_STOP
typeTAKE_PROFIT
typeTAKE_PROFIT_MARKET
typeHARD_TRADE
typeFAILED_HARD_TRADE
typeTRANSFER_PLACEHOLDER

Example responses

200 Response

[
  {
    "id": "string",
    "subaccountId": "string",
    "clientId": "string",
    "clobPairId": "string",
    "side": "BUY",
    "size": "string",
    "totalFilled": "string",
    "price": "string",
    "type": "LIMIT",
    "reduceOnly": true,
    "orderFlags": "string",
    "goodTilBlock": "string",
    "goodTilBlockTime": "string",
    "createdAtHeight": "string",
    "clientMetadata": "string",
    "triggerPrice": "string",
    "timeInForce": "GTT",
    "status": "OPEN",
    "postOnly": true,
    "ticker": "string",
    "updatedAt": "string",
    "updatedAtHeight": "string"
  }
]

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkInline

Response Schema

Status Code 200

NameTypeRequiredRestrictionsDescription
anonymous[OrderResponseObject]falsenonenone
» idstringtruenonenone
» subaccountIdstringtruenonenone
» clientIdstringtruenonenone
» clobPairIdstringtruenonenone
» sideOrderSidetruenonenone
» sizestringtruenonenone
» totalFilledstringtruenonenone
» pricestringtruenonenone
» typeOrderTypetruenonenone
» reduceOnlybooleantruenonenone
» orderFlagsstringtruenonenone
» goodTilBlockstringfalsenonenone
» goodTilBlockTimestringfalsenonenone
» createdAtHeightstringfalsenonenone
» clientMetadatastringtruenonenone
» triggerPricestringfalsenonenone
» timeInForceAPITimeInForcetruenonenone
» statusanytruenonenone

anyOf

NameTypeRequiredRestrictionsDescription
»» anonymousOrderStatusfalsenonenone

or

NameTypeRequiredRestrictionsDescription
»» anonymousBestEffortOpenedStatusfalsenonenone

continued

NameTypeRequiredRestrictionsDescription
» postOnlybooleantruenonenone
» tickerstringtruenonenone
» updatedAtIsoStringfalsenonenone
» updatedAtHeightstringfalsenonenone

Enumerated Values

PropertyValue
sideBUY
sideSELL
typeLIMIT
typeMARKET
typeSTOP_LIMIT
typeSTOP_MARKET
typeTRAILING_STOP
typeTAKE_PROFIT
typeTAKE_PROFIT_MARKET
typeHARD_TRADE
typeFAILED_HARD_TRADE
typeTRANSFER_PLACEHOLDER
timeInForceGTT
timeInForceFOK
timeInForceIOC
anonymousOPEN
anonymousFILLED
anonymousCANCELED
anonymousBEST_EFFORT_CANCELED
anonymousUNTRIGGERED
anonymousBEST_EFFORT_OPENED

GetOrder

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/orders/{orderId}', headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/orders/{orderId}`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /orders/{orderId}

Parameters

NameInTypeRequiredDescription
orderIdpathstringtruenone

Example responses

200 Response

{
  "id": "string",
  "subaccountId": "string",
  "clientId": "string",
  "clobPairId": "string",
  "side": "BUY",
  "size": "string",
  "totalFilled": "string",
  "price": "string",
  "type": "LIMIT",
  "reduceOnly": true,
  "orderFlags": "string",
  "goodTilBlock": "string",
  "goodTilBlockTime": "string",
  "createdAtHeight": "string",
  "clientMetadata": "string",
  "triggerPrice": "string",
  "timeInForce": "GTT",
  "status": "OPEN",
  "postOnly": true,
  "ticker": "string",
  "updatedAt": "string",
  "updatedAtHeight": "string"
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkOrderResponseObject

ListPerpetualMarkets

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/perpetualMarkets', params={
  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/perpetualMarkets?limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /perpetualMarkets

Parameters

NameInTypeRequiredDescription
limitquerynumber(double)truenone
tickerquerystringfalsenone

Example responses

200 Response

{
  "markets": {
    "property1": {
      "clobPairId": "string",
      "ticker": "string",
      "status": "ACTIVE",
      "oraclePrice": "string",
      "priceChange24H": "string",
      "volume24H": "string",
      "trades24H": 0,
      "nextFundingRate": "string",
      "initialMarginFraction": "string",
      "maintenanceMarginFraction": "string",
      "openInterest": "string",
      "atomicResolution": 0,
      "quantumConversionExponent": 0,
      "tickSize": "string",
      "stepSize": "string",
      "stepBaseQuantums": 0,
      "subticksPerTick": 0
    },
    "property2": {
      "clobPairId": "string",
      "ticker": "string",
      "status": "ACTIVE",
      "oraclePrice": "string",
      "priceChange24H": "string",
      "volume24H": "string",
      "trades24H": 0,
      "nextFundingRate": "string",
      "initialMarginFraction": "string",
      "maintenanceMarginFraction": "string",
      "openInterest": "string",
      "atomicResolution": 0,
      "quantumConversionExponent": 0,
      "tickSize": "string",
      "stepSize": "string",
      "stepBaseQuantums": 0,
      "subticksPerTick": 0
    }
  }
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkPerpetualMarketResponse

ListPositions

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/perpetualPositions', params={
  'address': 'string',  'subaccountNumber': '0',  'status': [
  "OPEN"
],  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/perpetualPositions?address=string&subaccountNumber=0&status=OPEN&limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /perpetualPositions

Parameters

NameInTypeRequiredDescription
addressquerystringtruenone
subaccountNumberquerynumber(double)truenone
statusqueryarray[string]truenone
limitquerynumber(double)truenone
createdBeforeOrAtHeightquerynumber(double)falsenone
createdBeforeOrAtqueryIsoStringfalsenone

Enumerated Values

ParameterValue
statusOPEN
statusCLOSED
statusLIQUIDATED

Example responses

200 Response

{
  "positions": [
    {
      "market": "string",
      "status": "OPEN",
      "side": "LONG",
      "size": "string",
      "maxSize": "string",
      "entryPrice": "string",
      "realizedPnl": "string",
      "createdAt": "string",
      "createdAtHeight": "string",
      "sumOpen": "string",
      "sumClose": "string",
      "netFunding": "string",
      "unrealizedPnl": "string",
      "closedAt": "string",
      "exitPrice": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkPerpetualPositionResponse

Get

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/sparklines', params={
  'timePeriod': 'ONE_DAY'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/sparklines?timePeriod=ONE_DAY`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /sparklines

Parameters

NameInTypeRequiredDescription
timePeriodquerySparklineTimePeriodtruenone

Enumerated Values

ParameterValue
timePeriodONE_DAY
timePeriodSEVEN_DAYS

Example responses

200 Response

{
  "property1": [
    "string"
  ],
  "property2": [
    "string"
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkSparklineResponseObject

GetTime

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/time', headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/time`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /time

Example responses

200 Response

{
  "iso": "string",
  "epoch": 0
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkTimeResponse

GetTrades

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/trades/perpetualMarket/{ticker}', params={
  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/trades/perpetualMarket/{ticker}?limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /trades/perpetualMarket/{ticker}

Parameters

NameInTypeRequiredDescription
tickerpathstringtruenone
limitquerynumber(double)truenone
createdBeforeOrAtHeightquerynumber(double)falsenone
createdBeforeOrAtqueryIsoStringfalsenone

Example responses

200 Response

{
  "trades": [
    {
      "id": "string",
      "side": "BUY",
      "size": "string",
      "price": "string",
      "type": "LIMIT",
      "createdAt": "string",
      "createdAtHeight": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkTradeResponse

GetTransfers

Code samples

import requests
headers = {
  'Accept': 'application/json'
}
 
# For the deployment by DYDX token holders, use
# baseURL = 'https://indexer.dydx.trade/v4'
baseURL = 'https://dydx-testnet.imperator.co/v4'
 
r = requests.get(f'{baseURL}/transfers', params={
  'address': 'string',  'subaccountNumber': '0',  'limit': '0'
}, headers = headers)
 
print(r.json())
 
 
const headers = {
  'Accept':'application/json'
};
 
// For the deployment by DYDX token holders, use
// baseURL = 'https://indexer.dydx.trade/v4'
const baseURL = 'https://dydx-testnet.imperator.co/v4'
 
fetch(`${baseURL}/transfers?address=string&subaccountNumber=0&limit=0`,
{
  method: 'GET',
 
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
 

GET /transfers

Parameters

NameInTypeRequiredDescription
addressquerystringtruenone
subaccountNumberquerynumber(double)truenone
limitquerynumber(double)truenone
createdBeforeOrAtHeightquerynumber(double)falsenone
createdBeforeOrAtqueryIsoStringfalsenone

Example responses

200 Response

{
  "transfers": [
    {
      "id": "string",
      "sender": {
        "subaccountNumber": 0,
        "address": "string"
      },
      "recipient": {
        "subaccountNumber": 0,
        "address": "string"
      },
      "size": "string",
      "createdAt": "string",
      "createdAtHeight": "string",
      "symbol": "string",
      "type": "TRANSFER_IN",
      "transactionHash": "string"
    }
  ]
}

Responses

StatusMeaningDescriptionSchema
200OK (opens in a new tab)OkTransferResponse

Schemas

PerpetualPositionStatus

"OPEN"
 

Properties

NameTypeRequiredRestrictionsDescription
anonymousstringfalsenonenone

Enumerated Values

PropertyValue
anonymousOPEN
anonymousCLOSED
anonymousLIQUIDATED

PositionSide

"LONG"
 

Properties

NameTypeRequiredRestrictionsDescription
anonymousstringfalsenonenone

Enumerated Values

PropertyValue
anonymousLONG
anonymousSHORT

IsoString

"string"
 

Properties

NameTypeRequiredRestrictionsDescription
anonymousstringfalsenonenone

PerpetualPositionResponseObject

{
  "market": "string",
  "status": "OPEN",
  "side": "LONG",
  "size": "string",
  "maxSize": "string",
  "entryPrice": "string",
  "realizedPnl": "string",
  "createdAt": "string",
  "createdAtHeight": "string",
  "sumOpen": "string",
  "sumClose": "string",
  "netFunding": "string",
  "unrealizedPnl": "string",
  "closedAt": "string",
  "exitPrice": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
marketstringtruenonenone
statusPerpetualPositionStatustruenonenone
sidePositionSidetruenonenone
sizestringtruenonenone
maxSizestringtruenonenone
entryPricestringtruenonenone
realizedPnlstringtruenonenone
createdAtIsoStringtruenonenone
createdAtHeightstringtruenonenone
sumOpenstringtruenonenone
sumClosestringtruenonenone
netFundingstringtruenonenone
unrealizedPnlstringtruenonenone
closedAtIsoString¦nullfalsenonenone
exitPricestring¦nullfalsenonenone

PerpetualPositionsMap

{
  "property1": {
    "market": "string",
    "status": "OPEN",
    "side": "LONG",
    "size": "string",
    "maxSize": "string",
    "entryPrice": "string",
    "realizedPnl": "string",
    "createdAt": "string",
    "createdAtHeight": "string",
    "sumOpen": "string",
    "sumClose": "string",
    "netFunding": "string",
    "unrealizedPnl": "string",
    "closedAt": "string",
    "exitPrice": "string"
  },
  "property2": {
    "market": "string",
    "status": "OPEN",
    "side": "LONG",
    "size": "string",
    "maxSize": "string",
    "entryPrice": "string",
    "realizedPnl": "string",
    "createdAt": "string",
    "createdAtHeight": "string",
    "sumOpen": "string",
    "sumClose": "string",
    "netFunding": "string",
    "unrealizedPnl": "string",
    "closedAt": "string",
    "exitPrice": "string"
  }
}
 

Properties

NameTypeRequiredRestrictionsDescription
additionalPropertiesPerpetualPositionResponseObjectfalsenonenone

AssetPositionResponseObject

{
  "symbol": "string",
  "side": "LONG",
  "size": "string",
  "assetId": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
symbolstringtruenonenone
sidePositionSidetruenonenone
sizestringtruenonenone
assetIdstringtruenonenone

AssetPositionsMap

{
  "property1": {
    "symbol": "string",
    "side": "LONG",
    "size": "string",
    "assetId": "string"
  },
  "property2": {
    "symbol": "string",
    "side": "LONG",
    "size": "string",
    "assetId": "string"
  }
}
 

Properties

NameTypeRequiredRestrictionsDescription
additionalPropertiesAssetPositionResponseObjectfalsenonenone

SubaccountResponseObject

{
  "address": "string",
  "subaccountNumber": 0,
  "equity": "string",
  "freeCollateral": "string",
  "openPerpetualPositions": {
    "property1": {
      "market": "string",
      "status": "OPEN",
      "side": "LONG",
      "size": "string",
      "maxSize": "string",
      "entryPrice": "string",
      "realizedPnl": "string",
      "createdAt": "string",
      "createdAtHeight": "string",
      "sumOpen": "string",
      "sumClose": "string",
      "netFunding": "string",
      "unrealizedPnl": "string",
      "closedAt": "string",
      "exitPrice": "string"
    },
    "property2": {
      "market": "string",
      "status": "OPEN",
      "side": "LONG",
      "size": "string",
      "maxSize": "string",
      "entryPrice": "string",
      "realizedPnl": "string",
      "createdAt": "string",
      "createdAtHeight": "string",
      "sumOpen": "string",
      "sumClose": "string",
      "netFunding": "string",
      "unrealizedPnl": "string",
      "closedAt": "string",
      "exitPrice": "string"
    }
  },
  "assetPositions": {
    "property1": {
      "symbol": "string",
      "side": "LONG",
      "size": "string",
      "assetId": "string"
    },
    "property2": {
      "symbol": "string",
      "side": "LONG",
      "size": "string",
      "assetId": "string"
    }
  },
  "marginEnabled": true
}
 

Properties

NameTypeRequiredRestrictionsDescription
addressstringtruenonenone
subaccountNumbernumber(double)truenonenone
equitystringtruenonenone
freeCollateralstringtruenonenone
openPerpetualPositionsPerpetualPositionsMaptruenonenone
assetPositionsAssetPositionsMaptruenonenone
marginEnabledbooleantruenonenone

AddressResponse

{
  "subaccounts": [
    {
      "address": "string",
      "subaccountNumber": 0,
      "equity": "string",
      "freeCollateral": "string",
      "openPerpetualPositions": {
        "property1": {
          "market": "string",
          "status": "OPEN",
          "side": "LONG",
          "size": "string",
          "maxSize": "string",
          "entryPrice": "string",
          "realizedPnl": "string",
          "createdAt": "string",
          "createdAtHeight": "string",
          "sumOpen": "string",
          "sumClose": "string",
          "netFunding": "string",
          "unrealizedPnl": "string",
          "closedAt": null,
          "exitPrice": "string"
        },
        "property2": {
          "market": "string",
          "status": "OPEN",
          "side": "LONG",
          "size": "string",
          "maxSize": "string",
          "entryPrice": "string",
          "realizedPnl": "string",
          "createdAt": "string",
          "createdAtHeight": "string",
          "sumOpen": "string",
          "sumClose": "string",
          "netFunding": "string",
          "unrealizedPnl": "string",
          "closedAt": null,
          "exitPrice": "string"
        }
      },
      "assetPositions": {
        "property1": {
          "symbol": "string",
          "side": "LONG",
          "size": "string",
          "assetId": "string"
        },
        "property2": {
          "symbol": "string",
          "side": "LONG",
          "size": "string",
          "assetId": "string"
        }
      },
      "marginEnabled": true
    }
  ],
  "totalTradingRewards": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
subaccounts[SubaccountResponseObject]truenonenone
totalTradingRewardsstringtruenonenone

AssetPositionResponse

{
  "positions": [
    {
      "symbol": "string",
      "side": "LONG",
      "size": "string",
      "assetId": "string"
    }
  ]
}
 

Properties

NameTypeRequiredRestrictionsDescription
positions[AssetPositionResponseObject]truenonenone

CandleResolution

"1MIN"
 

Properties

NameTypeRequiredRestrictionsDescription
anonymousstringfalsenonenone

Enumerated Values

PropertyValue
anonymous1MIN
anonymous5MINS
anonymous15MINS
anonymous30MINS
anonymous1HOUR
anonymous4HOURS
anonymous1DAY

CandleResponseObject

{
  "startedAt": "string",
  "ticker": "string",
  "resolution": "1MIN",
  "low": "string",
  "high": "string",
  "open": "string",
  "close": "string",
  "baseTokenVolume": "string",
  "usdVolume": "string",
  "trades": 0,
  "startingOpenInterest": "string",
  "id": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
startedAtIsoStringtruenonenone
tickerstringtruenonenone
resolutionCandleResolutiontruenonenone
lowstringtruenonenone
highstringtruenonenone
openstringtruenonenone
closestringtruenonenone
baseTokenVolumestringtruenonenone
usdVolumestringtruenonenone
tradesnumber(double)truenonenone
startingOpenIntereststringtruenonenone
idstringtruenonenone

CandleResponse

{
  "candles": [
    {
      "startedAt": "string",
      "ticker": "string",
      "resolution": "1MIN",
      "low": "string",
      "high": "string",
      "open": "string",
      "close": "string",
      "baseTokenVolume": "string",
      "usdVolume": "string",
      "trades": 0,
      "startingOpenInterest": "string",
      "id": "string"
    }
  ]
}
 

Properties

NameTypeRequiredRestrictionsDescription
candles[CandleResponseObject]truenonenone

ComplianceResponse

{
  "restricted": true,
  "reason": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
restrictedbooleantruenonenone
reasonstringfalsenonenone

OrderSide

"BUY"
 

Properties

NameTypeRequiredRestrictionsDescription
anonymousstringfalsenonenone

Enumerated Values

PropertyValue
anonymousBUY
anonymousSELL

Liquidity

"TAKER"
 

Properties

NameTypeRequiredRestrictionsDescription
anonymousstringfalsenonenone

Enumerated Values

PropertyValue
anonymousTAKER
anonymousMAKER

FillType

"LIMIT"
 

Properties

NameTypeRequiredRestrictionsDescription
anonymousstringfalsenonenone

Enumerated Values

PropertyValue
anonymousLIMIT
anonymousLIQUIDATED
anonymousLIQUIDATION
anonymousDELEVERAGED
anonymousOFFSETTING

MarketType

"PERPETUAL"
 

Properties

NameTypeRequiredRestrictionsDescription
anonymousstringfalsenonenone

Enumerated Values

PropertyValue
anonymousPERPETUAL
anonymousSPOT

FillResponseObject

{
  "id": "string",
  "side": "BUY",
  "liquidity": "TAKER",
  "type": "LIMIT",
  "market": "string",
  "marketType": "PERPETUAL",
  "price": "string",
  "size": "string",
  "fee": "string",
  "createdAt": "string",
  "createdAtHeight": "string",
  "orderId": "string",
  "clientMetadata": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
idstringtruenonenone
sideOrderSidetruenonenone
liquidityLiquiditytruenonenone
typeFillTypetruenonenone
marketstringtruenonenone
marketTypeMarketTypetruenonenone
pricestringtruenonenone
sizestringtruenonenone
feestringtruenonenone
createdAtIsoStringtruenonenone
createdAtHeightstringtruenonenone
orderIdstringfalsenonenone
clientMetadatastringfalsenonenone

FillResponse

{
  "fills": [
    {
      "id": "string",
      "side": "BUY",
      "liquidity": "TAKER",
      "type": "LIMIT",
      "market": "string",
      "marketType": "PERPETUAL",
      "price": "string",
      "size": "string",
      "fee": "string",
      "createdAt": "string",
      "createdAtHeight": "string",
      "orderId": "string",
      "clientMetadata": "string"
    }
  ]
}
 

Properties

NameTypeRequiredRestrictionsDescription
fills[FillResponseObject]truenonenone

HeightResponse

{
  "height": "string",
  "time": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
heightstringtruenonenone
timeIsoStringtruenonenone

HistoricalBlockTradingReward

{
  "tradingReward": "string",
  "createdAt": "string",
  "createdAtHeight": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
tradingRewardstringtruenonenone
createdAtIsoStringtruenonenone
createdAtHeightstringtruenonenone

HistoricalBlockTradingRewardsResponse

{
  "rewards": [
    {
      "tradingReward": "string",
      "createdAt": "string",
      "createdAtHeight": "string"
    }
  ]
}
 

Properties

NameTypeRequiredRestrictionsDescription
rewards[HistoricalBlockTradingReward]truenonenone

HistoricalFundingResponseObject

{
  "ticker": "string",
  "rate": "string",
  "price": "string",
  "effectiveAt": "string",
  "effectiveAtHeight": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
tickerstringtruenonenone
ratestringtruenonenone
pricestringtruenonenone
effectiveAtIsoStringtruenonenone
effectiveAtHeightstringtruenonenone

HistoricalFundingResponse

{
  "historicalFunding": [
    {
      "ticker": "string",
      "rate": "string",
      "price": "string",
      "effectiveAt": "string",
      "effectiveAtHeight": "string"
    }
  ]
}
 

Properties

NameTypeRequiredRestrictionsDescription
historicalFunding[HistoricalFundingResponseObject]truenonenone

PnlTicksResponseObject

{
  "id": "string",
  "subaccountId": "string",
  "equity": "string",
  "totalPnl": "string",
  "netTransfers": "string",
  "createdAt": "string",
  "blockHeight": "string",
  "blockTime": "string"
}
 

Properties

NameTypeRequiredRestrictionsDescription
idstring