# Market Data

## Market Data Operations

The Schwab API provides extensive market data functionality, allowing you to retrieve real-time quotes, historical price data, options chains, market movers, and instrument details.

***

### Method: `quotes`

Fetches real-time quotes for a list of ticker symbols.

#### Usage:

```python
client.quotes(symbols=None, fields=None, indicative=False)
```

#### Parameters:

* **symbols** (`str | list[str]`, optional): A comma-separated string or list of ticker symbols (e.g., `"AAPL,MSFT"` or `["AAPL", "MSFT"]`). Default is `None`.
* **fields** (`list`, optional): A list of fields to include in the response (e.g., `"quote"`, `"fundamental"`). Default is `None`, which fetches all available fields.
* **indicative** (`bool`, optional): Whether to retrieve indicative quotes. Default is `False`.

#### Returns:

* A `request.Response` object containing the quotes for the requested symbols.

#### Example:

```python
response = client.quotes(symbols=["AAPL", "MSFT"], fields=["quote", "fundamental"])
print(response.json())
```

***

### Method: `quote`

Fetches a real-time quote for a single ticker symbol.

#### Usage:

```python
client.quote(symbol_id, fields=None)
```

#### Parameters:

* **symbol\_id** (`str`): The stock ticker symbol (e.g., `"AAPL"`, `"/ES"`, `"USD/EUR"`).
* **fields** (`list`, optional): A list of fields to include in the response (e.g., `"quote"`, `"fundamental"`). Default is `None`, which fetches all available fields.

#### Returns:

* A `request.Response` object containing the quote for the requested symbol.

#### Example:

```python
response = client.quote(symbol_id="AAPL", fields=["quote"])
print(response.json())
```

***

### Method: `option_chains`

Fetches the options chain for a specific ticker symbol, including both calls and puts for different expirations.

#### Usage:

```python
client.option_chains(symbol, contractType=None, strikeCount=None, includeUnderlyingQuote=None, strategy=None, interval=None, strike=None, range=None, fromDate=None, toDate=None, volatility=None, underlyingPrice=None, interestRate=None, daysToExpiration=None, expMonth=None, optionType=None, entitlement=None)
```

#### Parameters:

* **symbol** (`str`): The ticker symbol (e.g., `"AAPL"`).
* **contractType** (`str`, optional): The type of options contracts to retrieve (`"CALL"`, `"PUT"`, or `"ALL"`). Default is `None`.
* **strikeCount** (`int`, optional): The number of strikes to retrieve. Default is `None`.
* **includeUnderlyingQuote** (`bool`, optional): Whether to include the underlying stock's quote. Default is `None`.
* **strategy** (`str`, optional): Option strategy to use (e.g., `"SINGLE"`, `"COVERED"`). Default is `None`.
* **interval** (`str`, optional): The strike price interval. Default is `None`.
* **strike** (`float`, optional): The specific strike price. Default is `None`.
* **range** (`str`, optional): Range filter for strike prices (e.g., `"ITM"`, `"OTM"`). Default is `None`.
* **fromDate** (`str | datetime`, optional): Start date for the option chain. Default is `None`.
* **toDate** (`str | datetime`, optional): End date for the option chain. Default is `None`.
* **volatility** (`float`, optional): Implied volatility for the options. Default is `None`.
* **underlyingPrice** (`float`, optional): Underlying price for the options. Default is `None`.
* **interestRate** (`float`, optional): Interest rate for the options. Default is `None`.
* **daysToExpiration** (`int`, optional): Number of days to expiration for the options. Default is `None`.
* **expMonth** (`str`, optional): Expiration month (`"JAN"`, `"FEB"`, etc.). Default is `None`.
* **optionType** (`str`, optional): Option type (`"CALL"`, `"PUT"`). Default is `None`.
* **entitlement** (`str`, optional): Entitlement type (`"PN"`, `"NP"`, `"PP"`). Default is `None`.

#### Returns:

* A `request.Response` object containing the options chain.

#### Example:

```python
response = client.option_chains(symbol="AAPL", contractType="CALL", strikeCount=50)
print(response.json())
```

***

### Method: `option_expiration_chain`

Fetches the expiration dates for options of a specific ticker symbol.

#### Usage:

```python
client.option_expiration_chain(symbol)
```

#### Parameters:

* **symbol** (`str`): The ticker symbol for which to retrieve the options expiration chain (e.g., `"AAPL"`).

#### Returns:

* A `request.Response` object containing the expiration chain for the symbol.

#### Example:

```python
response = client.option_expiration_chain(symbol="AAPL")
print(response.json())
```

***

### Method: `price_history`

Fetches the historical price data for a specific stock or symbol.

#### Usage:

```python
client.price_history(symbol, periodType=None, period=None, frequencyType=None, frequency=None, startDate=None, endDate=None, needExtendedHoursData=None, needPreviousClose=None)
```

#### Parameters:

* **symbol** (`str`): The stock ticker symbol (e.g., `"AAPL"`).
* **periodType** (`str`, optional): The type of period to retrieve (e.g., `"day"`, `"month"`, `"year"`, `"ytd"`). Default is `None`.
* **period** (`int`, optional): The length of the period (e.g., `5` days, `1` month). Default is `None`.
* **frequencyType** (`str`, optional): The frequency of data points (e.g., `"minute"`, `"daily"`, `"weekly"`). Default is `None`.
* **frequency** (`int`, optional): The number of minutes or days between each data point. Default is `None`.
* **startDate** (`str | datetime`, optional): The start date for the price history. Default is `None`.
* **endDate** (`str | datetime`, optional): The end date for the price history. Default is `None`.
* **needExtendedHoursData** (`bool`, optional): Whether to include extended trading hours. Default is `False`.
* **needPreviousClose** (`bool`, optional): Whether to include the previous closing price. Default is `False`.

#### Returns:

* A `request.Response` object containing the price history data.

#### Example:

```python
response = client.price_history(symbol="AAPL", periodType="day", period=30, frequencyType="minute", frequency=5)
print(response.json())
```

***

### Method: `movers`

Fetches the top movers in a specific index, such as the Dow Jones or NASDAQ, with options to sort by various metrics.

#### Usage:

```python
client.movers(symbol, sort=None, frequency=None)
```

#### Parameters:

* **symbol** (`str`): The index symbol (e.g., `"$DJI"`, `"$COMPX"`, `"$SPX"`).
* **sort** (`str`, optional): Sorting criteria (e.g., `"VOLUME"`, `"TRADES"`, `"PERCENT_CHANGE_UP"`, `"PERCENT_CHANGE_DOWN"`). Default is `None`.
* **frequency** (`int`, optional): The frequency of updates (e.g., `1`, `5`, `10`, `30`, `60` minutes). Default is `None`.

#### Returns:

* A `request.Response` object containing the top movers in the specified index.

#### Example:

```python
response = client.movers(symbol="$DJI", sort="PERCENT_CHANGE_UP", frequency=5)
print(response.json())
```

***

### Method: `market_hours`

Fetches the market hours for specific symbols and dates across different asset classes, such as equities, options, bonds, futures, and forex.

#### Usage:

```python
client.market_hours(symbols, date=None)
```

#### Parameters:

* **symbols** (`list`, optional): A list of market symbols (e.g., `["equity", "option", "bond", "future", "forex"]`). Default is `None`.
* **date** (`str | datetime`, optional): The date for which to retrieve market hours. Default is `None`.

#### Returns:

* A `request.Response` object containing the market hours.

#### Example:

```python
response = client.market_hours(symbols=["equity", "option"], date="2024-01-01")
print(response.json())
```

***

### Method: `instruments`

Fetches instrument details for a list of symbols based on a projection type (e.g., symbol search or fundamental data).

#### Usage:

```python
client.instruments(symbol, projection)
```

#### Parameters:

* **symbol** (`str`): The stock ticker symbol (e.g., `"AAPL"`).
* **projection** (`str`): The projection type (e.g., `"symbol-search"`, `"fundamental"`).

#### Returns:

* A `request.Response` object containing instrument details.

#### Example:

```python
response = client.instruments(symbol="AAPL", projection="fundamental")
print(response.json())
```

***

### Method: `instrument_cusip`

Fetches the details for an instrument based on its CUSIP (Committee on Uniform Securities Identification Procedures) ID.

#### Usage:

```python
client.instrument_cusip(cusip_id)
```

#### Parameters:

* **cusip\_id** (`str | int`): The CUSIP ID of the instrument.

#### Returns:

* A `request.Response` object containing the instrument details for the provided CUSIP ID.

#### Example:

```python
response = client.instrument_cusip(cusip_id="037833100")
print(response.json())
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://market-quant.gitbook.io/home/api-reference/data-providers/charles-schwab-api/market-data.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
