Skip to main content

Overview

The Pulse API lets you answer three core questions about a portfolio:
  1. “What would happen to my portfolio if X occurred?” — Describe any scenario in plain English and get a probability-weighted impact analysis.
  2. “How does this Dow Jones article affect my holdings?” — Fetch a pre-computed article scenario and calculate its portfolio exposure.
  3. “What happens if macro conditions change?” — Run what-if analysis with specific macro factor shocks (USD strength, oil prices, etc.).
All workflows require a portfolio expressed as a map of tilt_asset_id → weight. This guide walks through resolving tickers, building portfolio weights, and calling the scenario and risk endpoints.
Looking for the article-scenarios endpoint? The public Pulse route is POST /api/v1/backchannel/scenarios/{id}. See Analyze a Pre-Computed Dow Jones Article.

Step 1: Resolve Tickers to Tilt Asset IDs

All portfolio-related endpoints accept weights keyed by Tilt Asset ID — an internal identifier for each security. Use the Search Tickers endpoint to resolve symbols.
Response:
A symbol may return multiple results across exchanges (e.g. NAS and TSE listings). Filter by ticker_type: "common_stock" and the relevant exchange to get the primary US listing.
Extract the tilt_asset_id from each result. View API Reference →
You can resolve multiple symbols in a single call by passing a comma-separated list. Cache the mapping — tilt asset IDs are stable identifiers that don’t change.

Step 2: Build Portfolio Weights

Construct a portfolio_weights object mapping each tilt_asset_id to a decimal weight (summing to 1.0):
Weights should sum to 1.0. If they don’t, the API will still work but exposure calculations will be proportional to the weights provided.
This portfolio_weights object is reused across all the endpoints below.

Step 3: Scenario Portfolio Analysis

The simplest way to analyze portfolio impact. Describe any scenario in plain English and the API generates a probability tree of outcomes with portfolio-level returns. We recommend using flat_scenarios: true for most integrations. This generates a clean, single-level structure where each scenario directly contains its macro shocks — no nested sub-scenarios to traverse. The result is simpler to parse and display.

Key parameters

Caching behavior

Scenario generation results are automatically cached. The first call for a given scenario generates fresh results (10–15 seconds). All subsequent calls with the same scenario_description, as_of_date, search_for_context, and flat_scenarios combination return cached results in under 1 second. The cache is keyed on these four parameters. The portfolio weights are not part of the cache key — portfolio impact computation happens after scenario generation, so a single cached scenario tree can be reused for any portfolio instantly.
For a Dow Jones article that has already been processed, do not send the article text to this endpoint. Use the pre-computed article scenario endpoint in Step 5. Reserve scenario_portfolio_analysis for hypothetical scenarios and articles that do not have a pre-computed scenario.
If you only need to rank articles by their relevance to a portfolio, use Article Portfolio Relevance. It returns a comparable score without generating the scenario tree or per-security scenario returns. Use force_regenerate: true to bypass the cache if you need fresh results for an already-cached scenario.

Response structure

The response includes an AI-generated scenario tree, leaf-level portfolio impacts, and a probability-weighted expected return:
When flat_scenarios: true, each scenario in scenario_tree contains its macro_shocks directly (no sub_scenarios), and leaf_scenarios has one entry per scenario. When flat_scenarios: false (default), scenarios have nested sub_scenarios and leaf_scenarios contains one entry per sub-scenario with joint probabilities.
Key fields:
This endpoint uses AI to generate scenarios on first encounter (~10–15 seconds). Cached scenarios return in under 1 second. For instant results on pre-computed news scenarios, use the Search Scenarios endpoint below instead.
View API Reference →

Flat vs. hierarchical scenarios

Step 4: Search News Scenarios with Portfolio Exposure

Search for curated, pre-computed news scenarios and see how each one affects your portfolio. This is instant (no AI generation) and useful for browsing recent events.

Key parameters

At least one of queries or subject_code must be provided. Sending an empty request body will return a 422 Validation Error.

Response structure

The response wraps results in articles. Each article is a news scenario with timeline, probability tree, and (when portfolio_weights is provided) portfolio exposure:
Key fields in portfolio_exposure: View API Reference →

Step 5: Analyze a Pre-Computed Dow Jones Article

Dow Jones articles are processed into article scenarios after ingestion. Once you have the scenario point_id, fetch the article’s timeline, probability tree, macro and company shocks, related securities, and optional portfolio exposure:
{id} must be the article scenario’s point_id, such as the value returned by the search endpoint in Step 4. It is not the source Dow Jones article ID. The current public endpoint does not resolve a raw Dow Jones article ID directly. When portfolio_weights is provided, the response includes portfolio_exposure with probability-weighted expected return, median absolute return, and per-leaf portfolio returns. When aggregate_scenarios is true, the per-leaf detail is replaced by scenario-level mean and standard-deviation summaries.
If your integration warms the user’s portfolio data before this request, retain the resulting weights and include them as portfolio_weights. This endpoint currently accepts portfolio weights rather than a user ID.
View API Reference →

Step 6: Macro Factor Analysis

Get Macro Sensitivities

Understand which macro factors your portfolio is most exposed to:
The response ranks macro factors by portfolio-level exposure, showing which factors would move your portfolio the most:
View API Reference →

Run a Macro Scenario

Use the sensitivities output to stress-test with specific macro shocks. The shocks object maps factor identifiers to shock magnitudes in standard deviations.
The sensitivities endpoint returns factor names with a macro_ prefix (e.g. macro_DTWEXBGS). When passing shocks to the scenario endpoint, drop the prefix — use the raw identifier (e.g. DTWEXBGS).
The response shows the expected portfolio return and per-security breakdown:
View API Reference →

Putting It Together

A typical integration flow:
  1. Resolve tickers once and cache the tilt_asset_id mapping.
  2. Run scenario portfolio analysis with a plain English description to quickly assess portfolio impact for any hypothetical event. Use flat_scenarios: true for the simplest response structure. This is the easiest starting point.
  3. Search news scenarios with portfolio_weights to find real-world events that matter to the portfolio. Use order_by_exposure: true to surface the highest-impact stories first.
  4. Fetch individual scenarios with portfolio_weights for detailed drill-down with leaf-level probability breakdowns.
  5. Get macro sensitivities to understand the portfolio’s factor exposures.
  6. Run macro scenarios to stress-test against specific factor shocks (e.g., “what if the US Dollar Index rises 0.5 standard deviations?”).
Scenario Portfolio Analysis (Step 2) generates scenarios on-the-fly using AI. The first call takes ~10–15 seconds, but results are automatically cached — subsequent calls for the same scenario return in under 1 second, for any portfolio. Search Scenarios (Step 3) returns pre-computed news scenarios instantly. Use scenario portfolio analysis for hypothetical what-if questions, and search scenarios for browsing recent real-world events.

Rate Limits

All endpoints are rate-limited at 120 requests per minute per API key. The scenario_portfolio_analysis endpoint has an additional limit of 10 requests per minute to protect the AI generation backend. If you exceed the limit, you’ll receive a 429 Too Many Requests response:

Error Handling

All error responses follow a consistent format: