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 itsETagheader 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).
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.
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) to5(high).
Behavior
- Hourly refresh. The snapshot is regenerated server-side about once an hour;
generatedAttells you when. - Conditional requests (raw REST). The
GET /api/v1/pulseresponse carries anETagheader — thegeneratedAtvalue wrapped in quotes, e.g."2026-07-22T15:17:14Z". To skip an unchanged snapshot, send that header value back verbatim (quotes included) asIf-None-Match, and the server replies304 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
503until 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.

