SignalPoint API
Structured trade signals, each with its entry, target, stop and recorded exit. Source signals come from public financial content, momentum signals from price movement.
NewLive since September 2026.
SignalPoint is a partner data add-on, powered by TradeZing: TradeZing builds the signals and answers for their content and method, TickerLayer runs your access, billing and support. Without the add-on, /signals answers 403.
What a signal is
A signal is a directional thesis on one instrument, with entry, target and stop set from live prices at generation time. It is monitored for up to 10 trading days and closes exactly once, with an exit reason and the realised move on the record itself.
Coverage is US-listed stocks and ETFs during the US session, and major USD crypto pairs around the clock. Coverage follows the content: a symbol gets a signal when something is published about it, so there is no fixed symbol list to subscribe to.
Two kinds of signal
Every signal says which kind it is in signal_class, and /signals?signal_class= reads one kind on its own.
source: derived from third-party financial content such as news, analyst notes and creator commentary. The outlet, its publication time and the sentiment read from it travel with the signal.momentum: generated by TradeZing's own system from price movement. No third-party content stands behind it, so it carries nosourceand no source attribution.
/signalsList signals
Signals newest first. Filters combine with AND. Every response names the partner under meta.attribution; show that notice wherever you show the signals.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| ticker | string | Instrument symbol, e.g. KO or BTC. |
| direction | string | buy or sell. |
| timeframe | string | intraday, short_term, swing or long_term. |
| asset_type | string | stock or crypto. |
| signal_class | string | source or momentum. Leave it out for both kinds. |
| status | string | open or closed. |
| since / before | string | ISO-8601 window on the generation time. To page history, echo meta.next_before as before unchanged: it carries the id, so signals that share a second are never skipped. |
| updated_since | string | Everything created, closed or corrected after this point. Pass an ISO-8601 time first, then echo meta.next_updated_since. |
| limit | integer | 1 to 100, default 25. |
Request
curl -sS "https://api.tickerlayer.com/signals?status=open&limit=3" \
-H "x-api-key: <YOUR_API_KEY>"Response 200 OK
{
"status": "ok",
"data": [ { "id": 21141, "ticker": "EL", "...": "..." } ],
"meta": {
"count": 3,
"has_more": true,
"next_before": "2026-09-03T05:35:16.000Z|21098",
"attribution": { "provider": "TradeZing", "notice": "Powered by TradeZing" }
}
}/signals/{id}Get a signal
One signal by id. 404 when the id is unknown.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| idreq | integer | Signal id. Stable for the life of the record, so it is the right primary key for your store. |
Request
curl -sS "https://api.tickerlayer.com/signals/21141" \
-H "x-api-key: <YOUR_API_KEY>"Response 200 OK
{
"id": 21141,
"ticker": "EL",
"asset_type": "stock",
"signal_class": "source",
"direction": "buy",
"timeframe": "short_term",
"entry_price": 99.1,
"target_price": 107.41,
"stop_loss": 94.12,
"max_gain_pct": 8.38,
"max_loss_pct": 5.03,
"reasoning": "Strong fiscal Q4 performance and a sizable pre-market gain support bullish post-earnings sentiment.",
"source": { "name": "The Globe and Mail", "brand": "theglobeandmail" },
"sentiment": { "positive": 0.82, "negative": 0.1, "neutral": 0.08 },
"status": "closed",
"exit": {
"reason": "profit_target",
"change_pct": 8.38,
"exited_at": "2026-08-26T14:18:02Z",
"data_quality": "ok"
},
"content_published_at": "2026-08-19T16:18:31Z",
"generated_at": "2026-08-19T16:50:24Z",
"updated_at": "2026-08-26T14:18:02Z"
}/signals/sourcesSources
The outlets and creators whose content produces source signals. brand is a stable key that pools one outlet's accounts across platforms.
Request
curl -sS "https://api.tickerlayer.com/signals/sources" \
-H "x-api-key: <YOUR_API_KEY>"Response 200 OK
{
"status": "ok",
"data": [
{ "brand": "theglobeandmail", "name": "The Globe and Mail", "platforms": ["news"] }
]
}Signal object
Signal fields
| Parameter | Type | Description |
|---|---|---|
| id | integer | Stable identifier. |
| ticker / asset_type | string | Instrument symbol, and stock or crypto. |
| signal_class | string | source or momentum. See the two kinds of signal above. |
| direction / timeframe | string | buy or sell, over intraday, short_term, swing or long_term. |
| entry_price / target_price / stop_loss | number | Price levels set from live prices when the signal was generated. |
| max_gain_pct / max_loss_pct | number | Distance to target and to stop in percent, already adjusted for direction. |
| atr_percentage | number | Average true range as a percent of price when the levels were set. |
| sector / industry | string | Company classification for stocks. Absent for ETFs, crypto and unclassified symbols. |
| reasoning | string | The thesis in one to three plain sentences. |
| source | object | name and brand of the outlet whose content produced the signal. Source signals only, never on a momentum signal. |
| sentiment | object | positive, negative and neutral, summing to 1. |
| status | string | open or closed. |
| exit | object | Absent while open. reason, change_pct, exited_at and data_quality once closed. |
| content_published_at / generated_at / updated_at | string | ISO-8601 times of the underlying content, the signal, and its last change: open, close or a later correction. |
exit
| Parameter | Type | Description |
|---|---|---|
| reason | string | profit_target, stop_loss, time_limit, expired, news_catalyst or sentiment_shift, as recorded. New reasons can be added; any value means the signal is closed. |
| change_pct | number | Realised move from entry to exit, sign-adjusted for direction. Absent on expired. |
| exited_at | string | ISO-8601 exit time. |
| data_quality | string | ok or suspect. An exit can be flagged suspect after the fact; leave suspect exits out of anything you compute. |
Fields can be added over time, so ignore what you do not use, and a field that does not apply to a signal is absent, never null. An exit reason newer than this list arrives as other. change_pct is already adjusted for direction: do not flip its sign for a sell, and do not write zero for an expired signal, which carries no realised move at all.
Delta sync
Do not re-poll history. Keep the newest updated_at you hold, call /signals?updated_since=... once a minute, and follow meta.next_updated_since until has_more is false. A record arrives again on every change: when it opens, when it closes, and when a closed exit is corrected later (flagged suspect, or its price revised). Upsert by id and let the newest updated_at win.
Signals are informational market analytics. They are not investment advice, a recommendation or a solicitation to trade, and recorded outcomes do not indicate future results. Outlet names identify analysed content only.