Connect tastytrade to Nyria
Step-by-step tastytrade OAuth setup — live and paper, 10-leg options, crypto spot, and the one HTTP header you must never send.
By the end you will have a tastytrade account (paper or live) connected to Nyria via OAuth, capable of placing single-leg, multi-leg up to 10 legs, and crypto-spot orders driven by your strategy alerts.
Paper first. tastytrade gives every customer a paper-trading account alongside their live account. Connect paper, route a strategy at it, and watch a full alert-to-fill round-trip before you point a real account at any webhook. Live-broker incidents are not refundable.
Prerequisites
- A funded tastytrade account, or at minimum a tastytrade login with the paper account enabled. Sign up at tastytrade.com if you don't have one yet.
- A Nyria strategy you want to attach the broker to. If you don't have one, follow the Quick Start first.
- An active Nyria subscription if you intend to deploy a live bot. Paper bots can be wired without a subscription, but deployment to a live broker requires a paid plan.
- For options trading: tastytrade options approval at the level you want to trade. Multi-leg defined-risk spreads need approval level 3+ on tastytrade's side.
- For crypto trading: tastytrade's crypto trading enabled on your account. This is a per-account opt-in inside the tastytrade portal — Nyria cannot turn it on for you.
See the tastytrade integration overview for the feature matrix and order-type support before you continue.
What you get after connecting
Once OAuth completes, the connection unlocks the following surfaces in Nyria:
| Capability | Detail |
|---|---|
| Equities | Stocks and ETFs, fractional shares supported. |
| Options | Single legs and multi-leg spreads up to 10 legs per order. |
| Crypto | Spot only (BTC/USD, ETH/USD, etc.). No perpetual futures. |
| Order types | Market, Limit, Stop, Stop-Limit, GTC. |
| Multi-account | Every account under your login (paper + live + entity) becomes selectable. |
Step 1: Open the Integrations tab in Nyria
Sign in at app.nyria.io.
Click Integrations in the left sidebar.
Click Add Integration and select the tastytrade tile.
If you got here from a lander deep-link or marketing email, you may land directly on the broker modal via ?brokerModal=tastytrade. That is the same modal — skip to Step 2.
Step 2: Choose Paper or Live
The modal asks which environment to authorize against. This selection is not a checkbox you can flip later — it determines the OAuth scope. To trade both, you authorize each independently (two integrations show up in your dashboard).
Select Paper for risk-free testing. Paper accounts return simulated fills against tastytrade's mock matching engine.
Select Live only when you have completed at least one end-to-end paper test on the strategy you plan to deploy.
Paper and live tastytrade accounts share the same login but route through different OAuth scopes on tastytrade's side. The Nyria modal handles this for you — you just pick the environment.
Step 3: Complete the OAuth flow on tastytrade
Clicking Connect opens tastytrade's hosted OAuth consent page in a new tab.
Sign in with your tastytrade username and password if you are not already logged in. Nyria never sees these credentials — they go directly to tastytrade.
Review the requested scopes. Nyria asks for: read account list, read balances, read positions, place and cancel orders. There is no scope for funding transfers — Nyria cannot move money into or out of your account.
Click Authorize. tastytrade redirects back to
https://app.nyria.io/integrations with the OAuth code, which Nyria
exchanges server-side for an access + refresh token.
If the popup is blocked, allow popups for app.nyria.io and click Connect again. The OAuth state token is regenerated each click — there is no stale-state error from retrying.
Step 4: Confirm your accounts appear
After redirect, Nyria queries tastytrade's /customers/me/accounts endpoint and writes each returned account into user_broker_accounts. The success modal shows the count.
Wait for the Connected badge to appear next to the tastytrade tile. This usually takes 2-3 seconds.
Expand the integration card. Every account under your login appears as a row, with its account number (last 4 visible), type (margin, cash, IRA, paper), and current buying power.
If an account is missing, click Refresh accounts at the top of the card. If it is still missing, the account is either closed at tastytrade or restricted in a way that hides it from the API.
Step 5: Attach a bot to a tastytrade account
A broker connection is not a bot — it is the prerequisite. Bots tie a strategy to a specific account.
Open a strategy from Strategies.
Click Add Bot, then select your tastytrade account from the dropdown.
Set the Position Size — the maximum cash the bot allocates to each
signal. Contract/share count is floor(position_size / per-contract cost),
where the per-contract cost (the minimum_budget) is computed live by
Nyria at execution time. A $1000 position size against a contract
costing $250 produces 4 contracts.
Save the bot. It is now armed against the strategy's alerts.
Step 6: Send a test alert
Before going live, prove the chain end-to-end with a small paper trade.
From the strategy's Integration tab, copy the webhook URL. It looks
like https://trades.nyria.io/webhooks/<tokenHash>.
Send a test alert via curl. Replace <tokenHash> with your real token.
curl -X POST https://trades.nyria.io/webhooks/<tokenHash> \
-H "Content-Type: application/json" \
-d '{
"symbol": "SPY",
"action": "buy",
"order_type": "market"
}'The fields above are the minimum Nyria needs to interpret a stock entry. For the full payload contract — including option symbols, multi-leg spreads, crypto, and exit semantics — see the Webhook Payload Reference.
Open the strategy's Logs tab. Within ~2 seconds you should see a
row like BTO x1 SPY | Order ID 12345 — that is your paper bot
routing the order to tastytrade.
Open the tastytrade platform and confirm the position appears in your paper account.
Multi-leg options up to 10 legs
tastytrade's API supports complex spreads up to 10 legs per order. Nyria's converter respects that limit and rejects anything larger before placing.
A 4-leg iron condor payload looks like this:
{
"symbol": "SPY",
"action": "buy_to_open",
"order_type": "limit",
"limit_price": 1.25,
"legs": [
{ "action": "sell_to_open", "symbol": "SPY 250620P 540", "ratio": 1 },
{ "action": "buy_to_open", "symbol": "SPY 250620P 535", "ratio": 1 },
{ "action": "sell_to_open", "symbol": "SPY 250620C 560", "ratio": 1 },
{ "action": "buy_to_open", "symbol": "SPY 250620C 565", "ratio": 1 }
]
}Nyria pads OCC symbols to the 21-char format tastytrade expects automatically. If you send shorthand like SPY 250620P 540, the converter rewrites it to the padded form before submission.
Multi-leg exits must reference legs that are all currently open. If any leg of a spread has already closed or was never filled, Nyria refuses to send a partial exit that would leave a naked leg.
Crypto spot
tastytrade offers crypto spot only. Perpetual futures are not available on tastytrade — if your strategy targets perps, route those signals to Binance instead — see the Binance setup page. (Coinbase perp support is coming soon.)
Crypto pairs on tastytrade use USD, not USDT or USDC:
{
"symbol": "BTC/USD",
"action": "buy",
"order_type": "market",
"notional": 100
}Nyria normalizes parser-emitted BTC/USDT to BTC/USD for tastytrade transparently. Fractional quantities (0.0015 BTC) are supported — the entire decimal value survives the pipeline.
Token refresh expectations
tastytrade OAuth access tokens have a 15-minute TTL (token_ttl_seconds=900 in the trade-bot capability registry). Nyria refreshes them server-side on a rolling schedule — you should never see an auth error during normal operation.
What that means for you:
- Connect once, forget. As long as the refresh token stays valid (90 days of inactivity tolerance on tastytrade's side), Nyria keeps the access token current.
- Refresh failures surface in Integrations. If tastytrade revokes your refresh token (you changed your password, opted out of API access, or hit a server-side reset), the integration card flips to Reauthorize and the affected bots pause. Click Reconnect and run Step 3 again.
- Long idle accounts — if you have not traded against the connection for over ~85 days, reconnect proactively before going live. Token rotation is silent on tastytrade's side until you try to use it.
The Accept-Version header — never send it
This is the one tastytrade quirk every integrator hits eventually. tastytrade's API accepts an optional Accept-Version HTTP header that pins the response shape to a specific API revision date. Do not send it.
# DO NOT do this
curl -H "Accept-Version: 20250812" https://api.tastyworks.com/orders/dry-run
# Returns: 406 — "The requested version is not supported"tastytrade rotates supported versions on a per-endpoint basis. A date that works on /balances will return 406 Not Acceptable on /orders/dry-run the next day. Empirical probe on 2026-05-19: pinning 20250812 returned 200 on /balances but 406 on /orders/dry-run in the same session.
The correct approach (and what Nyria does internally) is to omit the header entirely. tastytrade then serves the current default version, which matches the public reference implementation and survives server-side rotations.
This only matters if you are building your own tastytrade client alongside Nyria — Nyria's broker layer already handles it. The trade-bot's tastytrade adapter explicitly comments this:
Accept-Version is intentionally NOT sent. TastyTrade treats it as opt-in
version pinning, and any date the server has rotated past returns 406 on
a per-endpoint basis. Omitting the header serves the current API version.Troubleshooting
"401 Unauthorized" right after connecting
Most often this is the Bearer prefix on the Authorization header. tastytrade's OAuth flow requires Authorization: Bearer <access_token>. Raw token (no Bearer) is the older /sessions scheme and returns 401 against OAuth-protected endpoints. Nyria sends the prefix correctly — if you see this on your own client, that is the first thing to check.
"406 Not Acceptable" on order placement
You are sending the Accept-Version header. Remove it. See the section above.
Bot stays in "Reauthorize" forever
Your refresh token was revoked on tastytrade's side. Click Reconnect in Integrations and complete the OAuth flow from Step 3 again. The old token row is replaced; no manual cleanup is needed.
Order rejected with "insufficient buying power" on a credit spread
Credit spreads require margin equal to max loss, not the net credit. For a $5-wide vertical at $1.25 credit: required = (5 - 1.25) × 100 × contracts = $375 per contract. Confirm your account has that available before the alert fires.
Crypto pair "not found"
tastytrade's symbol is BTC/USD, not BTCUSDT or BTC-USD. Nyria converts automatically from the parser's normalized form, but if you are sending raw payloads, use the BTC/USD shape.
Account does not appear in the list
Closed accounts and accounts under regulatory restriction are hidden from the /customers/me/accounts endpoint by tastytrade. Confirm the account is open and unrestricted in the tastytrade portal, then click Refresh accounts in Nyria.
What this integration does not support
Per Nyria's trading behavior policy, the following are intentionally not advertised as supported on tastytrade or any broker:
- Bracket / OCO / OTO orders
- Trailing stops
- Attached take-profit legs
These are out of scope today. Build exits as separate alerts against the same strategy.
Crypto perpetual futures are also not available on tastytrade — that is a tastytrade product limitation, not a Nyria one. Route perp signals to a perp-capable broker.
Next steps
- tastytrade integration overview — full feature matrix and capability flags.
- Webhook Payload Reference — every field Nyria recognizes in an incoming alert.
- Strategies — build the alert source that drives this connection.
- Trading behavior — what Nyria guarantees and what it does not.
- FAQ — common questions about brokers, fills, and order routing.