Skip to Content

Signals

Signals are Creative Foresight’s premium alerts: when a series starts moving in a way worth knowing about — accelerating, breaking from its trend, or hitting unusual territory — an interval opens, and it closes when the move ends. Use GET /v1/signals/active for currently open intervals and GET /v1/signals for interval history.

Active signals request

curl "https://api.creativeforesight.io/v1/signals/active?indicator=UNRATE&region=US&strength=strong" \ -H "Authorization: Bearer $CF_API_KEY"

History request

curl "https://api.creativeforesight.io/v1/signals?indicator=UNRATE&region=US&from=2026-01-01&limit=25" \ -H "Authorization: Bearer $CF_API_KEY"

Query parameters

ParameterTypeEndpointDescription
indicatorstringBothIndicator code filter. May be repeated or comma-separated, such as indicator=UNRATE,PAYEMS&indicator=cf:labor_composite.
regionstringBothRegion code. Counties use 5-digit FIPS codes.
typeacceleration, extreme, or trend_breakBothSignal type filter.
strengthweak, neutral, or strongBothMinimum signal strength. Defaults to neutral, so weak signals are hidden unless strength=weak is requested.
limitintegerBothPage size. Defaults to 100 for HTTP routes. Active signals are capped to the current open intervals; history uses cursor pagination.
activebooleanGET /v1/signalstrue returns open intervals, false returns closed intervals, and omitted returns both.
fromdateGET /v1/signalsInclusive lower bound for intervals overlapping this date.
todateGET /v1/signalsInclusive upper bound for intervals starting on or before this date.
cursorstringGET /v1/signalsCursor from meta.next_cursor for the next history page. Ignored by the active endpoint.

Signal object

FieldTypeDescription
idstringStable signal interval identifier.
indicatorobjectIndicator code, name, category, unit, frequency, and source metadata.
regionobjectRegion code and name.
typestringWhat kind of move: acceleration, extreme, or trend_break.
strengthstringHow pronounced the move is: weak, neutral, or strong.
directionstring or nullWhich way the series is moving, such as up or down, when applicable.
valid_fromdate-timeStart of the signal interval.
valid_todate-time or nullEnd of the interval. Active intervals have null.
detected_atdate-timeFirst detection timestamp.
last_seen_atdate-timeLatest materialization timestamp for the interval.
evidenceobjectOpaque supporting detail. Its shape is not part of the API contract and may change — use text and vocabulary for display.
vocabularyobjectShared chip vocabulary: glyph, polarity-aware label, and tone. tone is positive, negative, or neutral.
textstring or nullServer-rendered, shareable plain-spoken sentence describing the signal. Non-null for every active indicator (display-metadata coverage is 100% and monitored); typed nullable for defense-in-depth.

Response

{ "data": [ { "id": "00000000-0000-4000-8000-000000000001", "indicator": { "code": "UNRATE", "name": "Unemployment Rate", "category": "labor", "unit": "percent", "frequency": "monthly", "source": { "slug": "fred", "name": "FRED" } }, "region": { "code": "US", "name": "United States" }, "type": "acceleration", "strength": "strong", "direction": "up", "valid_from": "2026-06-01T00:00:00Z", "valid_to": null, "detected_at": "2026-06-15T00:00:00Z", "last_seen_at": "2026-07-10T00:00:00Z", "evidence": { "…": "…" }, "vocabulary": { "glyph": "trending-up", "label": "Worsening faster", "tone": "negative" }, "text": "The unemployment rate in the United States is mounting – it's been rising faster than its recent trend since June 2026." } ], "meta": { "count": 1, "limit": 25, "filters": { "indicator": ["UNRATE"], "region": "US", "strength": "neutral", "active": true }, "next_cursor": "eyJsYXN0U2VlbkF0IjoiMjAyNi0wNy0xMFQwMDowMDowMFoiLCJpZCI6InNpZ18xIn0" } }

meta.next_cursor appears only on GET /v1/signals when another history page is available. Pass it back as cursor with the same filters to continue paging.

Vocabulary and intervals

The signal vocabulary is server-rendered for UI and agent surfaces. glyph is direction-aware, including trending-down for down-accelerations. label is polarity-aware, so the same kind of move can render as Improving faster or Slowing depending on whether higher or lower values are better. tone is derived from direction and indicator polarity — the example above shows a rising unemployment rate (a lower-is-better indicator), so the up-move renders as Worsening faster with negative tone.

A direction flip closes the open interval and starts a new current run. When text says since <date>, that date is the start of the current interval, not a stale first-ever detection date.

Access

Signals require a premium API key or x402 payment. Restricted API keys must include premium access through creative-foresight.

Errors

StatusCodeMeaning
400INVALID_PARAMETERRequired or optional query parameters are invalid.
401INVALID_API_KEYThe request did not include a valid API key.
403CATEGORY_NOT_ALLOWEDThe key does not include premium access for signals.
429RATE_LIMIT_EXCEEDEDThe API key exceeded its one-minute request limit.
500INTERNAL_ERRORSignal data could not be loaded.
Last updated on