package tastytrade import ( "encoding/json" "fmt" "net/url" ) type DividendInfo struct { OccuredDate string `json:"occurred-date"` Amount float32 `json:"amount"` } type MarketMetricDividendResponse struct { Data struct { Items []DividendInfo `json:"items"` } Context string `json:"context"` } type EarningsInfo struct { OccuredDate string `json:"occurred-date"` EPS float32 `json:"eps"` } type MarketMetricEarningResponse struct { Data struct { Items []EarningsInfo `json:"items"` } Context string `json:"context"` } type MarketMetricInfo struct { Symbol string `json:"symbol"` ImpliedVolatilityIndex float32 `json:"implied-volatility-index"` ImpliedVolatilityIndex5DayChange float32 `json:"implied-volatility-index-5-day-change"` ImpliedVolatilityRank float32 `json:"implied-volatility-rank"` ImpliedVolatilityPercentile float32 `json:"implied-volatility-percentile"` Liquidity float32 `json:"liquidity"` LiquidityRank float32 `json:"liquidity-rank"` LiquidityRating int32 `json:"liquidity-rating"` OptionExpirationImpliedVolatilities []struct { ExpirationDate string `json:"expiration-date"` SettlementType string `json:"settlement-type"` OptionChainType string `json:"option-chain-type"` ImpliedVolatility float64 `json:"implied-volatility"` } `json:"option-expiration-implied-volatilities"` } type MarketMetricResponse struct { Data struct { Items []MarketMetricInfo `json:"items"` } Context string `json:"context"` } func (api *TastytradeAPI) GetMarketMetricInfo(symbol string) (MarketMetricResponse, error) { urlVal := fmt.Sprintf("%s/market-metrics/%s", api.host, url.PathEscape(symbol)) data, err := api.fetchData(urlVal) if err != nil { return MarketMetricResponse{}, err } var response MarketMetricResponse jsonData, err := json.Marshal(data) if err != nil { return MarketMetricResponse{}, err } err = json.Unmarshal(jsonData, &response) if err != nil { return MarketMetricResponse{}, err } return response, nil }