{"openapi":"3.1.0","info":{"title":"Tradier (BYOK) API","version":"0.1.0","description":"Tradier (BYOK) lets an AI assistant read your own Tradier data through the Tradier API with a key you supply (Tradier production access token). Read-only: 12 tools (get_user_profile, get_account_balances, get_account_positions, list_account_orders, get_account_gainloss, get_quotes, get_price_history, get_option_expirations, get_option_chain, lookup_symbol, get_market_clock, get_market_calendar)....\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-tradier.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-tradier/docs"},"termsOfService":"https://connectorbay.com/byok-tradier/terms"},"servers":[{"url":"https://byok-tradier.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-tradier/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_user_profile":{"post":{"operationId":"get_user_profile","summary":"Show the Tradier user the token belongs to: name and the brokerage accounts with their number, type, status and option l","description":"Show the Tradier user the token belongs to: name and the brokerage accounts with their number, type, status and option level. Use for \"Which Tradier brokerage accounts do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_user_profileArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_account_balances":{"post":{"operationId":"get_account_balances","summary":"Get an account's balances: total equity, cash, market value, buying power and open/closed profit and loss. When only one","description":"Get an account's balances: total equity, cash, market value, buying power and open/closed profit and loss. When only one record exists the provider returns an object instead of a list. Use for \"What is my Tradier account worth and how much cash do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Tradier brokerage account number, for example 'VA000001' (list yours with get_user_profile).","maxLength":30,"title":"Account Id","type":"string"}},"required":["account_id"],"title":"get_account_balancesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_account_positions":{"post":{"operationId":"get_account_positions","summary":"List an account's open positions with symbol, quantity, cost basis and date acquired. When only one record exists the pr","description":"List an account's open positions with symbol, quantity, cost basis and date acquired. When only one record exists the provider returns an object instead of a list. An account without positions returns 'null'. Use for \"What positions do I hold at Tradier\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Tradier brokerage account number, for example 'VA000001' (list yours with get_user_profile).","maxLength":30,"title":"Account Id","type":"string"}},"required":["account_id"],"title":"get_account_positionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_account_orders":{"post":{"operationId":"list_account_orders","summary":"List an account's orders with symbol, side, type, quantity, status, fill price and dates. This only reads orders; it nev","description":"List an account's orders with symbol, side, type, quantity, status, fill price and dates. This only reads orders; it never places or cancels any. When only one record exists the provider returns an object instead of a list. Use for \"What orders have I placed at Tradier recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Tradier brokerage account number, for example 'VA000001' (list yours with get_user_profile).","maxLength":30,"title":"Account Id","type":"string"},"status":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated statuses to include: pending, open, partially_filled, filled, rejected, expired, canceled.","title":"Status"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Maximum orders to return (provider default 25).","title":"Limit"},"page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account_id"],"title":"list_account_ordersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_account_gainloss":{"post":{"operationId":"get_account_gainloss","summary":"List an account's closed positions with open and close dates, cost, proceeds and gain or loss, paged. Use for \"What were","description":"List an account's closed positions with open and close dates, cost, proceeds and gain or loss, paged. Use for \"What were my realized gains and losses at Tradier\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Tradier brokerage account number, for example 'VA000001' (list yours with get_user_profile).","maxLength":30,"title":"Account Id","type":"string"},"sort_by":{"anyOf":[{"enum":["closeDate","openDate"],"type":"string"},{"type":"null"}],"default":"closeDate","description":"Sort by closeDate or openDate.","title":"Sort By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Direction: asc or desc.","title":"Sort"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum closed positions per page (provider default 100).","title":"Limit"},"page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account_id"],"title":"get_account_gainlossArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_quotes":{"post":{"operationId":"get_quotes","summary":"Get current quotes (last, bid, ask, volume, change) for one or more stock, ETF or option symbols. When only one record e","description":"Get current quotes (last, bid, ask, volume, change) for one or more stock, ETF or option symbols. When only one record exists the provider returns an object instead of a list. Use for \"What is the current price of AAPL and SPY\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"symbols":{"description":"Comma-separated symbols, for example 'AAPL,SPY'. Option symbols use OCC format such as AAPL210416C00125000.","maxLength":500,"title":"Symbols","type":"string"},"greeks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include option greeks.","title":"Greeks"}},"required":["symbols"],"title":"get_quotesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_price_history":{"post":{"operationId":"get_price_history","summary":"Get daily, weekly or monthly open, high, low, close and volume for a symbol between two dates. When only one record exis","description":"Get daily, weekly or monthly open, high, low, close and volume for a symbol between two dates. When only one record exists the provider returns an object instead of a list. Use for \"Show Apple's daily closing prices for January\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"symbol":{"description":"Ticker symbol, for example AAPL.","maxLength":30,"title":"Symbol","type":"string"},"interval":{"anyOf":[{"enum":["daily","weekly","monthly"],"type":"string"},{"type":"null"}],"default":"daily","description":"Bar size: daily, weekly or monthly.","title":"Interval"},"start":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First date, YYYY-MM-DD.","title":"Start"},"end":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last date, YYYY-MM-DD.","title":"End"}},"required":["symbol"],"title":"get_price_historyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_option_expirations":{"post":{"operationId":"get_option_expirations","summary":"List the option expiration dates available for an underlying symbol. Use for \"When do AAPL options expire\".","description":"List the option expiration dates available for an underlying symbol. Use for \"When do AAPL options expire\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"symbol":{"description":"Underlying ticker symbol, for example AAPL.","maxLength":30,"title":"Symbol","type":"string"},"strikes":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include the strike prices for each expiration.","title":"Strikes"}},"required":["symbol"],"title":"get_option_expirationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_option_chain":{"post":{"operationId":"get_option_chain","summary":"Get the option chain of an underlying symbol for one expiration date: each contract's bid, ask, last, volume, open inter","description":"Get the option chain of an underlying symbol for one expiration date: each contract's bid, ask, last, volume, open interest and strike. When only one record exists the provider returns an object instead of a list. Use for \"Show the AAPL options chain expiring 2026-11-20\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"symbol":{"description":"Underlying ticker symbol, for example AAPL.","maxLength":30,"title":"Symbol","type":"string"},"expiration":{"description":"Expiration date, YYYY-MM-DD (from get_option_expirations).","maxLength":10,"title":"Expiration","type":"string"},"greeks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include option greeks.","title":"Greeks"}},"required":["symbol","expiration"],"title":"get_option_chainArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/lookup_symbol":{"post":{"operationId":"lookup_symbol","summary":"Look up securities by symbol or company name, returning symbol, exchange, type and description. When only one record exi","description":"Look up securities by symbol or company name, returning symbol, exchange, type and description. When only one record exists the provider returns an object instead of a list. Use for \"What is the ticker symbol for Apple\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"Symbol or company name to look up.","maxLength":100,"title":"Q","type":"string"},"types":{"anyOf":[{"enum":["stock","etf","index"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this security type: stock, etf or index.","title":"Types"}},"required":["q"],"title":"lookup_symbolArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_market_clock":{"post":{"operationId":"get_market_clock","summary":"Show whether the US stock market is open and when its state changes next. Use for \"Is the stock market open right now\".","description":"Show whether the US stock market is open and when its state changes next. Use for \"Is the stock market open right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_market_clockArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_market_calendar":{"post":{"operationId":"get_market_calendar","summary":"Get the US market calendar for a month: open and closed days with session times. Use for \"Which days is the market close","description":"Get the US market calendar for a month: open and closed days with session times. Use for \"Which days is the market closed in November 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"month":{"anyOf":[{"maximum":12,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Calendar month, 1 to 12 (default current month).","title":"Month"},"year":{"anyOf":[{"maximum":2100,"minimum":1970,"type":"integer"},{"type":"null"}],"default":null,"description":"Four-digit year (default current year).","title":"Year"}},"title":"get_market_calendarArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}