Skip to main content
The Pulse feed is a backend-cached, cross-market news and sentiment snapshot. It is public — no authentication is required — and refreshes hourly server-side.

Get Pulse

() => Promise<GetPulseResponse>
Fetch the current market pulse snapshot. No authentication required.Returns: GetPulseResponse:
  • generatedAt: string — ISO 8601 UTC time the snapshot was produced. The REST response derives its ETag header from this value (see Behavior).
  • watchlist: string[] — the asset universe the snapshot was synthesized against.
  • items: PulseItem[] — pre-sorted (watchlist order, "MARKET" last, newest first per asset).
Each PulseItem:
  • asset: string — a watchlist ticker (e.g. "BTC") or "MARKET" for a cross-asset story.
  • sentiment: string — "Bullish", "Neutral", or "Bearish".
  • summary: string — a synthesized summary (max 240 characters).
  • updatedAt: string — timestamp of the most recent source; render as relative time client-side.
  • sources: PulseSource[] — provenance for the item.
Each PulseSource:
  • url: string — source article or post URL.
  • author: string — source author or publication name.
  • source: string — "twitter" or "news".
  • createdAt: string — source publication time (ISO 8601).
  • relevance: number — relevance score, 1 (low) to 5 (high).
Example:

Behavior

  • Hourly refresh. The snapshot is regenerated server-side about once an hour; generatedAt tells you when.
  • Conditional requests (raw REST). The GET /api/v1/pulse response carries an ETag header — the generatedAt value wrapped in quotes, e.g. "2026-07-22T15:17:14Z". To skip an unchanged snapshot, send that header value back verbatim (quotes included) as If-None-Match, and the server replies 304 Not Modified. This is a raw-REST/gateway optimization: sdk.pulse.getPulse() resolves to the response body only and does not expose or set headers, so conditional requests are not available through the SDK method.
  • Cold cache. The endpoint returns 503 until the backend cache warms after a deploy — retry shortly.
  • No dedicated rate limit. This public route has no per-endpoint limiter and does not return 429. Since the snapshot changes at most hourly, poll no more than about once per refresh interval anyway.