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 Connections 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: Connections description: Retrieve and manage user connections. paths: /authorizations: get: tags: - Connections summary: List all connections description: '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.' operationId: Connections_listBrokerageAuthorizations parameters: - in: query required: true name: userId schema: $ref: '#/components/schemas/UserID' - in: query required: true name: userSecret schema: $ref: '#/components/schemas/UserSecret' responses: '200': description: OK content: application/json: schema: description: A list of all connections for the specified user. type: array items: $ref: '#/components/schemas/BrokerageAuthorization' default: description: Unexpected error. /authorizations/{authorizationId}: get: tags: - Connections summary: Get connection detail description: Returns a single connection for the specified ID. operationId: Connections_detailBrokerageAuthorization parameters: - in: path name: authorizationId required: true schema: $ref: '#/components/schemas/BrokerageAuthID' - in: query required: true name: userId schema: $ref: '#/components/schemas/UserID' - in: query required: true name: userSecret schema: $ref: '#/components/schemas/UserSecret' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/BrokerageAuthorization' default: description: Unexpected error. /connection/{connectionId}: delete: tags: - Connections summary: Delete connection description: Deletes the SnapTrade connection specified by the ID. This will also remove the accounts and holdings data associated with the connection from SnapTrade. This action is irreversible. This endpoint is asynchronous, a 200 response indicates that a task has been queued to delete the connection. Listen for the `CONNECTION_DELETED` webhook webhook to know when the deletion has been completed and the data has been removed. operationId: Connections_deleteConnection parameters: - in: path name: connectionId required: true schema: $ref: '#/components/schemas/BrokerageAuthID' - in: query required: true name: userId schema: $ref: '#/components/schemas/UserID' - in: query required: true name: userSecret schema: $ref: '#/components/schemas/UserSecret' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeleteConnectionConfirmation' '400': description: Bad Request '403': description: OAuth applications cannot delete personal connections. '404': description: Not Found default: description: Unexpected error /authorizations/{authorizationId}/refresh: post: tags: - Connections summary: Refresh holdings for a connection description: '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. This endpoint will also trigger a transaction sync for the past day if one has not yet occurred. **Because of the cost of refreshing a connection, each call to this endpoint incurs an additional charge. You can find the exact cost for your API key on the Customer Dashboard billing page** **Please note this endpoint is disabled for Real-time plans (Personal and Pay as you go) unless SnapTrade uses delayed data for the connection. Real-time connections do not benefit from this feature since data is refreshed when calls are made. Refer to `data_freshness_mode.snaptrade` on a connection to determine this.**' operationId: Connections_refreshBrokerageAuthorization parameters: - in: path name: authorizationId required: true schema: $ref: '#/components/schemas/BrokerageAuthID' - in: query required: true name: userId schema: $ref: '#/components/schemas/UserID' - in: query required: true name: userSecret schema: $ref: '#/components/schemas/UserSecret' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/BrokerageAuthorizationRefreshConfirmation' '401': description: Unauthorized, invalid credentials for this resource content: application/json: schema: $ref: '#/components/schemas/401FailedRequestResponse' '402': description: Unable to sync with brokerage account because the connection is disabled. content: application/json: schema: $ref: '#/components/schemas/402BrokerageAuthDisabledResponse' '403': description: Customer or user does not have access to this feature content: application/json: schema: $ref: '#/components/schemas/403FeatureNotEnabledResponse' '404': description: The requested resource does not exist. content: application/json: schema: $ref: '#/components/schemas/404FailedRequestResponse' '429': description: The connection was refreshed too recently. Please wait before calling this endpoint again. content: application/json: schema: $ref: '#/components/schemas/429TooManyRequestsResponse' /authorizations/{authorizationId}/transactions/sync: post: tags: - Connections summary: Sync transactions for a connection description: 'Beta operation. Trigger a transactions sync for all accounts under this connection. Updates will be queued asynchronously. Transactions are not updated intra-day, but calling this endpoint can ensure that the previous day''s transactions have been synced. For more information on sync behaviour, see: https://docs.snaptrade.com/docs/syncing' operationId: Connections_syncBrokerageAuthorizationTransactions parameters: - in: path name: authorizationId required: true schema: $ref: '#/components/schemas/BrokerageAuthID' - in: query required: true name: userId schema: $ref: '#/components/schemas/UserID' - in: query required: true name: userSecret schema: $ref: '#/components/schemas/UserSecret' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/BrokerageAuthorizationTransactionsSyncConfirmation' '401': description: Unauthorized, invalid credentials for this resource content: application/json: schema: $ref: '#/components/schemas/401FailedRequestResponse' '402': description: Unable to sync with brokerage account because the connection is disabled. content: application/json: schema: $ref: '#/components/schemas/402BrokerageAuthDisabledResponse' x-beta: true /authorizations/{authorizationId}/disable: post: tags: - Connections summary: Force disable connection description: '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. This endpoint is available on test keys. If you would like it enabled on production keys as well, please contact support as it is disabled by default.' operationId: Connections_disableBrokerageAuthorization parameters: - in: path name: authorizationId required: true schema: $ref: '#/components/schemas/BrokerageAuthID' - in: query required: true name: userId schema: $ref: '#/components/schemas/UserID' - in: query required: true name: userSecret schema: $ref: '#/components/schemas/UserSecret' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/BrokerageAuthorizationDisabledConfirmation' '401': description: Unauthorized, invalid credentials for this resource content: application/json: schema: $ref: '#/components/schemas/401FailedRequestResponse' '402': description: Unable to sync with brokerage account because the connection is disabled. content: application/json: schema: $ref: '#/components/schemas/402BrokerageAuthAlreadyDisabledException' '403': description: Customer or user does not have access to this feature content: application/json: schema: $ref: '#/components/schemas/403FeatureNotEnabledResponse' '404': description: The requested resource does not exist. content: application/json: schema: $ref: '#/components/schemas/404FailedRequestResponse' /connections/{connectionId}/accounts: get: tags: - Connections summary: List accounts description: 'Beta operation. Returns all accounts that belong to the specified connection for the authenticated user. The `results` list can contain multiple account types in the same response, including investment, deposit, and line of credit accounts. Use the `kind` discriminator to determine the schema for each account. On Pay as you Go / Real-time, this endpoint refreshes each account''s opening date and total net value (`net_value`) live from the institution on each call, along with funding date for `investment` accounts. On Pay as you Go / Daily, this endpoint returns Daily data. Daily data is cached and refreshed once a day. Exact refresh timing may vary by institution. To force a refresh, use the manual refresh endpoint. Check your API key on the Customer Dashboard billing page to see whether your plan includes real-time data.' operationId: Connections_listConnectionAccounts parameters: - in: path name: connectionId required: true schema: $ref: '#/components/schemas/BrokerageAuthID' - in: query required: true name: userId schema: $ref: '#/components/schemas/UserID' - in: query required: true name: userSecret schema: $ref: '#/components/schemas/UserSecret' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ConnectionAccountsResponse' '401': description: Unauthorized, invalid credentials for this resource content: application/json: schema: $ref: '#/components/schemas/401FailedRequestResponse' '404': description: The requested resource does not exist. content: application/json: schema: $ref: '#/components/schemas/404FailedRequestResponse' x-beta: true components: schemas: LineOfCreditAccountSyncStatus: description: 'Contains status updates for the account sync process between SnapTrade and the institution, used by `LineOfCreditAccount` in `Connections_listConnectionAccounts`. Each property is optional -- an institution may not report sync status for every data type. Line-of-credit accounts don''t place orders or hold positions, so like `DepositAccountSyncStatus` this type has no `orders` or `positions` field. `balances` is the timestamp of the last successful sync of that data type (null if never synced). ' type: object properties: transactions: $ref: '#/components/schemas/TransactionsStatus' balances: description: The last time balances were successfully synced by SnapTrade. allOf: - $ref: '#/components/schemas/HoldingsSyncStatusDate' 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 ConnectionAccountSyncStatus: description: 'Contains status updates for the account sync process between SnapTrade and the institution, used by `InvestmentAccount` in `Connections_listConnectionAccounts`. Each property is optional -- an institution may not report sync status for every data type. `orders`/`positions`/`balances` are the timestamp of the last successful sync of that data type (null if never synced). See `DepositAccountSyncStatus`/`LineOfCreditAccountSyncStatus` for the deposit/line-of-credit counterparts, which omit `orders`/`positions` since those account kinds don''t place orders or hold positions. ' type: object properties: transactions: $ref: '#/components/schemas/TransactionsStatus' orders: description: The last time orders were successfully synced by SnapTrade. allOf: - $ref: '#/components/schemas/HoldingsSyncStatusDate' positions: description: The last time positions were successfully synced by SnapTrade. allOf: - $ref: '#/components/schemas/HoldingsSyncStatusDate' balances: description: The last time balances were successfully synced by SnapTrade. allOf: - $ref: '#/components/schemas/HoldingsSyncStatusDate' DepositAccount: description: 'A deposit account (checking, savings) under a connection. ' type: object required: - kind - id - connection_id - masked_account_number - sync_status properties: kind: type: string description: Discriminator for the account kind. enum: - deposit example: deposit id: description: Unique identifier for the connected institution account. This is the UUID used to reference the account in SnapTrade. allOf: - $ref: '#/components/schemas/AccountID' connection_id: $ref: '#/components/schemas/BrokerageAuthID' display_name: type: - string - 'null' description: A display name for the account. Either assigned by the user or by the institution itself. example: Chase Total Checking masked_account_number: type: string example: '****4821' description: The account number assigned by the institution, masked to the last 4 characters (e.g. `****4821`). institution_account_id: type: - string - 'null' example: '88213092' description: A stable and unique account identifier provided by the institution. Will be set to null if not provided. When present, can be used to check if a user has connected the same institution account across multiple connections. institution_id: type: string format: uuid description: Unique identifier for the institution that holds the account. example: a7f0c9d1-2b3e-4f5a-8c6d-9e0f1a2b3c4d opening_date: type: - string - 'null' format: date-time description: Timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format indicating when the account was opened at the institution. Only populated for institutions that expose this data; `null` for all other institutions. example: '2018-06-04T00:00:00.000Z' sync_status: $ref: '#/components/schemas/DepositAccountSyncStatus' raw_type: type: - string - 'null' description: The account type as provided by the institution. example: CHECKING net_value: type: - object - 'null' description: Net value of the account -- cash balance for deposit accounts. Shared across all account kinds -- negative for `line_of_credit` accounts, representing money owed. Null when unknown (e.g. a real-time fetch failed and no cached value exists). properties: amount: type: - number - 'null' currency: type: - string - 'null' example: amount: 3120.44 currency: USD 429TooManyRequestsResponse: description: Example for a rate-limited request response type: object properties: detail: example: Connection refreshed too recently. Please try again later. status_code: example: 429 code: example: throttled BrokerageAuthorizationTransactionsSyncConfirmation: description: Confirmation that the transaction syncs have been scheduled. type: object properties: detail: description: Transactions sync confirmation details type: string example: Connection 0b3ebefb-ed47-43df-cd8f-729a4420b5cf scheduled for transactions sync 403FeatureNotEnabledResponse: description: Example for failed request response type: object properties: detail: example: Feature is not enabled for this customer or this connection default_code: example: 1141 402BrokerageAuthAlreadyDisabledException: description: This connection is already disabled. type: object properties: detail: example: This connection is already disabled. code: example: 3011 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 SyncStatusDate: description: Date in YYYY-MM-DD format or null type: - string - 'null' example: '2022-01-24' format: date ConnectionAccountsResponse: description: Accounts under the specified connection. type: object properties: results: type: array description: Accounts returned for the request. items: $ref: '#/components/schemas/ConnectionAccount' required: - results DepositAccountSyncStatus: description: 'Contains status updates for the account sync process between SnapTrade and the institution, used by `DepositAccount` in `Connections_listConnectionAccounts`. Each property is optional -- an institution may not report sync status for every data type. Deposit accounts don''t place orders or hold positions, so unlike `ConnectionAccountSyncStatus` this type has no `orders` or `positions` field. `balances` is the timestamp of the last successful sync of that data type (null if never synced). ' type: object properties: transactions: $ref: '#/components/schemas/TransactionsStatus' balances: description: The last time balances were successfully synced by SnapTrade. allOf: - $ref: '#/components/schemas/HoldingsSyncStatusDate' InvestmentAccount: description: 'An investment account under a connection. `opening_date`, `funding_date`, and `net_value` are real-time or cached depending on the caller''s plan -- see `Connections_listConnectionAccounts` -- and always cached on `AccountInformation_listAllUserAccounts`. ' type: object required: - kind - id - connection_id - masked_account_number - sync_status - is_paper properties: kind: type: string description: Discriminator for the account kind. enum: - investment example: investment id: description: Unique identifier for the connected institution account. This is the UUID used to reference the account in SnapTrade. allOf: - $ref: '#/components/schemas/AccountID' connection_id: $ref: '#/components/schemas/BrokerageAuthID' display_name: type: - string - 'null' description: A display name for the account. Either assigned by the user or by the institution itself. example: Robinhood Individual masked_account_number: type: string example: '****8443' description: The account number assigned by the institution, masked to the last 4 characters (e.g. `****8443`). institution_account_id: type: - string - 'null' example: '54953432' description: A stable and unique account identifier provided by the institution. Will be set to null if not provided. When present, can be used to check if a user has connected the same institution account across multiple connections. institution_id: type: string format: uuid description: Unique identifier for the institution that holds the account. example: b6e1a9f0-6e2a-4c37-9b0a-6f1e2d3c4b5a opening_date: type: - string - 'null' format: date-time description: Timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format indicating when the account was opened at the institution. Only populated for institutions that expose this data; `null` for all other institutions. See [supported institutions](https://support.snaptrade.com/brokerages) for the full list. example: '2024-07-20T09:30:00.000Z' funding_date: type: - string - 'null' format: date-time description: Timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format indicating when the account was funded. Only populated for institutions that expose this data; `null` for all other institutions. See [supported institutions](https://support.snaptrade.com/brokerages) for the full list. example: '2024-07-25T12:00:00.000Z' sync_status: $ref: '#/components/schemas/ConnectionAccountSyncStatus' raw_type: type: - string - 'null' description: The account type as provided by the institution. example: Margin cash_or_margin: type: string description: 'Whether the account is a cash or margin account, normalized across institutions. - `cash`: The account cannot borrow on margin. Includes registered, retirement and employer plan accounts that can''t use margin (for example TFSA, RRSP, 401(k) or ISA). - `margin`: A margin account, including portfolio margin accounts. Some institutions also report retirement accounts with limited margin (for example, trading before funds settle) as margin accounts. - `unknown`: SnapTrade doesn''t have enough information to tell, or the distinction doesn''t apply to the account (for example crypto accounts). Coverage is limited for Fidelity because its API doesn''t report it for every account; Fidelity accounts default to `unknown` where it can''t be determined. ' enum: - cash - margin - unknown example: margin is_paper: type: boolean description: Indicates whether the account is a paper (simulated) trading account. example: false net_value: type: - object - 'null' description: Net value of the account -- total market value for investment accounts. Shared across all account kinds -- negative for `line_of_credit` accounts, representing money owed. Null when unknown (e.g. a real-time fetch failed and no cached value exists). properties: amount: type: - number - 'null' currency: type: - string - 'null' example: amount: 84213.55 currency: USD BrokerageAuthID: description: Unique identifier for the connection (brokerage_authorization_id). This is the UUID used to reference the connection in SnapTrade. type: string format: uuid example: 87b24961-b51e-4db8-9226-f198f6518a89 402BrokerageAuthDisabledResponse: description: Cannot perform action because connection is disabled type: object properties: detail: example: Unable to sync with brokerage account because the connection is disabled. code: example: 3003 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 BrokerageAuthorizationDisabledConfirmation: description: Confirmation that the connection has been disabled. type: object properties: detail: description: Connection disabled confirmation type: string example: Connection 0b3ebefb-ed47-43df-cd8f-729a4420b5cf has been disabled LineOfCreditAccount: description: 'A line-of-credit account (e.g. a credit card) under a connection. ' type: object required: - kind - id - connection_id - masked_account_number - sync_status properties: kind: type: string description: Discriminator for the account kind. enum: - line_of_credit example: line_of_credit id: description: Unique identifier for the connected institution account. This is the UUID used to reference the account in SnapTrade. allOf: - $ref: '#/components/schemas/AccountID' connection_id: $ref: '#/components/schemas/BrokerageAuthID' display_name: type: - string - 'null' description: A display name for the account. Either assigned by the user or by the institution itself. example: Chase Sapphire Preferred masked_account_number: type: string example: '****1881' description: The account number assigned by the institution, masked to the last 4 characters (e.g. `****1881`). institution_account_id: type: - string - 'null' example: '77102934' description: A stable and unique account identifier provided by the institution. Will be set to null if not provided. When present, can be used to check if a user has connected the same institution account across multiple connections. institution_id: type: string format: uuid description: Unique identifier for the institution that holds the account. example: c8f1d0e2-3c4f-5a6b-9d7e-0f2a3b4c5d6e opening_date: type: - string - 'null' format: date-time description: Timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format indicating when the account was opened at the institution. Only populated for institutions that expose this data; `null` for all other institutions. example: '2019-11-15T00:00:00.000Z' sync_status: $ref: '#/components/schemas/LineOfCreditAccountSyncStatus' raw_type: type: - string - 'null' description: The account type as provided by the institution. example: CREDIT_CARD net_value: type: - object - 'null' description: Net value of the account -- negative, representing money owed. Shared across all account kinds. Null when unknown (e.g. a real-time fetch failed and no cached value exists). properties: amount: type: - number - 'null' currency: type: - string - 'null' example: amount: -842.17 currency: USD minimum_payment_amount: type: - object - 'null' description: The minimum payment due on the account's next statement. Omitted when no such data is available. properties: amount: type: - number - 'null' currency: type: - string - 'null' example: amount: 40 currency: USD available_credit: type: - object - 'null' description: The remaining credit available to spend on the account (credit limit less the current balance). Omitted when no such data is available. properties: amount: type: - number - 'null' currency: type: - string - 'null' example: amount: 4157.83 currency: USD next_payment_date: type: - string - 'null' format: date description: The date the account's next payment is due, in `YYYY-MM-DD` format. Omitted when no such data is available. example: '2026-09-25' BrokerageAuthorizationRefreshConfirmation: description: Confirmation that the syncs have been scheduled. type: object properties: detail: description: Refresh confirmation details type: string example: Connection 0b3ebefb-ed47-43df-cd8f-729a4420b5cf scheduled for refresh 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 BrokerageAuthorization: description: 'A single connection with a brokerage. 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. ' type: object properties: id: $ref: '#/components/schemas/BrokerageAuthID' created_date: description: Timestamp of when the connection was established in SnapTrade. type: string format: date-time example: '2024-08-20T21:56:19.123Z' brokerage: $ref: '#/components/schemas/Brokerage' name: description: A short, human-readable name for the connection. type: string example: Connection-1 type: description: Whether the connection is read-only or trade-enabled. A read-only connection can only be used to fetch data, while a trade-enabled connection can be used to place trades. Valid values are `read` and `trade`. type: string example: trade disabled: description: 'Whether the connection is disabled. A disabled connection can no longer access the latest data from the brokerage, but will continue to return the last cached state. A connection can become disabled for many reasons and differs by brokerage. Here are some common scenarios: - The user has changed their username or password at the brokerage. - The user has explicitly removed the access grant at the brokerage. - The session has expired at the brokerage and now requires explicit user re-authentication. Please see [this guide](/docs/fix-broken-connections) on how to fix a disabled connection. ' type: boolean example: false disabled_date: description: Timestamp of when the connection was disabled in SnapTrade. type: - string - 'null' format: date-time example: '2022-01-21T20:11:19.217Z' meta: deprecated: true description: Additional data about the connection. This information is specific to the brokerage and there's no standard format for this data. This field is deprecated and subject to removal in a future version. type: object example: identifier: 123456 updated_date: deprecated: true description: Timestamp of when the connection was last updated in SnapTrade. This field is deprecated. Please let us know if you have a valid use case for this field. type: string format: date-time example: '2024-08-20T21:56:20.057Z' is_eligible_for_payout: description: Whether the connection is eligible for a payout. This is an experimental field that is NOT generally available for all partners. Do not use in production without speaking to the SnapTrade team. type: boolean example: true data_freshness_mode: description: 'Indicates the data freshness provided by the institution and by SnapTrade for this connection. The two values are independent; the connection''s data is effectively delayed if either value is `delayed`. The "Data freshness" column on the [SnapTrade Institution Support](https://support.snaptrade.com/brokerages) page (Positions & recent orders tab) identifies institutions whose connections are considered delayed on a Real-time plan because either `institution` or `snaptrade` is `delayed`. ' type: object required: - institution - snaptrade properties: institution: description: 'Indicates the freshness of the data provided by the institution. `realtime` means the institution provides current data; `delayed` means the institution itself does not allow intra-day data updates. ' type: string enum: - realtime - delayed snaptrade: description: 'Indicates how SnapTrade retrieves data for this connection. `realtime` means SnapTrade retrieves current data from the institution during API calls. `delayed` means SnapTrade serves cached data, either because the customer''s plan uses Daily data or because retrieving live data from the institution is too latency-intensive. When this value is `delayed`, you can request updated data using the [manual refresh endpoint](/reference/Connections/Connections_refreshBrokerageAuthorization). ' type: string enum: - realtime - delayed additionalProperties: false example: institution: realtime snaptrade: delayed DeleteConnectionConfirmation: description: Confirmation that a task has been scheduled to delete the connection. type: object properties: detail: description: Connection queued for deletion; please wait for webhook for confirmation. type: string example: Connection queued for deletion; please wait for webhook for confirmation. connection_id: description: The ID of the connection (brokerage authorization) that was scheduled for deletion. type: string example: 0b3ebefb-ed47-43df-cd8f-729a4420b5cf TransactionsStatus: description: 'Status of account transaction sync. SnapTrade syncs transactions from the brokerage under the following conditions: 1. Initial connection - SnapTrade syncs all transactions from the brokerage account as far back as the brokerage allows. Check [our integrations doc](https://support.snaptrade.com/brokerages-table?v=6fab8012ade6441fa0c6d9af9c55ce3a) for details on how far back we sync for each brokerage. 2. Daily sync - Once a day SnapTrade syncs new transactions from the brokerage. 3. Manual sync - You can trigger an incremental sync of transactions with the [transactions sync](/reference/Experimental%20endpoints/Connections_syncBrokerageAuthorizationTransactions) endpoint. ' properties: initial_sync_completed: description: Indicates if the initial sync of transactions has been completed. For accounts with a large number of transactions, the initial sync may take a while to complete. type: boolean example: true last_successful_sync: description: All transactions up to this date have been successfully synced. Please note that this is not the date of the last transaction, nor the last time SnapTrade attempted to sync transactions. allOf: - $ref: '#/components/schemas/SyncStatusDate' first_transaction_date: description: The date of the first transaction in the account known to SnapTrade. It's possible that the account has transactions before this date, but they are not known to SnapTrade. allOf: - $ref: '#/components/schemas/SyncStatusDate' HoldingsSyncStatusDate: description: Date in ISO 8601 format or null (YYYY-MM-DD HH:MM:SS.mmmmmmTZ) type: - string - 'null' example: '2024-06-28 18:42:46.561408+00:00' format: date-time 401FailedRequestResponse: description: Example for failed request response type: object properties: default_detail: example: Unable to verify signature sent default_code: example: 1076 ConnectionAccount: description: 'A single account under a connection, from the `kind`-discriminated union used by `Connections_listConnectionAccounts` and `AccountInformation_listAllUserAccounts`. Use `kind` to determine which schema is present. `investment`, `deposit`, and `line_of_credit` are implemented today. ' oneOf: - $ref: '#/components/schemas/InvestmentAccount' - $ref: '#/components/schemas/DepositAccount' - $ref: '#/components/schemas/LineOfCreditAccount' discriminator: propertyName: kind mapping: investment: '#/components/schemas/InvestmentAccount' deposit: '#/components/schemas/DepositAccount' line_of_credit: '#/components/schemas/LineOfCreditAccount' 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 securitySchemes: PartnerSignature: type: apiKey in: header name: Signature PartnerClientId: type: apiKey in: query name: clientId PartnerTimestamp: type: apiKey in: query name: timestamp