openapi: 3.0.3 info: title: Ally Invest Accounts Watchlists 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: InvestAPI@ally.com termsOfService: https://www.ally.com/content/dam/pdf/invest/api-agreement.pdf x-logo: url: https://kinlane-images.s3.amazonaws.com/shared/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 tags: - name: Watchlists description: Watchlist creation and symbol management paths: /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: schemas: CreateWatchlistRequest: type: object required: - id properties: id: type: string description: Name/ID for the new watchlist symbols: type: array items: type: object properties: symbol: type: string ErrorResponse: type: object properties: response: type: object properties: error: type: string description: Error message elapsedtime: type: string id: type: string Watchlist: type: object properties: id: type: string description: Watchlist name/ID symbols: type: object properties: symbol: type: array items: type: object properties: id: type: string symbol: type: string description: Ticker symbol WatchlistSymbolsRequest: type: object required: - symbols properties: symbols: type: array items: type: object properties: symbol: type: string WatchlistResponse: type: object properties: response: type: object properties: watchlist: $ref: '#/components/schemas/Watchlist' elapsedtime: type: string id: type: string error: type: string WatchlistsResponse: type: object properties: response: type: object properties: watchlists: type: object properties: watchlist: type: array items: $ref: '#/components/schemas/Watchlist' elapsedtime: type: string id: type: string error: type: string responses: Unauthorized: description: Authentication required or credentials invalid content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' NotFound: description: Requested resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' BadRequest: description: Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' RateLimited: description: Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' parameters: WatchlistId: name: id in: path required: true description: The watchlist ID (name) schema: type: string 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. externalDocs: description: Ally Invest API Documentation url: https://www.ally.com/api/invest/documentation/getting-started/