Signals API
Read the current whale signal programmatically: one clear direction plus entry and stop price for every covered ticker. Built to be consumed by a bot in a few lines of code.
Every request must include your license code in the key parameter. Replace YOUR_LICENSE below with the code you received when you purchased. Without a valid, unexpired key the API returns 401.
No key yet? Open the terminal and click BUY LICENSE — from $5.
Endpoint
GET https://hl.worldbroker.com/api/signals?key=YOUR_LICENSEExample response
{
"direction": "LONG",
"fired_at": "2026-08-28T10:07:20.807Z",
"age_minutes": 42,
"stop_loss_pct": 8,
"ticker_count": 50,
"tickers": [
{ "symbol": "BTC", "direction": "LONG", "entry": 78927, "stop": 72612.84 },
{ "symbol": "ETH", "direction": "LONG", "entry": 1940.25, "stop": 1785.03 },
{ "symbol": "AAVE", "direction": "LONG", "entry": 124.62, "stop": 114.6504 }
]
}Fields
| direction | LONG or SHORT — the current position across all tickers. |
| fired_at | UTC timestamp when this signal fired. Changes only on a new signal. |
| age_minutes | How long the position has been open. |
| stop_loss_pct | Stop distance applied to every ticker. Currently 8%. |
| ticker_count | How many tickers are included. |
| tickers[].symbol | Hyperliquid ticker, e.g. BTC. |
| tickers[].entry | Price when the signal fired. |
| tickers[].stop | Stop price, already computed for you. |
Usage
# curl
curl "https://hl.worldbroker.com/api/signals?key=YOUR_LICENSE"
# python
import requests
r = requests.get("https://hl.worldbroker.com/api/signals",
params={"key": "YOUR_LICENSE"})
s = r.json()
print(s["direction"])
for t in s["tickers"]:
print(t["symbol"], t["entry"], t["stop"])
# javascript
const r = await fetch(
"https://hl.worldbroker.com/api/signals?key=YOUR_LICENSE"
);
const s = await r.json();Historical series
Every signal ever fired, not just the current one. Returns are computed with the same 8% stop the live product uses and verified against real hourly candles, so a backtest built on this endpoint matches the numbers shown on the terminal.
GET https://hl.worldbroker.com/api/signals/history?key=YOUR_LICENSEOne row per signal — direction, when it opened, when it closed, how long it ran, and the BTC reference price at entry and exit. Optional &limit=500 (max 1000).
{
"stop_loss_pct": 8,
"count": 107,
"signals": [
{
"signal_id": 2428,
"direction": "LONG",
"fired_at": "2026-08-28T10:07:20Z",
"closed_at": null,
"open": true,
"duration_hours": null,
"btc_entry": 79196.5,
"btc_exit": null
},
{
"signal_id": 2427,
"direction": "SHORT",
"fired_at": "2026-08-27T00:24:24Z",
"closed_at": "2026-08-28T10:07:20Z",
"open": false,
"duration_hours": 33.7,
"btc_entry": 78926.5,
"btc_exit": 79196.5
}
]
}Per ticker
Add &coin=BTC to get entry, stop, exit, whether the stop was hit and the realised return for that ticker on every signal. Unsupported tickers return 404 coin_not_covered together with the list of covered symbols.
GET https://hl.worldbroker.com/api/signals/history?key=YOUR_LICENSE&coin=BTC{
"coin": "BTC",
"stop_loss_pct": 8,
"count": 107,
"signals": [
{
"signal_id": 2427,
"direction": "SHORT",
"fired_at": "2026-08-27T00:24:24Z",
"entry": 78926.5,
"stop": 85240.62,
"exit": 79196.5,
"stopped_out": false,
"return_pct": -0.34,
"open": false
}
]
}return_pct is the gross move in the signal direction, already capped by the stop. It excludes fees and slippage — the terminal applies those separately.
How often to poll
Signals fire every few days, not continuously. Polling once per minute is plenty. A new signal is out when fired_at changes — that is the moment to act, not age_minutes, which increases on every call.
Errors
| 401 | missing_key | No key parameter supplied. |
| 401 | invalid_or_expired_key | Key unknown or the license has expired. |
| 503 | no_signal_yet | No signal recorded yet — rare, retry later. |
These signals are experimental and under active calibration. They are derived from whale positioning and are not financial advice. Past results do not predict future performance. You are responsible for any trade you place.