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: 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