Introduction
The option chain for a given security can be returned using the function [EClient.reqContractDetails](/tws-api/doc/contracts-financial-instruments/contract-details/request-contract-details). If an option contract is incompletely defined (for instance with the strike undefined) and used as an argument to [EClient.reqContractDetails](/tws-api/doc/contracts-financial-instruments/contract-details/request-contract-details), a list of all matching option contracts will be returned.
One limitation of this technique is that the return of option chains will be throttled and take a longer time the more ambiguous the contract definition. The function [EClient.reqSecDefOptParams](/tws-api/doc/contracts-financial-instruments/option-chains/request-option-chains) was introduced that does not have the throttling limitation.
- It is not recommended to use [EClient.reqContractDetails](/tws-api/doc/contracts-financial-instruments/contract-details/request-contract-details) to receive complete option chains on an underlying, e.g. all combinations of strikes/rights/expiries.
- For very large option chains returned from [EClient.reqContractDetails](/tws-api/doc/contracts-financial-instruments/contract-details/request-contract-details), unchecking the setting in TWS Global Configuration at API -> Settings -> “Expose entire trading schedule to the API” will decrease the amount of data returned per option and help to return the contract list more quickly.
[EClient.reqSecDefOptParams](/tws-api/doc/contracts-financial-instruments/option-chains/request-option-chains) returns a list of expiries and a list of strike prices. In some cases, it is possible there are combinations of strike and expiry that would not give a valid option contract.

