For developers · early access
Signals API (preview)
Signals, marked-up charts and level events over HTTPS, with a signed webhook for every target and stop.
A preview. Nothing on this page is live yet. It shows the API we are building, with real values from one of the bot's signals; endpoints and fields may change before launch.
Send levels, get a chart
Post an instrument, an entry, a stop and targets. The bot draws the chart in its own style and returns the image.
curl https://api.tradingsignalbot.com/v1/charts \
-H "Authorization: Bearer $TSB_KEY" \
-d pair=USDCHF -d side=sell \
-d entry=0.83852 -d stop=0.84429 \
-d targets=0.83563,0.83274,0.82697,0.82120

Subscribe to events
Register a webhook and pick the events: a new signal, each target, the stop, the close. Every delivery carries the chart as it stands and an HMAC signature, so you know it came from us.
curl https://api.tradingsignalbot.com/v1/webhooks \
-H "Authorization: Bearer $TSB_KEY" \
-d url=https://your.app/hooks/signals \
-d events=signal.created,signal.target_hit,signal.stopped,signal.closed
signal.created
{
"type": "signal.created",
"created": "2026-10-14T15:45:00Z",
"data": {
"id": "sig_usdchf_1791992700",
"pair": "USDCHF",
"side": "sell",
"setup": "Signature Trade",
"entry": 0.83852,
"stop": 0.84429,
"stop_pips": 58,
"targets": [
0.83563,
0.83274,
0.82697,
0.8212
],
"chart_url": "https://api.tradingsignalbot.com/v1/signals/sig_usdchf_1791992700/charts/0.png"
}
}
signal.target_hit
POST /hooks/signals
TSB-Signature: t=1792021200,v1=…
Content-Type: application/json
{
"type": "signal.target_hit",
"created": "2026-10-14T23:40:00Z",
"data": {
"signal_id": "sig_usdchf_1791992700",
"target": 2,
"price": 0.83274,
"pips": 58,
"chart_url": "https://api.tradingsignalbot.com/v1/signals/sig_usdchf_1791992700/charts/2.png"
}
}
Checking a delivery
The TSB-Signature header holds t, the time it was sent in Unix seconds, and v1, the HMAC-SHA256 of t, a full stop and the raw request body, keyed with your webhook's signing secret and written in lowercase hex. Work out the same value, compare the two in constant time, and refuse a delivery whose t is more than five minutes from your clock. While a secret is being rotated, a delivery carries one v1 for each secret: one match is enough.
signed = t + "." + raw_body
expected = hex(hmac_sha256(signing_secret, signed))
valid = constant_time_equal(expected, v1) and abs(now - t) <= 300
Real values: these are the events the USDCHF sell of 14 October 2026 would have sent.
Questions
Is the API live?
Not yet. This page is a preview of what we are building; endpoints and fields may change before launch. Early-access developers get sandbox keys first.
What will it cost?
Usage based, set before launch. Early-access developers hear the price before anyone else.
Can I render charts from my own levels?
That is the first endpoint: send an instrument, a side, an entry, a stop and targets, and get the chart back in the bot's style.