Ally Invest Accounts API

The Ally Invest Accounts API provides programmatic access to brokerage account data including account balances, holdings, transaction history, and order status for self-directed investment accounts. Supports retrieval of summary balances across all accounts as well as detailed account-level information for individual accounts identified by account ID.

OpenAPI Specification

ally-invest-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Ally Invest API
  description: >-
    The Ally Invest REST API (originally developed from the TradeKing acquisition) provides
    programmatic access to self-directed brokerage account management, order placement,
    real-time and delayed market data, watchlist management, and member profile information.
    Authentication uses OAuth 1.0 with consumer and token credentials. Responses are available
    in JSON and XML formats.
  version: v1
  contact:
    email: [email protected]
  termsOfService: https://www.ally.com/content/dam/pdf/invest/api-agreement.pdf
  x-logo:
    url: https://kinlane-productions.s3.amazonaws.com/apis-json/apis-json-logo.jpg
servers:
  - url: https://api.ally.com/v1
    description: Ally Invest REST API
  - url: https://stream.ally.com/v1
    description: Ally Invest Streaming API
externalDocs:
  description: Ally Invest API Documentation
  url: https://www.ally.com/api/invest/documentation/getting-started/
tags:
  - name: Accounts
    description: Account balances, holdings, history, and portfolio data
  - name: Orders
    description: Order placement, preview, retrieval, and cancellation
  - name: Market Data
    description: Quotes, options, news, time-and-sales, and top lists
  - name: Streaming
    description: Real-time streaming market data
  - name: Watchlists
    description: Watchlist creation and symbol management
  - name: Member
    description: Member profile and identity
  - name: Utilities
    description: API status and version utilities
paths:
  /accounts.json:
    get:
      operationId: getAccounts
      summary: Get all accounts
      description: Returns summary account information for all accounts associated with the authenticated member.
      tags:
        - Accounts
      responses:
        '200':
          description: Successful response with account list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /accounts/balances.json:
    get:
      operationId: getAccountsBalances
      summary: Get balances for all accounts
      description: Returns balance information for all accounts associated with the authenticated member.
      tags:
        - Accounts
      responses:
        '200':
          description: Successful response with balances for all accounts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountsBalancesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /accounts/{id}.json:
    get:
      operationId: getAccount
      summary: Get account details
      description: Returns detailed account information for a specific account identified by account ID.
      tags:
        - Accounts
      parameters:
        - $ref: '#/components/parameters/AccountId'
      responses:
        '200':
          description: Successful response with account details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /accounts/{id}/balances.json:
    get:
      operationId: getAccountBalances
      summary: Get balances for a specific account
      description: Returns balance information for a specific account identified by account ID.
      tags:
        - Accounts
      parameters:
        - $ref: '#/components/parameters/AccountId'
      responses:
        '200':
          description: Successful response with account balance
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountBalanceResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /accounts/{id}/history.json:
    get:
      operationId: getAccountHistory
      summary: Get account transaction history
      description: Returns transaction history for a specific account including trades, dividends, and other account activity.
      tags:
        - Accounts
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - name: range
          in: query
          description: Date range for history (e.g., all, today, current_week, current_month, last_month)
          schema:
            type: string
            enum: [all, today, current_week, current_month, last_month]
        - name: transactions
          in: query
          description: Transaction type filter (e.g., all, bookkeeping, trade)
          schema:
            type: string
            enum: [all, bookkeeping, trade]
      responses:
        '200':
          description: Successful response with account history
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountHistoryResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /accounts/{id}/holdings.json:
    get:
      operationId: getAccountHoldings
      summary: Get account holdings
      description: Returns current holdings (positions) for a specific account.
      tags:
        - Accounts
      parameters:
        - $ref: '#/components/parameters/AccountId'
      responses:
        '200':
          description: Successful response with account holdings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountHoldingsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /accounts/{id}/orders.json:
    get:
      operationId: getOrders
      summary: Get open orders for an account
      description: Returns a list of open orders for a specific account.
      tags:
        - Orders
      parameters:
        - $ref: '#/components/parameters/AccountId'
      responses:
        '200':
          description: Successful response with orders list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrdersResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []
    post:
      operationId: postOrder
      summary: Place an order
      description: >-
        Places an equity or options order for a specific account. Orders are submitted in
        a FIXML-variant XML format. Requires OAuth 1.0 authentication.
      tags:
        - Orders
      parameters:
        - $ref: '#/components/parameters/AccountId'
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              $ref: '#/components/schemas/FIXMLOrderRequest'
            example: >-
              <FIXML xmlns="http://www.fixprotocol.org/FIXML-5-0-SP2">
                <Order TmInForce="0" Typ="1" Side="1" Acct="12345678">
                  <Instrmt SecTyp="CS" Sym="GE"/>
                  <OrdQty Qty="1"/>
                </Order>
              </FIXML>
      responses:
        '200':
          description: Order successfully placed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /accounts/{id}/orders/preview.json:
    post:
      operationId: previewOrder
      summary: Preview an order before placement
      description: >-
        Previews an order for a specific account to validate parameters and see estimated
        costs before actual execution. Uses the same FIXML-variant XML format as order placement.
      tags:
        - Orders
      parameters:
        - $ref: '#/components/parameters/AccountId'
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              $ref: '#/components/schemas/FIXMLOrderRequest'
      responses:
        '200':
          description: Order preview successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderPreviewResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /accounts/{id}/orders/{orderId}.json:
    delete:
      operationId: cancelOrder
      summary: Cancel a pending order
      description: Cancels a specific pending order for an account.
      tags:
        - Orders
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - name: orderId
          in: path
          required: true
          description: The order ID to cancel
          schema:
            type: string
      responses:
        '200':
          description: Order cancelled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CancelOrderResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/clock.json:
    get:
      operationId: getMarketClock
      summary: Get market clock status
      description: Returns the current market status (open/closed), current time, and next market event times.
      tags:
        - Market Data
        - Utilities
      responses:
        '200':
          description: Successful response with market clock data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarketClockResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/ext/quotes.json:
    get:
      operationId: getQuotes
      summary: Get market quotes
      description: >-
        Returns real-time or delayed market quotes for one or more ticker symbols.
        Supports equities and options. Multiple symbols can be requested in a single call.
      tags:
        - Market Data
      parameters:
        - name: symbols
          in: query
          required: true
          description: Comma-separated list of ticker symbols (e.g., GE,MSFT,AAPL)
          schema:
            type: string
          example: GE,MSFT,AAPL
        - name: fids
          in: query
          description: Comma-separated list of field IDs to return (returns all fields if omitted)
          schema:
            type: string
      responses:
        '200':
          description: Successful response with quotes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuotesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/news/search.json:
    get:
      operationId: searchNews
      summary: Search market news
      description: Searches for market news articles by keyword or ticker symbol.
      tags:
        - Market Data
      parameters:
        - name: symbols
          in: query
          description: Comma-separated list of ticker symbols to search news for
          schema:
            type: string
        - name: keywords
          in: query
          description: Keywords to search in news articles
          schema:
            type: string
        - name: maxhits
          in: query
          description: Maximum number of results to return
          schema:
            type: integer
            default: 10
        - name: startdate
          in: query
          description: Start date for news search (YYYY-MM-DD)
          schema:
            type: string
            format: date
        - name: enddate
          in: query
          description: End date for news search (YYYY-MM-DD)
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Successful response with news articles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewsSearchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/news/{id}.json:
    get:
      operationId: getNewsArticle
      summary: Get a specific news article
      description: Returns the full content of a specific news article by article ID.
      tags:
        - Market Data
      parameters:
        - name: id
          in: path
          required: true
          description: The news article ID
          schema:
            type: string
      responses:
        '200':
          description: Successful response with news article
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewsArticleResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/toplists/{listtype}.json:
    get:
      operationId: getTopList
      summary: Get a market top list
      description: Returns a list of top securities by various criteria such as most active, largest gainers, largest losers.
      tags:
        - Market Data
      parameters:
        - name: listtype
          in: path
          required: true
          description: Type of top list to retrieve
          schema:
            type: string
            enum:
              - toplosers
              - toppctlosers
              - topvolume
              - topactive
              - topgainers
              - toppctgainers
        - name: exchange
          in: query
          description: Filter by exchange (e.g., N, Q, A)
          schema:
            type: string
        - name: rows
          in: query
          description: Number of results to return
          schema:
            type: integer
            default: 25
      responses:
        '200':
          description: Successful response with top list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TopListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/options/search.json:
    get:
      operationId: searchOptions
      summary: Search option chains
      description: Returns option chains for a given underlying symbol, optionally filtered by option type, expiration date, and strike price range.
      tags:
        - Market Data
      parameters:
        - name: symbol
          in: query
          required: true
          description: Underlying ticker symbol
          schema:
            type: string
          example: AAPL
        - name: query
          in: query
          description: Option chain filter query (e.g., put_call-eq:C for calls only)
          schema:
            type: string
        - name: fids
          in: query
          description: Comma-separated list of field IDs to return
          schema:
            type: string
      responses:
        '200':
          description: Successful response with option chain
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptionsSearchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/options/strikes.json:
    get:
      operationId: getOptionStrikes
      summary: Get available option strike prices
      description: Returns available strike prices for options on a given underlying symbol.
      tags:
        - Market Data
      parameters:
        - name: symbol
          in: query
          required: true
          description: Underlying ticker symbol
          schema:
            type: string
          example: AAPL
      responses:
        '200':
          description: Successful response with strike prices
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptionStrikesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/options/expirations.json:
    get:
      operationId: getOptionExpirations
      summary: Get available option expiration dates
      description: Returns available expiration dates for options on a given underlying symbol.
      tags:
        - Market Data
      parameters:
        - name: symbol
          in: query
          required: true
          description: Underlying ticker symbol
          schema:
            type: string
          example: AAPL
      responses:
        '200':
          description: Successful response with expiration dates
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptionExpirationsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /market/timesales.json:
    get:
      operationId: getTimeSales
      summary: Get time and sales data
      description: Returns time-and-sales (trade tick) data for a specific symbol.
      tags:
        - Market Data
      parameters:
        - name: symbols
          in: query
          required: true
          description: Ticker symbol
          schema:
            type: string
        - name: interval
          in: query
          description: Interval between ticks (e.g., 1min, 5min, 10min, 15min, 30min, 1hour, daily)
          schema:
            type: string
            enum: [1min, 5min, 10min, 15min, 30min, 1hour, daily]
        - name: rpp
          in: query
          description: Results per page
          schema:
            type: integer
        - name: index
          in: query
          description: Page index
          schema:
            type: integer
      responses:
        '200':
          description: Successful response with time-and-sales data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimeSalesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /member/profile.json:
    get:
      operationId: getMemberProfile
      summary: Get member profile
      description: Returns the authenticated member's profile information including account identifiers and user details.
      tags:
        - Member
      responses:
        '200':
          description: Successful response with member profile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberProfileResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /utility/status.json:
    get:
      operationId: getApiStatus
      summary: Get API status
      description: Returns the current operational status of the Ally Invest API.
      tags:
        - Utilities
      responses:
        '200':
          description: Successful response with API status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'

  /utility/version.json:
    get:
      operationId: getApiVersion
      summary: Get API version
      description: Returns the current version of the Ally Invest API.
      tags:
        - Utilities
      responses:
        '200':
          description: Successful response with API version
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionResponse'

  /watchlists.json:
    get:
      operationId: getWatchlists
      summary: Get all watchlists
      description: Returns all watchlists associated with the authenticated member account.
      tags:
        - Watchlists
      responses:
        '200':
          description: Successful response with watchlists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WatchlistsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []
    post:
      operationId: createWatchlist
      summary: Create a watchlist
      description: Creates a new watchlist with optional initial symbols for the authenticated member.
      tags:
        - Watchlists
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWatchlistRequest'
            example:
              id: my-watchlist
              symbols:
                - symbol: AAPL
                - symbol: MSFT
                - symbol: GOOGL
      responses:
        '200':
          description: Watchlist created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WatchlistResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /watchlists/{id}.json:
    get:
      operationId: getWatchlist
      summary: Get a specific watchlist
      description: Returns details and symbols for a specific watchlist.
      tags:
        - Watchlists
      parameters:
        - $ref: '#/components/parameters/WatchlistId'
      responses:
        '200':
          description: Successful response with watchlist details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WatchlistResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []
    delete:
      operationId: deleteWatchlist
      summary: Delete a watchlist
      description: Deletes a specific watchlist by ID.
      tags:
        - Watchlists
      parameters:
        - $ref: '#/components/parameters/WatchlistId'
      responses:
        '200':
          description: Watchlist deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

  /watchlists/{id}/symbols.json:
    post:
      operationId: addWatchlistSymbols
      summary: Add symbols to a watchlist
      description: Adds one or more ticker symbols to an existing watchlist.
      tags:
        - Watchlists
      parameters:
        - $ref: '#/components/parameters/WatchlistId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WatchlistSymbolsRequest'
            example:
              symbols:
                - symbol: TSLA
                - symbol: AMZN
      responses:
        '200':
          description: Symbols added successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WatchlistResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []
    delete:
      operationId: deleteWatchlistSymbols
      summary: Remove symbols from a watchlist
      description: Removes one or more ticker symbols from an existing watchlist.
      tags:
        - Watchlists
      parameters:
        - $ref: '#/components/parameters/WatchlistId'
        - name: symbols
          in: query
          required: true
          description: Comma-separated list of symbols to remove
          schema:
            type: string
      responses:
        '200':
          description: Symbols removed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WatchlistResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - OAuth1: []

components:
  securitySchemes:
    OAuth1:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        OAuth 1.0 authentication using consumer key/secret and OAuth token/secret pairs.
        The Authorization header must include oauth_consumer_key, oauth_token,
        oauth_signature_method (HMAC-SHA1), oauth_timestamp, oauth_nonce, oauth_version,
        and oauth_signature.

  parameters:
    AccountId:
      name: id
      in: path
      required: true
      description: The account ID (account number)
      schema:
        type: string
    WatchlistId:
      name: id
      in: path
      required: true
      description: The watchlist ID (name)
      schema:
        type: string

  responses:
    Unauthorized:
      description: Authentication required or credentials invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Invalid request parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Requested resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    RateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'

  schemas:
    ErrorResponse:
      type: object
      properties:
        response:
          type: object
          properties:
            error:
              type: string
              description: Error message
            elapsedtime:
              type: string
            id:
              type: string

    AccountSummary:
      type: object
      properties:
        account:
          type: string
          description: Account number
        accountbalance:
          $ref: '#/components/schemas/AccountBalance'
        accountholdings:
          $ref: '#/components/schemas/AccountHoldings'

    AccountBalance:
      type: object
      properties:
        account:
          type: string
          description: Account number
        accountvalue:
          type: string
          description: Total account value
        buyingpower:
          type: object
          properties:
            cashavailableforwithdrawal:
              type: string
            daytrading:
              type: string
            equitypercentage:
              type: string
            options:
              type: string
            soddaytrading:
              type: string
            stock:
              type: string
        fedcall:
          type: string
        housecall:
          type: string
        money:
          type: object
          properties:
            accruedinterest:
              type: string
            cash:
              type: string
            cashavailable:
              type: string
            marginbalance:
              type: string
            mmf:
              type: string
            total:
              type: string
            uncleareddeposits:
              type: string
            unsettledfunds:
              type: string
            yield:
              type: string
        securities:
          type: object
          properties:
            longoptions:
              type: string
            longstocks:
              type: string
            options:
              type: string
            shortoptions:
              type: string
            shortstocks:
              type: string
            stocks:
              type: string
            total:
              type: string

    AccountHoldings:
      type: object
      properties:
        holding:
          type: array
          items:
            $ref: '#/components/schemas/Holding'
        totalholdings:
          type: object
          properties:
            accountvalue:
              type: string
            longoptions:
              type: string
            longstocks:
              type: string
            options:
              type: string
            shortoptions:
              type: string
            shortstocks:
              type: string
            stocks:
              type: string
            total:
              type: string

    Holding:
      type: object
      properties:
        accounttype:
          type: string
        costbasis:
          type: string
        gainloss:
          type: string
        gainlosspct:
          type: string
        instrument:
          type: object
          properties:
            cusip:
              type: string
            desc:
              type: string
            factor:
              type: string
            matdt:
              type: string
            maturityvalue:
              type: string
            mult:
              type: string
            putcall:
              type: string
            sectyp:
              type: string
            sesn:
              type: string
            strkpx:
              type: string
            sym:
              type: string
        marketvalue:
          type: string
        marketvaluechange:
          type: string
        price:
          type: string
        purchaseprice:
          type: string
        qty:
          type: string
        quote:
          $ref: '#/components/schemas/Quote'
        underlying:
          type: string

    Quote:
      type: object
      description: Market quote data for a security
      properties:
        adp_100:
          type: string
          description: Average daily price, 100-day
        adp_200:
          type: string
          description: Average daily price, 200-day
        adp_50:
          type: string
          description: Average daily price, 50-day
        adv_21:
          type: string
          description: Average daily volume, 21-day
        adv_30:
          type: string
          description: Average daily 

# --- truncated at 32 KB (57 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ally-invest/refs/heads/main/openapi/ally-invest-openapi.yml