Each strategy shows a ready-made alert message with its own passphrase already filled in — copy that rather than the sample below, which uses a placeholder. Paste the webhook URL into the alert's Webhook URL field and the message into the alert's message box.
{
"passphrase": "YOUR-PASSPHRASE",
"ticker": "{{ticker}}",
"action": "{{strategy.order.action}}",
"sentiment": "{{strategy.market_position}}",
"quantity": "{{strategy.order.contracts}}",
"position_size": "{{strategy.market_position_size}}",
"price": "{{close}}",
"time": "{{timenow}}",
"interval": "{{interval}}",
"comment": "{{strategy.order.comment}}",
"id": "{{timenow}}-{{strategy.order.id}}"
}{
"passphrase": "YOUR-PASSPHRASE",
"ticker": "{{ticker}}",
"action": "buy",
"price": "{{close}}",
"time": "{{timenow}}",
"interval": "{{interval}}",
"id": "{{timenow}}"
}The fields
MGC1! goes to the active contract month: on Tradovate the month Tradovate marks as the front month, never one already in its delivery period. A dated ticker such as MGCZ2026 goes to exactly that month, and is refused if that month is already in its delivery period.buy, sell, long, short, exit, close or flat. breakeven and update trade nothing: they move the stop (and target) resting behind an open position. That is being proven on Tradovate and switched on per account; on every other broker, and on a Tradovate account it is not switched on for yet, the answer says not supported and nothing is sent — see Moving a stop by alert. cancel clears the working orders left on the alert's instrument on an account that holds NO position in it — the stop or target a plain closing order left behind — and on its copy followers likewise; where a position is still open it cancels nothing and says so (send exit to close it). It is switched on per broker: the demo broker now, Tradovate once its cancel has been proven; elsewhere the answer says not supported and nothing is cancelled. add is refused with a reason and trades nothing. And test: a test ping that trades nothing — it checks the passphrase and the plan, answers whether account names one of the strategy's subscribed accounts, and leaves a grey line in your Logs. Bots use it for a "Test Tradeus" button.contracts is accepted as the same field.long, short or flat. Both spellings are accepted because TradingView and other tools disagree.sl is what risk sizing measures against. Stop and target are also sent to the broker with the entry — on the account and on every follower — where the broker can hold them; where it cannot — or where it accepts the order and then rejects or cancels a protective leg after the fact, which Tradovate does when a stale price puts the stop on the wrong side of the market — the event log says that account's position is unprotected, with the broker's own reason. Where the broker takes a price, they go out as the PRICE you wrote rather than as a distance from each account's own fill — so every account in the copy group rests on the same number and leaves the trade in the same move. Your followers almost never fill at your price, and without that each of their stops sat a little way from their own fill, so you could be stopped out while one of them was still in. Some venues only accept a distance (MetaTrader, and Rithmic on the way in); there each account's level follows its own fill, and the log says so — and without price there is no distance to place the stop by, so the entry goes out without it and the log calls that position unprotected. TradersPost's own spelling is read too: stopLoss.stopPrice is the stop and takeProfit.limitPrice the target. A stop given as an amount or a percent is not, and neither is a field Tradeus does not know, such as stop_loss: the answer's warnings and your log name each one, so a stop that did not reach the broker is never a silent one. A buy or sell that only takes a position down — part of a long sold, or all of it — gets no new stop or target, and the answer says the alert's were not attached. It does not resize or cancel the ones already resting at the broker either: on Tradovate they keep the size of the order that placed them, and a sell that takes the position to exactly zero leaves them working on a flat account, where they can open a new position — the answer warns when that happens. To close completely, send exit. To move the stop of a position that is already open, send breakeven or update — being proven on Tradovate and switched on per account, not on other brokers yet; see Moving a stop by alert.id, instrument, action and account — is treated as the same signal, so a retry does not trade twice, and the retry is answered with what the first attempt did. The id alone does not make a duplicate: an exit that reuses its entry's id, or one id rotated across several accounts, is a new signal each time.position_size it is how Tradeus recognises two alerts of one bar that arrive in the wrong order — see below. Without it, alerts are traded in the order they arrive. It is also what a subscription's age limit counts from, and that limit holds back entries only — an exit is never refused for its age. A move (breakeven, update) older than the limit is skipped, the other way round from an exit: the stop already resting keeps protecting.sl and tp as prices (plus sentiment, position_size and time) as the alert_message of each strategy.entry and strategy.exit, and put only {{strategy.order.alert_message}} in the alert's Message box. Then every position goes to the broker with its stop and target attached, and they hold even if TradingView or Tradeus cannot be reached. An exit built this way carries the time of the candle its entry was placed on, so a stop that fills half an hour later arrives half an hour old. A subscription's age limit holds back entries only, so that exit still closes.What an exit closes
exit, close and flat close the position in the alert's instrument — on the account and on every follower, each under its own name for it. Anything else the account holds stays open: a bitcoin strategy exiting does not close the gold you bought by hand. The log distinguishes the answers, because they are different situations: the position was closed; there was nothing open in it; there was nothing open although Tradeus believed the account held some, which is a disagreement with your broker and is filed as a warning; the instrument could not be looked up; or the account can no longer name an instrument Tradeus believes it holds. The last two are errors and nothing was sent. Only when the broker cannot say what an account holds AND Tradeus believes that account is holding something does it close the whole account instead, because that is then the one way to be sure it is flat; the log says so when it happens. A lock that fires is different: it closes everything open on that account, wherever the broker lets Tradeus close — see When a lock fires. The kill switch does the same on every account you own at once, again only where the broker lets Tradeus close — see The kill switch.
sell that turns a long into a short (or a buy that turns a short into a long) is not an exit: it goes out as one order, and Tradeus does not cancel the old stop and target first. The new side gets the alert's stop and target, sized to the whole order rather than to the position it leaves, and — where Tradeus can read the position — the answer and your log warn that the old ones may still be working. Send exit before the alert that opens the other side.What the answer says
Every alert is answered with accounts: one row per account the signal reached — each subscribed account, and each copy-group follower that mirrored it — with its status (ok, skipped, held, pending, rate_limited or error), the reason when it did not simply fill, the size it traded or closed where that is known, the broker's order id, and warnings where the alert asked for something that account's order could not do — a stop left off an order that only reduces, old legs left working on a reversal, a stop the broker would not hold. Parts of the alert that were not read at all are listed in a warnings beside accounts. A refused alert answers an empty list and says why. A retry answered as a duplicate carries the first attempt's rows and duplicateOf — so a bot whose request timed out can send it again and learn what happened; while the first attempt is still routing it answers "outcome": "unknown" instead of an empty list. TradingView ignores the answer; a bot can read it.
{
"ok": true,
"signalId": "sig_…",
"accounts": [
{ "accountId": "70276688", "role": "subscriber", "status": "ok", "qty": 1, "brokerOrderId": "687826985974" },
{ "accountId": "70276695", "role": "subscriber", "status": "skipped", "reason": "signal targets account \"Apex 1\" — not this one" }
]
}Target position instead of an order
A normal alert says do this: buy two. An alert carrying position_size together with position says be this: end up long two. Tradeus then compares that with what the account actually holds and sends only the difference — so a duplicate alert changes nothing instead of doubling you up. Two alerts landing in the same second — a reversal emits its two orders at once — are traded one after the other per account, so the second is measured against the position the first left behind. And if they arrive in the wrong order, Tradeus notices: an alert whose resulting position is exactly where the alert it just executed started is that alert's late predecessor, already included in its target — it is logged as skipped and not traded. The same goes for a trade opened and closed on one bar whose close lands first: the close finds nothing open, and the open that arrives right after it is the trade that close already ended, so it is logged as skipped instead of leaving you a position no alert will ever close. The mirror case is handled the same way: when a strategy exits and re-enters on one bar and the re-entry lands first, the exit that follows it is not used to close the position the strategy holds again. Both rules act only on alerts that carry position_size and a time stamp — the sender's own word that the two belong to one moment.
{{strategy.market_position}} and {{strategy.market_position_size}}. If you write your own message, keeping those two fields is the single best protection against a repeated alert.