so for ES I call as I found that if I passed everything it worked out better.
resp = client.get_option_chain(
$SPX,
contract_type=client.Options.ContractType.ALL, # both calls and puts
strike_count=50, #if I make it bigger, I get a 501 error
include_underlying_quote=True, # returns underlyingPrice for spot
strategy=client.Options.Strategy.SINGLE, # single-leg only, no spreads
)