Details about how to obtain access tokens using OAuth 2.0

Fetch positions, balances and other account related details.

Place equity and complex option trades including advanced orders.

Fetch quotes, chains and historical data via REST and streaming APIs.

Stream market data events in real-time.

Create and update custom watchlists.

Examples, response types, property details and explanations.

Get an option’s expiration dates

  • Available in Sandbox
  • Available in Production
  • Available to Advisors
  • Supported

Get expiration dates for a particular underlying.

Note that some underlying securities use a different symbol for their weekly options (RUT/RUTW, SPX/SPXW). To make sure you see all expirations, make sure to send the includeAllRoots parameter. This will also ensure any unique options due to corporate actions (AAPL1) are returned.



Header Required Values/Example Default
Accept Optional application/xml, application/json application/xml
Authorization Required Bearer {token}


Parameter Type Param Type Required Values/Example Default
symbol Query String Required VXX
Underlying symbol of the chain
includeAllRoots Query String Optional true false
Send expirations related to all option roots
strikes Query String Optional true false
Add strike prices to each expiration

Code Example

If you're developing in the sandbox, change the hostname to https://sandbox.tradier.com
curl -X GET "https://api.tradier.com/v1/markets/options/expirations?symbol=VXX&includeAllRoots=true&strikes=true" \
     -H 'Authorization: Bearer <TOKEN>' \
     -H 'Accept: application/json'
// Version 1.8.0_31    
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

public class MainClass {
  public static void main(String[] args) throws IOException {
    final HttpUriRequest request = RequestBuilder
        .addHeader("Authorization", "Bearer <TOKEN>")
        .addHeader("Accept", "application/json")
        .addParameter("symbol", "VXX")
        .addParameter("includeAllRoots", "true")
        .addParameter("strikes", "true")

    final HttpResponse response = HttpClientBuilder.create().build().execute(request);
    final String jsonString = EntityUtils.toString(response.getEntity());
    final JsonNode json = new ObjectMapper().readTree(jsonString);
# Version 2.5.0p0    
require 'uri'
require 'net/http'

url = URI("https://api.tradier.com/v1/markets/options/expirations?symbol=VXX&includeAllRoots=true&strikes=true")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <TOKEN>'
request["Accept"] = 'application/json'

response = http.request(request)
puts response.code
puts response.read_body
// Version go1.12      
package main

import (

func main() {
    apiUrl := "https://api.tradier.com/v1/markets/options/expirations?symbol=VXX&includeAllRoots=true&strikes=true"

    u, _ := url.ParseRequestURI(apiUrl)
    urlStr := u.String()

    client := &http.Client{}
    r, _ := http.NewRequest("GET", urlStr, nil)
    r.Header.Add("Authorization", "Bearer <TOKEN>")
    r.Header.Add("Accept", "application/json")

    resp, _ := client.Do(r)
    responseData, err := ioutil.ReadAll(resp.Body)

    if err != nil {

// Version    
using System;
using System.Net;  
using System.IO;
using System.Text;

public class MainClass {
  public static void Main (string[] args) {
    var request = (HttpWebRequest)WebRequest.Create("https://api.tradier.com/v1/markets/options/expirations?symbol=VXX&includeAllRoots=true&strikes=true");
    request.Method = "GET";
    request.Headers["Authorization"] = "Bearer <TOKEN>";
    request.Accept = "application/json";

    var response = (HttpWebResponse)request.GetResponse();

    Console.WriteLine (response.StatusCode);
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    Console.WriteLine (responseString);
// Version 10.15.2    
const request = require('request');

    method: 'get',
    url: 'https://api.tradier.com/v1/markets/options/expirations',
    qs: {
       'symbol': 'VXX',
       'includeAllRoots': 'true',
       'strikes': 'true'
    headers: {
      'Authorization': 'Bearer <TOKEN>',
      'Accept': 'application/json'
  }, (error, response, body) => {
# Version 3.6.1    
import requests

response = requests.get('https://api.tradier.com/v1/markets/options/expirations',
    params={'symbol': 'VXX', 'includeAllRoots': 'true', 'strikes': 'true'},
    headers={'Authorization': 'Bearer <TOKEN>', 'Accept': 'application/json'}
json_response = response.json()
// Version 7.2.17-0ubuntu0.18.04.1
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.tradier.com/v1/markets/options/expirations?symbol=VXX&includeAllRoots=true&strikes=true');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

$headers = array();
$headers[] = 'Authorization: Bearer <TOKEN>';
$headers[] = 'Accept: application/json';

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
curl_close ($ch);
echo $http_code;
echo $result;


  "expirations": {
    "date": [