snaptrade-typescript-sdk
v9.0.59
Published
Client for SnapTrade
Downloads
7,486
Readme
SnapTrade
Connect brokerage accounts to your app for live positions and trading
Table of Contents
- Installation
- Getting Started
- Reference
snaptrade.accountInformation.getAllUserHoldings
snaptrade.accountInformation.getUserAccountBalance
snaptrade.accountInformation.getUserAccountDetails
snaptrade.accountInformation.getUserAccountOrders
snaptrade.accountInformation.getUserAccountPositions
snaptrade.accountInformation.getUserAccountRecentOrders
snaptrade.accountInformation.getUserAccountReturnRates
snaptrade.accountInformation.getUserHoldings
snaptrade.accountInformation.listUserAccounts
snaptrade.accountInformation.updateUserAccount
snaptrade.apiStatus.check
snaptrade.authentication.deleteSnapTradeUser
snaptrade.authentication.listSnapTradeUsers
snaptrade.authentication.loginSnapTradeUser
snaptrade.authentication.registerSnapTradeUser
snaptrade.authentication.resetSnapTradeUserSecret
snaptrade.connections.detailBrokerageAuthorization
snaptrade.connections.disableBrokerageAuthorization
snaptrade.connections.listBrokerageAuthorizations
snaptrade.connections.refreshBrokerageAuthorization
snaptrade.connections.removeBrokerageAuthorization
snaptrade.connections.returnRates
snaptrade.connections.sessionEvents
snaptrade.options.getOptionStrategy
snaptrade.options.getOptionsChain
snaptrade.options.getOptionsStrategyQuote
snaptrade.options.listOptionHoldings
snaptrade.options.placeOptionStrategy
snaptrade.referenceData.getCurrencyExchangeRatePair
snaptrade.referenceData.getPartnerInfo
snaptrade.referenceData.getSecurityTypes
snaptrade.referenceData.getStockExchanges
snaptrade.referenceData.getSymbols
snaptrade.referenceData.getSymbolsByTicker
snaptrade.referenceData.listAllBrokerageAuthorizationType
snaptrade.referenceData.listAllBrokerages
snaptrade.referenceData.listAllCurrencies
snaptrade.referenceData.listAllCurrenciesRates
snaptrade.referenceData.symbolSearchUserAccount
snaptrade.trading.cancelUserAccountOrder
snaptrade.trading.getOrderImpact
snaptrade.trading.getUserAccountQuotes
snaptrade.trading.placeForceOrder
snaptrade.trading.placeOrder
snaptrade.transactionsAndReporting.getActivities
snaptrade.transactionsAndReporting.getReportingCustomRange
Installation
npm i snaptrade-typescript-sdk
pnpm i snaptrade-typescript-sdk
yarn add snaptrade-typescript-sdk
Getting Started
const { Snaptrade } = require("snaptrade-typescript-sdk");
async function main() {
// 1) Initialize a client with your clientID and consumerKey.
const snaptrade = new Snaptrade({
consumerKey: process.env.SNAPTRADE_CONSUMER_KEY,
clientId: process.env.SNAPTRADE_CLIENT_ID,
});
// 2) Check that the client is able to make a request to the API server.
const status = await snaptrade.apiStatus.check();
console.log("status:", status.data);
// 3) Create a new user on SnapTrade
const userId = uuid();
const { userSecret } = (
await snaptrade.authentication.registerSnapTradeUser({
userId,
})
).data;
// Note: A user secret is only generated once. It's required to access
// resources for certain endpoints.
console.log("userSecret:", userSecret);
// 4) Get a redirect URI. Users will need this to connect
const data = (
await snaptrade.authentication.loginSnapTradeUser({ userId, userSecret })
).data;
if (!("redirectURI" in data)) throw Error("Should have gotten redirect URI");
console.log("redirectURI:", data.redirectURI);
// 5) Obtaining account holdings data
const holdings = (
await snaptrade.accountInformation.getAllUserHoldings({
userId,
userSecret,
})
).data;
console.log("holdings:", holdings);
// 6) Deleting a user
const deleteResponse = (
await snaptrade.authentication.deleteSnapTradeUser({ userId })
).data;
console.log("deleteResponse:", deleteResponse);
}
// Should be replaced with function to get user ID
function getUserId() {
var d = new Date().getTime(); //Timestamp
var d2 =
(typeof performance !== "undefined" &&
performance.now &&
performance.now() * 1000) ||
0; //Time in microseconds since page-load or 0 if unsupported
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
var r = Math.random() * 16; //random number between 0 and 16
if (d > 0) {
//Use timestamp until depleted
r = (d + r) % 16 | 0;
d = Math.floor(d / 16);
} else {
//Use microseconds since page-load if supported
r = (d2 + r) % 16 | 0;
d2 = Math.floor(d2 / 16);
}
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
});
}
main();
Reference
snaptrade.accountInformation.getAllUserHoldings
Deprecated, please use the account-specific holdings endpoint instead.
List all accounts for the user, plus balances, positions, and orders for each account.
🛠️ Usage
const getAllUserHoldingsResponse =
await snaptrade.accountInformation.getAllUserHoldings({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
brokerageAuthorizations: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
brokerageAuthorizations: string
Optional. Comma separated list of authorization IDs (only use if filtering is needed on one or more authorizations).
🔄 Return
🌐 Endpoint
/holdings
GET
snaptrade.accountInformation.getUserAccountBalance
Returns a list of balances for the account. Each element of the list has a distinct currency. Some brokerages like Questrade allows holding multiple currencies in the same account.
The data returned here is cached. How long the data is cached for varies by brokerage. Check the brokerage integrations doc and look for "Cache Expiry Time" to see the exact value for a specific brokerage. If you need real-time data, please use the manual refresh endpoint.
🛠️ Usage
const getUserAccountBalanceResponse =
await snaptrade.accountInformation.getUserAccountBalance({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
🔄 Return
🌐 Endpoint
/accounts/{accountId}/balances
GET
snaptrade.accountInformation.getUserAccountDetails
Returns account detail known to SnapTrade for the specified account.
The data returned here is always cached and refreshed once a day. If you need real-time data, please use the manual refresh endpoint.
🛠️ Usage
const getUserAccountDetailsResponse =
await snaptrade.accountInformation.getUserAccountDetails({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
🔄 Return
🌐 Endpoint
/accounts/{accountId}
GET
snaptrade.accountInformation.getUserAccountOrders
Returns a list of recent orders in the specified account.
The data returned here is cached. How long the data is cached for varies by brokerage. Check the brokerage integrations doc and look for "Cache Expiry Time" to see the exact value for a specific brokerage. If you need real-time data, please use the manual refresh endpoint.
🛠️ Usage
const getUserAccountOrdersResponse =
await snaptrade.accountInformation.getUserAccountOrders({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
state: "all",
days: 30,
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
state: 'all' | 'open' | 'executed'
defaults value is set to "all"
days: number
Number of days in the past to fetch the most recent orders. Defaults to the last 30 days if no value is passed in.
🔄 Return
🌐 Endpoint
/accounts/{accountId}/orders
GET
snaptrade.accountInformation.getUserAccountPositions
Returns a list of stock/ETF/crypto/mutual fund positions in the specified account. For option positions, please use the options endpoint.
The data returned here is cached. How long the data is cached for varies by brokerage. Check the brokerage integrations doc and look for "Cache Expiry Time" to see the exact value for a specific brokerage. If you need real-time data, please use the manual refresh endpoint.
🛠️ Usage
const getUserAccountPositionsResponse =
await snaptrade.accountInformation.getUserAccountPositions({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
🔄 Return
🌐 Endpoint
/accounts/{accountId}/positions
GET
snaptrade.accountInformation.getUserAccountRecentOrders
Returns a list of orders executed in the last 24 hours in the specified account. This endpoint is realtime and can be used to quickly check if account state has recently changed due to an execution Differs from /orders in that it only returns orders that have been executed in the last 24 hours as opposed to pending or cancelled orders up to 30 days old Please contact support for access as this endpoint is not enabled by default.
🛠️ Usage
const getUserAccountRecentOrdersResponse =
await snaptrade.accountInformation.getUserAccountRecentOrders({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
onlyExecuted: boolean
Defaults to true. Indicates if request should fetch only executed orders. Set to false to retrieve non executed orders as well
🔄 Return
🌐 Endpoint
/accounts/{accountId}/recentOrders
GET
snaptrade.accountInformation.getUserAccountReturnRates
Returns a list of rate of return percents for a given account. Will include timeframes available from the brokerage, for example "ALL", "1Y", "6M", "3M", "1M"
🛠️ Usage
const getUserAccountReturnRatesResponse =
await snaptrade.accountInformation.getUserAccountReturnRates({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
🔄 Return
🌐 Endpoint
/accounts/{accountId}/returnRates
GET
snaptrade.accountInformation.getUserHoldings
Returns a list of balances, positions, and recent orders for the specified account. The data returned is similar to the data returned over the more fine-grained balances, positions and orders endpoints. The finer-grained APIs are preferred. They are easier to work with, faster, and have better error handling than this coarse-grained API.
The data returned here is cached. How long the data is cached for varies by brokerage. Check the brokerage integrations doc and look for "Cache Expiry Time" to see the exact value for a specific brokerage. If you need real-time data, please use the manual refresh endpoint.
🛠️ Usage
const getUserHoldingsResponse =
await snaptrade.accountInformation.getUserHoldings({
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
});
⚙️ Parameters
accountId: string
userId: string
userSecret: string
🔄 Return
🌐 Endpoint
/accounts/{accountId}/holdings
GET
snaptrade.accountInformation.listUserAccounts
Returns all brokerage accounts across all connections known to SnapTrade for the authenticated user.
The data returned here is always cached and refreshed once a day. If you need real-time data, please use the manual refresh endpoint.
🛠️ Usage
const listUserAccountsResponse =
await snaptrade.accountInformation.listUserAccounts({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
});
⚙️ Parameters
userId: string
userSecret: string
🔄 Return
🌐 Endpoint
/accounts
GET
snaptrade.accountInformation.updateUserAccount
Updates various properties of a specified account.
🛠️ Usage
const updateUserAccountResponse =
await snaptrade.accountInformation.updateUserAccount({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "accountId_example",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
The ID of the account to update.
🔄 Return
🌐 Endpoint
/accounts/{accountId}
PUT
snaptrade.apiStatus.check
Check whether the API is operational and verify timestamps.
🛠️ Usage
const checkResponse = await snaptrade.apiStatus.check();
🔄 Return
🌐 Endpoint
/
GET
snaptrade.authentication.deleteSnapTradeUser
Deletes a registered user and all associated data. This action is irreversible. This API is asynchronous and will return a 200 status code if the request is accepted. The user and all associated data will be queued for deletion. Once deleted, a USER_DELETED
webhook will be sent.
🛠️ Usage
const deleteSnapTradeUserResponse =
await snaptrade.authentication.deleteSnapTradeUser({
userId: "snaptrade-user-123",
});
⚙️ Parameters
userId: string
🔄 Return
🌐 Endpoint
/snapTrade/deleteUser
DELETE
snaptrade.authentication.listSnapTradeUsers
Returns a list of all registered user IDs. Please note that the response is not currently paginated.
🛠️ Usage
const listSnapTradeUsersResponse =
await snaptrade.authentication.listSnapTradeUsers();
🌐 Endpoint
/snapTrade/listUsers
GET
snaptrade.authentication.loginSnapTradeUser
Authenticates a SnapTrade user and returns the Connection Portal URL used for connecting brokerage accounts. Please check this guide for how to integrate the Connection Portal into your app.
Please note that the returned URL expires in 5 minutes.
🛠️ Usage
const loginSnapTradeUserResponse =
await snaptrade.authentication.loginSnapTradeUser({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
broker: "ALPACA",
immediateRedirect: true,
customRedirect: "https://snaptrade.com",
reconnect: "8b5f262d-4bb9-365d-888a-202bd3b15fa1",
connectionType: "read",
connectionPortalVersion: "v4",
});
⚙️ Parameters
userId: string
userSecret: string
broker: string
Slug of the brokerage to connect the user to. See the integrations page for a list of supported brokerages and their slugs.
immediateRedirect: boolean
When set to true
, user will be redirected back to the partner\'s site instead of the connection portal. This parameter is ignored if the connection portal is loaded inside an iframe. See the guide on ways to integrate the connection portal for more information.
customRedirect: string
URL to redirect the user to after the user connects their brokerage account. This parameter is ignored if the connection portal is loaded inside an iframe. See the guide on ways to integrate the connection portal for more information.
reconnect: string
The UUID of the brokerage connection to be reconnected. This parameter should be left empty unless you are reconnecting a disabled connection. See the guide on fixing broken connections for more information.
connectionType: string
Sets whether the connection should be read-only or trade-enabled. Defaults to read-only if not specified.
connectionPortalVersion: string
Sets the connection portal version to render. Currently only v4 is supported and is the default. All other versions are deprecated and will automatically be set to v4.
🔄 Return
AuthenticationLoginSnapTradeUser200Response
🌐 Endpoint
/snapTrade/login
POST
snaptrade.authentication.registerSnapTradeUser
Registers a new SnapTrade user under your Client ID. A user secret will be automatically generated for you and must be properly stored in your system. Most SnapTrade operations require a user ID and user secret to be passed in as parameters.
🛠️ Usage
const registerSnapTradeUserResponse =
await snaptrade.authentication.registerSnapTradeUser({
userId: "snaptrade-user-123",
});
⚙️ Parameters
userId: string
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.
🔄 Return
🌐 Endpoint
/snapTrade/registerUser
POST
snaptrade.authentication.resetSnapTradeUserSecret
Rotates the secret for a SnapTrade user. You might use this if userSecret
is compromised. Please note that if you call this endpoint and fail to save the new secret, you'll no longer be able to access any data for this user, and your only option will be to delete and recreate the user, then ask them to reconnect.
🛠️ Usage
const resetSnapTradeUserSecretResponse =
await snaptrade.authentication.resetSnapTradeUserSecret({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
});
⚙️ Parameters
userId: string
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.
userSecret: string
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.
🔄 Return
🌐 Endpoint
/snapTrade/resetUserSecret
POST
snaptrade.connections.detailBrokerageAuthorization
Returns a single connection for the specified ID.
🛠️ Usage
const detailBrokerageAuthorizationResponse =
await snaptrade.connections.detailBrokerageAuthorization({
authorizationId: "87b24961-b51e-4db8-9226-f198f6518a89",
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
});
⚙️ Parameters
authorizationId: string
userId: string
userSecret: string
🔄 Return
🌐 Endpoint
/authorizations/{authorizationId}
GET
snaptrade.connections.disableBrokerageAuthorization
Manually force the specified connection to become disabled. This should only be used for testing a reconnect flow, and never used on production connections.
Will trigger a disconnect as if it happened naturally, and send a CONNECTION_BROKEN
webhook for the connection.
Please contact us in order to use this endpoint as it is disabled by default.
🛠️ Usage
const disableBrokerageAuthorizationResponse =
await snaptrade.connections.disableBrokerageAuthorization({
authorizationId: "87b24961-b51e-4db8-9226-f198f6518a89",
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
});
⚙️ Parameters
authorizationId: string
userId: string
userSecret: string
🔄 Return
BrokerageAuthorizationDisabledConfirmation
🌐 Endpoint
/authorizations/{authorizationId}/disable
POST
snaptrade.connections.listBrokerageAuthorizations
Returns a list of all connections for the specified user. Note that Connection
and Brokerage Authorization
are interchangeable, but the term Connection
is preferred and used in the doc for consistency.
A connection is usually tied to a single login at a brokerage. A single connection can contain multiple brokerage accounts.
SnapTrade performs de-duping on connections for a given user. If the user has an existing connection with the brokerage, when connecting the brokerage with the same credentials, SnapTrade will return the existing connection instead of creating a new one.
🛠️ Usage
const listBrokerageAuthorizationsResponse =
await snaptrade.connections.listBrokerageAuthorizations({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
});
⚙️ Parameters
userId: string
userSecret: string
🔄 Return
🌐 Endpoint
/authorizations
GET
snaptrade.connections.refreshBrokerageAuthorization
Trigger a holdings update for all accounts under this connection. Updates will be queued asynchronously. ACCOUNT_HOLDINGS_UPDATED
webhook will be sent once the sync completes for each account under the connection.
Please contact support for access as this endpoint is not enabled by default.
🛠️ Usage
const refreshBrokerageAuthorizationResponse =
await snaptrade.connections.refreshBrokerageAuthorization({
authorizationId: "87b24961-b51e-4db8-9226-f198f6518a89",
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
});
⚙️ Parameters
authorizationId: string
userId: string
userSecret: string
🔄 Return
BrokerageAuthorizationRefreshConfirmation
🌐 Endpoint
/authorizations/{authorizationId}/refresh
POST
snaptrade.connections.removeBrokerageAuthorization
Deletes the connection specified by the ID. This will also delete all accounts and holdings associated with the connection. This action is irreversible. This endpoint is synchronous, a 204 response indicates that the connection has been successfully deleted.
🛠️ Usage
const removeBrokerageAuthorizationResponse =
await snaptrade.connections.removeBrokerageAuthorization({
authorizationId: "87b24961-b51e-4db8-9226-f198f6518a89",
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
});
⚙️ Parameters
authorizationId: string
userId: string
userSecret: string
🌐 Endpoint
/authorizations/{authorizationId}
DELETE
snaptrade.connections.returnRates
Returns a list of rate of return percents for a given connection. Will include timeframes available from the brokerage, for example "ALL", "1Y", "6M", "3M", "1M"
🛠️ Usage
const returnRatesResponse = await snaptrade.connections.returnRates({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
authorizationId: "87b24961-b51e-4db8-9226-f198f6518a89",
});
⚙️ Parameters
userId: string
userSecret: string
authorizationId: string
🔄 Return
🌐 Endpoint
/authorizations/{authorizationId}/returnRates
GET
snaptrade.connections.sessionEvents
Returns a list of session events associated with a user.
🛠️ Usage
const sessionEventsResponse = await snaptrade.connections.sessionEvents({
partnerClientId: "SNAPTRADETEST",
userId:
"917c8734-8470-4a3e-a18f-57c3f2ee6631,65e839a3-9103-4cfb-9b72-2071ef80c5f2",
sessionId:
"917c8734-8470-4a3e-a18f-57c3f2ee6631,65e839a3-9103-4cfb-9b72-2071ef80c5f2",
});
⚙️ Parameters
partnerClientId: string
userId: string
Optional comma separated list of user IDs used to filter the request on specific users
sessionId: string
Optional comma separated list of session IDs used to filter the request on specific users
🔄 Return
ConnectionsSessionEvents200ResponseInner
🌐 Endpoint
/sessionEvents
GET
snaptrade.options.getOptionStrategy
Creates an option strategy object that will be used to place an option strategy order.
🛠️ Usage
const getOptionStrategyResponse = await snaptrade.options.getOptionStrategy({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "accountId_example",
underlying_symbol_id: "2bcd7cc3-e922-4976-bce1-9858296801c3",
legs: [
{
action: "BUY_TO_OPEN",
option_symbol_id: "SPY220819P00200000",
quantity: 1,
},
],
strategy_type: "CUSTOM",
});
⚙️ Parameters
underlying_symbol_id: string
legs: OptionLeg
[]
strategy_type: string
userId: string
userSecret: string
accountId: string
The ID of the account to create the option strategy object in.
🔄 Return
🌐 Endpoint
/accounts/{accountId}/optionStrategy
POST
snaptrade.options.getOptionsChain
Returns the option chain for the specified symbol in the specified account.
🛠️ Usage
const getOptionsChainResponse = await snaptrade.options.getOptionsChain({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "accountId_example",
symbol: "symbol_example",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
The ID of the account to get the options chain from.
symbol: string
Universal symbol ID if symbol
🔄 Return
🌐 Endpoint
/accounts/{accountId}/optionsChain
GET
snaptrade.options.getOptionsStrategyQuote
Returns a Strategy Quotes object which has latest market data of the specified option strategy.
🛠️ Usage
const getOptionsStrategyQuoteResponse =
await snaptrade.options.getOptionsStrategyQuote({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "accountId_example",
optionStrategyId: "2bcd7cc3-e922-4976-bce1-9858296801c3",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
The ID of the account the strategy will be placed in.
optionStrategyId: string
Option strategy id obtained from response when creating option strategy object
🔄 Return
🌐 Endpoint
/accounts/{accountId}/optionStrategy/{optionStrategyId}
GET
snaptrade.options.listOptionHoldings
Returns a list of option positions in the specified account. For stock/ETF/crypto/mutual fund positions, please use the positions endpoint.
The data returned here is cached. How long the data is cached for varies by brokerage. Check the brokerage integrations doc and look for "Cache Expiry Time" to see the exact value for a specific brokerage. If you need real-time data, please use the manual refresh endpoint.
🛠️ Usage
const listOptionHoldingsResponse = await snaptrade.options.listOptionHoldings({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
🔄 Return
🌐 Endpoint
/accounts/{accountId}/options
GET
snaptrade.options.placeOptionStrategy
Places the option strategy order and returns the order record received from the brokerage.
🛠️ Usage
const placeOptionStrategyResponse = await snaptrade.options.placeOptionStrategy(
{
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "2bcd7cc3-e922-4976-bce1-9858296801c3",
optionStrategyId: "2bcd7cc3-e922-4976-bce1-9858296801c3",
order_type: "Market",
time_in_force: "FOK",
price: 31.33,
}
);
⚙️ Parameters
order_type: OrderTypeStrict
The type of order to place. - For Limit
and StopLimit
orders, the price
field is required. - For Stop
and StopLimit
orders, the stop
field is required.
time_in_force: TimeInForceStrict
The Time in Force type for the order. This field indicates how long the order will remain active before it is executed or expires. Here are the supported values: - Day
- Day. The order is valid only for the trading day on which it is placed. - GTC
- Good Til Canceled. The order is valid until it is executed or canceled. - FOK
- Fill Or Kill. The order must be executed in its entirety immediately or be canceled completely.
userId: string
userSecret: string
accountId: string
The ID of the account to execute the strategy in.
optionStrategyId: string
Option strategy id obtained from response when creating option strategy object
price: number
Trade Price if limit or stop limit order
🔄 Return
🌐 Endpoint
/accounts/{accountId}/optionStrategy/{optionStrategyId}/execute
POST
snaptrade.referenceData.getCurrencyExchangeRatePair
Returns an Exchange Rate Pair object for the specified Currency Pair.
🛠️ Usage
const getCurrencyExchangeRatePairResponse =
await snaptrade.referenceData.getCurrencyExchangeRatePair({
currencyPair: "currencyPair_example",
});
⚙️ Parameters
currencyPair: string
A currency pair based on currency code for example, {CAD-USD}
🔄 Return
🌐 Endpoint
/currencies/rates/{currencyPair}
GET
snaptrade.referenceData.getPartnerInfo
Returns configurations for your SnapTrade Client ID, including allowed brokerages and data access.
🛠️ Usage
const getPartnerInfoResponse = await snaptrade.referenceData.getPartnerInfo();
🔄 Return
🌐 Endpoint
/snapTrade/partners
GET
snaptrade.referenceData.getSecurityTypes
Return all available security types supported by SnapTrade.
🛠️ Usage
const getSecurityTypesResponse =
await snaptrade.referenceData.getSecurityTypes();
🔄 Return
🌐 Endpoint
/securityTypes
GET
snaptrade.referenceData.getStockExchanges
Returns a list of all supported Exchanges.
🛠️ Usage
const getStockExchangesResponse =
await snaptrade.referenceData.getStockExchanges();
🔄 Return
🌐 Endpoint
/exchanges
GET
snaptrade.referenceData.getSymbols
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.
🛠️ Usage
const getSymbolsResponse = await snaptrade.referenceData.getSymbols({
substring: "AAPL",
});
⚙️ Parameters
substring: string
The search query for symbols.
🔄 Return
🌐 Endpoint
/symbols
POST
snaptrade.referenceData.getSymbolsByTicker
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. Please use the ticker with the proper suffix for the best results.
🛠️ Usage
const getSymbolsByTickerResponse =
await snaptrade.referenceData.getSymbolsByTicker({
query: "query_example",
});
⚙️ Parameters
query: string
The ticker or Universal Symbol ID to look up the symbol with.
🔄 Return
🌐 Endpoint
/symbols/{query}
GET
snaptrade.referenceData.listAllBrokerageAuthorizationType
Returns a list of all defined Brokerage authorization Type objects.
🛠️ Usage
const listAllBrokerageAuthorizationTypeResponse =
await snaptrade.referenceData.listAllBrokerageAuthorizationType({
brokerage: "QUESTRADE,ALPACA",
});
⚙️ Parameters
brokerage: string
Comma separated value of brokerage slugs
🔄 Return
BrokerageAuthorizationTypeReadOnly
🌐 Endpoint
/brokerageAuthorizationTypes
GET
snaptrade.referenceData.listAllBrokerages
Returns a list of all defined Brokerage objects.
🛠️ Usage
const listAllBrokeragesResponse =
await snaptrade.referenceData.listAllBrokerages();
🔄 Return
🌐 Endpoint
/brokerages
GET
snaptrade.referenceData.listAllCurrencies
Returns a list of all defined Currency objects.
🛠️ Usage
const listAllCurrenciesResponse =
await snaptrade.referenceData.listAllCurrencies();
🔄 Return
🌐 Endpoint
/currencies
GET
snaptrade.referenceData.listAllCurrenciesRates
Returns a list of all Exchange Rate Pairs for all supported Currencies.
🛠️ Usage
const listAllCurrenciesRatesResponse =
await snaptrade.referenceData.listAllCurrenciesRates();
🔄 Return
🌐 Endpoint
/currencies/rates
GET
snaptrade.referenceData.symbolSearchUserAccount
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.
🛠️ Usage
const symbolSearchUserAccountResponse =
await snaptrade.referenceData.symbolSearchUserAccount({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
substring: "AAPL",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
substring: string
The search query for symbols.
🔄 Return
🌐 Endpoint
/accounts/{accountId}/symbols
POST
snaptrade.trading.cancelUserAccountOrder
Attempts to cancel an open order with the brokerage. If the order is no longer cancellable, the request will be rejected.
🛠️ Usage
const cancelUserAccountOrderResponse =
await snaptrade.trading.cancelUserAccountOrder({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
brokerage_order_id: "66a033fa-da74-4fcf-b527-feefdec9257e",
});
⚙️ Parameters
userId: string
userSecret: string
accountId: string
brokerage_order_id: string
Order ID returned by brokerage. This is the unique identifier for the order in the brokerage system.
🔄 Return
🌐 Endpoint
/accounts/{accountId}/orders/cancel
POST
snaptrade.trading.getOrderImpact
Simulates an order and its impact on the account. This endpoint does not place the order with the brokerage. If successful, it returns a Trade
object and the ID of the object can be used to place the order with the brokerage using the place checked order endpoint. Please note that the Trade
object returned expires after 5 minutes. Any order placed using an expired Trade
will be rejected.
🛠️ Usage
const getOrderImpactResponse = await snaptrade.trading.getOrderImpact({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
account_id: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
action: "BUY",
universal_symbol_id: "2bcd7cc3-e922-4976-bce1-9858296801c3",
order_type: "Market",
time_in_force: "FOK",
price: 31.33,
stop: 31.33,
units: 10.5,
});
⚙️ Parameters
account_id: string
Unique identifier for the connected brokerage account. This is the UUID used to reference the account in SnapTrade.
action: ActionStrict
The action describes the intent or side of a trade. This is either BUY
or SELL
.
universal_symbol_id: string
Unique identifier for the symbol within SnapTrade. This is the ID used to reference the symbol in SnapTrade API calls.
order_type: OrderTypeStrict
The type of order to place. - For Limit
and StopLimit
orders, the price
field is required. - For Stop
and StopLimit
orders, the stop
field is required.
time_in_force: TimeInForceStrict
The Time in Force type for the order. This field indicates how long the order will remain active before it is executed or expires. Here are the supported values: - Day
- Day. The order is valid only for the trading day on which it is placed. - GTC
- Good Til Canceled. The order is valid until it is executed or canceled. - FOK
- Fill Or Kill. The order must be executed in its entirety immediately or be canceled completely.
userId: string
userSecret: string
price: number
The limit price for Limit
and StopLimit
orders.
stop: number
The price at which a stop order is triggered for Stop
and StopLimit
orders.
units: number
notional_value: ManualTradeFormNotionalValue
🔄 Return
🌐 Endpoint
/trade/impact
POST
snaptrade.trading.getUserAccountQuotes
Returns quotes from the brokerage for the specified symbols and account. The quotes returned can be delayed depending on the brokerage the account belongs to. It is highly recommended that you use your own market data provider for real-time quotes instead of relying on this endpoint. This endpoint does not work for options quotes.
🛠️ Usage
const getUserAccountQuotesResponse =
await snaptrade.trading.getUserAccountQuotes({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
symbols: "symbols_example",
accountId: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
});
⚙️ Parameters
userId: string
userSecret: string
symbols: string
List of Universal Symbol IDs or tickers to get quotes for. When providing multiple values, use a comma as separator
accountId: string
useTicker: boolean
Should be set to True
if symbols
are comprised of tickers. Defaults to False
if not provided.
🔄 Return
🌐 Endpoint
/accounts/{accountId}/quotes
GET
snaptrade.trading.placeForceOrder
Places a brokerage order in the specified account. The order could be rejected by the brokerage if it is invalid or if the account does not have sufficient funds.
This endpoint does not compute the impact to the account balance from the order and any potential commissions before submitting the order to the brokerage. If that is desired, you can use the check order impact endpoint.
It's recommended to trigger a manual refresh of the account after placing an order to ensure the account is up to date. You can use the manual refresh endpoint for this.
🛠️ Usage
const placeForceOrderResponse = await snaptrade.trading.placeForceOrder({
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
account_id: "917c8734-8470-4a3e-a18f-57c3f2ee6631",
action: "BUY",
universal_symbol_id: "2bcd7cc3-e922-4976-bce1-9858296801c3",
symbol: "AAPL 131124C00240000",
order_type: "Market",
time_in_force: "FOK",
price: 31.33,
stop: 31.33,
units: 10.5,
});
⚙️ Parameters
account_id: string
Unique identifier for the connected brokerage account. This is the UUID used to reference the account in SnapTrade.
action: ActionStrictWithOptions
The action describes the intent or side of a trade. This is either BUY
or SELL
for Equity symbols or BUY_TO_OPEN
, BUY_TO_CLOSE
, SELL_TO_OPEN
or SELL_TO_CLOSE
for Options.
order_type: OrderTypeStrict
The type of order to place. - For Limit
and StopLimit
orders, the price
field is required. - For Stop
and StopLimit
orders, the stop
field is required.
time_in_force: TimeInForceStrict
The Time in Force type for the order. This field indicates how long the order will remain active before it is executed or expires. Here are the supported values: - Day
- Day. The order is valid only for the trading day on which it is placed. - GTC
- Good Til Canceled. The order is valid until it is executed or canceled. - FOK
- Fill Or Kill. The order must be executed in its entirety immediately or be canceled completely.
userId: string
userSecret: string
universal_symbol_id: string
The universal symbol ID of the security to trade. Must be \'null\' if symbol
is provided, otherwise must be provided.
symbol: string
The security\'s trading ticker symbol. This currently only support Options symbols in the 21 character OCC format. For example \"AAPL 131124C00240000\" represents a call option on AAPL expiring on 2024-11-13 with a strike price of $240. For more information on the OCC format, see here. If \'symbol\' is provided, then \'universal_symbol_id\' must be \'null\'.
price: number
The limit price for Limit
and StopLimit
orders.
stop: number
The price at which a stop order is triggered for Stop
and StopLimit
orders.
units: number
For Equity orders, this represents the number of shares for the order. This can be a decimal for fractional orders. Must be null
if notional_value
is provided. If placing an Option order, this field represents the number of contracts to buy or sell. (e.g., 1 contract = 100 shares).
notional_value: ManualTradeFormNotionalValue
🔄 Return
🌐 Endpoint
/trade/place
POST
snaptrade.trading.placeOrder
Places the previously checked order with the brokerage. The tradeId
is obtained from the check order impact endpoint. If you prefer to place the order without checking for impact first, you can use the place order endpoint.
It's recommended to trigger a manual refresh of the account after placing an order to ensure the account is up to date. You can use the manual refresh endpoint for this.
🛠️ Usage
const placeOrderResponse = await snaptrade.trading.placeOrder({
tradeId: "139e307a-82f7-4402-b39e-4da7baa87758",
userId: "snaptrade-user-123",
userSecret: "adf2aa34-8219-40f7-a6b3-60156985cc61",
wait_to_confirm: true,
});
⚙️ Parameters
tradeId: string
Obtained from calling the check order impact endpoint
userId: string
userSecret: string
wait_to_confirm: boolean
Optional, defaults to true. Determines if a wait is performed to check on order status. If false, latency will be reduced but orders returned will be more likely to be of status PENDING
as we will not wait to check on the status before responding to the request.
🔄 Return
🌐 Endpoint
/trade/{tradeId}
POST
snaptrade.transactionsAndReporting.getActivities
Returns all historical transactions for the specified user and filtering criteria. It's recommended to use startDate
and endDate
to paginate through the data, as the response may be very large for accounts with a long history and/or a lot of activity. There's a max number of 10000 transactions returned per request.
There is no guarantee to the ordering of the transactions returned. Please sort the transactions based on the trade_date
field if you need them in a specific order.
The data returned here is always cached and refreshed once a day. If you need real-time data, please use the manual refresh endpoint.
🛠️ Usage
const getActivitiesResponse =
await snaptrade.transactionsAndReporting.getActivities({
startDate: "2022-01-24",
endDate: "2022-01-24",
accounts:
"917c8734-8