Integrations
Send orders from whatever you already run
These are transports, not tiers. Every one of them ends in the same thing: one order, appended to your strategy’s public hash chain, which nobody can edit afterwards. Pick whichever your software can actually send.
Two credentials
Travels in an Authorization header, where a secret belongs. Use it whenever your software can set one.
Travels inside a URL or an email address, because TradingView, MetaTrader and email cannot send headers. Separate from the key on purpose: URLs leak into browser history and proxy logs, so a leaked signal URL costs you one rotation and never your key. Create one on your account page.
Every route
Connecting the brokerage account is first because it is the one that makes the rest unnecessary. Once an account is linked the record is read from it directly, so there is nothing to send and nothing to keep running. The routes after it are for brokers we cannot connect to, and for building a record before you link one.
Your brokerage account
almost everyone. Start here if your broker is on the list
Free, and the only option that needs no code, no key and no software of your own.
- 1Open your account page and connect the brokerage that holds the account.
- 2Choose the account this strategy actually trades, and say when the strategy began trading.
- 3Every filled order from that day is read from the broker and sealed into the record; from then on the record is read from the broker instead of posted by you.
Not a way to send orders at all, which is exactly why it is first. Link the account your strategy trades and the record stops being what you posted and starts being what your broker did: the trades are read straight from the account, so there is nothing to send, nothing to keep running, and nothing you could get wrong.
The record does not have to start on the day you signed up. Give the date the strategy began trading, up to three years back, and the account’s filled orders from that day are read from the broker and sealed in, each carrying the time it executed, the time it was sealed and the broker’s own order id, all inside the hash. Milestones, returns and drawdown count from the first of those fills. It only works into an empty record: once a strategy has posted its own orders, the chain stays in the order it was written.
Every route below produces claims until you do this, and a strategy whose record is only claims cannot charge for subscriptions. Use one of them if your broker is not on the supported list, or to start building a record before you link an account.
The API
any strategy you wrote yourself, in any language
Free. No approval, no account beyond this one.
- 1Create the strategy on your account page and copy the API key it shows once.
- 2POST one order per trade, with the key as a bearer token.
- 3A 201 means it is sealed into the public chain and cannot be edited.
One call per trade, with the strategy’s key in a header. This is the only route that can send a header, which is why it is the one to use when you have the choice. Send it when the trade happens: there are no limit or stop orders, and the price is the market’s when it arrives.
curl -X POST https://truefills.com/ api/ v1/ strategies/ YOUR-SLUG/ orders \ -H "Authorization: Bearer YOUR_KEY" \ -H "Content-Type: application/ json" \ -d '{"action":"buy","symbol":"AAPL","qty":10}'
TradingView alerts
Pine Script strategies and hand-drawn alerts
Free on TradingView's side for webhook alerts, which their paid plans include.
- 1On your account page, mint a signal URL for the strategy.
- 2In TradingView, open the alert and tick Webhook URL under Notifications.
- 3Paste the signal URL into that box.
- 4Put the order in the alert Message box, in either format below.
- 5Save. Every time the alert fires, one order is sealed.
TradingView cannot send an Authorization header, so the credential lives in the URL. Create a signal URL on your account page, paste it into the alert’s Webhook URL box, and put the order in the alert message.
BUY {{ticker}} 10JSON works too, if you prefer to be explicit:
{"action":"buy","symbol":"{{ticker}}","qty":10}MetaTrader 4 and 5
an Expert Advisor you already run
Free to write. MT4 has been in maintenance since 2022 and takes no new broker licences, so prefer MT5 for anything new.
- 1On your account page, mint a signal URL for the strategy.
- 2In MetaTrader, open Tools, then Options, then Expert Advisors.
- 3Tick Allow WebRequest and add the signal host to the list. MetaTrader silently refuses any URL missing from it.
- 4Call WebRequest against the signal URL from your Expert Advisor.
- 5Send the order as JSON or plain text in the body.
WebRequest() is disabled by default and refuses any address you have not allowed. In the terminal: Tools → Options → Expert Advisors → allow WebRequest, and add https://truefills.com to the list. Without that step the call returns -1 and nothing is sent.
//Call after your EA decides to trade. void SendSignal(string action, string symbolName, double qty) { string url = "https:// truefills.com/ api/ v1/ signals/ YOUR_SIGNAL_TOKEN"; string body = action + " " + symbolName + " " + DoubleToString(qty, 0); char post[], result[]; string headers = "Content-Type: text/ plain\r\n"; string resultHeaders; StringToCharArray(body, post, 0, StringLen(body)); int status = WebRequest("POST", url, headers, 5000, post, result, resultHeaders); if(status == -1) Print("WebRequest blocked. Allow https:// truefills.com in Tools > Options > Expert Advisors."); else if(status != 201) Print("Signal refused (", status, "): ", CharArrayToString(result)); }
NinjaTrader 8
a NinjaScript strategy or add-on
Free to develop. NinjaTrader's vendor licensing service is free for approved developers if you later distribute the add-on.
- 1On your account page, mint a signal URL for the strategy.
- 2Add a NinjaScript add-on or strategy that can make an HTTP request.
- 3POST the order to the signal URL as JSON or plain text.
- 4Compile, then enable the add-on.
NinjaScript is C#, so the whole thing is one HttpClient call. Put this in your strategy and call it wherever you submit an order.
private static readonly System.Net.Http.HttpClient Http = new System.Net.Http.HttpClient();
private async void SendSignal(string action, string ticker, int qty)
{
var url = "https:// truefills.com/ api/ v1/ signals/ YOUR_SIGNAL_TOKEN";
var body = new System.Net.Http.StringContent(
$"{action} {ticker} {qty}", System.Text.Encoding.UTF8, "text/ plain");
try
{
var res = await Http.PostAsync(url, body);
if (!res.IsSuccessStatusCode)
Print("Signal refused: " + await res.Content.ReadAsStringAsync());
}
catch (Exception e) { Print("Signal failed: " + e.Message); }
}TradeStation
EasyLanguage strategies
The API itself has no fee, but TradeStation only issues a key once you hold a funded account with them, with a $10,000 minimum. That is a real barrier, and it is theirs, not ours.
- 1On your account page, mint a signal URL for the strategy.
- 2Post to it from EasyLanguage, or from whatever HTTP client you already run alongside TradeStation.
- 3Send the order as plain text or JSON in the body.
- 4A funded TradeStation account is only needed for their own WebAPI, not for this.
If you already have a funded TradeStation account, their WebAPI is a normal REST API and you can post orders here from EasyLanguage. If you do not, the signal URL below reaches us from anything that can make an HTTP request, which includes most of what people bolt onto TradeStation anyway.
POST https://truefills.com/ api/ v1/ signals/ YOUR_SIGNAL_TOKEN Content-Type: text/ plain BUY AAPL 10
Email
software that can only send an alert email
Free.
signal+YOUR_SIGNAL_TOKEN@signals.truefills.com
Each strategy has its own address, shown once when it is made. Anyone who has it can post trades to that strategy, so keep it like a password.
BUYBUY or SELLAAPLticker10sharesBUY or SELL first, and nothing else on the line. If your software can’t set the subject, put the line on its own in the body.
BUY AAPL 10sell aapl 10SELL BRK.B 3
BUY AAPL 10 LIMIT 150Fills only, no limit or stop ordersBUY 10 AAPLThe ticker comes before the sharesBUY AAPL 10, SELL MSFT 5One trade per email
Every email counts: the first one that’s read is the first trade on the public record, priced at the market when it lands. A refused one records nothing. Either way, an email to your account address says so, with the price or the reason, and it shows under Activity.
The weakest route here, and worth saying so. Email can run minutes late, and a trade is priced when its email lands, not when you sent it. Use it when nothing better is available.
One route you may have seen elsewhere is missing: Collective2’s Seetu is their own product, not an open protocol, so there is nothing for anyone else to integrate with.