Tradovate API

Find Contracts & Symbols With the Tradovate API

Before your code can pull a quote or fire an order, it has to name the exact contract Tradovate expects. Here's how to resolve symbols and contract IDs with product/find and contract/find, one step at a time.

Reviewed by the PickMyTrade Trading Systems Team Last updated
· 6 min read
Tradovate API access token response returned by the accessTokenRequest endpoint

Before your code can pull a quote or fire an order, it has to name the exact contract Tradovate expects. If you're building a trading bot, mapping a numeric contract ID back to a readable ticker, or wiring up automation like PickMyTrade, this is where you start. Below, you'll resolve symbols and contract IDs with the product/find and contract/find endpoints, one step at a time.

What Are Products, Contracts, and Symbols in the Tradovate API?

Tradovate splits the futures world into a small three-level hierarchy, and once it clicks the rest of the API gets a lot easier.

A product is the instrument family, "ES" or "MES", with no expiration attached. A contract is one specific maturity of that product, written as a symbol like MESU5, that's the thing you actually trade. And every contract carries a numeric contract ID, which is what the API hands back in positions, orders, and fills. Symbol lookup is just moving between those three: name a product, get its live contracts, and translate an ID back into something a human can read.

Finding Contracts & Symbols via the Tradovate API: Step-by-Step

1

Authenticate and Get an Access Token

Every lookup is an authenticated HTTPS request, so grab a bearer token first. POST your credentials and app details to /auth/accessTokenRequest; the response carries an accessToken that you attach to each later call in an Authorization: Bearer header. Send it to the matching host, demo.tradovateapi.com/v1 for the simulation environment, or live.tradovateapi.com/v1 when real money is on the line.

2

Look Up the Product with product/find

Resolve the instrument family before anything else. Call GET /product/find?name=MES with your token, and Tradovate returns the product object, its numeric id, its name, and the product type. Hold onto that product id, because it's the key you reuse to enumerate every contract under the instrument. There's no public "list every symbol" endpoint, so you always start from a root you already know, ES, NQ, CL, and query outward from there.

3

Resolve the Active Contract with contract/find or contract/suggest

Now turn that product into something tradable. GET /contract/suggest?t=MES returns matching contracts sorted with the best maturity first, index 0 is usually the front month. GET /contract/find?name=MESU5 resolves one exact symbol string to its full contract object, including the numeric contract id you'll pass to order and market-data calls. One gotcha worth burning into memory: continuous chart tickers like @MES are fine for charting, but you can't trade them. You need the dated contract symbol that this step gives you.

4

Reverse an ID or Confirm Expiry with contract/item and contractMaturity

Sometimes you're going the other direction, you've got a contract id off a position or an order, and you need the ticker. Call GET /contract/item?id=<id> to get the contract's name, productId, and contractMaturityId. Want to know how close it is to expiring? Pass that contractMaturityId to GET /contractMaturity/item?id=<id> and read the expirationDate. Rolling on days-to-expiration beats trusting a single "front" flag near rollover, when that flag can flip out from under you.

Tradovate product find API response showing the product id and name for MESTradovate contract suggest and contract find responses listing front-month futures contractsTradovate contract item API response mapping a contract id back to its symbol and maturity

How to Read a Tradovate Futures Symbol

A dated futures symbol is just three parts jammed together with no spaces: instrument + month code + last digit of the year. So MESU5 is MES (Micro E-mini S&P 500) + U (September) + 5 (2025). The month codes never change year to year, so it's worth memorizing them once:

Code Month Code Month
FJanuaryNJuly
GFebruaryQAugust
HMarchUSeptember
JAprilVOctober
KMayXNovember
MJuneZDecember

Why You'd Need This

  • Placing orders, every order needs a valid, non-expired contract symbol or ID, resolved before you send it.
  • Subscribing to market data, quote and chart subscriptions key off the exact contract.
  • Reading positions and fills, the API hands you numeric IDs, and you map them back to tickers for logs and dashboards.
  • Automating rollovers, detect the front month and roll to the next contract as expiry closes in.

Automate This with PickMyTrade

Don't feel like juggling product/find, contract/find, contract IDs, and rollover logic yourself? PickMyTrade links your TradingView alerts straight to your Tradovate account and resolves the correct live contract for you, so orders fire on the right symbol automatically, without you writing a single line of API code.

Skip the Symbol Lookups

Let PickMyTrade resolve the correct live contract for you, orders fire on the right symbol automatically, no API code required.

Start Your Free 5-Day Trial

Frequently Asked Questions

No, there's no supported "list all symbols" call. Start from a known product root like ES, MES, NQ, or CL, query product/find and then contract/find or contract/suggest, and cache whatever results your app actually needs.

Call contract/item?id=<id>. The response includes the contract name (that's your ticker), plus its productId and contractMaturityId for any follow-up lookups.

Continuous and index-style tickers are for charting only. To place an order you need the dated contract symbol, for example MESU5, or its contract ID from contract/find.

This guide is for educational and informational purposes only and is not financial, investment, or trading advice. Trading futures and other leveraged products carries a substantial risk of loss and is not suitable for every investor. PickMyTrade is an independent third-party automation platform and is not affiliated with, endorsed by, or sponsored by Tradovate, Inc. "Tradovate" and all related names, logos, and trademarks are the property of their respective owners. Platform features and steps change over time, so always confirm the current process in the official Tradovate platform and documentation before acting.