← Home ← Dashboard
Which setup are you following?
Type 1
Interactive Brokers
Futures & Equities · VoltRouter hosts your IB Gateway · /signal + /mo
Type 2
Alpaca / Tradovate
Cloud-native brokers · Connect with API key · /signal, no monthly fee
Not sure which type you need? If you use Interactive Brokers, you need Type 1. If you use Alpaca or Tradovate, you need Type 2.
01What You'll Need
Type 1 — Interactive Brokers Live
  • Interactive Brokers account — a paper trading account is perfect for testing. Sign up at interactivebrokers.com. Both paper and live accounts are supported.
  • IBKR credentials ready — Submit your credentials via the dashboard — VoltRouter handles provisioning and keeps the Gateway running. Nothing to download or configure.
  • TradingView Pro or higher — webhook alerts require a paid TradingView plan. Free accounts cannot send webhooks. Any other webhook-capable platform (Python, bots, AI agents) works without restriction.
  • A card for top-ups — any major debit or credit card accepted.
Type 2 — Alpaca Live  /  Tradovate Coming Soon
  • Alpaca account — sign up at alpaca.markets. Both live and paper trading are supported. Generate an API key and secret from your Alpaca dashboard.
  • No server or Gateway needed — cloud-native brokers connect via API key only. No monthly infrastructure fee. Just add credentials in the VoltRouter dashboard and you are ready to route.
  • TradingView Pro or higher (or any webhook source) — same as Type 1.
  • A card for top-ups — any major debit or credit card accepted.
02Broker Setup
IBKR — Hosted Gateway Type 1

VoltRouter provisions and manages a dedicated IB Gateway instance for every IBKR user. You do not need to download, install, or configure anything locally. Once you submit your credentials via the dashboard, VoltRouter provisions your Gateway and keeps it running.

How credentials are stored: Your IBKR username and password are encrypted with AES-256-GCM before storage. They are never saved in plaintext and are only decrypted inside the secure infrastructure environment at provisioning time.
  1. Log into your VoltRouter dashboard
  2. In the Broker Accounts section, click Connect Broker → Interactive Brokers
  3. Enter your IBKR secondary username, then click Connect — VoltRouter provisions your Gateway (allow up to a few minutes)
  4. Once provisioned, click Open Gateway on your broker account card — a browser tab opens with the IB Gateway login screen
  5. Log in with your secondary IBKR credentials from your own device and network, then complete your IBKR 2FA prompt
  6. Return to the dashboard — status will show Active once the connection is confirmed
Use a dedicated secondary IBKR username for API trading.

IBKR allows only one active session per username. Opening the IBKR mobile app or Client Portal under the same username will disconnect your Gateway. Create a secondary username: log into Client Portal → Settings → User Management → Add User. Grant trading permissions only. Use that secondary username when connecting to VoltRouter — not your main account username and not your account number (e.g. U1234567).
Weekly Sunday re-authentication.

IBKR invalidates Gateway sessions every Sunday at approximately 01:00 AM US Eastern time. This is an IBKR security requirement that cannot be bypassed. You have two options:

Manual (default): Each Sunday morning, click Open Gateway on your dashboard, log in with your secondary credentials, and complete your IBKR 2FA prompt. Your Gateway runs unattended for the rest of the week. No additional setup required.

Automated: Save your restart credentials via the dashboard (secondary username, password, and TOTP secret). VoltRouter will handle the Sunday reconnect without any action from you. To enable this, your secondary IBKR username must have Mobile Authenticator (TOTP) configured — not IB Key. Go to Client Portal → Settings → Two-Factor Authentication to switch. Once configured, enter your credentials and the 32-character TOTP secret in the Restart Credentials section of your broker account card.
⚠ If you change your IBKR password, update your credentials in the VoltRouter dashboard. Your Gateway disconnects until new credentials are saved.
Advanced — Self-Hosted IB Gateway: Advanced users may self-host IB Gateway and point VoltRouter at their own instance. Contact hello@voltrouter.com for configuration details. This is unsupported and not recommended for most users.
Alpaca — API Key Type 2

Alpaca connects via API key — no hosted infrastructure required. Paper and live accounts are both supported and handled by a toggle in the dashboard.

  1. Log into app.alpaca.markets
  2. Go to API Keys and generate a key/secret pair (use paper keys for testing)
  3. In your VoltRouter dashboard, click Connect Broker → Alpaca
  4. Paste your API key and secret, select Live or Paper, then click Connect
  5. Status shows Active immediately — no provisioning delay
ℹ Alpaca paper trading uses the same API — just a different environment. Your paper account is isolated from live funds. VoltRouter handles the endpoint switching automatically based on your paper/live selection.
Tradovate Beta

Tradovate futures execution is available — connect your credentials via the dashboard. Full E2E verification is in progress; some edge cases may not yet be supported.

03VoltRouter Signup
  1. Go to voltrouter.com and enter your email address
  2. Click Send magic link — no password required
  3. Check your email and click the link to activate your account and reach your dashboard
  4. To log back in later, use the Already have an account? Log in link on the sign-in page
ℹ Sign-up uses a magic link — enter your email and click the link we send you. Once your account is created, you can log back in the same way from the sign-in page. No password is ever set or required.
04Funding Your Balance
  • Each signal costs — deducted from your prepaid balance when the signal is accepted and routed.
  • IBKR users also pay a monthly Gateway infrastructure fee of /mo per connected IBKR account. This is billed separately via Stripe and shown on your dashboard.
  • Balance never expires. It carries over indefinitely and is not subject to any inactivity fees.
  • Signals that fail (503 Gateway disconnected, broker rejection) are refunded to your balance automatically.
05Understanding Your Dashboard

The dashboard gives you a live view of your account. Here is what each section shows:

  • Balance — your prepaid USD balance. Each signal costs . Top-up button opens the funding flow.
  • Broker Accounts — your connected brokers with status (active / pending / disconnected). Click Connect Broker to add an IBKR, Alpaca, or Tradovate account. IBKR accounts show an Open Gateway button — use this to complete your initial login and for the weekly Sunday re-authentication. Each account shows a label you can use for the account routing field.
  • Volt Log — three tabs in one card. Signal Log shows every signal VoltRouter has processed, with timestamp, symbol, action, status, broker order ID, fill price, cost, and reason. Daily Summary shows a per-day breakdown grouped by strategy — signals sent, rejected, cost, average fill price, and how each trade was closed. Export any day as CSV. Strategies — create, rename, archive, and filter by strategy. Strategies are created automatically on first signal or manually in advance.
  • Webhook Config — your pre-built webhook URL and an example JSON payload ready to paste into your alert platform. Includes your API key pre-filled.
  • Risk Controls — per-account settings: max position size, max signals per minute, and optional daily spend cap. Platform ceilings apply above any per-account limit.
  • Automation Controls — kill switch rules that pause signal routing automatically when a strategy fires too many signals in a short window. Set a rule in advance: if more than X signals arrive in Y seconds, pause routing for Z minutes. Rules can be scoped to a specific strategy or applied account-wide. Free — no charge per trigger.
  • Quick ActionsPanic (close all open positions immediately) and Cancel All Orders (cancel all pending orders without closing positions).
  • API Key — rotate your API key if it is compromised. Old key is invalidated immediately.
06Alert Platform
ℹ The steps below use TradingView as an example. The same approach works with any webhook-capable platform — TrendSpider, Python scripts, AI agents, or any tool that can POST JSON to a URL.
  1. Open TradingView and navigate to your chart or strategy
  2. Click the Alerts button (clock icon) → Create Alert
  3. Set your alert condition (price cross, indicator signal, strategy alert, etc.)
  4. In the Notifications tab, enable Webhook URL
  5. Paste your VoltRouter webhook URL from the dashboard
  6. Set the Message field to the JSON payload (see examples below)
Building Your Alert Message

The message field is the JSON body sent to VoltRouter when the alert fires. Build it as a string literal — you can reference TradingView built-in variables.

Minimal — market buy
{ "broker": "ibkr", "symbol": "MNQ", "action": "BUY", "quantity": 1, "api_key": "sk_your-key-from-dashboard" }
With strategy ID and limit order
{ "broker": "ibkr", "symbol": "MNQ", "action": "BUY", "quantity": 1, "order_type": "LIMIT", "take_profit_price": 21500.00, "strategy_id": "breakout_v2", "api_key": "sk_your-key-from-dashboard" }
Routing to a specific account by label
{ "broker": "alpaca", "symbol": "AAPL", "action": "BUY", "quantity": 10, "account": "paper-account", "api_key": "sk_your-key-from-dashboard" }
IBKR — Micro Silver Futures (tradingClass suffix)
{ "broker": "ibkr", "symbol": "SI_SIL", "action": "BUY", "quantity": 1, "expiry": "202609", "api_key": "sk_your-key-from-dashboard" }
IBKR — Adaptive market order (native IB algo)
{ "broker": "ibkr", "symbol": "MNQ", "action": "BUY", "quantity": 1, "extra": { "strategy": "Adaptive", "strategyParameters": { "adaptivePriority": "Normal" } }, "api_key": "sk_your-key-from-dashboard" }
Pine Script — VoltRouterWebhook library (recommended)

The easiest way to build alerts is with the published Pine Script v6 library. Add this to the top of your script:

import yuzername/VoltRouterWebhook/5 as vr

The library provides helper functions that build the correct JSON payload for you. See the library page on TradingView for full usage examples.

Manual approach (Pine Script v5/v6): Pass your JSON payload as the alert_message parameter directly in your strategy function:

alertMsg = '{"symbol":"' + syminfo.ticker + '","action":"BUY","quantity":1,"broker":"ibkr","order_type":"MARKET","api_key":"YOUR_KEY"}'
strategy.entry("Long", strategy.long, alert_message=alertMsg)

VoltRouter reads the alert message field, not the alert condition description. Make sure your JSON is in the Message field, not the alert name.
07Supported Fields
Field Type Required Brokers Description
symbol string Yes All Ticker symbol. e.g. MNQ, ES, AAPL. See symbol formats below.
action BUY / SELL / FLAT Yes All Direction or close. FLAT closes the entire position regardless of quantity.
quantity integer Yes All Number of contracts or shares. Ignored for FLAT — actual position size is resolved at execution time.
broker ibkr / alpaca / tradovate Yes All Which broker to route to. Must match credentials configured in the dashboard.
api_key string Yes All Your VoltRouter API key. Include in the JSON body only — never in the URL. Rotate from dashboard if compromised.
order_type string No All Default: MARKET. Standard types (MARKET, LIMIT, STOP, STOP_LIMIT) work on all brokers. See advanced order types table below for IBKR-only types.
take_profit_price number No All Required for LIMIT and STOP_LIMIT. Send with stop_loss_price to place a bracket — take profit fills as a limit order.
stop_loss_price number No All Stop loss price. Send with take_profit_price to place a bracket. Triggers as a stop-market. Mutually exclusive with trailing_stop_percent.
trailing_stop_percent number No IBKR, Alpaca Trailing stop as a percentage (0.1–100). Mutually exclusive with stop_loss_price.
entry_price number No IBKR Explicit bracket entry price. When set, the bracket entry leg uses a limit order at this price instead of market.
time_in_force DAY / GTC / IOC / FOK / OPG No IBKR, Alpaca Default: GTC for limit/stop orders. OPG (at the open) is IBKR only. IOC and FOK cancel immediately if not fully filled.
expiry string No IBKR Contract expiry. YYYYMM (e.g. "202606") or CME code (e.g. "MNQM26"). Omit for front month. Futures only.
extended_hours boolean No IBKR, Alpaca Allow order to fill outside regular trading hours. Defaults to false.
extra object No IBKR Native IB order properties passed through verbatim. Use for IB algos (Adaptive, VWAP, Arrival Price) and any IB-specific order fields. See extra field section below.
strategy_id string No All Tags this signal to a named strategy. Strategies appear automatically in the dashboard on first use and can be renamed, archived, and filtered from the Strategies tab in the Volt Log card. Rate limiting is applied per strategy_id. Signals can be filtered by strategy in the signal log.
client_order_id string No All Idempotency key — duplicate signals with the same key are discarded and not charged.
account string No All Broker account label. Routes to a specific account; omit to use the primary account for the broker.
dry_run boolean No All Validate only — returns the parsed signal without placing an order or deducting balance. Useful for testing payload format.
comment string No All Freeform note attached to the signal log entry. Max 255 characters.
Bracket orders — send take_profit_price and stop_loss_price together on a BUY or SELL to place a bracket. Take profit fills as a limit. Stop loss triggers as a stop-market.

Trailing stop — send trailing_stop_percent (e.g. 1.5) to trail 1.5% from the market price. Cannot be combined with stop_loss_price.
Advanced Order Types — IBKR Only

These order types are supported when broker is ibkr. Set via the order_type field.

order_type IB Name Description
MARKET MKT Standard market order. Default.
LIMIT LMT Limit order at take_profit_price.
STOP STP Stop-market at stop_loss_price.
STOP_LIMIT STP LMT Stop-limit. Requires both stop_loss_price and take_profit_price.
MIT MIT Market if touched. Triggers a market order when price touches stop_loss_price.
MOC MOC Market on close. Executes at the official closing price.
MOO MOO Market on open. Executes at the official opening price.
LOC LOC Limit on close. Limit order participating in the closing auction.
LIT LIT Limit if touched. Triggers a limit order when price touches stop_loss_price.
MIDPRICE MID Midpoint price order. Attempts to fill at the mid of the bid/ask spread.
REL REL Relative / pegged-to-primary order. Dynamically adjusts with the market.
BOX_TOP BOX TOP Box top order. Executes at the current best price on the opposite side.
SNAP_MID SNAP MID Snap to midpoint. Pegged to the midpoint of the NBBO.
SNAP_MKT SNAP MKT Snap to market. Pegged to the best price on the same side.
SNAP_PRM SNAP PRM Snap to primary. Pegged to the primary exchange best price.
Symbol Formats — IBKR Futures

VoltRouter resolves futures contracts dynamically. Several symbol formats are supported.

Format Example Description
Root only MNQ Resolves to the front month contract automatically.
CME expiry code MNQM26 Symbol + month code (F G H J K M N Q U V X Z) + 2-digit year. Resolves to that specific contract month.
YYYYMM expiry MNQ + expiry: "202606" Pass root symbol with a separate expiry field in YYYYMM format.
tradingClass suffix SI_SIL Underscore separates root from tradingClass. Used for contracts where multiple products share a root symbol (e.g. Micro Silver = SI root, SIL tradingClass).
Regional exchange suffix FCPO.MY Dot separates symbol from 2-letter exchange code. Used for non-US exchange futures (e.g. Malaysian Palm Oil on Bursa).
Known limitation: Hang Seng Index futures (e.g. MHI, HSI) may return "No security definition found" from IB Gateway. This is a contract resolution issue — the active contract may not be discoverable via the standard conid lookup. If you encounter this, try passing the full expiry explicitly (e.g. MHIK26) or contact support.
The extra Field — Native IB Order Properties

The extra field passes any native Interactive Brokers order property directly to the IB API without VoltRouter needing to model it explicitly. This is for advanced users who need IB-specific behaviour not covered by standard fields.

Adaptive algo — priority control
{ "broker": "ibkr", "symbol": "MNQ", "action": "BUY", "quantity": 1, "extra": { "strategy": "Adaptive", "strategyParameters": { "adaptivePriority": "Patient" } }, "api_key": "sk_your-key-from-dashboard" }

Valid adaptivePriority values: Patient, Normal, Urgent. Patient minimises market impact; Urgent prioritises speed of fill.

Discretionary amount
{ "broker": "ibkr", "symbol": "AAPL", "action": "BUY", "quantity": 100, "asset_class": "equity", "order_type": "LIMIT", "take_profit_price": 195.00, "extra": { "discretionaryAmt": 0.05 }, "api_key": "sk_your-key-from-dashboard" }
⚠ Properties passed via extra are forwarded verbatim to the IB API. Invalid or unsupported properties are silently ignored by IB Gateway — they do not cause a VoltRouter error but the order may not behave as expected. Refer to the IB API documentation for supported order properties.
08Panic Button

The Panic button closes open positions using market orders immediately. Use it as an emergency exit — during unexpected news events or to stop a runaway strategy.

All Accounts Panic
  • Closes open positions across all your connected broker accounts simultaneously.
  • Queries each account's open positions, then fires a market close order for every position in parallel.
  • Cost: base fee + per-position fee, capped at a maximum total. Current pricing is shown in the confirmation dialog on your dashboard before you commit.
  • Charge is refunded automatically if all closes fail across all accounts.
Single Account Panic
  • Targets a specific broker account only — useful when you want to flatten one account without affecting others.
  • Available from the broker account row in the dashboard, or via POST /volt/panic/:broker_account_id.
  • Cost: lower base fee + per-position fee than the all-accounts version. Current pricing shown in the confirmation dialog.
  • Charge is refunded automatically if the close fails.
Cancel All Orders

A separate action that cancels all open orders (pending entries, limit orders) without closing any existing positions. Available as a separate button on the dashboard.

⚠ Panic uses market orders. In illiquid conditions, fills may be at unfavourable prices. Use it as an emergency exit, not a routine exit strategy. Check current pricing in the dashboard before pressing Panic.
09Common Errors
Error Meaning Fix
400 Missing required field or invalid JSON Check that broker, symbol, action, quantity, and api_key are all present and correctly typed. Validate your JSON is well-formed.
401 Missing or invalid API key Ensure api_key is in the JSON body (not the URL). Copy it directly from your dashboard.
402 Insufficient balance Top up your balance from the dashboard.
403 broker_account_id does not belong to your account Ensure the broker_account_id in the panic or modify URL matches one of your own connected accounts.
404 Broker account or account label not found Check the account label in your signal's account field exactly matches the label shown in your dashboard. Labels are case-sensitive.
422 — risk: rate limit Signal rate exceeded max signals per minute for this strategy Reduce alert frequency or increase max_volts_per_minute in Risk Controls on your dashboard.
422 — risk: position size Requested quantity exceeds your max position limit Reduce quantity in your signal or increase max_position in Risk Controls. Platform ceiling applies.
422 — risk: daily spend Daily spend cap reached Your max_daily_loss_usd limit has been hit. Resets at midnight UTC, or raise the cap in Risk Controls.
422 — other Unsupported symbol, bad expiry format, or invalid field value Check symbol is valid for the selected broker. Use YYYYMM or CME format for expiry. See supported fields table.
503 IB Gateway not connected Check the broker account status on your dashboard. Signals that fail with 503 are refunded automatically.
No position to close FLAT sent but no open position found for this symbol Verify the symbol and broker match an open position. The position may already be closed.
Broker not configured No broker account connected for the requested broker type Connect a broker account in your dashboard — click Connect Broker and add credentials for the requested broker.
duplicate Signal already processed (same client_order_id) TradingView sometimes fires an alert twice. Use a unique client_order_id per signal, or VoltRouter will deduplicate by internal ID automatically.
10IB Gateway Troubleshooting

VoltRouter manages your IB Gateway — most issues resolve automatically. Follow these steps in order. No server access or SSH is required.

  1. Check the dashboard status indicator — if your IBKR broker account shows "Disconnected", wait 30 seconds for automatic reconnection before taking further action.
  2. Re-save your IBKR credentials in the dashboard — navigate to your connected broker account, update the credentials, and save. This triggers a fresh provisioning attempt.
  3. Check that your IBKR account is not locked or requiring 2FA re-approval — log into IBKR Client Portal directly to verify your account is in good standing and no action is required.
  4. If using a secondary IBKR user, confirm that user has trading permissions enabled in Client Portal under Settings → User Management.
  5. Contact hello@voltrouter.com — include your VoltRouter email and the approximate time of disconnection. We can inspect the Gateway container directly.
ℹ IBKR allows only one active session per user. Opening the mobile app or Client Portal under the same IBKR user will disconnect your Gateway. The fix: create a dedicated secondary IBKR user for API trading — see Section 02 for instructions.
⚠ Signals received while your Gateway is disconnected will fail with a 503 and be refunded automatically. Your signal log shows the failure with a full timestamp and reason.
11FAQ
Do I need to install or configure IB Gateway?
No. VoltRouter provisions and manages a dedicated IB Gateway for you. Submit your IBKR credentials via the dashboard and we handle the rest. Nothing to download or configure.
How are my IBKR credentials stored?
Your credentials are encrypted with AES-256-GCM before storage. They are never saved in plaintext and are only decrypted inside the secure infrastructure environment when provisioning or reconnecting your Gateway.
Is my data secure?
Yes. All broker credentials are encrypted with AES-256-GCM before storage and are never logged or returned to the client. Your API key is never stored in plaintext. We do not hold or have access to your broker account funds.
Can I use a live IBKR account?
Yes. Paper and live accounts are both supported. VoltRouter configures the Gateway for your account type automatically. Live orders execute with real money — test thoroughly on paper first.
Can I connect both a paper and live IBKR account?
Yes — each is a separate broker account in VoltRouter with its own hosted Gateway. See your dashboard for current Gateway pricing per account.
Can I test with paper or demo trading?
Yes. IBKR paper accounts are fully supported — enter your IBKR paper credentials in the dashboard. Alpaca paper mode is also supported — select "Paper" when connecting your Alpaca account. Both environments are isolated from live funds.
What is the monthly IBKR Gateway fee?
IBKR users pay a small monthly infrastructure fee that covers the dedicated hosted Gateway server. Cloud-native brokers (Alpaca) have no monthly fee — you only pay per signal. The current fee is shown on your dashboard.
Which brokers are supported?
IBKR (futures and equities) and Alpaca (equities) are live. Set the broker field in your signal to ibkr or alpaca. Tradovate support is in development.
Can I route to multiple broker accounts?
Yes. Connect as many broker accounts as you need from the dashboard. Each account gets a label. Use the account field in your signal payload to target a specific account by label. Without the account field, signals route to your primary account for that broker.
What does the account field do?
It routes the signal to a specific broker account by its label, bypassing the primary account lookup. Labels are set when you connect an account in the dashboard. Useful when you have a live and paper account for the same broker, or multiple strategies targeting different accounts.
What is strategy_id for?
It tags signals from a named strategy. The first time a signal arrives with a strategy_id, VoltRouter creates the strategy automatically — it appears in the Strategies tab inside the Volt Log card on your dashboard where you can rename it, archive it, and click "View signals" to filter the signal log to just that strategy. You can also create strategies manually before any signals arrive. The rate limit (max signals per minute) is applied per strategy_id, not per account — so two strategies can each have their own rate budget. It also lets you use the modify/cancel endpoints to target orders by strategy without needing the broker order ID.
What happens to my balance if a signal fails?
Signals that fail due to a broker rejection or 503 Gateway disconnected are refunded to your balance automatically. Risk-rejected signals (rate limit, position size, daily spend cap) are logged with a warning but not charged.
Can I set a daily spend cap?
Yes. Set max_daily_loss_usd in Risk Controls on your dashboard. Once your total signal spend for the day reaches that amount, all further signals are rejected until midnight UTC. Leave it blank to disable the cap.
What happens if IB Gateway goes offline while a signal fires?
VoltRouter returns a 503 and refunds your balance automatically. The signal is logged with status "error" so you have a full audit trail with timestamp and reason.
Can I run multiple strategies simultaneously?
Yes — use the strategy_id field to tag signals from different strategies. They all route through the same account. Risk limits apply per account; rate limits apply per strategy.
What order types are supported?
MARKET, LIMIT, STOP, STOP_LIMIT, bracket (entry + TP + SL), and trailing stops work on IBKR and Alpaca. IBKR additionally supports MIT, MOC, MOO, LOC, LIT, MIDPRICE, REL, BOX_TOP, SNAP_MID, SNAP_MKT, and SNAP_PRM. See the Advanced Order Types table in Section 07.
How do I close an entire position regardless of its size?
Use action: "FLAT" — VoltRouter queries your actual position size at execution time and closes it completely. The quantity field in the signal is ignored for FLAT.
What is the extra field for?
It passes native IB API order properties directly to IB Gateway without VoltRouter needing to model them. Use it for IB execution algos (Adaptive, VWAP), discretionary amounts, and any IB-specific order field. See the extra field section in Section 07 for examples.
When does the beta end?
We will notify all beta users by email before any major changes. Your account and balance carry over automatically.