TradeConsole
TradeConsole
Home / Help Center /Charles Schwab Setup
10 min setup + 2–5d approval

ðŸĶ Connecting Charles Schwab (Developer Portal & OAuth 2.0)

Complete walkthrough for creating a Schwab Developer account, registering your Individual Trader API app, configuring exact Callback / Redirect URIs, and understanding the 2–5 business day approval timeline.

⏱ïļ Realistic Approval Timeline: Plan for 2 to 5 Business Days

One-Time Developer Approval

Unlike Alpaca or Robinhood (which connect in ~2 minutes), Charles Schwab requires every individual retail investor using their official API to register a free Individual Developer Account and get their personal app approved by Schwab’s API operations team before OAuth sign-in will activate.

Stage 1: Developer Account
Instant – 1 Business Day
Register at developer.schwab.com and link your retail Schwab login so Schwab verifies you are an existing client.
Stage 2: App Review Queue
2 – 5 Business Days
Your app starts in Approved - Pending. It typically flips to Ready for Use in 2–5 business days (occasionally up to 7 business days during peak periods).
Stage 3: OAuth Connection
~60 Seconds
Once your app badge turns green (Ready for Use), paste your App Key & Secret into TradeConsole and authorize your accounts immediately!
1

Create Your Charles Schwab Developer Portal Account

  1. Open https://developer.schwab.com/ in a new tab and click Register (top right).
  2. Note that your Schwab Developer Portal login is separate from your normal schwab.com brokerage login — register using your email address and verify your email via the confirmation code.
  3. When prompted for developer classification, select Individual Developer (self-directed personal access to your own Schwab brokerage accounts — completely free, $0/month).
  4. Inside the Developer Portal, complete the prompt to verify / link your retail Charles Schwab brokerage client profile and accept the Individual Developer API Terms. This tells Schwab’s review system you are an active Schwab account holder, which speeds up approval significantly.
2

Create Your App & Subscribe to Both Production API Products

Once logged into developer.schwab.com, navigate to Dashboard → Apps → + Create App (or Request an App) and fill out the form carefully:

✅ Select BOTH API Products (Critical!)

Add both of these products to the same app before submitting:

  • Accounts and Trading Production — required to load balances, positions, tax lots, and place/modify/cancel orders.
  • Market Data Production — required for live NBBO Bid/Ask quotes, 5-minute VWAP/ATR candles, and ticket snapshots.
📋 Recommended App Details
  • App Name: Any personal name (e.g. MyPortfolioConsole — avoid using the word “Schwab” inside the App Name, as Schwab rejects trademarked app names).
  • Order Limit: Set to 120 (orders per minute — maximum allowed for Individual Developers; do not leave at 0).
  • App Description: e.g. “Personal portfolio tracking, cash management, and limit order execution for my own Schwab accounts.”
3

Configure Callback URL / Redirect URIs (Read Carefully!)

Most Common Mistake Area

Schwab’s OAuth 2.0 server enforces strict character-for-character matching between the Callback URL registered in your Schwab Developer App and the redirect_uri sent during sign-in. Furthermore, editing Callback URLs later resets an approved app back to Approved - Pending for 24–48 hours — so register the complete comma-separated set on Day 1!

⭐ Recommended Callback URL Field Value (Paste directly into Schwab Developer Portal):
https://127.0.0.1:8182,https://staging.tradeconsole.app/auth/schwab/callback,https://tradeconsole.app/auth/schwab/callback
Registers local loopback (https://127.0.0.1:8182) + Production (https://staging.tradeconsole.app/auth/schwab/callback) + Staging simultaneously in one shot.
☁ïļ Cloud Direct Redirect URI
https://staging.tradeconsole.app/auth/schwab/callback

Used automatically when you access TradeConsole over HTTPS (e.g. tradeconsole.app). After you approve access on Schwab, Schwab redirects your browser straight back into TradeConsole automatically — no manual URL copy-pasting required!

ðŸ’ŧ Local Loopback Redirect URI
https://127.0.0.1:8182

Used when running TradeConsole locally over HTTP (http://localhost:8050), or as a universal fallback on any host. After signing into Schwab, your browser lands on https://127.0.0.1:8182/?code=... — you simply copy that URL from your browser’s address bar and paste it into Step 2 in TradeConsole.

⚠ïļ 4 Strict Rules Enforced by Schwab’s OAuth Server:
  • HTTPS Only: Every Callback URL must begin with https:// — http://localhost:8050 is rejected by Schwab. Always use https://127.0.0.1:8182 (not localhost) for local loopback.
  • Zero Spaces Between Multiple URLs: Separate multiple URLs with a comma and no space (url1,url2 — NOT url1, url2).
  • No Trailing Slash Mismatches: Do not add a trailing / at the end (https://127.0.0.1:8182 and https://staging.tradeconsole.app/auth/schwab/callback have no trailing slash).
  • Total Length ≤ 255 Characters: Schwab caps the Callback URL field at 255 characters total (our recommended 3-URL string above is only 116 characters).
4

Wait for App Status to Turn “Ready for Use”

In developer.schwab.com → Dashboard, check the status pill on your app card:

Schwab Portal Status Can You Connect Yet? What It Means
Approved - Pending No — Wait (~2–5 business days) Despite starting with the word “Approved”, your App Key & Secret are not active on Schwab’s production OAuth gateway yet. Attempting OAuth sign-in during this state returns an error screen on api.schwabapi.com.
Ready for Use Yes! Ready Immediately Your app is live! Click View Details on your app card to reveal your App Key (32+ chars) and Secret (16+ chars).
5

Connect Inside TradeConsole & Authorize Your Accounts

  1. Sign in to TradeConsole and open ⚙ïļ Settings → 🔌 Brokerage Connections → ðŸĶ Charles Schwab.
  2. Paste your App Key and App Secret. Verify the Registered Callback URL matches your environment:
    • On Cloud HTTPS (https://staging.tradeconsole.app/auth/schwab/callback): Click 🔗 1. Save Keys & Open Schwab Sign-In. You’ll log in with your normal retail schwab.com username, password, and 2FA, check the boxes next to every Schwab account you want linked (Individual, Joint, Roth IRA, Rollover IRA), click Allow, and land straight back in TradeConsole automatically!
    • On Local Workstation / Loopback (https://127.0.0.1:8182): After clicking Allow on Schwab, your browser redirects to https://127.0.0.1:8182/?code=C0.b2F1...&session=... and displays “This site can’t be reached” — that is 100% expected! Copy that entire URL from your browser’s address bar, paste it into Step 2. Paste Redirect URL in TradeConsole within 60 seconds, and click Complete Connection.
6

Understanding Schwab’s 7-Day Token Renewal Policy

By Charles Schwab security policy across all Individual Developer apps, Schwab OAuth access tokens expire every 30 minutes (TradeConsole refreshes these automatically in the background every 5 minutes), while Schwab refresh tokens have a hard 7-day lifespan.

Your App Key and App Secret stay encrypted in your TradeConsole vault permanently — so once every 7 days, re-authenticating takes ~10 seconds: simply click 🔗 1. Save Keys & Open Schwab Sign-In and approve on Schwab without re-typing your keys!