Option Exercise

Submit Option Exercise

Signature

pub async fn submit_option_exercise(&self, mut req: OptionExerciseSubmitRequest) -> Result<Option<bool>, TigerError>

Description

Submit an option exercise or expiry handling request.

Parameters

ParameterRust typeRequirementSDK default
req.accountOption<String>Optional; most TradeClient methods inject the default account when NoneNone (omitted)
req.secret_keyOption<String>OptionalNone (omitted)
req.contract_idOption<i64>Required by the server; not prevalidated by the SDKNone (omitted)
req.exercise_typeOption<String>Required by the server; legal values: Exercise, Expire; not prevalidated by the SDKNone (omitted)
req.quantityOption<f64>Required by the server; not prevalidated by the SDKNone (omitted)
req.executing_dateOption<String>Required for Exercise; format yyyy-MM-ddNone (omitted)
req.is_forceOption<bool>Required for ExerciseNone (omitted)
req.itm_rateOption<i32>Required for Expire; range 0..10None (omitted)
req.langOption<String>OptionalNone (omitted)

Response

Result<Option<bool>, TigerError>Some(true) indicates the request was accepted.

Example

use tigeropen::model::trade_requests::OptionExerciseSubmitRequest;

let success = trade.submit_option_exercise(OptionExerciseSubmitRequest {
    contract_id: Some(55678),
    exercise_type: Some("Exercise".into()),
    quantity: Some(1.0),
    executing_date: Some("2026-09-19".into()),
    is_force: Some(false),
    ..Default::default()
}).await?;

Response example

true

Rate limit

The base rate limit is 60 requests/min.


Cancel Option Exercise

Signature

pub async fn cancel_option_exercise(&self, mut req: OptionExerciseCancelRequest) -> Result<Option<bool>, TigerError>

Description

Cancel a submitted exercise record. Only records in New status can be cancelled.

Parameters

ParameterRust typeRequirementSDK default
req.accountOption<String>Optional; most TradeClient methods inject the default account when NoneNone (omitted)
req.secret_keyOption<String>OptionalNone (omitted)
req.idOption<i64>Required by the server; not prevalidated by the SDKNone (omitted)
req.langOption<String>OptionalNone (omitted)

Response

Result<Option<bool>, TigerError>Some(true) indicates cancellation was successful.

Example

use tigeropen::model::trade_requests::OptionExerciseCancelRequest;

let cancelled = trade.cancel_option_exercise(OptionExerciseCancelRequest {
    id: Some(12345),
    ..Default::default()
}).await?;

Response example

true

Rate limit

The base rate limit is 60 requests/min.


Option Exercise Check

Signature

pub async fn option_exercise_check(&self, mut req: OptionExerciseCheckRequest) -> Result<Option<OptionExerciseCheckResult>, TigerError>

Description

Check whether an option exercise is feasible.

Parameters

ParameterRust typeRequirementSDK default
req.accountOption<String>Optional; most TradeClient methods inject the default account when NoneNone (omitted)
req.secret_keyOption<String>OptionalNone (omitted)
req.contract_idOption<i64>Required by the server; not prevalidated by the SDKNone (omitted)
req.exercise_typeOption<String>Required by the server; legal values: Exercise, Expire; not prevalidated by the SDKNone (omitted)
req.quantityOption<f64>Required by the server; not prevalidated by the SDKNone (omitted)
req.executing_dateOption<String>Recommended for Exercise; format yyyy-MM-ddNone (omitted)
req.is_forceOption<bool>Recommended for ExerciseNone (omitted)
req.itm_rateOption<i32>Optional for Expire; range 0..10None (omitted)
req.langOption<String>OptionalNone (omitted)

Response

Result<Option<OptionExerciseCheckResult>, TigerError>; empty data becomes None. Fields are available_quantity, position, stk_position, stk_position_change, stk_position_before, stk_position_after, and symbol.

FieldRust typeDescription
available_quantityf64Available exercise quantity
positionf64Option position quantity
stk_positionf64Current underlying-stock position quantity
stk_position_changef64Underlying-stock position change caused by exercise or expiry handling
stk_position_beforef64Underlying-stock position quantity before handling
stk_position_afterf64Underlying-stock position quantity after handling
symbolStringUnderlying symbol

Example

use tigeropen::model::trade_requests::OptionExerciseCheckRequest;

let ok = trade.option_exercise_check(OptionExerciseCheckRequest {
    contract_id: Some(55678),
    exercise_type: Some("Exercise".into()),
    quantity: Some(1.0),
    executing_date: Some("2026-09-19".into()),
    ..Default::default()
}).await?;
if let Some(check) = ok {
    println!(
        "available={} option_position={} stock_position={} stock_change={} before={} after={} symbol={}",
        check.available_quantity,
        check.position,
        check.stk_position,
        check.stk_position_change,
        check.stk_position_before,
        check.stk_position_after,
        check.symbol
    );
}

Response example

{"availableQuantity":2.0,"position":2.0,"stkPosition":0.0,"stkPositionChange":200.0,"stkPositionBefore":0.0,"stkPositionAfter":200.0,"symbol":"AAPL"}

Rate limit

The base rate limit is 60 requests/min.


Get Option Exercise Positions

Signature

pub async fn get_option_exercise_positions(&self, mut req: OptionExercisePositionRequest) -> Result<Option<OptionExercisePositionPageResult>, TigerError>

Description

Get exercisable option positions.

Parameters

ParameterRust typeRequirementSDK default
req.accountOption<String>Optional; most TradeClient methods inject the default account when NoneNone (omitted)
req.secret_keyOption<String>OptionalNone (omitted)
req.exercise_typeOption<String>Required by the server; legal values: Exercise, ExpireNone (omitted)
req.langOption<String>OptionalNone (omitted)

Response

FieldTypeDescription
page_numi32Current page
page_sizei32Page size
item_counti32Total records
page_counti32Total pages
itemsVec<OptionExercisePosition>Positions

items elements (OptionExercisePosition):

FieldTypeDescription
contract_idi64Contract ID
symbolStringOption symbol
stk_symbolStringUnderlying symbol
expire_dateStringExpiration date
strikeStringStrike price
call_putStringCALL/PUT
marketStringMarket
account_idi64Account ID
positionf64Position quantity
available_quantityf64Exercisable quantity

Example

use tigeropen::model::trade_requests::OptionExercisePositionRequest;

let positions = trade.get_option_exercise_positions(
    OptionExercisePositionRequest {
        exercise_type: Some("Exercise".into()),
        ..Default::default()
    }
).await?;
if let Some(page) = positions {
    for p in &page.items { println!("{} {} strike={} qty={}", p.symbol, p.call_put, p.strike, p.position); }
}

Response Example

{"pageNum":1,"pageSize":20,"itemCount":1,"pageCount":1,"items":[{"contractId":55678,"symbol":"AAPL","stkSymbol":"AAPL","expireDate":"20260919","strike":"200","callPut":"CALL","market":"US","accountId":123,"position":2.0,"availableQuantity":2.0}]}

Rate limit

The base rate limit is 60 requests/min.


Get Option Exercise Records

Signature

pub async fn get_option_exercise_records(&self, mut req: OptionExerciseRecordsRequest) -> Result<Option<OptionExerciseRecordPageResult>, TigerError>

Description

Get historical exercise/expiry records.

Parameters

ParameterRust typeRequirementSDK default
req.accountOption<String>Optional; most TradeClient methods inject the default account when NoneNone (omitted)
req.secret_keyOption<String>OptionalNone (omitted)
req.pageOption<i32>Optional; starts at 1Server default: 1
req.sizeOption<i32>Optional; range 1–100Server default: 20
req.statusOption<String>Optional; legal values: New, Cancel, Success, FailNone (omitted)
req.exercise_typeOption<String>Optional; legal values: Exercise, ExpireNone (omitted)
req.symbolOption<String>OptionalNone (omitted)
req.order_byOption<String>Optional; legal values: symbol, expire_date, strike, is_callNone (omitted)
req.langOption<String>OptionalNone (omitted)

Response

Result<Option<OptionExerciseRecordPageResult>, TigerError>; empty data becomes None.

FieldTypeDescription
page_numi32Current page
page_sizei32Page size
item_counti32Total records
page_counti32Total pages
itemsVec<OptionExerciseRecord>Exercise records

items elements (OptionExerciseRecord):

FieldTypeDescription
idi64Record ID
contract_idi64Contract ID
symbolStringSymbol
stk_symbolStringUnderlying symbol
expire_dateStringExpiration date
strikeStringStrike price
call_putStringCALL/PUT
exercise_typeStringExercise/Expire; JSON field: type
request_quantityf64Requested quantity
quantityf64Exercise quantity
statusStringStatus
executing_dateStringExecution date
itm_ratei32In-the-money rate
is_forceboolForce-exercise flag
reasonStringReason
account_idi64Account ID

Example

use tigeropen::model::trade_requests::OptionExerciseRecordsRequest;

let records = trade.get_option_exercise_records(
    OptionExerciseRecordsRequest::default()
).await?;
if let Some(page) = records {
    for r in &page.items { println!("{} {} qty={} status={}", r.symbol, r.exercise_type, r.quantity, r.status); }
}

Response Example

{"pageNum":1,"pageSize":20,"itemCount":1,"pageCount":1,"items":[{"id":12345,"contractId":55678,"symbol":"AAPL","stkSymbol":"AAPL","expireDate":"20260919","strike":"200","callPut":"CALL","type":"Exercise","requestQuantity":1.0,"quantity":1.0,"status":"New","executingDate":"2026-09-19","itmRate":0,"isForce":false,"reason":"","accountId":123}]}

Rate limit

The base rate limit is 60 requests/min.


Did this page help you?