Click-to-trade for signal providers. One tap, their own MT5 account.
Your members connect their MetaTrader 5 account inside your app. You publish a signal. Each member approves it with one tap, and the trade executes on their account — at their broker, at the size they chose. No VPS, no Expert Advisor and no copier for anyone to install.
- Members keep control of every trade
- Nothing to install on their side
- Works with their own broker
- Volume
- 0.05
- Stop loss
- 2338.50
- Take profit
- 2371.00
- Your MT5 account is online
- Ready to trade on your account
Signals are easy to send. Hard to take.
A signal in a Telegram or Discord group asks every member to do the same thing by hand: open MetaTrader, find the symbol, type the size, the stop and the target, and press buy — quickly, before the price runs.
Most members take signals that way, and it shows. Entries arrive seconds or minutes late, a decimal slips on the lot size, a stop loss is forgotten. The result a member gets drifts away from the result you published, and your signals get the blame.
The usual fix is automation on the member's side: a trade copier or an Expert Advisor running on a VPS around the clock. That works for the few members willing to rent a server and configure software — and it takes away the thing many members want most, which is to decide on each trade themselves.
Click-to-trade sits in between. The member still decides, one signal at a time. But the decision is a single tap in your app, and the order that follows is exact: your symbol, your stop, your target, their chosen size, on their own account.
For you it means members who actually take your signals, results that match what you published, and a product people use inside your own app and brand — not a link out to someone else's platform.
Four calls, from your backend.
Every call is an ordinary HTTPS request made with your API key, from your server — never from the member's phone or browser. The click-to-trade guide walks through each one with code in cURL, Python and Node.js.
- 01
Member connects, once
They enter their MT5 account number, trading password and broker server in your app. You pass them to us and keep only the account id we return.POST /v1/accounts - 02
You publish a signal
Send it to your group as you do today. Nothing happens on anyone's account yet, and nothing is spent on members who never look.— no call — - 03
Member opens it
You prepare that member's account. It comes online while they read — about 10 seconds in our measurements.POST /v1/accounts/prepare - 04
Member approves
One tap places the order on their account, with one idempotency key for that signal and member. You get a recorded result back; an unclear one is confirmed with the broker, not guessed.POST …/orders/market
Online when they look. Offline when they don't.
Keeping every member's account online all day, just in case, is wasteful. Waiting to bring it online until the member taps approve adds a pause at the worst moment. Click-to-trade does neither.
When a member opens a signal, your backend calls POST /v1/accounts/prepare for their account. It answers at once, and the account signs in at the broker while the member reads the signal. By the time they tap approve it is online, and the order goes straight through.
Members who never open the signal cost nothing. Accounts connected in on-demand mode go offline again on their own after 15 quiet minutes, and come back the next time they are needed. For a broadcast you expect most of the group to act on, prepare accepts up to 200 accounts in one call.
Two taps. One trade.
Phones double-tap. Mobile connections drop halfway through a request. Your own code retries after a timeout. On a trading account, any of these can mean two positions where the member wanted one.
Send every approval with an Idempotency-Key made from the signal and the member — signal_9931:member_4821. The first request places the order; any repeat within 24 hours gets the same answer back and places nothing. The member sees one trade, whatever happened to the network.
And when the network fails at the worst moment, the answer is never a guess. An order whose outcome is unclear is reported as unresolved, with an instruction not to resend it, and is then confirmed against the broker's own records. See the three failures for how to handle each one.
The whole approve flow, in one screen.
Two handlers in your backend: one when a member opens a signal, one when they approve it. The same request works in any language — the API reference has it in 13.
import os, requests
API = "https://api.fxapis.com"
fx = requests.Session()
fx.headers["Authorization"] = f"Bearer {os.environ['FXAPIS_KEY']}"
def on_signal_opened(member):
# The member opened the signal: bring their account online while they read.
# Answers 202 at once; do not make the member wait for it.
fx.post(f"{API}/v1/accounts/prepare",
json={"accountIds": [member.fxapis_account_id]})
def on_approve(signal, member):
r = fx.post(
f"{API}/v1/accounts/{member.fxapis_account_id}/orders/market",
# One key per signal and member: a double tap never opens two trades.
headers={"Idempotency-Key": f"signal_{signal.id}:member_{member.id}"},
json={
"symbol": signal.symbol, # "XAUUSD"
"side": signal.side, # "buy"
"volume": member.lot_size, # a string: "0.05"
"stopLoss": signal.stop_loss, # absolute prices, not pips
"takeProfit": signal.take_profit,
"clientOrderId": f"signal_{signal.id}",
},
)
if r.status_code == 201:
return r.json()["data"] # state "filled", filledPrice, …
error = r.json()["error"]
if error["code"] == "ORDER_UNRESOLVED":
return confirming(error) # never resend: poll the order
raise TradeNotPlaced(error["message"]){
"data": {
"id": "b1c7…9e2a",
"clientOrderId": "signal_9931",
"symbol": "XAUUSD",
"side": "buy",
"volume": "0.05",
"state": "filled",
"filledPrice": "2352.18",
"brokerOrderId": "2104837096"
}
}Nothing to install. Nothing to leave running.
Their decision, every time
Their broker, their account
Passwords handled properly
A clear answer
Sized for them
Click-to-trade, copiers and MQL5 Signals.
Each approach suits a different member. Copiers and MQL5 Signals copy every trade automatically; click-to-trade lets each member decide. Many providers offer both: click-to-trade for most of the group, automatic execution for members who opt in.
| Aspect | Click-to-trade on fxapis | Copying by hand | Trade copier | MQL5 Signals |
|---|---|---|---|---|
| Who decides each trade | The member, with one tap | The member | Nobody — trades are copied automatically | Nobody — trades are copied automatically |
| What the member runs | Nothing but your app | MetaTrader, and their full attention | Desktop copiers run in MetaTrader on the member's PC or a VPS (source); cloud copiers need no VPS but are a separate subscription (source) | Their own MetaTrader terminal, always connected — or a rented VPS, from $10 a month on MQL5 (source, VPS) |
| Accuracy of entry | Exact: your symbol, stop and target | Depends on typing, and on speed | Exact, once configured | Exact, copied from your signal account |
| Where it lives | Inside your app, under your brand | Your channel | The copier vendor's software | MQL5.com and the member's terminal |
| Setup for the member | Connect their account once, in your app | None | Install or sign up, then configure each account | Subscribe in MetaTrader; one signal per account |
| How you charge | However you like — it is your product | However you like | However you like; the member also pays the copier | A monthly fee you set, less MQL5's 20% commission (source) |
Want members who opt in to copy automatically as well? See copy trading on multi-account orders. Generating signals from TradingView? Send them straight to MT5 with TradingView alerts.
You run the community. We run MetaTrader.
You build
- Your app or bot, and how members sign in to it
- The connect screen, and where you keep each member's account id
- Your signals, and how members see them
- Each member's lot size and your risk rules
- Your terms, disclaimers and any licensing your market requires
fxapis runs
- The MetaTrader 5 terminals, hosted in our EU cloud
- Signing each account in at its broker, and keeping it healthy
- Placing, closing and modifying orders on each account
- Confirming any unclear outcome against the broker's records
- Encrypted storage of members' MT5 passwords
Every member who connects an account counts as one connected account on your plan, whether it is online or not. A group of a few dozen members fits the Scale plan; larger groups are arranged on Enterprise. Closing a position is never blocked for billing, even if your plan runs out. See pricing for the numbers.
Signal providers ask
Do my members need a VPS, an Expert Advisor or MetaTrader open?
No. MetaTrader 5 runs on our side, so a member only connects their account once inside your app and taps to approve trades. They can still open their own MT5 app at any time and will see the same positions there, because the trades are placed on their own account.
Which brokers can members use?
Any broker whose MT5 accounts sign in with an account number, trading password and server name. Each member connects their own account at their own broker. Accounts that need two-factor sign-in or a broker certificate are flagged at connection time, so you can tell the member straight away.
Can each member trade a different lot size?
Yes. Your backend decides the volume of each member's order — a fixed lot, a size they chose in your app, or one you work out from their balance. The signal is the same; the order on each account is its own.
What if a member taps approve twice, or their connection drops?
Use the signal id and the member id together as the order's idempotency key. A second tap, a retry from a flaky mobile connection or a retry from your own code gets the first order's answer back instead of opening a second trade. Keys are honoured for 24 hours.
What happens if the price has moved since the signal went out?
The order executes at the market price when the member approves, within the deviation you allow. If the broker refuses it because the price moved, the API says so and marks the rejection as retryable, so your app can show the new price and let the member decide again.
Do stop loss and take profit keep working when the account is offline?
Yes. Stop loss and take profit are sent with the order and live at the broker, so they fire whether or not the account is online with us. On-demand accounts go offline by themselves after 15 idle minutes and come back online the next time the member trades.
Can members who opt in have signals executed automatically?
Yes. For members who choose automatic execution, place one multi-account order across all of their accounts, sized per account, and keep click-to-trade for everyone else. The two work side by side in the same app.
Does fxapis give trading advice or generate signals?
No. fxapis is infrastructure: it executes the orders your app sends and never generates signals or advice. Whether your signal service needs a licence depends on where you and your members are, so take local advice before you launch.
Give your members one-tap trading.
Create a workspace, issue an API key and run the whole flow on demo accounts today.