Why Send test does not verify your automation

You created the alert, pasted the webhook URL, clicked Send test, and the workspace shows one unrecognized row instead of a verified automation. Nothing is broken. Send test sends the message exactly as written, placeholders included.

What Send test sends

A strategy alert's message is a template. TradingView fills the {{...}} placeholders when a bar fires the alert. Send test fires nothing on any bar, so it posts the template itself: the receiving side gets the literal text {{strategy.order.action}} instead of buy, {{strategy.order.contracts}} instead of a quantity, {{strategy.position_size}} instead of a position.

The same happens to a JSON message Claude gave you to paste: the fields arrive with their placeholders unfilled. A rule-based adapter for alert() or alertcondition() scripts receives whatever text your script formats, which under Send test is usually the raw template too.

What Pineflows records

The alert reaches your webhook URL, the adapter finds no action, quantity or position, and the row is logged as unrecognized with the raw body kept for review (truncated to 2 KB). Nothing is placed, in any mode, and the automation is not marked verified.

Send test proves one thing: the URL in the alert is right and TradingView can reach it. That row is the receipt. It does not prove the message parses or that the order would be the one you expect.

What verifies

One real alert, fired by your strategy on the chart, parsed by the adapter into the signal you expected. When it arrives, the signal log shows the parsed order (for example market buy 2 SPY) and the automation is marked verified. Every automation starts in test mode, so the verifying alert costs nothing and places nothing.

To get one quickly: keep the strategy applied to a chart it trades often, leave the alert open-ended, and wait for the next fill. If the strategy fires rarely, a smaller timeframe on the same ticker fires sooner. Test mode records; it never places.

The placeholders, and the one Pineflows acts on

TradingView's default message for a strategy() script is:

Order {{strategy.order.action}} @ {{strategy.order.contracts}} filled on {{ticker}}. New strategy position is {{strategy.position_size}}

Keep the default message unless Claude handed you a template. Editing the text by hand is the second most common reason an alert comes back unrecognized.

When the webhook "does not work"

  1. A paid TradingView plan with two-factor authentication on. The Webhook URL field is not shown otherwise.
  2. The URL under the Notifications tab, pasted whole, no trailing space. It ends in /api/webhooks/tv/<token>; the token is the secret, see Webhook URLs.
  3. Expiration set to open-ended. An expired alert stops sending silently.
  4. The message untouched from the default, or exactly what Claude gave you.
  5. One real fired alert, then read that row in the signal log. Ask Claude for the automation status if you would rather not open the workspace.

The full alert setup is in TradingView alert. The guide that walks the whole path from script to order is Connect TradingView alerts to Robinhood.