{
  "version": "2026-10-16.3",
  "checked": "2026-10-16",
  "staleness_days": 30,
  "changelog": "https://api.tradestation.com/docs/blog",
  "spec": "https://api.tradestation.com/docs/specification/",
  "note": "Run validate_order before orderconfirm. Confirm is not a safety net: it accepted every stock duration in the regular session, off-tick prices (a 728.005 buy was re-priced to 728.01; 1.003 became 1.00; an ES price off the 0.25 tick), a close larger than the position, a close with no position, plus durations off the select list and on SPX, a GTD 108 days out, and a lowercase symbol. These rules reject those sends.",
  "sources": {
    "spec": "https://api.tradestation.com/docs/specification/",
    "equity_durations": "https://help.tradestation.com/10_00/eng/tradestationhelp/tb_definitions/trade_bar_durations_equities.htm",
    "option_durations": "https://help.tradestation.com/10_00/eng/tradestationhelp/tb_definitions/trade_bar_durations_options.htm",
    "web_durations": "https://help.tradestation.com/10_00/eng/tswebtrading/topics/trade_bar_durations.htm",
    "order_entry": "https://help.tradestation.com/10_00/eng/tswebtrading/topics/order_entry_settings.htm",
    "gtc": "https://help.tradestation.com/10_00/eng/tradestationhelp/tb_definitions/gtc_gtd_orders.htm",
    "cboe": "https://help.tradestation.com/10_00/eng/tradestationhelp/routes/cboe.htm",
    "nsdq": "https://help.tradestation.com/10_00/eng/tradestationhelp/routes/nsdq_exchange.htm",
    "faqs": "https://www.tradestation.com/faqs/",
    "extended_options": "https://www.tradestation.com/insights/extended-hours-options-trading/",
    "extended_stocks": "https://tradestation.com/insights/2024/10/25/extended-trading-hours-tradestation-for-stocks-and-etfs",
    "futures_symbols": "https://help.tradestation.com/10_00/eng/TradeStationHelp/symbology/futures_symbology.htm",
    "continuous": "https://help.tradestation.com/10_00/eng/tradestationhelp/tb/futures_continuous_contracts.htm",
    "sim": "https://api.tradestation.com/docs/fundamentals/sim-vs-live/",
    "rates": "https://api.tradestation.com/docs/fundamentals/rate-limiting/rate-limiting-overview/",
    "faq_key": "https://api.tradestation.com/docs/faq/",
    "api_product": "https://www.tradestation.com/platforms-and-tools/trading-api/",
    "mcp": "https://www.tradestation.com/platforms-and-tools/mcp/",
    "mcp_chatgpt": "https://www.tradestation.com/insights/2026/07/16/mcp-chatgpt/",
    "mcp_claude": "https://www.tradestation.com/insights/2026/02/17/mcp-ai-brokerage-accounts/"
  },
  "order_types": [
    "Market",
    "Limit",
    "StopMarket",
    "StopLimit"
  ],
  "rejected_order_types": {
    "Stop": "Not a valid order confirm object. The v3 OrderType enum is Market, Limit, StopMarket, StopLimit. Observed on SIM 2026-10-16: confirm-order rejected orderType Stop during the regular session."
  },
  "select_equity_option_underlyings": {
    "as_of": "2026-10-14",
    "source": "extended_options",
    "note": "Plus durations (DYP, GCP, GDP) are only for this list. Confirm also accepts them on other names and on SPX. Do not send those. Even on names in this list, placement is unproven. The list is TradeStation's extended-hours options article as of October 2026, and it changes twice a year.",
    "symbols": [
      "SPY",
      "QQQ",
      "IWM",
      "GLD",
      "XLF",
      "NVDA",
      "TSLA",
      "AAPL",
      "MU",
      "INTC",
      "META",
      "AMZN",
      "AMD",
      "MSFT",
      "GOOGL",
      "PLTR",
      "ORCL",
      "AVGO",
      "NFLX",
      "HOOD",
      "GOOG",
      "SNDK",
      "BAC",
      "MRVL",
      "BABA",
      "TSM",
      "NOK",
      "F",
      "PFE"
    ]
  },
  "index_option_roots": [
    "SPX",
    "SPXW",
    "VIX",
    "VIXW",
    "XSP",
    "RUT",
    "RUTW"
  ],
  "duration_aliases": {
    "DAY+": "DYP",
    "GTC+": "GCP",
    "GTD+": "GDP",
    "1 MIN": "1",
    "3 MIN": "3",
    "5 MIN": "5",
    "1MIN": "1",
    "3MIN": "3",
    "5MIN": "5"
  },
  "limits": {
    "gtc_max_calendar_days": 90,
    "order_confirm_id_max": 22,
    "symbols_per_quote": 100,
    "symbols_per_details": 50,
    "orders_by_id_max": 50
  },
  "allow": [
    {
      "id": "stock-regular",
      "asset": "stock",
      "sessions": [
        "regular"
      ],
      "order_types": [
        "Market",
        "Limit",
        "StopMarket",
        "StopLimit"
      ],
      "durations": [
        "DAY",
        "DYP",
        "GTC",
        "GCP",
        "GTD",
        "GDP",
        "OPG",
        "CLO",
        "IOC",
        "FOK",
        "1",
        "3",
        "5"
      ],
      "default_duration": "DAY",
      "warnings": {
        "OPG": "OPG is at the opening, and only for listed stocks. A regular-session confirm does not prove the order joined the opening auction.",
        "CLO": "CLO targets the closing session. A regular-session confirm does not prove when it works.",
        "DYP": "Do not send DYP for a normal regular-session order. It keeps working into the post-market.",
        "GCP": "GCP keeps the order working into extended hours. A regular-session multi-day order is GTC.",
        "GDP": "GDP keeps the order working into extended hours. A regular-session order with a date is GTD."
      },
      "evidence": "Equity duration list. Observed on SIM 2026-10-16 regular session: confirm accepted all 13 durations for Market, Limit, StopMarket, and StopLimit."
    },
    {
      "id": "stock-premarket",
      "asset": "stock",
      "sessions": [
        "premarket"
      ],
      "order_types": [
        "Limit"
      ],
      "durations": [
        "DYP",
        "GCP",
        "GDP",
        "OPG"
      ],
      "default_duration": "DYP",
      "order_type_reason": "Outside the regular session, send Limit. Market and stop orders are not accepted for shares in that session.",
      "warnings": {
        "OPG": "OPG is at the opening for listed stocks. Placement behavior is not proven by a confirm."
      },
      "evidence": "FAQs and the equity duration page. Premarket limits use Day+, GTC+, or GTD+."
    },
    {
      "id": "stock-postmarket",
      "asset": "stock",
      "sessions": [
        "postmarket"
      ],
      "order_types": [
        "Limit"
      ],
      "durations": [
        "DYP",
        "GCP",
        "GDP"
      ],
      "default_duration": "DYP",
      "order_type_reason": "Outside the regular session, send Limit. Market and stop orders are not accepted for shares in that session.",
      "evidence": "FAQs. Extended session is limit-only with a plus duration. Post-market placement was not in the 2026-10-16 regular-session dry run."
    },
    {
      "id": "stock-closed",
      "asset": "stock",
      "sessions": [
        "closed"
      ],
      "order_types": [
        "Market",
        "Limit",
        "StopMarket",
        "StopLimit"
      ],
      "durations": [
        "GTC",
        "GCP",
        "GTD",
        "GDP"
      ],
      "default_duration": "GTC",
      "warning": "Nothing executes while the session is closed. GTC and GTD are resubmitted as DAY at 09:30 ET. GCP and GDP are resubmitted as DAY+ at 06:00 ET. A market or stop sent as GTC waits for that resubmit. It is not a working extended-hours order.",
      "evidence": "GTC and GTD page: the GTC server accepts orders 24/7."
    },
    {
      "id": "option-regular",
      "asset": "option",
      "sessions": [
        "regular"
      ],
      "order_types": [
        "Market",
        "Limit",
        "StopMarket",
        "StopLimit"
      ],
      "durations": [
        "DAY",
        "GTC",
        "GTD",
        "OPG",
        "IOC",
        "FOK",
        {
          "code": "DYP",
          "requires_select_underlying": true
        },
        {
          "code": "GCP",
          "requires_select_underlying": true
        },
        {
          "code": "GDP",
          "requires_select_underlying": true
        }
      ],
      "default_duration": "DAY",
      "warnings": {
        "DYP": "Plus durations are documented for select equity options in RTH. Observed on SIM 2026-10-16: confirm accepted DYP, GCP, and GDP on a select ETF option. Placement is unproven. The web order-entry settings table still omits Day+, GTC+, and GTD+.",
        "GCP": "Plus durations are documented for select equity options in RTH. Confirm accepted them on SIM. Placement is unproven. The web order-entry table omits them.",
        "GDP": "Plus durations are documented for select equity options in RTH. Confirm accepted them on SIM. Placement is unproven. The web order-entry table omits them.",
        "OPG": "The options duration page copies the listed-stock opening wording. Confirm accepted OPG on SIM during the regular session. Placement is unproven."
      },
      "evidence": "Option durations page, fetched 2026-10-16. SIM confirm the same day, regular session."
    },
    {
      "id": "option-gth",
      "asset": "option",
      "sessions": [
        "options_gth"
      ],
      "order_types": [
        "Limit"
      ],
      "durations": [
        {
          "code": "DYP",
          "requires_select_underlying": true
        },
        {
          "code": "GCP",
          "requires_select_underlying": true
        },
        {
          "code": "GDP",
          "requires_select_underlying": true
        }
      ],
      "default_duration": "DYP",
      "order_type_reason": "Extended-hours options take limit orders only. Market and stop orders are not accepted.",
      "evidence": "Extended-hours options article, sessions from 2026-10-19. Not placement-tested."
    },
    {
      "id": "option-curb",
      "asset": "option",
      "sessions": [
        "options_curb"
      ],
      "order_types": [
        "Limit"
      ],
      "durations": [
        {
          "code": "DYP",
          "requires_select_underlying": true
        },
        {
          "code": "GCP",
          "requires_select_underlying": true
        },
        {
          "code": "GDP",
          "requires_select_underlying": true
        }
      ],
      "default_duration": "DYP",
      "order_type_reason": "The curb session takes limit orders only.",
      "evidence": "Extended-hours options article. Not placement-tested."
    },
    {
      "id": "option-late",
      "asset": "option",
      "sessions": [
        "options_late"
      ],
      "order_types": [
        "Market",
        "Limit",
        "StopMarket",
        "StopLimit"
      ],
      "durations": [
        "IOC",
        "FOK"
      ],
      "default_duration": "IOC",
      "evidence": "CBOE route: IOC and FOK may be entered from 09:30 to 16:17 ET."
    },
    {
      "id": "option-pause",
      "asset": "option",
      "sessions": [
        "options_pause"
      ],
      "order_types": [],
      "durations": [],
      "order_type_reason": "Select equity options have a five-minute pause, 09:25 to 09:30 ET, before the regular open.",
      "evidence": "Extended-hours options article."
    },
    {
      "id": "index-regular",
      "asset": "index_option",
      "sessions": [
        "regular",
        "index_regular"
      ],
      "order_types": [
        "Market",
        "Limit",
        "StopMarket",
        "StopLimit"
      ],
      "durations": [
        "DAY",
        "GTC",
        "GTD",
        "IOC",
        "FOK",
        "OPG"
      ],
      "default_duration": "DAY",
      "warning": "Index regular hours on the extended-hours article run to 16:15 ET, not 16:00. Plus durations are not in the index row. Symbol format was not placement-tested.",
      "evidence": "Option durations page plus the index clock on the extended-hours article."
    },
    {
      "id": "futures-open",
      "asset": "futures",
      "sessions": [
        "regular",
        "futures_open"
      ],
      "order_types": [
        "Market",
        "Limit",
        "StopMarket",
        "StopLimit"
      ],
      "durations": [
        "DAY",
        "GTC",
        "GTD",
        "IOC",
        "FOK"
      ],
      "default_duration": "DAY",
      "warning": "On a futures market order, do not treat estimatedPrice as the fill. Observed on SIM 2026-10-16: estimatedPrice was about 20 points under the ask in the same confirm, and estimatedCost was initial margin.",
      "evidence": "Web order-entry settings list Day, GTC, GTD, IOC, FOK for futures. Observed on SIM 2026-10-16 regular session: confirm accepted those five and rejected the other eight, for all four order types."
    }
  ],
  "gaps": [
    {
      "asset": "stock",
      "sessions": [
        "premarket",
        "postmarket",
        "closed"
      ],
      "durations": [
        "DAY"
      ],
      "reason": "Never send DAY outside the regular session. A pre-market DAY can be accepted and sit inactive until 09:30. After 16:00, DAY is rejected with No Day orders after 4:00PM Eastern. A regular-session confirm does not catch either case."
    },
    {
      "asset": "stock",
      "sessions": [
        "premarket",
        "postmarket"
      ],
      "order_types": [
        "Market",
        "StopMarket",
        "StopLimit"
      ],
      "reason": "Market and stop orders are not accepted for shares outside the regular session. Send Limit."
    },
    {
      "asset": "stock",
      "sessions": [
        "premarket",
        "postmarket",
        "closed"
      ],
      "durations": [
        "1",
        "3",
        "5",
        "IOC",
        "FOK",
        "CLO"
      ],
      "reason": "Minute, IOC, FOK, and CLO durations were not accepted by these rules outside the regular session. A confirm during regular hours does not clear them here."
    },
    {
      "asset": "option",
      "sessions": [
        "regular",
        "options_gth",
        "options_curb"
      ],
      "durations": [
        "DYP",
        "GCP",
        "GDP"
      ],
      "requires_select_underlying": false,
      "reason": "Day+, GTC+, and GTD+ are only valid for select single-stock and ETF equity options. This underlying is not on the 2026-10-14 list. orderconfirm may still accept the duration."
    },
    {
      "asset": "option",
      "sessions": [
        "regular",
        "options_gth",
        "options_curb",
        "options_late",
        "premarket",
        "postmarket",
        "closed"
      ],
      "durations": [
        "CLO",
        "1",
        "3",
        "5"
      ],
      "reason": "CLO and the 1, 3, and 5 minute durations are not on the options duration list. Observed on SIM 2026-10-16 regular session: confirm rejected them with Invalid duration."
    },
    {
      "asset": "futures",
      "sessions": [
        "regular",
        "futures_open",
        "premarket",
        "postmarket",
        "closed",
        "futures_closed",
        "futures_break"
      ],
      "durations": [
        "DYP",
        "GCP",
        "GDP",
        "OPG",
        "CLO",
        "1",
        "3",
        "5"
      ],
      "reason": "Futures durations on the order-entry settings page are Day, GTC, GTD, IOC, and FOK. Observed on SIM 2026-10-16: confirm rejected the other eight with Invalid duration."
    },
    {
      "asset": "futures",
      "sessions": [
        "premarket",
        "postmarket",
        "closed",
        "futures_closed",
        "futures_break",
        "futures_unspecified"
      ],
      "reason": "This futures session is not covered by a placed or confirmed test. The 2026-10-16 dry run was the equity regular session only. Do not send. Quote the contract and run the futures session test in the pack."
    },
    {
      "asset": "index_option",
      "durations": [
        "DYP",
        "GCP",
        "GDP"
      ],
      "reason": "Plus durations on the options page are for select single-stock and ETF options, not index options."
    }
  ],
  "when_to_use": [
    {
      "id": "regular_today",
      "want": "Regular hours only, today",
      "stock": "DAY",
      "option": "DAY",
      "futures": "DAY",
      "trap": "A pre-market DAY can sit inactive until 09:30."
    },
    {
      "id": "before_open",
      "want": "Working before the open",
      "stock": "DYP",
      "option": "DYP",
      "futures": null,
      "trap": "Stock: limit only, and only a plus duration. Options: only a select underlying, limit, from 07:30 ET. Futures: untested."
    },
    {
      "id": "into_post",
      "want": "Keep working into the post-market",
      "stock": "DYP",
      "option": null,
      "futures": null,
      "trap": "Stock limit with DYP. Equity options do not use the stock post-market to 20:00. Select names have a limit-only window from 16:00 to 16:15, plus duration."
    },
    {
      "id": "several_days",
      "want": "Several days, regular hours only",
      "stock": "GTC",
      "option": "GTC",
      "futures": "GTC",
      "trap": "Resubmitted as a new DAY at 09:30 ET, so it loses time priority. 90 calendar days."
    },
    {
      "id": "several_days_extended",
      "want": "Several days, including extended hours",
      "stock": "GCP",
      "option": "GCP",
      "futures": null,
      "trap": "GCP is resubmitted as DAY+ at 06:00 ET. Options: select underlyings only. Futures: plus durations are rejected."
    },
    {
      "id": "until_date",
      "want": "Until a set date",
      "stock": "GTD",
      "option": "GTD",
      "futures": "GTD",
      "trap": "Expiration is required, RFC3339, date portion only, within 90 calendar days. GDP is the extended-hours form for stocks and select options."
    },
    {
      "id": "opening_auction",
      "want": "At the opening auction",
      "stock": "OPG",
      "option": "OPG",
      "futures": null,
      "trap": "Defined as listed stocks at the opening price. Options list OPG too. Futures do not. Confirm is not proof of auction behavior."
    },
    {
      "id": "at_the_close",
      "want": "At the close",
      "stock": "CLO",
      "option": null,
      "futures": null,
      "trap": "CLO is equities. Options and futures rejected it on SIM."
    },
    {
      "id": "fill_now",
      "want": "Fill now or cancel, partials allowed",
      "stock": "IOC",
      "option": "IOC",
      "futures": "IOC",
      "trap": "Options: 09:30 to 16:17 ET on the CBOE route page."
    },
    {
      "id": "all_or_nothing",
      "want": "All or nothing, now",
      "stock": "FOK",
      "option": "FOK",
      "futures": "FOK",
      "trap": "No partial fills. Same options clock as IOC."
    },
    {
      "id": "few_minutes",
      "want": "Expire in a few minutes",
      "stock": "1",
      "option": null,
      "futures": null,
      "trap": "1, 3, or 5. Equities. Options and futures rejected them on SIM."
    }
  ],
  "trade_actions": {
    "stock": {
      "open_long": "BUY",
      "close_long": "SELL",
      "open_short": "SELLSHORT",
      "close_short": "BUYTOCOVER"
    },
    "option": {
      "open_long": "BUYTOOPEN",
      "close_long": "SELLTOCLOSE",
      "open_short": "SELLTOOPEN",
      "close_short": "BUYTOCLOSE"
    },
    "index_option": {
      "open_long": "BUYTOOPEN",
      "close_long": "SELLTOCLOSE",
      "open_short": "SELLTOOPEN",
      "close_short": "BUYTOCLOSE"
    },
    "futures": {
      "open_long": "BUY",
      "close_long": "SELL",
      "open_short": "SELL",
      "close_short": "BUY"
    }
  },
  "status": {
    "source": "spec",
    "open": [
      "ACK",
      "ASS",
      "BRC",
      "BRF",
      "BRO",
      "CHG",
      "CND",
      "COR",
      "DIS",
      "DOA",
      "DON",
      "ECN",
      "EXE",
      "FPR",
      "LAT",
      "OPN",
      "OSO",
      "OTHER",
      "PLA",
      "REC",
      "RJC",
      "RPD",
      "RSN",
      "STP",
      "STT",
      "SUS",
      "UCN"
    ],
    "canceled": [
      "CAN",
      "EXP",
      "OUT",
      "RJR",
      "SCN",
      "TSC",
      "UCH"
    ],
    "rejected": [
      "REJ"
    ],
    "filled": [
      "FLL",
      "FLP"
    ],
    "names": {
      "ACK": "Received",
      "OPN": "Sent",
      "DON": "Queued",
      "FPR": "Partial Fill (Alive)",
      "FLP": "Partial Fill (UROut)",
      "FLL": "Filled",
      "RPD": "Replace Pending",
      "RSN": "Replace Sent",
      "UCH": "Replaced",
      "UCN": "Cancel Sent",
      "OUT": "UROut",
      "CAN": "Canceled",
      "EXP": "Expired",
      "REJ": "Rejected",
      "BRO": "Broken",
      "TSC": "Trade Server Canceled",
      "ASS": "Option Assignment",
      "EXE": "Option Exercise"
    },
    "mcp_filters_observed": [
      "OPN",
      "ACK",
      "QUE",
      "PAR",
      "FLL",
      "DON",
      "CXL",
      "REJ",
      "EXP"
    ]
  },
  "closing_only_statuses": [
    "Closing Transaction Only",
    "Margin Call - Closing Transactions Only",
    "Liquidating Transactions Only",
    "90 Day Restriction-Closing Transaction Only"
  ],
  "blocked_statuses": [
    "Closed",
    "Inactive",
    "Restricted"
  ],
  "ticks": {
    "stock": "0.01",
    "futures": [
      {
        "root": "ES",
        "increment": "0.25",
        "pattern": "^ES[FGHJKMNQUVXZ]\\d{2}$"
      }
    ],
    "note": "Stocks move in 0.01. ES futures move in 0.25, and one tick is $12.50. MinMove is not the tick. For any other product the tick is unknown: do not guess, and stop if summaryMessage shows a different price than the one sent."
  },
  "confirm_not_a_safety_net": [
    {
      "id": "stock-durations-by-session",
      "let_through": "Every stock duration during the regular session, including ones wrong for other sessions.",
      "must": "Apply the session rules. A regular-session confirm does not clear a duration for another session."
    },
    {
      "id": "off-tick-reprice",
      "let_through": "A 728.005 limit was re-priced to 728.01, a buy rounded up. 1.003 became 1.00. An ES price off the 0.25 tick was accepted.",
      "must": "Send a price on the tick. Stop if the price in summaryMessage differs from the price sent.",
      "examples": [
        {
          "asset": "stock",
          "sent": "728.005",
          "echoed": "728.01"
        },
        {
          "asset": "stock",
          "sent": "1.003",
          "echoed": "1.00"
        },
        {
          "asset": "futures",
          "root": "ES",
          "sent": "7345.10",
          "echoed": "7345.00"
        }
      ]
    },
    {
      "id": "oversized-close",
      "let_through": "SELL 2 shares against a 1-share long, and BUYTOCOVER 2 against a 1-share short.",
      "must": "Never close more than you hold."
    },
    {
      "id": "close-without-position",
      "let_through": "SELL with no long position, and BUYTOCOVER with no short.",
      "must": "Only close what exists."
    },
    {
      "id": "plus-duration-off-select",
      "let_through": "Plus durations on a non-select option, and on SPX.",
      "must": "Use plus durations only on the select equity-option list. Index options take no plus durations."
    },
    {
      "id": "gtd-over-90",
      "let_through": "GTD 108 days out.",
      "must": "Keep GTD and GDP to 90 days or less. Confirm will not stop a longer date."
    },
    {
      "id": "lowercase-symbol",
      "let_through": "Lowercase spy, while the lookup said Symbol not found.",
      "must": "Use uppercase symbols."
    }
  ]
}
