Signals API · v1
Signals API documentation
Read the same algorithmic trades the dashboard shows, from your own code. One GET endpoint, JSON out, one key per account. Included with the Pro plan.
- REST over HTTPS
- Bearer API key
- Daily trend and intraday flips
- Every market we cover
Authentication
Every request carries your API key as a bearer token. Generate the key on the API page in the app (left menu). It is shown once: we store only a hash, so a lost key cannot be recovered, only replaced.
Authorization: Bearer ttp_live_…
- One live key per account. Generating a new key revokes the old one immediately.
- Pro plan required. Calls need an active Pro subscription; revoking a key works on any plan.
- Keep it server-side. Never ship the key in a browser, a mobile app or a public repository.
Endpoint
One endpoint returns the current daily trend and the latest intraday flip for every market we cover, or for the symbols you name.
GET https://app.trendtrader.pro/api/v1/signals
The API answers on app.trendtrader.pro only. Any other hostname answers 404.
Parameters
Both query parameters are optional. Omit them to receive the whole feed.
| Parameter | Meaning |
|---|---|
symbol |
Comma-separated list of up to 50 symbols, for example EUR/USD,BTC/USD,AAPL. Omit it for the whole universe. |
since |
ISO-8601: a date (2026-10-08) or a datetime with a zone (2026-10-08T00:00:00Z). Daily rows keep trends whose fired_at date is on or after the calendar date you wrote (the 2026-10-08 part, in your own zone; it is never shifted to UTC). Intraday rows keep flips at or after the exact timestamp. Daily flips are detected hours after the bar closes, so poll daily with a one-day overlap. Daily between and awaiting rows have no fired_at and are left out whenever since is set. |
Examples
Whole feed
curl -s -H "Authorization: Bearer $TTP_KEY" \
https://app.trendtrader.pro/api/v1/signals
Two symbols, flips since a timestamp
curl -s -H "Authorization: Bearer $TTP_KEY" \
"https://app.trendtrader.pro/api/v1/signals?symbol=EUR/USD,BTC/USD&since=2026-10-08T00:00:00Z"
Response
A JSON object with the time it was generated, your plan, the row count, a daily list, an intraday list and the disclaimer.
{
"generated_at": "2026-10-09T05:12:40.118Z",
"plan": "pro",
"count": 2,
"daily": [
{
"symbol": "EUR/USD",
"asset_class": "Forex",
"timeframe": "daily",
"state": "buy",
"trend_age_days": 4,
"fired_at": "2026-10-03",
"as_of": "2026-10-07"
}
],
"intraday": [
{
"symbol": "EUR/USD",
"asset_class": "Forex",
"timeframe": "intraday",
"state": "sell",
"fired_at": "2026-10-08T13:45:00.000Z"
}
],
"disclaimer": "TrendTrader Pro signals are educational information, not financial advice. Trading involves risk; you are responsible for your own decisions."
}
Fields
asset_class- One of
Forex,Crypto,Stocks,ETFs,Indices,Commodities. statebuy,sell,between(the dashboard's "Between Zones" row) orawaiting("Awaiting first signal"). A row is the market's current state, however old; usefired_atfor its age.betweenandawaitingrows carry no trade: theirfired_atisnullandtrend_age_daysis0.trend_age_days- Daily rows only. The number shown beside the daily row in the dashboard: the age of the trend structure the row is anchored to. It is not the days since
fired_at. fired_at- Daily: the date the current trend fired, or
nullforbetweenandawaitingrows. Intraday: the exact flip time. as_of- Daily rows only. The last daily bar the row was evaluated on.
intraday- The most recent intraday flip per market on record, with its real
fired_at. The in-app intraday feed additionally hides markets with no fresh intraday data.
Status codes
| Code | Meaning |
|---|---|
200 | Success. The body is the JSON object above. |
400 | Bad symbol or since value. |
401 | Missing, malformed, unknown or revoked key. |
403 | The account has no active Pro subscription. |
404 | Wrong hostname. The API answers on app.trendtrader.pro only. |
500 | A read on our side failed. Retry with backoff. |
503 | The service is briefly unavailable. Retry with backoff. |
Limits and terms
- Caching. The unfiltered feed is cached at our edge for 60 seconds; polling faster than that returns the same data. Filtered requests are not cached.
- No client caching. Responses carry
Cache-Control: no-store. Never cache them yourself. - Polling cadence. Daily flips land hours after the daily bar closes; one call a day with a one-day
sinceoverlap keeps you current. The feed is each market's current state, not an event log: a flip replaced before your next call is not kept. Intraday flips arrive through the session, so poll at the 60-second cadence or slower.
Your own use only. The feed is for your own trading decisions and your own tools. Reselling, rebroadcasting or publishing it is not permitted. See the Terms of Service.
Disclaimer
TrendTrader Pro signals are educational information, not financial advice. Trading involves risk; you are responsible for your own decisions. The full disclaimer applies to every response.
Questions about the API? Write to [email protected].