Tektii just went live. We're shipping fixes daily — spot a bug? Let us know

Available Instruments

Before you author a scenario you need to know two things: which symbols you can backtest, and what date range of data exists for each. The hosted Tektii platform exposes its full data catalog through the management API at https://api.tektii.com, so you can answer both questions with a single request.

GET /v1/instruments

Lists every instrument the platform can backtest, with optional filtering.

curl https://api.tektii.com/v1/instruments

Query parameters

Both are optional and case-insensitive.

ParameterValuesDescription
marketCRYPTO, FOREXReturn only instruments in one market.
statusavailable, coming_soonReturn only instruments with the given availability status.
# Only the FX majors
curl "https://api.tektii.com/v1/instruments?market=FOREX"

# Only instruments with data ready to backtest
curl "https://api.tektii.com/v1/instruments?status=available"

Response

The catalog is returned under a top-level data array:

{
  "data": [
    {
      "symbol": "C:BTCUSD",
      "name": "Bitcoin/US Dollar",
      "market": "CRYPTO",
      "dataSymbol": "BTC-USD",
      "underlying": "BTC",
      "denomination": "USD",
      "dataStartDate": "2017-12-18",
      "dataEndDate": "2026-07-12",
      "granularities": ["tick", "1m", "2m", "5m", "10m", "15m", "30m", "1h", "2h", "4h", "12h", "1d", "1w"],
      "status": "available"
    },
    {
      "symbol": "F:EURUSD",
      "name": "Euro/US Dollar",
      "market": "FOREX",
      "dataSymbol": "EUR-USD",
      "underlying": "EUR",
      "denomination": "USD",
      "dataStartDate": "2009-09-25",
      "dataEndDate": "2026-07-12",
      "granularities": ["tick", "1m", "2m", "5m", "10m", "15m", "30m", "1h", "2h", "4h", "12h", "1d", "1w"],
      "status": "available",
      "tickSize": "0.00001",
      "pricePrecision": 5
    }
  ]
}

Fields

FieldTypeDescription
symbolstringThe platform symbol — what you reference in a scenario configuration (e.g. C:BTCUSD, F:EURUSD). Crypto symbols are prefixed C:, forex F:.
namestringHuman-readable instrument name (e.g. Bitcoin/US Dollar).
marketstringMarket type: CRYPTO or FOREX.
dataSymbolstringAn internal identifier (e.g. BTC-USD, EUR-USD). Not accepted in scenario configs — use symbol for that.
underlyingstringThe asset being traded (e.g. BTC, EUR).
denominationstringWhat the asset is priced and settled in (e.g. USD).
dataStartDatestringEarliest date with historical data, as an ISO YYYY-MM-DD date. Omitted when availability is unknown or the instrument is still "coming soon".
dataEndDatestringLatest date with historical data, as an ISO YYYY-MM-DD date. This is a rolling boundary — yesterday's date in UTC, since data is considered current within 24 hours.
granularitiesstring[]Data granularities held in the catalog. The list is global (the same for every instrument): tick first, then candles from smallest to largest. Note that backtest subscriptions consume candle timeframes only (candle_1mcandle_1w) — tick appears in the catalog but is not a subscribable event; see valid events.
statusstringavailable if dataStartDate is present, coming_soon if not.

Some instruments also carry tickSize, lotSize, and pricePrecision when the platform knows the instrument's trading rules; each field is omitted when the rules are unknown. Today the FX pairs carry tickSize and pricePrecision (0.00001 / 5 decimal places, or 0.001 / 3 for JPY-quoted pairs), crypto pairs carry neither, and lotSize is not yet populated for any instrument. None of them are required for backtesting.

The catalog today

At time of writing the catalog holds 42 instruments — 20 crypto pairs and 22 FX pairs, all available. FX history reaches back to late September 2009; crypto history begins per coin, from 2015 to 2023. dataEndDate rolls forward daily, so the live response is always the source of truth — the start dates below are stable and are what constrain how far back a scenario window can begin.

FX — all 22 pairs have history from late September 2009, so any of them supports a scenario window back to then: F:EURUSD, F:GBPUSD, F:USDJPY, F:USDCHF, F:AUDUSD, F:USDCAD, F:NZDUSD, F:EURGBP, F:EURJPY, F:GBPJPY, F:EURCHF, F:EURAUD, F:EURCAD, F:EURNZD, F:GBPCHF, F:GBPAUD, F:AUDJPY, F:AUDNZD, F:AUDCAD, F:CADJPY, F:CHFJPY, F:NZDJPY.

Crypto — all pairs are USD-denominated; history depth varies per coin:

SymbolUnderlyingData starts
C:LTCUSDLTC2015-01-01
C:ETCUSDETC2016-07-27
C:XLMUSDXLM2017-01-17
C:BCHUSDBCH2017-08-01
C:TRXUSDTRX2017-10-07
C:BTCUSDBTC2017-12-18
C:ETHUSDETH2017-12-18
C:ADAUSDADA2018-02-26
C:XRPUSDXRP2018-05-05
C:BNBUSDBNB2018-08-20
C:LINKUSDLINK2019-06-27
C:DOGEUSDDOGE2019-07-05
C:ATOMUSDATOM2020-01-14
C:SOLUSDSOL2020-08-11
C:DOTUSDDOT2020-08-18
C:UNIUSDUNI2020-09-17
C:AVAXUSDAVAX2021-11-10
C:NEARUSDNEAR2022-01-03
C:APTUSDAPT2022-10-19
C:POLUSDPOL2023-12-21

When you set the date window for a scenario configuration, keep it inside the instrument's dataStartDatedataEndDate range. A window that starts before the data exists will simply have no bars to replay.

Errors

StatusWhen
400 Bad RequestAn invalid market or status filter value was supplied.
500 Internal Server ErrorThe catalog could not be loaded.

The same public surface offers three companion endpoints for narrower lookups. All return the same instrument shape under data.

EndpointPurpose
GET /v1/instruments/marketsList the available markets (e.g. CRYPTO, FOREX) as { id, name } pairs.
GET /v1/instruments/search?q=<query>Search instruments by partial symbol or name match (case-insensitive).
GET /v1/instruments/{symbol}Fetch a single instrument by its platform symbol (e.g. /v1/instruments/F:EURUSD). Returns 404 if no such symbol exists.
# What markets exist?
curl https://api.tektii.com/v1/instruments/markets

# Find everything matching "btc"
curl "https://api.tektii.com/v1/instruments/search?q=btc"

# Look up one instrument
curl https://api.tektii.com/v1/instruments/F:EURUSD

Next steps