SnapTrade Reference Data API

Retrieve basic information for API use, such as supported brokerages, exchanges, currencies, etc.

Operations 5

GET /snapTrade/partners Get Client Info #
POST /accounts/{accountId}/symbols Search account symbols #
GET /brokerages/{slug}/instruments Get brokerage instruments #
POST /symbols Search symbols #
GET /symbols/{query} Get symbol detail #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/snaptrade:snaptrade-reference-data-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

snaptrade-reference-data-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Connect brokerage accounts to your app for live positions and trading.


    ## Rate limiting


    Two limits apply to requests signed with your `clientId`. The stricter one

    wins, and exceeding either returns `429 Too Many Requests`.


    - **Customer-level** — 250 requests/minute by default, scoped to your

    `clientId` and applied across all endpoints. Reported in

    `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`.

    - **Account-level** — 10 requests/minute per account, scoped to

    (`clientId`, `accountId`). All covered operations for one account draw on

    the same bucket — reading balances and reading positions share it — and

    enforcement does not depend on the HTTP method, so updating an account

    consumes the same bucket as reading it. Only enforced for Personal users,

    and only for integrations it has been rolled out to — it is not yet in

    force for every Personal integration. It also does not apply on every

    operation that documents a 429 below. Where it applies it is reported in

    `X-RateLimit-Account-Limit`, `X-RateLimit-Account-Remaining` and

    `X-RateLimit-Account-Reset`. Do not read the absence of those headers as

    proof the limit is off — some configurations omit the rate limit headers

    while still enforcing the limit, so header absence tells you nothing

    about your allowance.


    On a 429, `X-RateLimit-Remaining: 0` means you hit the customer-level limit

    and `X-RateLimit-Account-Remaining: 0` means the account-level one. Wait for

    the corresponding `*-Reset` value (seconds) before retrying, or fall back to

    exponential backoff with jitter.


    Not every 429 is explained by those headers. A separate

    per-authenticated-user limit, reported in no `X-RateLimit-*` header, covers

    OAuth-authenticated requests and signed requests in configurations where the

    customer-level limit is not in effect — on the operations that use the

    default throttles. A few operations override those and are governed by the

    customer-level limit alone. The two do not stack: a signed request

    governed by the customer-level limit above is not additionally subject to the

    per-user one. If a 429 arrives with no header at zero — or with no

    `X-RateLimit-*` headers at all — honour `Retry-After` and back off. Treat the

    remaining counts as a hint, not a guarantee that the next request will

    succeed.


    Because the customer-level limit applies everywhere, any signed request can

    return 429.


    **OAuth-authenticated requests are an exception.** They are not subject to

    the customer-level limit and do not receive `X-RateLimit-Limit`,

    `X-RateLimit-Remaining` or `X-RateLimit-Reset` — do not wait on those headers

    or design around a customer-level allowance on this path. The account-level

    limit still applies to them on the account-data endpoints above, reported in

    the `X-RateLimit-Account-*` headers. On operations using the default

    throttles the per-user limit above applies to them as well, so an OAuth

    request can be rejected while the account headers still show capacity; on

    the few operations that override those throttles, OAuth callers have no

    per-user ceiling at all. Drive retries from `Retry-After` and exponential

    backoff with jitter rather than from the headers.


    See https://docs.snaptrade.com/docs/ratelimiting.'
  version: 1.0.0
  title: SnapTrade Reference Data API
  termsOfService: N/A
  contact:
    email: api@snaptrade.com
  x-konfig-ignore:
    potential-incorrect-type: true
  x-readme:
    explorer-enabled: false
servers:
- description: SnapTrade Production API
  url: https://api.snaptrade.com
security:
- PartnerSignature: []
  PartnerClientId: []
  PartnerTimestamp: []
tags:
- name: Reference Data
  description: Retrieve basic information for API use, such as supported brokerages, exchanges, currencies, etc.
paths:
  /snapTrade/partners:
    get:
      tags:
      - Reference Data
      summary: Get Client Info
      description: Returns configurations for your SnapTrade Client ID, including allowed brokerages and data access.
      operationId: ReferenceData_getPartnerInfo
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerData'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/400FailedRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/401FailedRequestResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/404FailedRequestResponse'
        '500':
          description: Unexpected Error
  /accounts/{accountId}/symbols:
    post:
      tags:
      - Reference Data
      summary: Search account symbols
      description: 'Returns a list of Universal Symbol objects that match the given query. The matching takes into consideration both the ticker and the name of the symbol. Only the first 20 results are returned.


        The search results are further limited to the symbols supported by the brokerage for which the account is under.'
      operationId: ReferenceData_symbolSearchUserAccount
      parameters:
      - in: query
        required: true
        name: userId
        schema:
          $ref: '#/components/schemas/UserID'
      - in: query
        required: true
        name: userSecret
        schema:
          $ref: '#/components/schemas/UserSecret'
      - in: path
        name: accountId
        required: true
        schema:
          $ref: '#/components/schemas/AccountID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SymbolQuery'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                description: A list of Universal Symbol objects that match the given query.
                items:
                  $ref: '#/components/schemas/UniversalSymbol'
        default:
          description: Unexpected Error
  /brokerages/{slug}/instruments:
    get:
      tags:
      - Reference Data
      summary: Get brokerage instruments
      description: Returns a list of all brokerage instruments available for a given brokerage. Not all brokerages support this. The ones that don't will return an empty list.
      operationId: ReferenceData_listAllBrokerageInstruments
      parameters:
      - in: path
        name: slug
        required: true
        description: A short, unique identifier for the brokerage. It is usually the name of the brokerage in capital letters and will never change.
        schema:
          type: string
          example: QUESTRADE
      responses:
        '200':
          description: A list of brokerage instruments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrokerageInstrumentsResponse'
        default:
          description: Unexpected error.
  /symbols:
    post:
      tags:
      - Reference Data
      summary: Search symbols
      description: Returns a list of Universal Symbol objects that match the given query. The matching takes into consideration both the ticker and the name of the symbol. Only the first 20 results are returned.
      operationId: ReferenceData_getSymbols
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                description: A list of Universal Symbol objects that match the given query.
                items:
                  $ref: '#/components/schemas/UniversalSymbol'
        default:
          description: Unexpected Error
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SymbolQuery'
  /symbols/{query}:
    get:
      tags:
      - Reference Data
      summary: Get symbol detail
      description: 'Returns the Universal Symbol object specified by the ticker or the Universal Symbol ID. When a ticker is specified, the first matching result is returned. We largely follow the Yahoo Finance ticker format(click on "Yahoo Finance Market Coverage and Data Delays"). For example, for securities traded on the Toronto Stock Exchange, the symbol has a ''.TO'' suffix. For securities traded on NASDAQ or NYSE, the symbol does not have a suffix. Share classes and preferred series use SnapTrade''s canonical dotted form: use `HBND.U.TO` (not Yahoo''s `HBND-U.TO`), `FTN.PR.A.TO` (not `FTN-PA.TO`), and `ECF.PRA` (not `ECF-P-A`). Please use the ticker with the proper suffix and canonical share-class notation for the best results.'
      operationId: ReferenceData_getSymbolsByTicker
      parameters:
      - in: path
        name: query
        required: true
        description: The ticker or Universal Symbol ID to look up the symbol with.
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UniversalSymbol'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/404FailedRequestResponse'
        default:
          description: Unexpected Error
components:
  schemas:
    AccountID:
      description: Unique identifier for the connected brokerage account. This is the UUID used to reference the account in SnapTrade.
      type: string
      format: uuid
      example: 917c8734-8470-4a3e-a18f-57c3f2ee6631
    BrokerageInstrument:
      type: object
      required:
      - symbol
      properties:
        symbol:
          description: The instrument's trading symbol / ticker.
          type: string
          example: AAPL
        exchange_mic:
          description: The MIC code of the exchange where the instrument is traded.
          type:
          - string
          - 'null'
          example: XNAS
        tradeable:
          description: Whether the instrument is tradeable through the brokerage. `null` if the tradeability is unknown.
          type:
          - boolean
          - 'null'
          example: true
        fractionable:
          description: Whether the instrument allows fractional units. `null` if the fractionability is unknown.
          type:
          - boolean
          - 'null'
          example: true
        universal_symbol_id:
          description: The universal symbol ID of the instrument. This is the ID used to reference the instrument in SnapTrade API calls.
          type:
          - string
          - 'null'
          format: uuid
          example: 2bcd7cc3-e922-4976-bce1-9858296801c3
    Exchange:
      description: Describes a single stock or crypto exchange.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ExchangeID'
        code:
          description: A short name for the exchange. For standardized exchange code, please use the `mic_code` field.
          type: string
          example: TSX
        mic_code:
          description: The [Market Identifier Code](https://en.wikipedia.org/wiki/Market_Identifier_Code) (MIC) for the exchange.
          type:
          - string
          - 'null'
          example: XTSE
        name:
          description: The full name of the exchange.
          type: string
          example: Toronto Stock Exchange
        timezone:
          description: The timezone for the trading hours (`start_time` and `close_time`) of the exchange.
          type: string
          example: America/New_York
        start_time:
          description: The time when the exchange opens for trading.
          type: string
          example: 09:30:00
        close_time:
          description: The time when the exchange closes for trading.
          type: string
          example: '16:00:00'
        suffix:
          description: The suffix to be appended to the symbol when trading on this exchange. For example, the suffix for the Toronto Stock Exchange is `.TO`. See `UniversalSymbol->symbol` and `UniversalSymbol->raw_symbol` for more detail.
          type:
          - string
          - 'null'
          example: .TO
    UniversalSymbol:
      description: Uniquely describes a single security + exchange combination across all brokerages.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/UniversalSymbolID'
        symbol:
          description: The security's trading ticker symbol. For example "AAPL" for Apple Inc. We largely follow the [Yahoo Finance ticker format](https://help.yahoo.com/kb/SLN2310.html)(click on "Yahoo Finance Market Coverage and Data Delays"). For example, for securities traded on the Toronto Stock Exchange, the symbol has a '.TO' suffix. For securities traded on NASDAQ or NYSE, the symbol does not have a suffix. Share classes and preferred series use SnapTrade's canonical dotted form, for example `HBND.U.TO`, `FTN.PR.A.TO`, and `ECF.PRA`.
          type: string
          example: VAB.TO
        raw_symbol:
          description: The raw symbol is `symbol` with the exchange suffix removed. For example, if `symbol` is "VAB.TO", then `raw_symbol` is "VAB".
          type: string
          example: VAB
        description:
          description: A human-readable description of the security. This is usually the company name or ETF name.
          type:
          - string
          - 'null'
          example: VANGUARD CDN AGGREGATE BOND INDEX ETF
        currency:
          description: The currency in which the security is traded.
          allOf:
          - $ref: '#/components/schemas/Currency'
        exchange:
          description: The exchange on which the security is listed and traded.
          allOf:
          - $ref: '#/components/schemas/Exchange'
        type:
          $ref: '#/components/schemas/SecurityType'
        figi_code:
          description: This identifier is unique per security per trading venue. See section 1.4.1 of the [FIGI Standard](https://www.openfigi.com/assets/local/figi-allocation-rules.pdf) for more information. This value should be the same as the `figi_code` in the `figi_instrument` child property.
          type:
          - string
          - 'null'
          example: BBG000B9XRY4
        figi_instrument:
          allOf:
          - $ref: '#/components/schemas/FigiInstrument'
        currencies:
          deprecated: true
          description: This field is deprecated and should not be used. Please reach out to SnapTrade support if you have a valid use case for this.
          type: array
          items:
            $ref: '#/components/schemas/Currency'
      required:
      - id
      - symbol
      - raw_symbol
      - currency
      - type
      - currencies
    UniversalSymbolID:
      description: Unique identifier for the symbol within SnapTrade. This is the ID used to reference the symbol in SnapTrade API calls.
      type: string
      format: uuid
      example: 2bcd7cc3-e922-4976-bce1-9858296801c3
    Currency:
      description: Describes a currency object.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/CurrencyID'
        code:
          type: string
          description: The ISO-4217 currency code for the currency.
          example: USD
        name:
          type: string
          description: A human-friendly name of the currency.
          example: US Dollar
    400FailedRequestResponse:
      description: Example for failed request response
      type: object
      properties:
        default_detail:
          example: Unable to verify data sent
        default_code:
          example: 1076
    UserSecret:
      description: SnapTrade User Secret. This is a randomly generated string and should be stored securely. If compromised, please rotate it via the [rotate user secret endpoint](/reference/Authentication/Authentication_resetSnapTradeUserSecret).
      type: string
      example: adf2aa34-8219-40f7-a6b3-60156985cc61
    Id:
      type: string
      format: uuid
      example: 2bcd7cc3-e922-4976-bce1-9858296801c3
    404FailedRequestResponse:
      description: Example for failed request response
      type: object
      properties:
        default_detail:
          example: The requested resource does not exist.
        default_code:
          example: 1011
    BrokerageType:
      description: Type of brokerage. Currently supports traditional brokerages and crypto exchanges.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        name:
          type: string
          example: Traditional Brokerage
    UserID:
      description: SnapTrade User ID. This is chosen by the API partner and can be any string that is a) unique to the user, and b) immutable for the user. It is recommended to NOT use email addresses for this property because they are usually not immutable.
      type: string
      example: snaptrade-user-123
    PartnerData:
      description: Configurations for your SnapTrade Client ID, including allowed brokerages and data access.
      type: object
      properties:
        slug:
          type: string
          description: A short, unique identifier for your company or product.
          example: WEALTHLY
        name:
          type: string
          description: Your company or product name.
          example: Wealthly
        logo_url:
          type:
          - string
          - 'null'
          description: URL to your company or product logo. Returns null if no logo has been configured (always the case for personal access clients).
          example: https://example.com/logo.png
        allowed_brokerages:
          type: array
          description: Brokerages that can be accessed by your Client ID.
          items:
            $ref: '#/components/schemas/Brokerage'
        can_access_trades:
          type: boolean
          description: Whether trading is enabled for your SnapTrade Client ID.
          example: true
        can_access_holdings:
          type: boolean
          description: Whether holdings data is enabled for your SnapTrade Client ID.
          example: true
        can_access_account_history:
          type: boolean
          description: Whether account historical transactions is enabled for your SnapTrade Client ID.
          example: true
        can_access_reference_data:
          type: boolean
          description: Whether reference data is enabled for your SnapTrade Client ID.
          example: true
        can_access_portfolio_management:
          type: boolean
          description: Whether portfolio management is enabled for your SnapTrade Client ID.
          example: true
        can_access_orders:
          type: boolean
          description: Whether recent order history is enabled for your SnapTrade Client ID.
          example: true
        redirect_uri:
          type:
          - string
          - 'null'
          description: URI to redirect user back to after user is done adding brokerage connections. Returns null if no redirect URI has been configured (always the case for personal access clients).
          example: https://example.com/oauth/snaptrade
        pin_required:
          deprecated: true
          type: boolean
          description: Shows if pin is required by users to access connection page. This field has been deprecated.
          example: false
    BrokerageInstrumentsResponse:
      type: object
      properties:
        instruments:
          type: array
          items:
            $ref: '#/components/schemas/BrokerageInstrument'
    Brokerage:
      description: Describes a brokerage that SnapTrade supports.
      type: object
      properties:
        id:
          description: Unique identifier for the brokerage firm. This is the UUID used to reference the brokerage in SnapTrade.
          type: string
          format: uuid
          example: ebf91a5b-0920-4266-9e36-f6cfe8c40946
        slug:
          description: A short, unique identifier for the brokerage. It is usually the name of the brokerage in capital letters and will never change.
          type: string
          example: ROBINHOOD
        name:
          description: Full name of the brokerage.
          type: string
          example: Robinhood
        display_name:
          description: A display-friendly name of the brokerage.
          type: string
          example: Robinhood
        description:
          description: A brief description of the brokerage.
          type: string
          example: Robinhood is an American multinational financial services corporation based in Menlo Park, California.
        aws_s3_logo_url:
          description: URL to the brokerage's logo.
          type: string
          format: url
          example: https://passiv-brokerage-logos.s3.ca-central-1.amazonaws.com/robinhood-logo.png
        aws_s3_square_logo_url:
          description: URL to the brokerage's logo in square format.
          type:
          - string
          - 'null'
          format: url
          example: https://passiv-brokerage-logos.s3.ca-central-1.amazonaws.com/robinhood-logo-square.png
        url:
          description: URL to the brokerage's website. Returns null if the brokerage has no website on record.
          type:
          - string
          - 'null'
          format: url
          example: https://robinhood.com
        enabled:
          description: Whether the brokerage is enabled in SnapTrade. A disabled brokerage will not be available for new connections.
          type: boolean
          example: true
        maintenance_mode:
          description: Whether the brokerage is currently in maintenance mode. A brokerage in maintenance mode will not be available for new connections.
          type: boolean
          example: true
        is_degraded:
          description: Whether the brokerage is currently degraded. A degraded brokerage may have reduced functionality or be experiencing technical issues.
          type: boolean
          example: true
        allows_trading:
          description: Whether the brokerage allows trading through SnapTrade.
          type:
          - boolean
          - 'null'
          example: true
        allows_fractional_units:
          deprecated: true
          description: This field is deprecated. Please contact us if you have a valid use case for it.
          type:
          - boolean
          - 'null'
          example: true
        has_reporting:
          deprecated: true
          description: This field is deprecated. Please contact us if you have a valid use case for it.
          type:
          - boolean
          - 'null'
          example: true
        is_real_time_connection:
          deprecated: true
          description: This field is deprecated. Please contact us if you have a valid use case for it.
          type: boolean
          example: true
        brokerage_type:
          $ref: '#/components/schemas/BrokerageType'
        exchanges:
          deprecated: true
          description: This field is deprecated. Please contact us if you have a valid use case for it.
          type: array
          items: {}
          example:
          - 2bcd7cc3-e922-4976-bce1-9858296801c3
          - 4bcd8cc3-c122-4974-dc21-1858296801f4
        open_url:
          deprecated: true
          description: This field is deprecated.
          type:
          - string
          - 'null'
          format: url
    FigiInstrument:
      description: Financial Instrument Global Identifier (FIGI) information for the security. See [OpenFIGI](https://www.openfigi.com/) for more information.
      type: object
      properties:
        figi_code:
          description: This identifier is unique per security per trading venue. See section 1.4.1 of the [FIGI Standard](https://www.openfigi.com/assets/local/figi-allocation-rules.pdf) for more information.
          type:
          - string
          - 'null'
          example: BBG000B9Y5X2
        figi_share_class:
          description: This enables users to link multiple FIGIs for the same security in order to obtain an aggregated view across all countries and all exchanges. For example, `AAPL` has a different FIGI for each exchange/trading venue it is traded on. The `figi_share_class` is the same for all of these FIGIs. See section 1.4.3 of the [FIGI Standard](https://www.openfigi.com/assets/local/figi-allocation-rules.pdf) for more information.
          type:
          - string
          - 'null'
          example: BBG001S5N8V8
    SecurityType:
      type: object
      description: The type of security. For example, "Common Stock" or "ETF".
      properties:
        id:
          $ref: '#/components/schemas/SecurityTypeID'
        code:
          description: "A short code representing the security type. For example, \"cs\" for Common Stock. Here are some common values:\n  - `ad` - ADR\n  - `bnd` - Bond\n  - `cs` - Common Stock\n  - `cef` - Closed End Fund\n  - `crypto` - Cryptocurrency\n  - `et` - ETF\n  - `oef` - Open Ended Fund\n  - `pm` - Precious Metals\n  - `ps` - Preferred Stock\n  - `rt` - Right\n  - `struct` - Structured Product\n  - `ut` - Unit\n  - `wi` - When Issued\n  - `wt` - Warrant\n"
          type: string
          example: cs
        description:
          description: A human-readable description of the security type. For example, "Common Stock" or "ETF".
          type: string
          example: Common Stock
        is_supported:
          deprecated: true
          description: This field is deprecated and should not be used. Please reach out to SnapTrade support if you have a valid use case for this.
          type: boolean
          example: true
    SymbolQuery:
      type: object
      properties:
        substring:
          description: The search query for symbols.
          type: string
          example: AAPL
    CurrencyID:
      type: string
      format: uuid
      description: Unique identifier for the currency. This is the UUID used to reference the currency in SnapTrade.
      example: 87b24961-b51e-4db8-9226-f198f6518a89
    401FailedRequestResponse:
      description: Example for failed request response
      type: object
      properties:
        default_detail:
          example: Unable to verify signature sent
        default_code:
          example: 1076
    ExchangeID:
      description: Unique ID for the exchange in SnapTrade.
      type: string
      format: uuid
      example: 2bcd7cc3-e922-4976-bce1-9858296801c3
    SecurityTypeID:
      description: Unique identifier for the security type within SnapTrade. This is the ID used to reference the security type in SnapTrade API calls.
      type: string
      format: uuid
      example: 2bcd7cc3-e922-4976-bce1-9858296801c3
  securitySchemes:
    PartnerSignature:
      type: apiKey
      in: header
      name: Signature
    PartnerClientId:
      type: apiKey
      in: query
      name: clientId
    PartnerTimestamp:
      type: apiKey
      in: query
      name: timestamp