Options Trading
We're excited to support options trading! Use this section to read up on Alpaca's options trading capabilities.
Options trading is now available on Live!
Share your feedback on Options API for Trading API here
OpenAPI Spec
You can find our Open API docs here: <https://docs.alpaca.markets/reference>.
Enablement
In the Paper environment, options trading capability will be enabled by default - there's nothing you need to do!
Note, in production there will be a more robust experience to request options trading.
For those who do not wish to have options trading enabled, you can disable options trading by navigating to your Trading Dashboard; Account > Configure.
The Trading Account model was updated to reflect the account's options approved and trading levels.
The Account Configuration model was updated to show the maximum options trading level, and allow a user to downgrade to a lower level. Note, a different API will be provided for requesting a level upgrade for live account.
Trading Levels
Alpaca supports the below options trading levels.
Level | Supported Trades | Validation |
---|---|---|
0 | - Options trading is disabled | - NA |
1 | - Sell a covered call - Sell cash-secured put | - User must own sufficient underlying shares - User must have sufficient options buying power |
2 | - Level 1 - Buy a call - Buy a put | - User must have sufficient options buying power |
Option Contracts
Assets API Update
The Assets endpoint has an existing attributes
query parameter. Symbols which have option contracts will have an attribute called options_enabled
.
Querying for symbols with the options_enabled
attribute allows users to identify the universe of symbols with corresponding option contracts.
Fetch Contracts
To obtain contract details, a new endpoint was introduced: /v2/options/contracts?underlying_symbols=
. The endpoint supports fetching a single contract such as /v2/options/contracts/{symbol_or_id}
The default params are:
- expiration_date_lte: Next weekend
- limit: 100
Example: if /v2/options/contracts
is called on Thursday, the response will include Thursday and Friday data. If called on a Saturday, the response will include Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, and Friday.
Here is an example of a response object:
{
"option_contracts": [
{
"id": "6e58f870-fe73-4583-81e4-b9a37892c36f",
"symbol": "AAPL240119C00100000",
"name": "AAPL Jan 19 2024 100 Call",
"status": "active",
"tradable": true,
"expiration_date": "2024-01-19",
"root_symbol": "AAPL",
"underlying_symbol": "AAPL",
"underlying_asset_id": "b0b6dd9d-8b9b-48a9-ba46-b9d54906e415",
"type": "call",
"style": "american",
"strike_price": "100",
"size": "100",
"open_interest": "6168",
"open_interest_date": "2024-01-12",
"close_price": "85.81",
"close_price_date": "2024-01-12"
},
...
],
"page_token": "MTAw",
"limit": 100
}
More detailed information regarding this endpoint can be found on the OpenAPI spec here.
Market Data
Alpaca offers both real-time and historical option data.
Placing an Order
Placing an order for an option contract uses the same Orders API that is used for equities and crypto asset classes.
Given the same Orders API endpoint is being used, Alpaca has implemented a series of validations to ensure the options order does not include attributes relevant to other asset classes. Some of these validations include:
- Ensuring
qty
is a whole number Notional
must not be populatedtime_in_force
must beday
extended_hours
must befalse
or not populatedtype
must bemarket
orlimit
Examples of valid order payloads can be found as a child page here.
Options Positions
Good news - the existing Positions API model will work with options contracts. There is not expected to be a change to this model.
As an additive feature, we aim to support fetching positions of a certain asset class; whether that be options, equities, or crypto.
Account Activities
The existing schema for trade activities (TAs) are applicable for the options asset class. For example, the FILL
activity is applicable to options and maintains it's current shape for options.
There are new non-trade activities (NTAs) entry types for options, however the schema stays the same. These NTAs reflect exercise, assignment, and expiry. More details can be found on a child page here and on the OpenAPI spec here.
On PAPER NTAs are synced at the start of the following day. While your balance and positions are updated instantly, NTAs on PAPER will be visible in the Activities endpoint only the next day
Exercise and DNE Instructions
Exercise
Contract holders may submit exercise instructions to Alpaca. Alpaca will process instructions and work with our clearing partner accordingly.
All available held shares of this option contract will be exercised. By default, Alpaca will automatically exercise in-the-money (ITM) contracts at expiry.
Exercise requests will be processed immediately once received. Exercise requests submitted outside market hours will be rejected.
Endpoint: POST /v2/positions/{symbol_or_contract_id}/exercise
(no body)
More details in our OpenAPI Spec here.
Do Not Exercise
To submit a Do-not-exercise (DNE) instruction, please contact our support team.
Expiration
- In the event no instruction is provided on an ITM contract, the Alpaca system will exercise the contract as long as it is ITM by at least $0.01 USD.
- Alpaca Operations has tooling and processes in place to identify accounts which pose a buying power risk with ITM contracts.
- In the event the account does not have sufficient buying power to exercise an ITM position, Alpaca will sell-out the position within 1 hour before expiry.
Assignment
When Alpaca receives an assignment from our clearing partner, we will process the assignment and inform traders via email and websocket streaming events. The assignment websocket streaming event will be modeled as a non-trade activity (NTA).
FAQ
Please see our full FAQs here: https://alpaca.markets/support/tag/options
Updated about 1 month ago