TradingView → HoldAlarms → CrossTrade: setup and limits
Who this is for: you send TradingView alerts to CrossTrade and want each alert logged, and retried when CrossTrade doesn't accept it.
Why put HoldAlarms in between
TradingView cancels a webhook request if the receiving server takes longer than three seconds to process it (TradingView: webhooks). If your server answers with HTTP 500–599 (except 504), TradingView sends the webhook again after 5 seconds, with a total of 3 such resends (TradingView: webhook resubmission).
HoldAlarms answers TradingView as soon as the alert is queued, designed to reply fast, well before that timeout, then forwards the alert to CrossTrade. Each delivery attempt gets 10 s. Any reply other than 2xx, a timeout or a network error counts as a failure. HoldAlarms retries up to 5 times, 2 to 60 seconds apart. If the reply asks for a longer wait (Retry-After), we wait up to 60 seconds. A reply of 400, 401, 403, 410, 413, 414 or 415 is a permanent error: it isn't retried. If every try fails, the alert goes to the dead-letter queue, and failure emails are grouped and capped at up to 10 a day. Retries finish within about 3 minutes, or up to about 6 with Retry-After. So a retried alert can arrive that late; decide whether that's acceptable for your strategy. HoldAlarms adds a hop; it doesn't cut latency.
What you need
- A TradingView plan with webhook alerts and 2-factor authentication turned on.
- A CrossTrade account with your personal webhook URL.
- A HoldAlarms account. Starter is €19/mo and Ops €49/mo, after a free trial.
Step 1: Point HoldAlarms at CrossTrade
- Copy your personal CrossTrade webhook URL (it looks like
https://app.crosstrade.io/v1/send/…) and keep it private (CrossTrade: TradingView alerts). - In the HoldAlarms dashboard under Destinations, paste it into Add a destination URL and click Add destination.
- Copy Your webhook URL from the dashboard (it looks like
https://api.holdalarms.com/hook/<your token>).
Step 2: Point TradingView at HoldAlarms
- Create or edit the alert in TradingView.
- In Notifications, tick Webhook URL and paste your HoldAlarms webhook URL.
- Paste the message exactly as CrossTrade's docs show it. HoldAlarms forwards it unchanged. Leave nothing else in the message: leftover default text makes the alert fail.
HoldAlarms forwards your alert message as sent, with the same media type. CrossTrade accepts application/json or text/plain (CrossTrade: webhook trading). A ; charset=… parameter on the Content-Type is dropped, and HoldAlarms adds its own X-HookWatch-Event-Id, X-HookWatch-Event-Hash and X-HookWatch-Attempt headers.
Step 3: Test it
- Check your HoldAlarms URL first with the free Webhook Checker for TradingView.
- Fire a test alert.
- Check three places: TradingView's Alerts log (Webhook status), HoldAlarms (a failed alert shows as Failed, in dead-letter queue under Recent alerts; failure emails are grouped and capped at up to 10 a day), and CrossTrade's Alert History, which shows each alert as Accepted, Warning or Rejected with the reason (CrossTrade: Alert History).
- A successful reply only means CrossTrade received the message: CrossTrade acknowledges requests before processing finishes, so check the result in Alert History (CrossTrade: webhook trading).
Rate limits
- Errors from CrossTrade. If CrossTrade answers with an error, HoldAlarms retries up to 5 times, 2 to 60 seconds apart, then parks the alert in the dead-letter queue. A permanent error (400/401/403/410/413/414/415) goes straight there, with no retries. Check CrossTrade's own docs for its limits.
- Your own
rate_limit. If you add CrossTrade'srate_limitandidfields, CrossTrade blocks alerts over your limit and lists them as Rate Limit Exceeded in Alert History (CrossTrade: rate limiting option; CrossTrade: Alert History). CrossTrade doesn't publish which HTTP status a blocked alert gets, so HoldAlarms may show it as delivered or, if CrossTrade answers with an error, retry it and park it in the dead-letter queue. Either way the block is intended; check Alert History. - Long rate-limit waits. A long rate-limit wait can outlast HoldAlarms' own retry window, so those alerts can end in the dead-letter queue. Retries finish within about 3 minutes, or up to about 6 with Retry-After.
Common pitfalls
- Formatting errors. A missing semicolon, leftover default text or a misspelled field gives a formatting error; a missing field gives a missing-required-field error; nested JSON objects or arrays are rejected (CrossTrade: Alert History, CrossTrade: webhook trading).
- Duplicates. Identical alerts from the same HoldAlarms account within 20 seconds are forwarded once. CrossTrade rejects field names it doesn't recognise (CrossTrade: Alert History), so don't add a timestamp field; send identical messages more than 20 seconds apart instead.
- IP filters. CrossTrade's docs describe no IP allowlist for webhooks; your secret key and private URL protect it. HoldAlarms has no fixed outbound IP addresses, so it couldn't pass an IP allowlist anywhere.
- Rejected messages. A message CrossTrade rejects with a 5xx is sent up to 6 times in total, the first try plus 5 retries, before it lands in the dead-letter queue. A permanent error (400/401/403/410/413/414/415) is sent once and goes straight there.
Questions
Can I add a timestamp to keep repeats apart?
No. CrossTrade rejects unknown field names. Identical alerts within 20 seconds are forwarded once, so space identical messages further apart.
Is HoldAlarms an alternative to CrossTrade?
No. HoldAlarms only checks and retries delivery to CrossTrade's webhook URL. What CrossTrade does with the message is set up in CrossTrade.
What happens if CrossTrade rejects an alert?
Any reply other than 2xx counts as a failure. A permanent error (400, 401, 403, 410, 413, 414 or 415) goes straight to the dead-letter queue, with no retries. Other errors are retried first, up to 5 times, 2 to 60 seconds apart. Either way, failure emails are grouped and capped at up to 10 a day. Fix the cause in CrossTrade first, because a rejected message is rejected again on every retry.
More guides
- Why didn't my TradingView alert fire?
- TradingView webhook timeout: why "request took too long" happens
- TradingView webhook not received: 7 things to check
- Duplicate TradingView webhook alerts: why they happen and how to dedupe them
- The TradingView webhook checklist
- Does TradingView retry webhooks?
- TradingView → HoldAlarms → n8n: step-by-step
- TradingView → HoldAlarms → TradersPost: setup and limits
- TradingView → HoldAlarms → PineConnector: setup
- TradingView → HoldAlarms → SignalStack: setup
- TradingView → HoldAlarms → PickMyTrade: setup
- TradingView → HoldAlarms → Alerio: setup
- All guides
- All HoldAlarms questions
HoldAlarms is not affiliated with TradingView. TradingView is a trademark of TradingView, Inc. HoldAlarms is not affiliated with CrossTrade. CrossTrade is a trademark of its owner.