TradingView Webhooks

Using ChatGPT with the FutuCopy webhook reference file


If you want help building your TradingView alert message, Pine Script strategy, or webhook JSON, you can use ChatGPT or another AI assistant with FutuCopy's LLM-friendly reference file.

Copy this link and give it to ChatGPT:

https://futucopy.com/tradingview-webhooks

Then ask a specific question, such as:

  • "Use this FutuCopy webhook spec to create a TradingView alert message for a market order using strategy placeholders."
  • "Use this FutuCopy webhook spec to convert my Pine Script strategy into a FutuCopy webhook alert."
  • "Use this FutuCopy webhook spec to explain why my JSON message is failing."
  • "Use this FutuCopy webhook spec to create a stop order with stop loss and profit target ticks."

The reference file is written for AI assistants and includes all supported fields, examples, validation rules, common errors, and TradingView placeholder notes.


What TradingView Webhooks Do


TradingView Webhooks let TradingView alerts send trade instructions to FutuCopy. FutuCopy receives the alert, checks your webhook token, reads the JSON message, and then places or flattens orders on the selected trade copy leader configuration.

If copy trading is enabled for that leader, follower accounts may also receive copied orders according to your trade copy configuration.

Important: Webhook messages can place real orders. Always verify the leader ID, action, order type, quantity, and price before enabling a live TradingView alert.


Security Notes

  • Your webhook URL contains a secret token. Treat it like a password.
  • Valid FutuCopy webhook tokens start with fc_wh_ .
  • The public FutuCopy webhook URL is designed for TradingView webhook delivery and FutuCopy's built-in Test Webhook flow.
  • Other third-party delivery tools are not a supported path for live webhook use.
  • If you expose your webhook URL in a screenshot, public script, shared document, or chat, rotate your webhook token immediately.
  • Rotating a token invalidates the old webhook URL. After rotating, update every TradingView alert that used the old URL.
  • Deleting a token disables webhook access until you generate a new token.

Requirements

  • An active or trialing FutuCopy subscription.
  • A configured trade copy leader with an assigned leader account.
  • A TradingView plan that supports webhooks.
  • Two-factor authentication enabled on your TradingView account.
  • A TradingView strategy alert if you want to use placeholders such as {{strategy.order.action}}  and {{strategy.order.contracts}} .

Step 1: Create or Copy Your FutuCopy Webhook URL

  • Open FutuCopy.
  • Go to the Webhooks page.
  • If you do not have a webhook token, click Generate Webhook Token.
  • Copy the full Webhook URL.

Most users receive a shared gateway URL that looks like this:

https://webhook.futucopy.com/webhook/YOUR_WEBHOOK_TOKEN

Dedicated-server users may receive a different base URL. Always use the full webhook URL shown on your FutuCopy Webhooks page.

Step 2: Find Your Leader ID

The webhook message needs to know which FutuCopy trade copy leader configuration it should control. On the Webhooks page, look for the Configured Leaders table.

The table shows eligible leaders that have an assigned leader account. Use the value in the ID column as leader_id  in your webhook JSON.

Important: leader_id  identifies a FutuCopy trade copy leader configuration, not just an account. That configuration already includes the leader account and futures contract ID. Webhook messages do not need a contract, ticker, or symbol field. FutuCopy infers the contract to trade from leader_id .

If you do not see any leaders, open the Trade Copy page and configure a leader with an assigned leader account first.

Step 3: Create a TradingView Alert

  1. Open TradingView.
  2. Open the chart and strategy you want to use.
  3. Create an alert.
  4. For the alert condition, choose your strategy.
  5. Choose the order-fill alert option, such as "Order fills" or "Order fills and alert() function calls".
  6. Enable webhook delivery in the alert notification settings.
  7. Paste your FutuCopy webhook URL into the TradingView webhook URL field.
  8. Paste your JSON alert message into the TradingView Message field.
  9. Save the alert.

TradingView documentation: How to configure webhook alerts

Important: Manual Alerts vs Strategy Alerts

TradingView strategy placeholders such as {{strategy.order.action}}{{strategy.order.contracts}} , and {{strategy.order.price}}  only work in strategy order-fill alerts.

If you test with a simple manual price alert, TradingView may send the placeholders literally instead of replacing them with real values. For example, FutuCopy might receive "{{strategy.order.action}}"  instead of "buy" .

For strategy placeholders, use a TradingView strategy and create an order-fill alert.

Simplest Possible Pine Script Test

Use this small TradingView strategy to test {{strategy.order.action}}  and {{strategy.order.contracts}} .

//@version=6
strategy("FutuCopy Placeholder Test", overlay=true, process_orders_on_close=true)

if bar_index % 2 == 0
    strategy.entry("Test Long", strategy.long, qty=1)
else
    strategy.close("Test Long")

How to use it:

  1. Open TradingView's Pine Editor.
  2. Paste the script.
  3. Click Add to chart.
  4. Create an alert from the strategy.
  5. Choose the strategy order-fill alert option.
  6. Use your FutuCopy webhook URL.
  7. Use the JSON message below.

Test Alert Message

{
  "action": "{{strategy.order.action}}",
  "contracts": {{strategy.order.contracts}},
  "leader_id": 1496,
  "order_type": "market"
}

Replace 1496  with your actual leader ID from the FutuCopy Webhooks page.

FutuCopy Alert Message Builder

The FutuCopy Webhooks page includes an Alert Message Builder. It can generate webhook JSON in two modes:

  • Manual: Builds a message with fixed values such as "buy"1 , and a selected leader ID. Manual messages can be tested directly from the FutuCopy Webhooks page.
  • Pine Script: Builds a message using TradingView placeholders such as {{strategy.order.action}}  and {{strategy.order.contracts}} . Pine Script placeholder messages must be tested from TradingView, because TradingView is what replaces the placeholders.

Supported Webhook Actions

FutuCopy supports these webhook operations:

  • Place Order: Use "action": "buy"  or "action": "sell" .
  • Flatten One Leader: Use "action": "flatten"  or "action": "flatten_leader" .
  • Flatten All: Use "action": "flatten_all"  or "action": "flattenall" .

Flatten actions may also use hyphens, such as flatten-all . For buy and sell order placement, send buy  or sell  without extra whitespace.

Supported JSON Fields

action

Required: yes

Type: text

Supported values: buysellflattenflatten_leaderflatten_allflattenall


contracts

Required: yes for buy  and sell

Type: whole number

Must be greater than zero. This is ignored for flatten actions.


leader_id

Required: yes for buysellflatten , and flatten_leader

Type: whole number

Use the ID from the Configured Leaders table on the FutuCopy Webhooks page. It is not required for flatten_all .

FutuCopy uses leader_id  to determine the leader account and futures contract. Do not add a contract, ticker, or symbol field to the webhook message.


order_type

Required: no

Type: text

Default: market

Preferred values: marketlimitstoptrailing_stop

Also accepted: mktlmtstptrailingstoptrailingtrail1234

The camelCase field orderType  is also accepted.

trailing_stop  is supported on Tradovate leaders only. It places a trailing stop on the leader account. Tradovate followers receive native trailing stop orders; non-Tradovate followers receive regular stop orders that mirror the leader's trailing moves.


price

Required: yes for limit  and stop  orders; not allowed for market  orders; optional for trailing_stop  orders

Type: decimal number or numeric text

For limit  and stop  orders, price  must be greater than zero. For trailing_stop , a positive price  is used as the initial stop trigger. If omitted, FutuCopy derives the initial stop from the current market.


stop_loss_ticks

Required: no

Type: whole number

Adds a stop loss by tick distance from entry. Must be at least 1. Do not use this together with stop_loss_price .

When a trail trigger is present (an order strategy — see stop_loss_trail_trigger_ticks ), stop_loss_ticks  instead sets the initial fixed stop that converts to a trailing stop on activation. In that mode it is allowed alongside the trailing fields and defaults to the trail distance if omitted.


stop_loss_price

Required: no

Type: decimal number or numeric text

Adds an absolute stop loss price. Must be greater than zero. Do not use this together with stop_loss_ticks . The camelCase field stopLossPrice  is also accepted.


profit_target_ticks

Required: no

Type: whole number

Adds a profit target by tick distance from entry. Must be at least 1. Do not use this together with profit_target_price .


profit_target_price

Required: no

Type: decimal number or numeric text

Adds an absolute profit target price. Must be greater than zero. Do not use this together with profit_target_ticks . The camelCase field profitTargetPrice  is also accepted.


trail_type

Required: no. Optional even when order_type  is trailing_stop .

Default: ABSOLUTE

Supported values: ABSOLUTE  or PERCENTAGE

For ABSOLUTEtrail_value  is the trail distance in price points. For PERCENTAGEtrail_value  is a percentage of current market price. Accepted aliases include ABSPRICEPOINTSPERCENTPCT , and % . The camelCase field trailType  is also accepted.


trail_value

Required: yes when order_type  is trailing_stop

Type: decimal number or numeric text

Must be greater than zero. trailing_stop  orders cannot include stop-loss or profit-target bracket fields. The camelCase field trailValue  is also accepted.


stop_loss_trail_ticks

Required: no

Type: whole number

Makes the stop-loss bracket leg a trailing stop with a trail distance in ticks. This is for marketlimit , or stop  entry orders, not standalone trailing_stop  orders. Must be greater than zero. The camelCase field stopLossTrailTicks  is also accepted.


stop_loss_trail_value

Required: no

Type: decimal number or numeric text

Makes the stop-loss bracket leg a trailing stop with a trail amount interpreted by stop_loss_trail_type . Must be greater than zero. Use either stop_loss_trail_ticks  or stop_loss_trail_value , not both. The camelCase field stopLossTrailValue  is also accepted.


stop_loss_trail_type

Required: no

Default: ABSOLUTE

Supported values: ABSOLUTE  or PERCENTAGE

Accepted aliases include ABSPRICEPOINTSPERCENTPCT , and % . The camelCase field stopLossTrailType  is also accepted.


stop_loss_trail_trigger_ticks

Required: no

Type: whole number

Turns the order into an order strategy (autoTrail): a marketlimit , or stop  entry that starts with an initial fixed stop loss and, once price moves this trigger distance in your favor, converts that fixed stop into a trailing stop. This field is the activation distance in ticks. Tradovate leaders only.

When a trigger is present, a trail distance is required (stop_loss_trail_ticks  or stop_loss_trail_value ); stop_loss_ticks  becomes the initial fixed stop (defaults to the trail distance if omitted); and profit_target_ticks  may be added as a profit-target leg that forms an OCO pair with the trailing stop. Absolute prices (stop_loss_price  / profit_target_price ) are not allowed with an order strategy. The camelCase field stopLossTrailTriggerTicks  is also accepted.


stop_loss_trail_trigger_value

Required: no

Type: decimal number or numeric text

The activation distance as a value interpreted by stop_loss_trail_type  (ABSOLUTE  price points, the default, or PERCENTAGE  of the current price). Must be greater than zero. Use either stop_loss_trail_trigger_ticks  or stop_loss_trail_trigger_value , not both. The camelCase field stopLossTrailTriggerValue  is also accepted.


stop_loss_trail_freq_ticks

Required: no

Type: whole number

Optional re-trail step for an order strategy: how far the market must make a new extreme before the trailing stop is re-pulled. Only valid together with a trail trigger. If omitted, it defaults to the contract tick size. The camelCase field stopLossTrailFreqTicks  is also accepted.


stop_loss_trail_freq_value

Required: no

Type: decimal number or numeric text

The re-trail step as a value interpreted by stop_loss_trail_type . Must be greater than zero. Use either stop_loss_trail_freq_ticks  or stop_loss_trail_freq_value , not both. The camelCase field stopLossTrailFreqValue  is also accepted.


Bracket Order Note

Stop loss and profit target fields create attached bracket orders on Tradovate leaders. Bracket parameters are intended for Tradovate leaders only in the FutuCopy UI.

When both the leader and a follower account are on Tradovate, FutuCopy can replicate the whole bracket as a native linked order group. The follower's protective legs sit in Suspended  status until the follower's own entry fills.

For followers on other brokerages, FutuCopy copies the entry first and then copies the stop loss and profit target as individual orders after the leader's attached child orders transition from Suspended  to Live  or Working . A brief delay is expected.

Market Order Example: Manual

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market"
}

Market Order Example: TradingView Strategy Placeholders

{
  "action": "{{strategy.order.action}}",
  "contracts": {{strategy.order.contracts}},
  "leader_id": 1496,
  "order_type": "market"
}

Limit Order Example

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "limit",
  "price": 7235
}

Stop Order Example

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "stop",
  "price": 7235
}

Trailing Stop Order Example

Tradovate leaders only. Tradovate followers receive native trailing stop orders; non-Tradovate followers receive regular stop orders that mirror the leader's trailing moves.

{
  "action": "sell",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "trailing_stop",
  "trail_type": "ABSOLUTE",
  "trail_value": 5
}

Bracket Example With Tick-Based Stop Loss and Profit Target

{
  "action": "{{strategy.order.action}}",
  "contracts": {{strategy.order.contracts}},
  "leader_id": 1496,
  "order_type": "market",
  "stop_loss_ticks": 40,
  "profit_target_ticks": 40
}

Bracket Example With Absolute Stop Loss and Profit Target Prices

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market",
  "stop_loss_price": 7210.25,
  "profit_target_price": 7260.25
}

Bracket Example With Trailing Stop Loss and Profit Target

Tradovate leaders only. This is a normal entry order with a trailing stop-loss bracket leg, not a standalone trailing_stop  order.

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market",
  "profit_target_ticks": 40,
  "stop_loss_trail_value": 10,
  "stop_loss_trail_type": "ABSOLUTE"
}

A tick-based trail variant, instead of stop_loss_trail_value  / stop_loss_trail_type :

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market",
  "profit_target_ticks": 40,
  "stop_loss_trail_ticks": 40
}

A percentage trail variant (0.5% of the current price, tick-rounded to the contract):

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market",
  "profit_target_ticks": 40,
  "stop_loss_trail_value": 0.5,
  "stop_loss_trail_type": "PERCENTAGE"
}

Order Strategy Example: Trailing Stop With Trigger (autoTrail)

Tradovate leaders only. A market entry with an initial fixed stop that converts to a trailing stop once price moves the trigger distance in profit, plus an optional profit target as the OCO sibling. Tick distances convert to price points using the contract tick size.

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market",
  "stop_loss_ticks": 24,
  "profit_target_ticks": 40,
  "stop_loss_trail_trigger_ticks": 4,
  "stop_loss_trail_ticks": 8,
  "stop_loss_trail_freq_ticks": 2
}

The entry fills with a fixed stop 24 ticks away and a 40-tick profit target. After price moves 4 ticks in profit, the stop becomes a trailing stop that follows 8 ticks behind the best price and re-steps every 2 ticks. If the trailing stop fills, the profit target is cancelled, and vice versa.

Limit-entry variant — the entry rests at your price and the bracket activates when it fills:

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "limit",
  "price": 7554,
  "stop_loss_ticks": 24,
  "profit_target_ticks": 40,
  "stop_loss_trail_trigger_ticks": 4,
  "stop_loss_trail_ticks": 8,
  "stop_loss_trail_freq_ticks": 2
}

Point-based variant using values instead of ticks (stop_loss_trail_type  governs the trigger, trail, and frequency values; ABSOLUTE  is the default and may be omitted). The profit target and initial fixed stop still use ticks because order strategies do not accept absolute bracket prices:

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market",
  "stop_loss_ticks": 24,
  "profit_target_ticks": 40,
  "stop_loss_trail_trigger_value": 1,
  "stop_loss_trail_value": 2,
  "stop_loss_trail_freq_value": 0.5,
  "stop_loss_trail_type": "ABSOLUTE"
}

Minimum order strategy — just a trigger plus a trail distance (initial fixed stop, profit target, and frequency are all optional):

{
  "action": "sell",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market",
  "stop_loss_trail_trigger_ticks": 4,
  "stop_loss_trail_ticks": 8
}

Flatten One Leader Example

{
  "action": "flatten",
  "leader_id": 1496
}

Flatten All Example

{
  "action": "flatten_all"
}

Using Pine Script alert_message for Advanced Messages

For simple strategy orders, the normal TradingView placeholders are usually enough:

  • {{strategy.order.action}}
  • {{strategy.order.contracts}}
  • {{strategy.order.price}}

If you need Pine Script to calculate custom values, use strategy.order.alert_message .

In the TradingView alert Message field, use:

{{strategy.order.alert_message}}

Then build the JSON in Pine Script and pass it to the order command's alert_message  parameter.

Example concept:

//@version=6
strategy("FutuCopy Custom Alert Message Example", overlay=true)

float myStopPrice = close + syminfo.mintick * 4
string msg = '{"action":"buy","contracts":1,"leader_id":1496,"order_type":"stop","price":' + str.tostring(myStopPrice, format.mintick) + '}'

if barstate.isconfirmed
    strategy.entry("Stop Long", strategy.long, qty=1, stop=myStopPrice, alert_message=msg)

Make sure the final message TradingView sends is valid JSON.

Testing From FutuCopy

The Webhooks page includes a Test Webhook button. This sends the exact message shown in the Alert Message Builder through your webhook URL.

Use the built-in test for Manual messages only. Pine Script placeholders are replaced by TradingView, so FutuCopy cannot fill them during a manual test.

Warning: The built-in test sends a real webhook. Order messages can place real orders on the selected leader account, and flatten messages can close positions.

Viewing Webhook Call History

After a webhook is received, it appears in the Webhook Call History table on the Webhooks page.

The table includes:

  • Time
  • Request body
  • Status
  • Response message
  • Error code, when applicable

You can refresh the table or export the call history to CSV.


Common Response Messages and Errors


Invalid webhook token format.

The webhook token in the URL is missing, malformed, too long, or does not start with fc_wh_ . Copy the full webhook URL again from the Webhooks page.

Invalid webhook token.

The token does not match an active FutuCopy webhook token. The token may have been rotated, deleted, or may not belong to an active or trialing subscription. Copy the current URL from the Webhooks page.

Webhook token is not valid for this endpoint.

The token is a real FutuCopy token but is not authorized for the webhook endpoint. Use the webhook token and URL shown on the Webhooks page.

Action must be 'buy', 'sell', 'flatten', or 'flatten_all'.

The action  field is missing or not supported.

Action must be 'buy' or 'sell'.

Order placement accepts only buy  or sell . Remove extra whitespace; casing is ignored.

leader_id is required.

Add a valid leader_id  from the Configured Leaders table. This is not required for flatten_all .

Contracts must be greater than zero.

For buy and sell orders, contracts  must be a positive whole number.

Order type must be 'market', 'limit', 'stop', or 'trailing_stop'.

Use one of the supported order types.

Price is required and must be greater than zero for limit and stop orders.

Add price  for limit and stop orders.

Price can only be used with limit and stop orders.

Remove price  from market orders.

Use either stop_loss_ticks or stop_loss_price, not both.

Choose either tick-based stop loss or absolute stop loss price.

Use either profit_target_ticks or profit_target_price, not both.

Choose either tick-based profit target or absolute profit target price.

stop_loss_price must be greater than zero.

When you send an absolute stop_loss_price , it must be a positive value.

profit_target_price must be greater than zero.

When you send an absolute profit_target_price , it must be a positive value.

trail_value is required and must be greater than zero for trailing_stop orders.

Add a positive trail_value  when using order_type  trailing_stop .

trailing_stop orders cannot include stop-loss or profit-target brackets.

A standalone trailing stop cannot carry bracket fields. Remove stop-loss and profit-target fields from the message.

Trailing-stop orders are supported on Tradovate accounts only.

The selected leader account is not Tradovate. Use a Tradovate leader or use a different order type.

Trailing stop-loss brackets are supported on Tradovate accounts only.

The selected leader account is not Tradovate. Remove stop_loss_trail_*  fields or use a Tradovate leader.

Use either a fixed stop loss (stop_loss_ticks/stop_loss_price) or a trailing stop loss (stop_loss_trail_*), not both.

A trailing stop-loss bracket leg cannot be combined with a fixed stop loss on the same order. Remove one.

Use either stop_loss_trail_ticks or stop_loss_trail_value, not both.

Specify the trailing-stop trail distance one way — in ticks or as a value — not both.

stop_loss_trail_ticks / stop_loss_trail_value must be greater than zero.

The trailing-stop trail distance must be a positive value.

stop_loss_trail_trigger_* requires a trail distance (stop_loss_trail_ticks or stop_loss_trail_value).

An order strategy needs a post-activation trail distance. Add stop_loss_trail_ticks  or stop_loss_trail_value  alongside the trigger.

Use either stop_loss_trail_trigger_ticks or stop_loss_trail_trigger_value, not both.

Specify the order-strategy activation (trigger) distance one way — in ticks or as a value — not both.

stop_loss_trail_trigger_ticks / stop_loss_trail_trigger_value must be greater than zero.

The trigger (activation) distance must be a positive value.

stop_loss_trail_freq_* is only valid together with stop_loss_trail_trigger_* (an order strategy).

The re-trail step is only meaningful with a trail trigger. Add a trigger, or remove the frequency field.

Use either stop_loss_trail_freq_ticks or stop_loss_trail_freq_value, not both.

Specify the re-trail step one way — in ticks or as a value — not both.

stop_loss_trail_freq_ticks / stop_loss_trail_freq_value must be greater than zero.

The re-trail step must be a positive value.

Order strategies use tick/point offsets; stop_loss_price/profit_target_price are not supported (use stop_loss_ticks/profit_target_ticks).

Order strategies do not accept absolute bracket prices. Use stop_loss_ticks  and profit_target_ticks  instead.

Order strategies (auto-trail) are supported on Tradovate accounts only.

The selected leader account is not Tradovate. Use a Tradovate leader, or remove the stop_loss_trail_trigger_*  fields.

Trade copy leader with ID not found.

The leader_id  does not match an eligible leader for your account. Confirm the ID on the Webhooks page.

Leader has no account assigned.

The selected leader does not have a leader account assigned. Configure the leader account on the Trade Copy page.

Too many webhook requests.

The webhook was rate limited. Reduce alert frequency and retry after the indicated delay.

Webhook request body is too large.

The webhook body exceeded the 16 KB limit. Shorten the message; FutuCopy webhook payloads need only the documented fields.

NO_REFERENCE_PRICE

FutuCopy could not determine the current market price needed to anchor a tick-distance bracket or trailing stop. Retry later, send an explicit price where supported, or use an absolute trail distance.

TICK_SIZE_MISSING

The contract's tick size is unavailable, so a tick-distance bracket or trailing leg cannot be computed.

NOT_SUPPORTED

The order type or bracket is not supported on the leader's brokerage. For webhooks this means a trailing_stop  order, a trailing stop-loss bracket, or an order strategy (a trail trigger / autoTrail) on a non-Tradovate account — all three are Tradovate-only.

INVALID_TRAIL

A trailing stop-loss bracket or order strategy was misconfigured — for example a trailing stop loss combined with a fixed stop loss, a trigger sent without a trail distance, a non-positive trail, trigger, or frequency value, or a percentage trail that could not be converted because the current price was unavailable. Check the trailing fields against the order-strategy rules.



Troubleshooting


My placeholders are not being replaced.

Make sure you are using a TradingView strategy order-fill alert. Simple manual alerts do not populate strategy placeholders.

My JSON is invalid.

Check commas, quotes, and numeric placeholders. The most common format is:

"action": "{{strategy.order.action}}",
"contracts": {{strategy.order.contracts}}

Notice that action  is quoted because it becomes text, while contracts  is not quoted because it becomes a number.

My market order is rejected.

Remove the price  field. FutuCopy only accepts price  for limit, stop, and optional trailing-stop initial trigger use.

My limit or stop order is rejected.

Add a positive price  value.

My leader ID is rejected.

Open the FutuCopy Webhooks page and use an ID from the Configured Leaders table. The leader must have an assigned leader account.

Do I need to send a contract, ticker, or symbol?

No. FutuCopy gets the contract from the trade copy leader configuration identified by leader_id . If the wrong contract is trading, check the leader configuration on the Trade Copy page.

TP/SL orders appear on the Tradovate leader but not on a follower.

The behavior depends on the follower's brokerage. Tradovate followers receive the full bracket together as a native linked order group. Followers on other brokerages receive protective orders after the leader's attached child orders transition from Suspended  to Live  or Working . A brief delay is expected.

My order strategy (autoTrail) is rejected or never starts trailing.

Check the combination: a trail trigger (stop_loss_trail_trigger_ticks  / stop_loss_trail_trigger_value ) must be paired with a trail distance (stop_loss_trail_ticks  / stop_loss_trail_value ); stop_loss_trail_freq_*  may not be sent without a trigger; each of trigger, trail, and frequency uses ticks or value, not both; absolute stop_loss_price  / profit_target_price  are not allowed; and the leader must be a Tradovate account. If the stop never starts trailing, the market has not yet moved the trigger distance in profit — the stop stays at its initial fixed level until then.

I changed my Pine Script but the alert still behaves like the old version.

TradingView alerts keep a snapshot of the script and chart settings from when the alert was created. Delete and recreate the alert after changing the script.

Can I test from Postman, curl, Zapier, Make, or another app?

The public webhook endpoint is intended for TradingView webhook delivery from TradingView servers only. Third-party delivery tools are unsupported. Use TradingView for live webhook delivery, or use the built-in Test Webhook button on the FutuCopy Webhooks page for manual testing.


Best Practices

  • Start with one contract while testing.
  • Use the smallest safe size for the account.
  • Confirm the leader ID before turning on a live alert.
  • Remember that the contract comes from the FutuCopy leader configuration, not from the TradingView ticker.
  • Use the Webhook Call History after every test.
  • Rotate the token if it is exposed.
  • Recreate TradingView alerts after changing Pine Script.
  • Do not include both tick-based and price-based stop loss fields in the same message.
  • Do not include both tick-based and price-based profit target fields in the same message.
  • Do not include bracket fields on standalone trailing_stop  orders.
  • For an order strategy (autoTrail), always pair a trail trigger with a trail distance; the initial fixed stop, profit target, and re-trail frequency are optional.

Quick Copy/Paste Templates

Strategy Market Order

{
  "action": "{{strategy.order.action}}",
  "contracts": {{strategy.order.contracts}},
  "leader_id": 1496,
  "order_type": "market"
}

Strategy Market Order With Brackets

{
  "action": "{{strategy.order.action}}",
  "contracts": {{strategy.order.contracts}},
  "leader_id": 1496,
  "order_type": "market",
  "stop_loss_ticks": 40,
  "profit_target_ticks": 40
}

Order Strategy (autoTrail): Trigger + Trailing Stop

{
  "action": "buy",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "market",
  "stop_loss_ticks": 24,
  "profit_target_ticks": 40,
  "stop_loss_trail_trigger_ticks": 4,
  "stop_loss_trail_ticks": 8,
  "stop_loss_trail_freq_ticks": 2
}

Standalone Trailing Stop

{
  "action": "sell",
  "contracts": 1,
  "leader_id": 1496,
  "order_type": "trailing_stop",
  "trail_type": "ABSOLUTE",
  "trail_value": 5
}

Flatten One Leader

{
  "action": "flatten",
  "leader_id": 1496
}

Flatten All

{
  "action": "flatten_all"
}

Still need help? Contact Us Contact Us