Options

Get Option Expiration Dates

Request class: OptionExpirationQueryRequest

Description

Get option expiration date information for specified stocks. Maximum of 30 requests per batch.

Parameters

ParameterRequiredTypeDescription
symbolsYesarrayList of stock symbols, limit: 30
marketYesstringUS / HK for Hong Kong stocks

Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionExpirationResponsesource

Structure:

public class OptionExpirationResponse extends TigerResponse {
  @JSONField(name = "data")
  private List<OptionExpirationItem> optionExpirationItems;
}

The returned data can be accessed through the OptionExpirationResponse.getOptionExpirationItems() method, which returns OptionExpirationItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionExpirationItem properties are as follows:

NameTypeDescription
symbolstringStock symbol
countintNumber of expiration dates
datesarrayExpiration dates in date format, e.g.: 2024-06-28
timestampsarrayExpiration dates in timestamp format, e.g.: 1544763600000 (US New York time timestamp)
periodTagsarrayOption period tags, m for monthly options, w for weekly options
optionSymbolsarraySymbol corresponding to the four option elements

Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through the object's toString() method.

Example

List<String> symbols = new ArrayList<>();
symbols.add("VIX");
OptionExpirationResponse response = client.execute(
        new OptionExpirationQueryRequest(symbols, Market.US));
// HK market option. market parameter must be Market.HK
// symbols.add("PAI.HK");
// OptionExpirationResponse response = client.execute(
//        new OptionExpirationQueryRequest(symbols, Market.HK));
if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
} else {
  System.out.println("response error:" + response.getMessage());
}

Example Response

{
    "code": 0,
    "data": [
        {
            "count": 12,
            "dates": [
                "2024-12-24",
                "2024-12-31",
                "2025-01-08",
                "2025-01-15",
                "2025-01-22",
                "2025-02-19",
                "2025-03-18",
                "2025-04-16",
                "2025-05-21",
                "2025-06-18",
                "2025-07-16",
                "2025-08-20"
            ],
            "optionSymbols": [
                "VIXW",
                "VIXW",
                "VIXW",
                "VIXW",
                "VIX",
                "VIX",
                "VIX",
                "VIX",
                "VIX",
                "VIX",
                "VIX",
                "VIX"
            ],
            "periodTags": [
                "w",
                "q",
                "w",
                "w",
                "m",
                "m",
                "m",
                "m",
                "m",
                "m",
                "m",
                "m"
            ],
            "symbol": "VIX",
            "timestamps": [
                1735016400000,
                1735621200000,
                1736312400000,
                1736917200000,
                1737522000000,
                1739941200000,
                1742270400000,
                1744776000000,
                1747800000000,
                1750219200000,
                1752638400000,
                1755662400000
            ]
        }
    ],
    "message": "success",
    "sign": "jBxaUFSd6e1qIsEeb6l7/Wb8R7kMcNvvglzC6PsJpd7VMP12HKyKMJH8+4g1ePLyT/TzVhyJpCEpXcUAkGrg7hVMMhLoD397vW2Xf0VKedE5mKMy4I+yFK2PneZXr4xKyfCc/+Yb3dc//1gOEEvk9EQHjDzXp6bmy/dFD4020h0=",
    "success": true,
    "timestamp": 1735048291531
}

S&P 500 (.SPX) option symbols

Monthly options use SPX; weekly and quarterly options use SPXW.

Rate Limit

The base rate limit is 60 requests/min.


Get Option Chain

Request class: OptionChainQueryV3Request

Description

Get option chain data.

⚠️

Option-chain Greeks are deprecated

Greek-related option-chain request flags, filters/models, and response fields delta, gamma, theta, vega, and rho are Deprecated. Their values are updated daily and are not timely enough for intraday use. Do not use them for real-time trading decisions. Use the Option Calculation Tool with current market inputs instead.

Parameters

ParameterTypeRequiredDescription
symbolstringYesStock symbol, symbol and expiry combination limit: 30
expiryStringYesOption expiration date, example: '2022-01-01'
marketstringYesUS/HK for Hong Kong stocks

Filter Parameters:

OptionChainFilterModel.Greeks and its methods are Deprecated because they filter on daily-updated values that are not suitable for intraday use.

ParameterTypeRequiredDescription
impliedVolatilityRange<Double>NoImplied-volatility range, set with impliedVolatility(min, max)
inTheMoneyBooleanNoWhether the option is in the money
openInterestRange<Integer>NoOpen-interest range, set with openInterest(min, max)
greeksOptionChainFilterModel.GreeksNoDeprecated. Nested Greek range filters

Within OptionChainFilterModel.Greeks, delta, gamma, theta, vega, and rho are each Range<Double> values set through their corresponding (min, max) methods. All are deprecated.

Types in the tables below follow the Java SDK property declarations. Boxed types such as Double, Integer, and Long can represent null at the Java level, but this alone does not define each field's business nullability.

The setReturnGreekValue response flag is deprecated and defaults to not returning these values. Do not enable it in new integrations; use the option calculation tool instead.

Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionChainResponsesource

Structure:

public class OptionChainResponse extends TigerResponse {

  @JSONField(name = "data")
  private List<OptionChainItem> optionChainItems;
}

The returned data can be accessed through the OptionChainResponse.getOptionChainItems() method, which returns OptionChainItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionChainItem properties are as follows:

NameTypeDescription
symbolstringUnderlying stock symbol
expiryLongOption expiration date
itemsList<OptionRealTimeQuoteGroup>List containing OptionRealTimeQuoteGroup objects, saves option chain data, details below

OptionRealTimeQuoteGroup object structure:

NameTypeDescription
putOptionRealTimeQuotePut option
callOptionRealTimeQuoteCall option

OptionRealTimeQuote object structure:

NameTypeDescription
identifierstringOption identifier, e.g.: AAPL 210115C00095000
strikeStringStrike price
rightstringOption right, PUT/CALL
askPriceDoubleAsk price
askSizeIntegerAsk size
bidPriceDoubleBid price
bidSizeIntegerBid size
lastTimestampLongLast trade timestamp, e.g.: 1543343800698
latestPriceDoubleLatest price
multiplierIntegerMultiplier, US options default 100
openInterestIntegerOpen interest
preCloseDoublePrevious trading day's closing price
volumeIntegerVolume
impliedVolDoubleImplied volatility
deltaDoubleDeprecated. Daily-updated Delta; not suitable for intraday use
gammaDoubleDeprecated. Daily-updated Gamma; not suitable for intraday use
thetaDoubleDeprecated. Daily-updated Theta; not suitable for intraday use
vegaDoubleDeprecated. Daily-updated Vega; not suitable for intraday use
rhoDoubleDeprecated. Daily-updated Rho; not suitable for intraday use

Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through json methods.

Example

OptionChainModel basicModel = new OptionChainModel("AAPL", "2024-07-26",  TimeZoneId.NewYork);
OptionChainFilterModel filterModel = new OptionChainFilterModel()
  .inTheMoney(true)
  .impliedVolatility(0.1537, 0.8282)
  .openInterest(10, 50000)
;
OptionChainQueryV3Request request = OptionChainQueryV3Request.of(basicModel, filterModel, Market.US);

OptionChainResponse response = client.execute(request);
if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
} else {
  System.out.println("response error:" + response.getMessage());
}

Example Response

{
  "code": 0,
  "data": [
    {
      "expiry": 1721966400000,
      "items": [
        {
          "put": {
            "askPrice": 4.65,
            "askSize": 2,
            "bidPrice": 4.5,
            "bidSize": 66,
            "delta": -0.503388,
            "gamma": 0.037062,
            "identifier": "AAPL  240726P00210000",
            "impliedVol": 0.183129,
            "lastTimestamp": 1719345582586,
            "latestPrice": 4.6,
            "multiplier": 100,
            "openInterest": 1858,
            "preClose": 5.26,
            "rho": -0.072819,
            "right": "put",
            "strike": "210.0",
            "theta": -0.060326,
            "vega": 0.24135,
            "volume": 404
          }
        },
        {
          "put": {
            "askPrice": 7.75,
            "askSize": 59,
            "bidPrice": 7.4,
            "bidSize": 260,
            "delta": -0.686314,
            "gamma": 0.03523,
            "identifier": "AAPL  240726P00215000",
            "impliedVol": 0.18012,
            "lastTimestamp": 1719345365800,
            "latestPrice": 7.8,
            "multiplier": 100,
            "openInterest": 1222,
            "preClose": 8.5,
            "rho": -0.084955,
            "right": "put",
            "strike": "215.0",
            "theta": -0.048649,
            "vega": 0.21153,
            "volume": 134
          }
        }
      ],
      "symbol": "AAPL"
    }
  ],
  "message": "success",
  "sign": "dA0ngWPHWC0GOme2h0/FPma5UAcLSKiR5vWw9ldZ1wz8sHiRG7QMroO78JXqK5A+J3m6XWT9esAXagwbs8D6mI/3vhFU5QCJQbDd58lQRJRWeAK/G+7eQOwAQIqvgLttBtMBbRKlHMchhHATgUi9U7v/eu4NG5tDHr04InQy0cc=",
  "success": true,
  "timestamp": 1719407360986
}

Rate Limit

The base rate limit is 60 requests/min.


Get Option Real-time Quotes

Request class: OptionBriefQueryV2Request

Description

Gets real-time option quotes. You must purchase market data access for the corresponding market before using this endpoint. Each request supports up to 30 options.

Parameters

ParameterTypeRequiredDescription
marketMarketYesMarket, supports US, HK
option_basicList<OptionCommonModel>YesList of option four elements, max 30

OptionCommonModel parameter structure:

ParameterTypeRequiredDescription
symbolstringYesStock symbol. For Hong Kong stocks, use the symbol returned by the "Get Hong Kong Option Names" endpoint
rightstringYesCall or put (CALL/PUT)
expirylongYesExpiration time
strikestringYesStrike price. Decimal places must match the option chain: US options require at least one decimal place and may require two; HK stock options use two; HK index options use none.

Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionBriefResponsesource

Structure:

public class OptionBriefResponse extends TigerResponse {

  @JSONField(name = "data")
  private List<OptionBriefItem> optionBriefItems;
}

The returned data can be accessed through OptionBriefResponse.getOptionBriefItems(), which returns OptionBriefItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionBriefItem properties are as follows:

FieldTypeDescription
identifierStringOption identifier
symbolStringStock symbol
strikestringStrike price
bidPriceDoubleBid price
bidSizeIntegerBid size
askPriceDoubleAsk price
askSizeIntegerAsk size
latestPriceDoubleLatest price
timestampLongLatest trade time
latestTimeStringLatest trade time formatted in US Eastern Time. If latestTime is absent but timestamp is present, getLatestTime() derives it; the getter returns null when neither value is available
volumeIntegerVolume
highDoubleHigh price
lowDoubleLow price
openDoubleOpen price
preCloseDoublePrevious trading day's closing price
openInterestIntegerOpen interest
changeDoublePrice change
multiplierIntegerMultiplier, US options default 100
ratesBondsDoubleOne-year US Treasury rate, updated daily, e.g.: 0.0078 means actual rate is: 0.78%
rightstringDirection (PUT/CALL)
volatilitystringHistorical volatility
expiryLongExpiration time (milliseconds, 0 o'clock of the day)
midPriceDoubleMid price
midTimestampLongTimestamp of the mid price
markPriceDoubleMark price
markTimestampLongTimestamp of the mark price
preMarkPriceDoublePrevious mark price
sellingReturnDoubleAnnualized return from selling

Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through the object's toString() method.

Numeric properties in OptionBriefItem are declared as boxed Java types; the SDK does not use those types alone to define the business nullability of each field.

Example

OptionCommonModel model = new OptionCommonModel();
model.setSymbol("TSLA");
model.setStrike("437.5");
model.setRight("PUT");
model.setExpiry("2026-01-30", TimeZoneId.NewYork);
List<OptionCommonModel> models = new ArrayList<>();
models.add(model);

OptionBriefQueryV2Request request = new OptionBriefQueryV2Request(models, Market.US);
OptionBriefResponse response = client.execute(request);
if (response.isSuccess()) {
   System.out.println(JSONObject.toJSONString(response));
} else {
   System.out.println("response error:" + response.getMessage());
}

Example Response

{
  "code" : 0,
  "message" : "success",
  "timestamp" : 1769061919677,
  "optionBriefItems" : [ {
    "lang" : null,
    "identifier" : "TSLA  260130P00437500",
    "symbol" : "TSLA",
    "strike" : "437.5",
    "bidPrice" : 17.45,
    "bidSize" : 10,
    "askPrice" : 17.65,
    "askSize" : 10,
    "latestPrice" : 17.6,
    "volume" : 967,
    "high" : 25.35,
    "low" : 14.5,
    "open" : 25.35,
    "preClose" : 25.44,
    "openInterest" : 679,
    "change" : -7.84,
    "multiplier" : 100,
    "right" : "put",
    "volatility" : "31.10%",
    "expiry" : 1769749200000,
    "ratesBonds" : 0.035227,
    "midPrice" : 17.55,
    "midTimestamp" : 1769029200460,
    "markPrice" : 17.6,
    "markTimestamp" : 1769029200460,
    "preMarkPrice" : 26.125,
    "sellingReturn" : 1.065105,
    "timestamp" : 1769028900019,
    "latestTime" : "2026-01-21 15:55:00.019",
    "account" : null
  } ],
  "success" : true
}

Rate Limit

The base rate limit is 120 requests/min.



Get Option Market Depth

Request class: OptionDepthQueryRequest

Description

Get option depth market data, supports US and Hong Kong market options, batch requests support up to 30 items at once.

Parameters

ParameterTypeRequiredDescription
marketMarketYesMarket, US/HK
option_basicList<OptionCommonModel>YesOption four-element list, max 30

OptionCommonModel parameter structure:

ParameterTypeRequiredDescription
symbolstringYesStock symbol
rightstringYesCall or Put (CALL/PUT)
expirylongYesExpiry time (milliseconds of day 0 o'clock)
strikestringYesStrike price. Decimal places must match the option chain: US options require at least one decimal place and may require two; HK stock options use two; HK index options use none.

Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionDepthResponsesource

Structure:

public class OptionDepthResponse extends TigerResponse {

  @JSONField(name = "data")
  private List<OptionDepthItem> optionDepthItems;
}

Return data includes real-time quotes from 17 exchanges during market hours. If the quote is 0, it means that exchange has no quote.

Return data can be accessed through OptionDepthResponse.getOptionDepthItems() method, returning a list of OptionDepthItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionDepthItem properties are:

NameTypeDescription
symbolstringUnderlying stock symbol
expiryLongExpiry time
strikestringStrike price
rightstringPUT or CALL
timestampLongData timestamp
askList<OptionDepthOrderBook>Ask order book data
bidList<OptionDepthOrderBook>Bid order book data

OptionDepthOrderBook object structure:

NameTypeDescription
priceFloatOrder price
codestringOption exchange code
timestampLongExchange time
volumeIntegerOrder volume
countIntegerNumber of orders at this price level

Specific fields can be accessed through object's get methods, such as getSymbol(), or converted to string through object's toString() method.

Numeric properties in OptionDepthItem and OptionDepthOrderBook are declared as boxed Java types; the SDK does not use those types alone to define the business nullability of each field.

Example

OptionCommonModel model = new OptionCommonModel();
model.setSymbol("AAPL");
model.setRight("PUT");
model.setStrike("210.0");
model.setExpiry("2024-06-28", TimeZoneId.NewYork);

OptionDepthQueryRequest request = OptionDepthQueryRequest.of(model).market(Market.US);
OptionDepthResponse response = client.execute(request);
if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
} else {
  System.out.println("response error:" + response.getMessage());
}

Example Response

{
	"code": 0,
	"data": [{
		"ask": [{
			"code": "CBOE",
			"price": 1.19,
			"volume": 10,
			"timestamp": 1718654399000
		},
		{
			"code": "BZX",
			"price": 1.19,
			"volume": 10,
			"timestamp": 1718654399000
		},
		{
			"code": "AMEX",
			"price": 1.19,
			"volume": 2,
			"timestamp": 1718654400000
		},
		{
			"code": "NSDQ",
			"price": 1.19,
			"volume": 2,
			"timestamp": 1718654399000
		},
		{
			"code": "BX",
			"price": 1.19,
			"volume": 2,
			"timestamp": 1718654399000
		},
		{
			"code": "PHLX",
			"price": 1.2,
			"volume": 54,
			"timestamp": 1718654399000
		},
		{
			"code": "BOX",
			"price": 1.2,
			"volume": 31,
			"timestamp": 1718654399000
		},
		{
			"code": "GEM",
			"price": 1.2,
			"volume": 24,
			"timestamp": 1718654399000
		},
		{
			"code": "MCRY",
			"price": 1.2,
			"volume": 24,
			"timestamp": 1718654399000
		},
		{
			"code": "MIAX",
			"price": 1.2,
			"volume": 24,
			"timestamp": 1718654399000
		},
		{
			"code": "EDGX",
			"price": 1.2,
			"volume": 23,
			"timestamp": 1718654399000
		},
		{
			"code": "EMLD",
			"price": 1.2,
			"volume": 18,
			"timestamp": 1718654399000
		},
		{
			"code": "ISE",
			"price": 1.2,
			"volume": 18,
			"timestamp": 1718654399000
		},
		{
			"code": "MPRL",
			"price": 1.2,
			"volume": 8,
			"timestamp": 1718654399000
		},
		{
			"code": "C2",
			"price": 1.2,
			"volume": 6,
			"timestamp": 1718654399000
		},
		{
			"code": "ARCA",
			"price": 1.2,
			"volume": 1,
			"timestamp": 1718654399000
		},
		{
			"code": "MEMX",
			"price": 0.0,
			"volume": 0,
			"timestamp": 1718654402000
		}],
		"bid": [{
			"code": "PHLX",
			"price": 1.12,
			"volume": 48,
			"timestamp": 1718654399000
		},
		{
			"code": "MIAX",
			"price": 1.12,
			"volume": 37,
			"timestamp": 1718654399000
		},
		{
			"code": "BX",
			"price": 1.12,
			"volume": 34,
			"timestamp": 1718654399000
		},
		{
			"code": "BOX",
			"price": 1.12,
			"volume": 32,
			"timestamp": 1718654399000
		},
		{
			"code": "CBOE",
			"price": 1.12,
			"volume": 29,
			"timestamp": 1718654399000
		},
		{
			"code": "MPRL",
			"price": 1.12,
			"volume": 22,
			"timestamp": 1718654399000
		},
		{
			"code": "GEM",
			"price": 1.12,
			"volume": 21,
			"timestamp": 1718654399000
		},
		{
			"code": "EDGX",
			"price": 1.12,
			"volume": 18,
			"timestamp": 1718654399000
		},
		{
			"code": "EMLD",
			"price": 1.12,
			"volume": 16,
			"timestamp": 1718654399000
		},
		{
			"code": "ISE",
			"price": 1.12,
			"volume": 15,
			"timestamp": 1718654399000
		},
		{
			"code": "C2",
			"price": 1.12,
			"volume": 10,
			"timestamp": 1718654399000
		},
		{
			"code": "BZX",
			"price": 1.12,
			"volume": 10,
			"timestamp": 1718654399000
		},
		{
			"code": "MCRY",
			"price": 1.12,
			"volume": 8,
			"timestamp": 1718654399000
		},
		{
			"code": "AMEX",
			"price": 1.12,
			"volume": 4,
			"timestamp": 1718654400000
		},
		{
			"code": "ARCA",
			"price": 1.12,
			"volume": 4,
			"timestamp": 1718654399000
		},
		{
			"code": "NSDQ",
			"price": 1.12,
			"volume": 4,
			"timestamp": 1718654399000
		},
		{
			"code": "MEMX",
			"price": 0.0,
			"volume": 0,
			"timestamp": 1718654402000
		}],
		"expiry": 1719547200000,
		"right": "PUT",
		"strike": "210.0",
		"timestamp": 1718654402000
	}],
	"message": "success",
	"sign": "tlxKbPzgJBN2Q2oUz8GBwpAJ/aUFlNrM3V/uh1fTWd2r3lHfD2TvTul/i6yBtvxR+G7gwfkpE7yoVVo74JacJPOA724zLdSkkHDuC5K2Q9WzIi/C1z0vdRZYtQSPpKsIrDSGc5g9D6m1IYz7HJNSeDa4a5WwyggDetNO86M1PeE=",
	"success": true,
	"timestamp": 1718712279180
}


Get Option Trade Ticks

Request class: OptionTradeTickQueryRequest

Description

Get option trade ticks. Only US market options are supported, with up to 30 items per batch request.

Parameters

ParameterTypeRequiredDescription
symbolstringYesStock symbol
rightstringYesCall or Put (call/put)
expirylongYesExpiry time (milliseconds of US NewYork time day 0 o'clock)
strikestringYesStrike price. Decimal places must match the option chain: US options require at least one decimal place and may require two.

Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionTradeTickResponsesource

Structure:

public class OptionTradeTickResponse extends TigerResponse {

  @JSONField(name = "data")
  private List<OptionTradeTickItem> optionTradeTickItems;
}

Half an hour before market open, you can get all data from the previous trading day. After market open, it's data from the new day.

Return data can be accessed through OptionTradeTickResponse.getOptionTradeTickItems() method, returning a list of OptionTradeTickItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionTradeTickItem properties are:

NameTypeDescription
symbolstringUnderlying stock symbol
expiryLongExpiry time
strikestringStrike price
rightstringPUT or CALL
itemsList<TradeTickPoint>List of TradeTickPoint objects, each corresponding to one trade tick

TradeTickPoint object structure:

NameTypeDescription
priceDoubleTrade price
timeLongTrade time
volumeLongTrade volume

Specific fields can be accessed through object's get methods, such as getSymbol(), or converted to string through object's toString() method.

Example

List<OptionCommonModel> modelList = new ArrayList<>();
OptionCommonModel model1 = new OptionCommonModel();
model1.setSymbol("AAPL");
model1.setRight("PUT");
model1.setStrike("185.0");
model1.setExpiry("2024-03-08", TimeZoneId.NewYork);
modelList.add(model1);

OptionCommonModel model2 = new OptionCommonModel();
model2.setSymbol("AAPL");
model2.setRight("CALL");
model2.setStrike("185.0");
model2.setExpiry("2024-03-08", TimeZoneId.NewYork);
modelList.add(model2);

OptionTradeTickResponse response = client.execute(OptionTradeTickQueryRequest.of(modelList));

if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
} else {
  System.out.println("response error:" + response.getMessage());
}

Example Response

{
	"code": 0,
	"data": [{
		"expiry": 1709874000000,
		"items": [{
			"price": 2.63,
			"time": 1708698601086,
			"volume": 4
		}, {
			"price": 2.62,
			"time": 1708698602594,
			"volume": 6
		}, {
			"price": 2.73,
			"time": 1708698606317,
			"volume": 4
		}, {
			"price": 2.72,
			"time": 1708698607576,
			"volume": 38
		}, {
			"price": 2.72,
			"time": 1708698610488,
			"volume": 7
		}],
		"right": "put",
		"strike": "185.0",
		"symbol": "AAPL"
	}, {
		"expiry": 1709874000000,
		"items": [{
			"price": 2.98,
			"time": 1708698600473,
			"volume": 1
		}, {
			"price": 2.98,
			"time": 1708698601051,
			"volume": 5
		}, {
			"price": 2.98,
			"time": 1708698601051,
			"volume": 23
		}, {
			"price": 2.98,
			"time": 1708698601051,
			"volume": 5
		}, {
			"price": 2.99,
			"time": 1708698601051,
			"volume": 11
		}],
		"right": "call",
		"strike": "185.0",
		"symbol": "AAPL"
	}],
	"message": "success",
	"success": true,
	"timestamp": 1708918385248
}

Rate Limit

The base rate limit is 120 requests/min.



Get Option Candlestick Bars

Request class: OptionKlineQueryV2Request

Description

Get option candlestick bars (K-line data). Batch requests support a maximum of 30 items per request.

Parameters

ParameterTypeRequiredDescription
marketMarketYesMarket, supports US, HK
option_queryList<OptionKlineModel>YesOption K-line query condition list, max 30

OptionKlineModel parameter structure:

ParameterTypeRequiredDescription
symbolstringYesStock symbol
rightstringYesCall or Put (CALL/PUT)
expirylongYesExpiration time
strikestringYesStrike price. Decimal places must match the option chain: US options require at least one decimal place and may require two; HK stock options use two; HK index options use none.
begin_timelongYesStart time
end_timelongYesEnd time
periodstringNoK-line type, values: (day: daily K, 1min: 1 minute, 5min: 5 minutes, 30min: 30 minutes, 60min: 60 minutes)
limitintNoNumber of recent records returned for minute data, default 300, max 1200. If limit is set greater than 1200, only 1200 records will be returned. Daily K-line does not support this
sort_dirstringNoSort direction, includes: ascending, descending. Sort direction enum: Sort Direction

Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionKlineResponsesource

Structure:

public class OptionKlineResponse extends TigerResponse {

  @JSONField(name = "data")
  private List<OptionKlineItem> klineItems;
}

Access the response through OptionKlineResponse.getKlineItems(), which returns OptionKlineItem objects with the following fields:

NameTypeDescription
symbolstringStock symbol
periodstringPeriod type
rightstringCall or Put, values CALL/PUT
strikestringStrike price
expiryLongExpiration time in milliseconds
itemsList<OptionKlinePoint>Candlestick bars represented by OptionKlinePoint objects. See the fields below.

OptionKlinePoint bar fields:

NameTypeDescription
highDoubleHighest price
lowDoubleLowest price
openDoubleOpening price
closeDoubleClosing price
timeLongK-line time in milliseconds
volumeLongVolume
amountDoubleTurnover
turnoverRateDoubleTurnover rate
ttmPeDoubleTrailing P/E
lyrPeDoubleLast-year P/E
openInterestIntegerOpen interest (only available for daily K-line); may be null

Types in the table follow the Java SDK property declarations. Double, Long, and Integer are boxed types, but the SDK does not use those types alone to define business nullability for every response field. Confirmed applicability conditions are documented separately in the table.

Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through the object's toString() method.

Example

OptionKlineModel model = new OptionKlineModel();
model.setSymbol("AAPL");
model.setRight("CALL");
model.setStrike("170.0");
model.setExpiry("2024-06-28", TimeZoneId.NewYork);
model.setBeginTime("2024-06-26", TimeZoneId.NewYork);
model.setEndTime("2024-06-26 12:59:59", TimeZoneId.NewYork);

model.setPeriod(OptionKType.min1.getValue());
model.setLimit(10);
model.setSortDir(SortDir.SortDir_Descend);
OptionKlineQueryV2Request request = OptionKlineQueryV2Request.of(model).market(Market.US);

OptionKlineResponse response = client.execute(request);
if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
} else {
  System.out.println("response error:" + response.getMessage());
}

Example Response

{
    "code": 0,
    "data": [
        {
            "expiry": 1719547200000,
            "items": [
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719419340000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719419280000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719419220000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719419160000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719419100000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719419040000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719418980000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719418920000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719418860000,
                    "volume": 0
                },
                {
                    "close": 43.13,
                    "high": 43.13,
                    "low": 43.13,
                    "open": 43.13,
                    "time": 1719418800000,
                    "volume": 0
                }
            ],
            "period": "1min",
            "right": "CALL",
            "strike": "170.0",
            "symbol": "AAPL"
        }
    ],
    "message": "success",
    "sign": "Hpb51+k2OzC8HmcstBV+bCLTbpflPKpR/AxXwCLd9nhhzuiZquPNGbNOhLYzzihJzRrmfCPWQeXM4ldMGLtbXUluLW79vcKBHdoPghENu+68Zod9dqzsH/InAXt444HOSsRXiubITZ+d9OWil+gvitjn9w7x4kn916KlT6R7hYg=",
    "success": true,
    "timestamp": 1719419362447
}

Rate Limit

The base rate limit is 60 requests/min.


Get Option Intraday Data

Request class: OptionTimelineRequest

Description

Get option timeline data.

Parameters

ParameterTypeRequiredDescription
optionTimelineModelsList<OptionTimelineModel>YesOption list
marketMarketNoMarket, supports HK and US; default HK

OptionTimelineModel parameter structure:

ParameterTypeRequiredDescription
symbolstringYesStock symbol
rightstringYesCall or Put (CALL/PUT)
expirylongYesExpiration time
strikestringYesStrike price. Decimal places must match the option chain: HK stock options use two; HK index options use none.
beginTimeLongNoTimeline start time as a Unix timestamp in milliseconds

Response

FieldTypeDescription
symbolstringStock symbol
rightstringCall or Put (CALL/PUT)
expiryLongExpiration time
strikestringStrike price
preCloseDoublePrevious day's close
openAndCloseTimeListList<List<Long>>Trading time period list
minutesList<OptionTimelinePoint>Timeline array, see field descriptions below

Timeline data OptionTimelinePoint structure:

FieldTypeDescription
volumeLongVolume
avgPriceDoubleAverage trade price
priceDoubleLatest price
timeLongCurrent timeline time

Example

OptionTimelineModel model1 = new OptionTimelineModel();
model1.setSymbol("ALB.HK");
model1.setExpiry(1753878054000L);
model1.setStrike("117.50");
model1.setRight("CALL");

OptionTimelineModel model2 = new OptionTimelineModel();
model2.setSymbol("LNI.HK");
model2.setExpiry(1753878054000L);
model2.setStrike("17.00");
model2.setRight("PUT");

OptionTimelineRequest request = OptionTimelineRequest.of(model1, model2);

OptionTimelineResponse response = client.execute(request);
if (response.isSuccess()) {
    System.out.println(JSONObject.toJSONString(response));
} else {
    System.out.println("response error:" + response.getMessage());
}

Example Response

{
  "code" : 0,
  "message" : "success",
  "timestamp" : 1750822293909,
  "sign" : "rEiaFf1LYv32Kbu8C+AKpJ/Y9pjrux8usbFA3FFJUEP28EXHv+PnKX9RBtVLalkyrULNqDqS29zP9hF1OZAng7U9KWFQ1Gy/FcGdbypXRNeJxPgKefHt/Fe4rLweO/eWKE41ZprPZlUZX0fxfeMwqkwcTMfhpuu+HQ2/ocmMgeg=",
  "timelineItems" : [ {
    "lang" : null,
    "symbol" : "ALB.HK",
    "expiry" : 1753878054000,
    "right" : "CALL",
    "strike" : "117.50",
    "preClose" : 2.72,
    "openAndCloseTimeList" : null,
    "minutes" : [{
      "price" : 3.4,
      "avgPrice" : 3.5235946,
      "time" : 1750822140000,
      "volume" : 29
    }, {
      "price" : 3.4,
      "avgPrice" : 3.5235946,
      "time" : 1750822200000,
      "volume" : 0
    }, {
      "price" : 3.4,
      "avgPrice" : 3.5235946,
      "time" : 1750822260000,
      "volume" : 0
    } ],
    "account" : null
  }, {
    "lang" : null,
    "symbol" : "LNI.HK",
    "expiry" : 1753878054000,
    "right" : "PUT",
    "strike" : "17.00",
    "preClose" : 1.28,
    "openAndCloseTimeList" : null,
    "minutes" : [ {
      "price" : 1.21,
      "avgPrice" : 1.21,
      "time" : 1750822140000,
      "volume" : 0
    }, {
      "price" : 1.21,
      "avgPrice" : 1.21,
      "time" : 1750822200000,
      "volume" : 0
    }, {
      "price" : 1.21,
      "avgPrice" : 1.21,
      "time" : 1750822260000,
      "volume" : 0
    } ],
    "account" : null
  } ],
  "success" : true
}

Get Hong Kong Option Symbol

Request class: OptionSymbolRequest

Description

Get Hong Kong stock option symbols, for example, the symbol for 00700 is TCH.HK.

Parameters

ParameterTypeRequiredDescription
marketMarketYesMarket, only supports HK
langstringNoLanguage support: en_US, zh_CN, zh_TW, default: en_US

Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionSymbolResponsesource

Structure:

public class OptionSymbolResponse extends TigerResponse {

  @JSONField(name = "data")
  private List<OptionSymbolItem> symbolItems;
}

Returns a collection of all option symbol codes and underlying asset symbols for the Hong Kong market.

Return data can be accessed through the OptionSymbolResponse.getSymbolItems() method, returning a list of OptionSymbolItem objects, where com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionSymbolItem properties are:

NameTypeDescription
symbolstringSymbol of the option four elements
namestringUnderlying name
underlyingSymbolstringUnderlying asset symbol code

Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through the object's toString() method.

Example

OptionSymbolRequest request = OptionSymbolRequest.newRequest(Market.HK, Language.en_US);
OptionSymbolResponse response = client.execute(request);
if (response.isSuccess()) {
  System.out.println(JSONObject.toJSONString(response));
} else {
  System.out.println("response error:" + response.getMessage());
}

Example Response

{
  "code": 0,
  "data": [
    {
      "name": "ALC",
      "symbol": "ALC.HK",
      "underlyingSymbol": "02600"
    },
    {
      "name": "CRG",
      "symbol": "CRG.HK",
      "underlyingSymbol": "00390"
    },
    {
      "name": "PAI",
      "symbol": "PAI.HK",
      "underlyingSymbol": "02318"
    },
    {
      "name": "XCC",
      "symbol": "XCC.HK",
      "underlyingSymbol": "00939"
    },
    {
      "name": "AMC",
      "symbol": "AMC.HK",
      "underlyingSymbol": "03188"
    }
  ],
  "message": "success",
  "sign": "NRvOxhF7cpEM9PS+Hofd6/BduEddep0sUlnYq9o9fPUwcZmAj3spI/D2wXu8L/eZSxvWhSfjnB3BL8y7mrpvqY3m9BGeZhf24ZoA0lbY8YXyQ5JjXa0VHWieUmCItoR9E195Nsr2sWCoawJhz7+yaMFioWEe8VThtGrYMiTYnUE=",
  "success": true,
  "timestamp": 1719401951582
}

Get Option Analysis Data


Request class: OptionAnalysisRequest

Description

Query option analysis data.


Parameters

ParameterTypeRequiredDescription
symbolsList<OptionAnalysisModel>YesList of option analysis query items, maximum 10
marketMarketNoMarket, supports US and HK; default US

Single parameter (OptionAnalysisModel)

ParameterTypeRequiredDescription
symbolstringYesUnderlying code (e.g., AAPL)
periodString / OptionAnalysisPeriodNoAnalysis period. Valid values: 3year, 52week, 26week, and 13week; defaults to 52week when omitted
requireVolatilityListBooleanNoWhether to request volatilityList; only true requests the list, while omission or false does not

Return

OptionAnalysisResponse

As follow:

public class OptionAnalysisResponse extends TigerResponse {

  @JSONField(name = "data")
  private List<OptionAnalysisItem> optionAnalysisItems;
}

public class OptionAnalysisItem extends ApiModel {

  private String symbol;
  private Double impliedVol30Days;
  private Double hisVolatility;
  private Double ivHisVRatio;
  private Double callPutRatio;
  private ImpliedVolMetric impliedVolMetric;
  private List<VolatilityItem> volatilityList;
}

public class ImpliedVolMetric implements Serializable {


  private String period;
  private Double percentile;
  private Double rank;
}

public class VolatilityItem implements Serializable {

  private Double impliedVol;
  private Double percentile;
  private Double rank;
  private Double hisVolatility;
  private Long timestamp;
}

NameTypeDescription
impliedVol30DaysdoubleThe underlying asset's 30-day implied-volatility metric.
hisVolatilitydoubleThe underlying asset's historical-volatility metric.
ivHisVRatiodoubleAnalysis ratio of implied volatility to historical volatility.
callPutRatiodoubleCall-to-put analysis ratio.
percentiledoubleImplied-volatility percentile for the selected analysis period.
rankdoubleImplied-volatility rank for the selected analysis period.

VolatilityItem fields (returned when requireVolatilityList=true):

NameTypeDescription
impliedVolDoubleImplied volatility
percentileDoubleIV percentile
rankDoubleIV rank
hisVolatilityDoubleHistorical volatility
timestampLongTimestamp in milliseconds

Example

List<OptionAnalysisModel> items = new ArrayList<>();
items.add(new OptionAnalysisModel("AAPL", OptionAnalysisPeriod.FIFTY_TWO_WEEK));
items.add(new OptionAnalysisModel("TSLA", OptionAnalysisPeriod.FIFTY_TWO_WEEK));
OptionAnalysisRequest request = OptionAnalysisRequest.newRequest(items, Market.US);
OptionAnalysisResponse response =
      client.execute(request);

// Return volatility time-series data.
OptionAnalysisRequest requestWithVolList =
      OptionAnalysisRequest.of("AAPL", OptionAnalysisPeriod.FIFTY_TWO_WEEK, true, Market.US);
OptionAnalysisResponse responseWithVolList =
      client.execute(requestWithVolList);

Example Response

{
  "code": 0,
  "message": "success",
  "timestamp": 1719401951582,
  "data": [
    {
      "callPutRatio": 0.6,
      "hisVolatility": 0.1967,
      "impliedVol30Days": 0.3071,
      "impliedVolMetric": {
        "percentile": 0.527363184079602,
        "period": "52week",
        "rank": 0.18213875790384876
      },
      "ivHisVRatio": 1.5617,
      "symbol": "AAPL"
    },
    {
      "callPutRatio": 0,
      "hisVolatility": 0.3603,
      "impliedVol30Days": 0.5162,
      "impliedVolMetric": {
        "percentile": 0.08,
        "period": "52week",
        "rank": 0.04194153521422974
      },
      "ivHisVRatio": 1.4328,
      "symbol": "TSLA"
    }
  ]
}

When requireVolatilityList=true, the response also contains:

{
  "code": 0,
  "message": "success",
  "timestamp": 1719401951582,
  "data": [
    {
      "callPutRatio": 0.6,
      "hisVolatility": 0.1967,
      "impliedVol30Days": 0.3071,
      "impliedVolMetric": {
        "percentile": 0.527,
        "period": "52week",
        "rank": 0.182
      },
      "ivHisVRatio": 1.5617,
      "symbol": "AAPL",
      "volatilityList": [
        {"impliedVol": 0.3012, "percentile": 0.512, "rank": 0.175, "hisVolatility": 0.1923, "timestamp": 1709856000000},
        {"impliedVol": 0.2985, "percentile": 0.498, "rank": 0.168, "hisVolatility": 0.1901, "timestamp": 1709769600000}
      ]
    }
  ]
}

Rate Limit

The base rate limit is 60 requests/min.


Option Indicator Calculation

Description

Calculate various indicators for selected options.

Parameters

ParameterTypeRequiredDescription
clientobjectYesSDK HTTP client
symbolstringYesStock symbol
rightstringYesCall or Put option (CALL/PUT)
strikestringYesStrike price
expiryStringYesExpiration date in yyyy-MM-dd format
underlyingSymbolstringNoUnderlying asset symbol, defaults to symbol value

Response

NameTypeDescription
deltadoubleSensitivity of theoretical option value to changes in the underlying price
gammadoubleSensitivity of delta to changes in the underlying price
thetadoubleSensitivity of theoretical option value to the passage of time
vegadoubleSensitivity of theoretical option value to changes in implied volatility
rhodoubleSensitivity of theoretical option value to changes in the risk-free rate
predictedValuedoublePredicted option value. getOptionFundamentals does not set this field, so it remains at Java's default value of 0; it is meaningful only for the calcOptionIndex overloads
insideValuedoubleIntrinsic value
timeValuedoubleTime value
leveragedoubleLeverage ratio
openInterestdoubleOpen interest
historyVolatilitydoubleHistorical volatility, percentage value
premiumRatedoublePremium rate, percentage value
profitRatedoubleProfit rate from buying, percentage value
volatilitydoubleImplied volatility, percentage value
metricParamStringCalculation-input summary for validation and debugging

Example

OptionFundamentals optionFundamentals = OptionCalcUtils.getOptionFundamentals(client,"BABA", "CALL", "205.0", "2019-11-01");
System.out.println(JSONObject.toJSONString(optionFundamentals));

Example Response

{
	"delta": 0.8573062699731591,
	"gamma": 0.05151538284065261,
	"historyVolatility": 24.38,  // Percentage format, represents 24.38%
	"insideValue": 4.550000000000011,
	"leverage": 30.695960907449216,
	"openInterest": 35417.0,
	"premiumRate": 0.18619306788885054, // Percentage format, represents 0.186%
	"profitRate": 47.138051059662665, // Percentage format, represents 47.138%
	"rho": 1.1107261502375654,
	"theta": -0.17927469728943862,
	"timeValue": 0.32499999999998863,
	"vega": 0.034473845504081974,
	"volatility": 28.62548828125  // Percentage format, represents 28.62%
}

Did this page help you?