OAuth Authentication
The Tradier API uses OAuth 2.0 for authentication and authorization. We support the Authorization Code flow (server-side application), which provides secure access to trading accounts and market data. For an individual developer working on applications and algorithms for their use, OAuth is not necessary; all API calls can be made with your API Token (or Sandbox Token) found in your API Settings. If you are working on an application for public release please reach out to our team at [email protected] about becoming a Tradier partner.
Overview
OAuth 2.0 is a straightforward protocol that allows developers to integrate with Tradier's endpoints using standard client libraries. Once you are accepted as a Tradier partner, you will be invited to our partner developer portal, where you can register and maintain an application with us. The authentication process involves:
- Register your application with Tradier to get your clientID and clientSecret
- Redirect users to our authorization URL, where they will approve scopes for your application
- Parse the authorization code from the callback
- Exchange the authorization code for an access token
- Use the access token to make API requests
Token Types and Lifespans
Authorization Codes
- Lifespan: 10 minutes
- Purpose: Short-lived codes are provided after user authorization
- Usage: Exchanged for access tokens
Access Tokens (Bearer Tokens)
- Lifespan: 24 hours
- Purpose: Used to authenticate API requests
- Usage: Include in the
Authorization
header asBearer {token}
- Renewal: Must exchange a new authorization code when expired
Refresh Tokens
- Lifespan: Do not expire
- Purpose: Generate new access tokens without user re-authorization
- Availability: Only available to approved Tradier Partners
- Approval: Contact [email protected] to request access
Authentication Flow
Step 1: Get Authorization Code
Required Parameters:
client_id
: Your application's client IDscope
: Requested permissions (e.g.,read
,trade
)state
: Random string for security validation
Scopes
Scopes control the level of access granted to your application:
read
: Read access to account information, positions, and market datawrite
: Write access to account data (does not include placing or updating trades)market
: Access market data (does not include streaming)trade
: Permission to place and manage tradesstream
: Access to real-time streaming data
Users will be prompted to approve the requested scopes during authorization.
Example Authorization URL:
https://api.tradier.com/v1/oauth/authorize?client_id={clientId}&scope={scopes}&state={state}
Response
Since this call should be made in a browser, a successful response will be a 302 redirect to Tradier Brokerage’s website where the user can log in and authorize.
Step 2: Handle Callback
If the user authorizes your application, a call will be made to the callback URL registered with your application. That callback will look something like:
http://your-callback-url.com?code={authorization_code}&state={state}
code - Your authorization code
state - The same unique string you sent in the request above
Note: The reason the state is sent back to you is to make sure no-one is tampering with this exchange. If it’s different than the original you should abort the exchange and start over
If everything checks out, you’ve got an authorization code you can exchange for an access token (Congrats!). This code expires in 10-minutes so be sure to move on to the next step efficiently.
Step 3: Exchange Code for Access Token
Make a POST request to exchange the authorization code:
POST https://api.tradier.com/v1/oauth/accesstoken
Authentication: HTTP Basic Authentication
- Your client ID
- Your client secret
*You will need to base64 encode your clientID and clientSecret as clientID:clientSecret *
Headers:
Authorization: Basic {base64_encoded_credentials}
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Body Parameters:
grant_type
: Set toauthorization_code
code
: The authorization code from Step 2
Example Request:
curl -X POST https://api.tradier.com/v1/oauth/accesstoken \
-H "Authorization: Basic {base64_credentials}" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code&code={auth_code}"
Step 4: Use Access Token
Include the access token in API requests:
Authorization: Bearer {access_token}
Example API Request:
curl -X GET "https://api.tradier.com/v1/user/profile" \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Accept: application/json'
Refresh Token Flow (Partners Only)
If you have refresh token access, you can obtain new access tokens without user re-authorization:
POST https://api.tradier.com/v1/oauth/refreshtoken
Authentication: HTTP Basic Authentication (same as access token exchange)
Body Parameters:
grant_type
: Set torefresh_token
refresh_token
: Your refresh token
Security Best Practices
- Protect Access Tokens: Treat access tokens like passwords - never expose them in client-side code
- Validate State Parameters: Always verify the state parameter to prevent CSRF attacks
- Use HTTPS: All OAuth exchanges must use secure connections
- Store Secrets Securely: Keep client secrets in secure server-side storage
- Monitor Token Expiration: Implement proper token refresh logic
Support
For technical questions or to request refresh token access:
- Email: [email protected]
- Partners: Access OAuth credentials through your organization's dashboard
Updated about 1 month ago