Schema: LiveExpirySurface (ID: 1132)
LiveExpirySurface (surfaceType = 'Live') records are computed and publish continuously during trading hours and represent a current best implied volatility market fit.
SurfaceType = 'PriorDay' records contain the `closing surface record from the prior trading period (usually from just before the last main session close).
METADATA
| Attribute | Value |
|---|---|
| Topic | 1000-analytics |
| MLink Token | SRMLinkAnalytics |
| SRSE Product | SRAnalytics |
Note: The symbol
=next to a field number indicates that it is a primary key.
BODY
| # | Field | Type | Default Value | Comment |
|---|---|---|---|---|
| 10= | ekey | ExpiryKey | ||
| 11= | surfaceType | enum : SurfaceCurveType | ||
| 100 | uPrc | double | effective uPrc used for surface fitting | |
| 101 | uPrcDriver | double | underlier driver (mid-market) | |
| 154 | iDays | int | interest days to expiry | |
| 102 | years | float | volatility time to expiration (in years) | |
| 103 | rate | float | term interest rate to expiry (discount rate) | |
| 105 | atmVol | float | atm surface volatility (xAxis = 0) | |
| 155 | atmCen | float | censored atm surface volatility (xAxis = 0) | |
| 106 | atmSlope | float | volatility surface slope (dVol / dXAxis) (xAxis=0) | |
| 156 | atmSkewYY | float | skewFn @ xAxis = 0 (sticky surface static point) | |
| 157 | atmVResidual | float | vResidual @ xAxis = 0 (sticky surface static point) | |
| 158 | atmSDiv | float | atm continous stock dividend (borrow rate) (xAxis = 0) | |
| 159 | basisEKey | ExpiryKey | LiveBasisCurve.pkey.ekey record that defines BasisSkewFn below. | |
| 160 | basisTimestamp | DateTime | LiveBasisCurve.timestamp | |
| 108 | axisFUPrc | float | axis FwdUPrc (fwd underlying price used to compute xAxis) | |
| 109 | axisVolRT | float | axis VolRT value used to compute xAxis (usually equal to skewMult) (value at curve min point) | |
| 111 | xMult | float | ||
| 112 | xShift | float | ||
| 110 | skewMult | float | sVol = skewMult * BasisSkewFn(xMult * (xAxis - xShift)) | |
| 164 | maxResidualErr | float | largest remain residual error (in premium points) | |
| 165 | cpAdjA | float | cpAdj = cpAdjA + cpXDe * cpAdjB + cpXDe * cpXDe * cpAdjC [cpAdj is either sdiv or uPrcRatio] | |
| 166 | cpAdjB | float | ||
| 167 | cpAdjC | float | ||
| 168 | cpAdjRefVol | float | cpXDe = 0.5 - BS_cDe(uPrc, strike, cpAdjRefVol, years, rate, sdiv=0) | |
| 169 | ticker | TickerKey | underlying stock key that this option expiration attaches to | |
| 170 | fkey | ExpiryKey | underlying future key (if any) | |
| 171 | uPrcDriverKey | ExpiryKey | underlier driver key | |
| 172 | uPrcDriverType | enum : SpdrKeyType | underlier driver key type (stock or future) | |
| 173 | ddiv | float | (expected) cumulative discrete dividend $ amounts prior to expiration | |
| 174 | ddivPv | float | (expected) cumulative npv of discrete dividend $ amounts prior to expiration (SR global rate curve) | |
| 175 | ddivSource | enum : DDivSource | Forecast if any of the dividends prior to expiry are forecast rather than announced | |
| 176 | symbolRatio | float | underlier price ratio (usually 1.0 or a multi-hedge option price ratio; if one exists) | |
| 177 | exType | enum : ExerciseType | exercise type (American or European) | |
| 178 | modelType | enum : CalcModelType | option pricing model used for price calcs (Normal, LogNormal, etc.) | |
| 179 | priceType | enum : CalcPriceType | Equity has independent sdiv and rate, Future has sdiv = rate | |
| 180 | earnCnt | float | number of qualifying earnings events prior to expiration [can be fractional] (from StockEarningsCalendar) | |
| 181 | earnCntAdj | float | number of qualifying earnings events prior to expiration [adjusted] (from StockEarningsCalendar + LiveSurfaceTerm) | |
| 182 | moneynessType | enum : MoneynessType | moneyness (xAxis) convention | |
| 183 | priceQuoteType | enum : PriceQuoteType | Price or Vol | |
| 184 | atmVolHist | float | historical realized volatility (includes eMoveHist x earnCntAdj adjustment). Note that this is the default atmVol if no implied markets existed previous day. | |
| 185 | atmCenHist | float | censored (earnings events removed) historical realized volatility. Trailing periods is 2x forward time to expiration. From HistoricalVolatility(windowType=hlCen).mv_nnn | |
| 186 | uBetaHist | float | beta (this underlier vs basis underlier; T + 1 week) | |
| 187 | eMove | float | implied earnings move (from LiveSurfaceTerm) | |
| 188 | eMoveHist | float | historical earnings move (avg of trailing 8 moves). From StockEarningsCalendar.eMoveHist | |
| 189 | minXAxis | float | minimum xAxis value; left most point with a valid supporting strike | |
| 190 | maxXAxis | float | maximum xAxis value; right most point with a valid supporting strike | |
| 191 | synSpot | float | synthetic spot price (future style pricing) | |
| 192 | synCarry | float | synthetic carry rate (future style pricing) | |
| 193 | uPrcRatio | double | uPrcAdj = uPrc * uPrcRatioFit | |
| 194 | pWidth | float | minimum mkt premium width | |
| 195 | vWidth | float | minimum mkt volatility width | |
| 196 | cCnt | ushort | num call strikes in base fit | |
| 197 | pCnt | ushort | num put strikes in base fit | |
| 198 | hasBracketMin | enum : YesNo | ||
| 199 | hasMinPoint | enum : YesNo | ||
| 200 | hasXMultABFit | enum : YesNo | ||
| 201 | xMultABFitError | double | ||
| 202 | hasSkewMultFit | enum : YesNo | ||
| 203 | skewMultFitError | double | ||
| 204 | cBidMiss | byte | number of call bid violations (surface outside the market) | |
| 205 | cAskMiss | byte | number of call ask violations (surface outside the market) | |
| 206 | pBidMiss | byte | number of put bid violations | |
| 207 | pAskMiss | byte | number of put ask violations | |
| 208 | fitScore | float | ||
| 209 | cumFitScore | float | ||
| 212 | numPrintsDD | int | cpXDe < -0.45 | |
| 213 | avgPrtErrDD | float | avg: prtPrc - surfacePrc (AUTO ONLY) | |
| 214 | stdPrtErrDD | float | std: prtPrc - surfacePrc (AUTO ONLY) | |
| 215 | numPrintsDN | int | cpXDe: [-0.45, -0.15) | |
| 216 | avgPrtErrDN | float | ||
| 217 | stdPrtErrDN | float | ||
| 218 | numPrintsAT | int | cpXDe: [-0.15, +0.15] | |
| 219 | avgPrtErrAT | float | ||
| 220 | stdPrtErrAT | float | ||
| 221 | numPrintsUP | int | cpXDe: (+0.15, +0.45] | |
| 222 | avgPrtErrUP | float | ||
| 223 | stdPrtErrUP | float | ||
| 224 | numPrintsDU | int | cpXDe > +0.45 | |
| 225 | avgPrtErrDU | float | ||
| 226 | stdPrtErrDU | float | ||
| 210 | fitCounter | int | number of fit/count passes (current trade date / market open) | |
| 150 | tradeableStatus | enum : TradeableStatus | indicates whether the surface is currently tradeable or not (all server surface integrity checks pass) | |
| 227 | marketPhase | enum : MarketPhase | market phase this surface is from | |
| 211 | surfaceFitResult | enum : SurfaceFitResult | ||
| 153 | timestamp | DateTime |
REPEATING FIELDS
Residual
| # | Field | Type | Default Value | Comment |
|---|---|---|---|---|
| 162 | x | float | x axis | |
| 163 | y | float | y value |
Get Schema API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Request Parameters for Get Schema Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getschema',
"msgType": MSG_TYPE,
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getschema' \
--data-urlencode 'msgType=LiveExpirySurface'
Get Msg API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Replace with your pkey value for getting the specific message desired
PKEY = 'ReplaceThisValueForTheQueryToWork'
# Replace with your desired view. A "|" separated list of views can be provided
# If no view is provided, all views will be returned.
VIEW = 'uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp'
# Replace with your desired where clause.
# a string in the form "field1:eq:valuse" or "(field1:ne:value1 & field1:ne:value2)
# "WHERE" clauses can contain the following comparison symbols:
# :gt: is greater than
# :ge: is greater than or equal to
# :lt: is less than
# :le: is less than or equal to
# :eq: is equal
# :ne: is not equal
# %26 is an AND statement
# | is an OR statement
# :sw: is starts with
# :ew: is ends with
# :cv: is contains values
# :nv: is does not contain value
# :cb: is contained between (two dates for instance) separated by '$'
WHERE = ''
# Request Parameters for getmsg Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getmsg',
"pkey": PKEY,
"msgType": MSG_TYPE,
# Optional Parameters
"view": VIEW,
"where": WHERE
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getmsg' \
--data-urlencode 'pkey=ReplaceThisValueForTheQueryToWork' \
--data-urlencode 'msgType=LiveExpirySurface' \
--data-urlencode 'view=uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp' \
--data-urlencode 'where='
Get Msgs API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Replace with your desired view. A "|" separated list of views can be provided
# If no view is provided, all views will be returned
VIEW = 'uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp'
# Replace with your desired where clause.
# a string in the form "field1:eq:value" or "(field1:ne:value1 & field1:ne:value2)
# "WHERE" clauses can contain the following comparison symbols:
# :gt: is greater than
# :ge: is greater than or equal to
# :lt: is less than
# :le: is less than or equal to
# :eq: is equal
# :ne: is not equal
# %26 is an AND statement
# | is an OR statement
# :sw: is starts with
# :ew: is ends with
# :cv: is contains values
# :nv: is does not contain value
# :cb: is contained between (two dates for instance) separated by '$'
WHERE = ''
# Replace with your desired limit of how many messages you receive. The default limit is 500
LIMIT = 500
# Order clause eg. "(field1:DESC | field1:ASC | field2:DESC:ABS | field2:ASC:ABS" (default is unordered; default is faster)
ORDER = 'uPrc:ASC'
# Request Parameters for getmsgs Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getmsgs',
"msgType": MSG_TYPE,
# Optional Parameters
"view": VIEW,
"where": WHERE,
"limit": LIMIT,
"order": ORDER
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getmsgs' \
--data-urlencode 'msgType=LiveExpirySurface' \
--data-urlencode 'view=uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp' \
--data-urlencode 'where=' \
--data-urlencode 'limit=500' \
--data-urlencode 'order=uPrc:ASC'
Get Aggregate API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Replace with fields you want to see aggregate values for. A "|" separated list of measures should be provided
MEASURE = 'uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp'
# Replace with fields you want to see aggregated. A "|" separated list of fields should be provided
GROUP = 'uPrcDriverType|ddivSource|exType|modelType|priceType|moneynessType|priceQuoteType|hasBracketMin|hasMinPoint|hasXMultABFit|hasSkewMultFit|tradeableStatus|marketPhase|surfaceFitResult'
# Replace with your desired where clause.
# a string in the form "field1:eq:value" or "(field1:ne:value1 & field1:ne:value2)
# "WHERE" clauses can contain the following comparison symbols:
# :gt: is greater than
# :ge: is greater than or equal to
# :lt: is less than
# :le: is less than or equal to
# :eq: is equal
# :ne: is not equal
# %26 is an AND statement
# | is an OR statement
# :sw: is starts with
# :ew: is ends with
# :cv: is contains values
# :nv: is does not contain value
# :cb: is contained between (two dates for instance) separated by '$'
WHERE = ''
# Request Parameters for getaggregate Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getaggregate',
"msgType": MSG_TYPE,
"measure": MEASURE,
"group": GROUP,
# Optional Parameters
"where": WHERE,
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getaggregate' \
--data-urlencode 'msgType=LiveExpirySurface' \
--data-urlencode 'measure=uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp' \
--data-urlencode 'group=uPrcDriverType|ddivSource|exType|modelType|priceType|moneynessType|priceQuoteType|hasBracketMin|hasMinPoint|hasXMultABFit|hasSkewMultFit|tradeableStatus|marketPhase|surfaceFitResult' \
--data-urlencode 'where='
Get Count API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Replace with your desired where clause.
# a string in the form "field1:eq:value" or "(field1:ne:value1 & field1:ne:value2)
# "WHERE" clauses can contain the following comparison symbols:
# :gt: is greater than
# :ge: is greater than or equal to
# :lt: is less than
# :le: is less than or equal to
# :eq: is equal
# :ne: is not equal
# %26 is an AND statement
# | is an OR statement
# :sw: is starts with
# :ew: is ends with
# :cv: is contains values
# :nv: is does not contain value
# :cb: is contained between (two dates for instance) separated by '$'
WHERE = ''
# Request Parameters for getCount Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getcount',
"msgType": MSG_TYPE,
# Optional Parameters
"where": WHERE,
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getcount' \
--data-urlencode 'msgType=LiveExpirySurface' \
--data-urlencode 'where='