summary: paste the exact error string you're seeing into this article — every common algo error is indexed below with what it means, why it happens, and the fastest fix. covers every status in the notification log plus the most common broker rejection messages.
how to use this article
when your algo throws an error, you'll see it in one of two places — the status column of the algo notification log, or as a longer message inside your broker (usually Tradovate).
find the exact wording you're seeing in the list below. each section tells you what the error means, the usual root cause, and the specific steps to fix it.
if you want the broader troubleshooting flow — which of the 3 diagnostic questions to ask first — start with my algo didn't trade — start here.
"rejected" status in the notification log
what it means: edgeful sent the order to your broker, and the broker received it — but refused to execute it.
most common cause: contract mismatch between what your TradingView alert sent and what your broker expects for that platform.
the rule:
Tradovate / NinjaTrader → use the current front-month contract (e.g.,
NQM2026,ESU2026,MGCM2026)ProjectX (including Topstep, TopstepX) → use the continuous contract (e.g.,
NQ1!,ES1!,MGC1!)
other common causes: insufficient margin on the account, the account doesn't have the right product permissions, or a contract rollover has invalidated the symbol your alert was created with.
how to fix it:
open the notification log and click into the rejected trade — the exact rejection reason is shown there
if it says "contract not found" — update your TradingView alert to the correct symbol for your platform (see the rule above), delete the old alert, create a new one on the updated chart, and paste the same webhook URL
if the rejection mentions margin or permissions — log into your broker and check account balance, position limits, and product access
go deeper: understanding the algo notification log · contract rollover: why your algo silently stopped trading
"contract not found" or "rejected: contract not found"
what it means: the broker doesn't recognize the contract symbol that came through in your webhook. your TradingView alert is on one symbol, but your broker needs a different one.
this is the #1 silent failure — the algo looks right, the alert fires, the webhook sends — and then the broker throws "contract not found" because of a symbol mismatch.
root cause, by broker:
seeing it on Tradovate / NinjaTrader? your alert is probably on a continuous contract like
NQ1!orES1!. Tradovate and NinjaTrader need the specific front-month —NQM2026,ESU2026, etc.seeing it on ProjectX / Topstep? your alert is probably on a stale front-month like
NQM2024or a specific quarter. ProjectX needs the continuous symbol —NQ1!,ES1!,MGC1!.
how to fix it:
change your TradingView chart to the correct symbol for your platform
delete the existing alert (alerts are locked to the symbol they were created on — you can't just edit it)
create a new alert on the updated chart, paste the same webhook URL and the same JSON message
fire a test alert and confirm a new row appears in the notification log with status "filled"
on Tradovate / NinjaTrader, you'll need to do this every quarter when contracts roll over. ProjectX users on continuous symbols don't have this problem.
go deeper: contract rollover: why your algo silently stopped trading · which broker accounts work with edgeful algo automation?
"failed" status in the notification log
what it means: edgeful received the webhook from TradingView, tried to send the order to your broker, and the broker connection didn't respond. the trade never reached the broker's order book.
most common cause: your broker session expired. Tradovate and NinjaTrader both time out periodically — sometimes daily, sometimes after a few days — and once the session is dead, edgeful has no valid token to route the order with.
how to fix it:
in step 1, check your broker's status in the connected accounts table — if it shows "disconnected" (red), click the reconnect button
sign back into your broker on the popup and approve the connection
confirm the status flips to "connected" (green)
you don't need to recreate your strategy or update your TradingView alert — the webhook URL stays the same. you're just refreshing the auth token.
if "failed" keeps coming back quickly after reconnecting, check whether you recently enabled 2FA on your broker account — enabling 2FA after the initial connection can invalidate the token. the fix is to disable 2FA, remove the broker from edgeful, reconnect, then re-enable 2FA if needed.
"pending" status stuck in the notification log
what it means: the trade has been accepted by edgeful but hasn't confirmed back as filled, failed, or rejected. normally you'll only see "pending" for a second or two before it updates.
if a trade sits in "pending" for more than a few minutes, something in the chain has stalled — usually the broker's order confirmation didn't come back.
how to handle it:
check your broker directly first. open your broker platform — did the order actually fill? if it did, the notification log just hasn't caught up and the trade is real. don't panic-close it.
if the order is nowhere in your broker's working orders or positions — it didn't execute. you can safely assume the trade didn't happen
refresh the notification log — stuck "pending" rows usually resolve to "failed" once the timeout hits
if the next expected trade doesn't trigger, reconnect your broker in step 1 of the dashboard
the safest move when you see "pending" longer than it should be: trust your broker's position page, not the notification log. your broker is the source of truth for what's actually open.
go deeper: how the algo automation chain works
"Cannot sell when position is 0 (must be > 0 to flatten long)"
what it means: the algo tried to close a position that doesn't exist. the exit webhook fired, but when your broker checked — there's nothing open to flatten.
this is usually a flatten row showing as "rejected" with that specific error. the broker is doing the right thing here — if it executed the flatten on a zero position, it would open a new trade in the opposite direction. it's protecting you from that.
why it happens:
the entry for the same trade ID showed "rejected" or "failed" — so the position was never opened in the first place, and the exit has nothing to close
you manually closed the trade in your broker before the algo's TP or SL level triggered. the algo's exit then arrived after the position was already flat
your broker flattened the position on its own — a daily reset, prop-firm session close, or risk rule closed the trade before the exit webhook arrived
how to confirm which scenario you're in: find the entry row with the same trade ID as the rejected flatten. the trade ID column links the two events. if the entry is "filled" and the flatten is "rejected cannot sell when position is 0" — you (or your broker) closed manually before the algo did.
nothing to fix here — the behavior is correct. just know that if you close manually, the algo's exit will show as rejected. that's expected.
go deeper: understanding the algo notification log
"Tradovate rejected your trade. Please go into your Tradovate dashboard and check the order rejection reason"
what it means: Tradovate refused the order, but the specific reason lives inside Tradovate — not in the edgeful notification log. edgeful tells you the trade was rejected; Tradovate tells you why.
this is a pass-through message — edgeful doesn't have the rejection detail, so the fix has to start in your Tradovate dashboard.
how to find the reason:
log into your Tradovate web or desktop dashboard
open the orders panel and find the order edgeful sent — match it by time and contract
click into the order to expand the details — Tradovate shows the specific rejection reason there (e.g., "contract expired," "daily loss limit hit," "position size exceeds account limit")
most common reasons (in order of frequency):
stale front-month contract — your alert is on a quarter that's already rolled over. fix with a new alert on the current front-month
daily loss limit hit — especially common on prop firm accounts. no fix in edgeful; you're locked out for the day
position size exceeds account limit — the contract count in your JSON payload is larger than what the account permits
product not enabled — your Tradovate account doesn't have access to the product you're trying to trade (e.g., crypto futures on a non-enabled account)
"unauthorized" or "authentication failed" errors
what it means: edgeful tried to route an order but your broker's auth token is no longer valid. the connection looks live in the dashboard, but under the hood, the session has expired.
this almost always pairs with "failed" status in the notification log.
why it happens:
routine session expiration — most brokers invalidate tokens every 24-72 hours
you changed your broker password and the stored token is now invalid
you enabled 2FA after connecting, which invalidated the original token
the broker did a security rotation on their end
how to fix it:
go to step 1 of the algo dashboard
click reconnect next to the affected broker
if reconnecting doesn't work, remove the broker entirely, then re-add it with a fresh login
confirm the status shows "connected" in green before sending another test alert
your strategy and webhook URL don't change when you reconnect — you're only refreshing the auth token, not regenerating the integration.
go deeper: using the algo dashboard
"errorCode=3" (ProjectX / Topstep connection error)
what it means: ProjectX's API refused the connection request from edgeful. this is the most common ProjectX connection error — and it almost always shows up during initial broker setup, not during live trading.
most common causes:
wrong credential type — ProjectX sometimes expects your username in a field where you're entering your email. try the other one
expired API key — if you're using Topstep, your API key might have timed out. generate a new one from the Topstep dashboard and reconnect
wrong connection button — if your prop firm runs on Tradovate as the clearing broker (not ProjectX), using "connect ProjectX" will throw errorCode=3. use the "connect Tradovate/NinjaTrader" button instead
how to fix it:
confirm your prop firm actually runs on ProjectX. TopstepX and newer Topstep accounts are ProjectX. older Topstep accounts on Tradovate are not
try the opposite credential — username if you used email, email if you used username
regenerate your API key in the Topstep or ProjectX dashboard and retry
"insufficient margin" or margin-related rejection
what it means: your broker received the order but your account doesn't have enough buying power to support the contract size you're trying to trade. the broker rejected it before it could open.
why it happens:
account balance dropped below the margin required for the contract — especially common on prop firm accounts after a drawdown
your strategy's contract size in the JSON payload is larger than the account allows
you're trying to add to an existing position that pushes total margin above the account limit
the product's margin changed (brokers occasionally adjust margin requirements for overnight or volatile sessions)
how to fix it:
check your account balance and buying power in your broker's dashboard
if the account is fine, open your edgeful strategy in the dashboard and verify the contract size — if you updated the size in TradingView but didn't update the JSON payload, they'll be out of sync
if this is a prop firm account and you've drawn down to near the daily limit, check whether the account has hit its loss lockout — many prop firms block new orders once the daily limit is reached
if the rejection message came from Tradovate specifically, the exact reason will show up inside the Tradovate dashboard — see the Tradovate section above.
nothing shows up in the notification log at all
what it means: this isn't technically an error string — it's the absence of one. your TradingView alert fired, but no row appeared in the edgeful notification log. the webhook never made it to edgeful.
this is usually a setup issue rather than a runtime error, and it's the #1 cause of "my algo didn't trade" tickets that aren't contract-related.
common causes (in order of frequency):
webhook URL in the wrong field — the URL belongs in TradingView's "webhook URL" field, not the "message" field. this is the #1 setup mistake
webhook URL copied incorrectly — the "view webhook" preview on the dashboard is masked. always use the copy button (dual-box icon), never highlight-copy from the preview
TradingView plan doesn't support webhooks — the free plan and Basic plan block webhook alerts. you need at least TradingView Essential (formerly Pro)
alert expired — TradingView alerts expire automatically. check the alerts panel to see if your alert is still active
JSON message format is wrong — if the JSON payload is malformed, edgeful can't parse it and the webhook gets dropped
alert is set on a chart condition instead of strategy — the alert has to trigger on strategy conditions, not on a price level or indicator
how to diagnose which one it is:
open TradingView's alerts panel and check the log tab — did the alert itself fire? if no, it's a TradingView-side issue (expired alert, wrong condition, plan limitation)
if the log shows the alert fired, the webhook was sent — but never reached edgeful. the URL or JSON format is the issue
open your strategy in the edgeful dashboard, copy the webhook URL fresh with the copy button, and paste it into the alert — replacing whatever's there
copy the JSON payload from step 3 of the dashboard exactly, and paste it into the alert's message field
fire a test alert and confirm a row appears in the notification log
still stuck?
if you're seeing an error that isn't in this list — or you've worked through the steps above and it's still not resolved — reach out via the in-app chat in edgeful.
include these 4 things so the team can diagnose faster:
the exact error string you're seeing (copy-paste it)
which broker platform you're on (Tradovate, NinjaTrader, ProjectX / Topstep)
a screenshot of the notification log row showing the error
the contract symbol your TradingView alert is on