API field reference
Data Dictionary
API Field Reference — Version 1.4.4 · October 2026
Photo by Daniel on Unsplash
This reference documents the fields returned by the REST API, endpoint by endpoint, and the
columns of the
Snowflake Marketplace free live sample (which mirrors the free teaser).
The machine-readable contract is the
OpenAPI spec;
for the methodology behind any field, see the
Methodology page.
Identifier convention:
event_id follows
TACO-{year}-{NNNN} (e.g.
TACO-2025-0042).
No PII is included in any published distribution.
1. Enumerations
domain
| Value | Meaning |
trade | Trade & Tariffs — import tariffs, trade deals, sanctions, export controls |
foreign_policy | Foreign Policy — military threats, diplomatic ultimatums, alliance threats |
domestic | Domestic Policy — executive orders, government shutdowns, personnel actions |
rhetorical | Rhetorical — lawsuits, boycotts, social media retaliation |
status (event lifecycle)
| Value | Meaning |
detected | AI flagged, awaiting human review |
confirmed | Human confirmed as a PEPI event |
monitoring | Threat made, watching for outcome |
resolved | Outcome determined, composite score calculated |
rejected | False positive — not a PEPI event; excluded from every published series |
outcome_type
The outcome vocabulary, in increasing order of reversal. Reversal Magnitude is placed on a categorical scale keyed to this value for non-trade events, and measured quantitatively from the announced-vs-applied rate gap for trade events that stated an explicit rate.
| Value | Meaning |
full_implementation | Threat carried out as stated |
partial_implementation | Implemented with material modifications |
delayed | Deadline pushed back; still pending |
partial_reversal | Substantial walk-back but not total |
reframed | Reversal dressed up as a victory |
full_reversal | Complete reversal |
abandoned | Quietly dropped, never mentioned again |
indeterminate | Non-trade event lapsed with no positive evidence. Not scored; excluded from the chicken-out rate. |
pending | Default. No outcome yet — event still monitoring. |
outcome_evidence_source
The provenance of a resolved outcome — published on every event, including the free teaser, because a self-reported reversal is not a court-verified one. Outcomes evidenced only by the president's own posts are discounted in scoring.
| Value | Meaning |
court | A matched federal court ruling |
congress | A Congress.gov bill action |
federal_register | An implementing or withdrawing Federal Register document |
independent_reporting | Independently corroborated reporting (the reconciliation step for outcomes no official record settles) |
self_reported | Only the president's own statements |
none | Provisional outcome stamped at the end of the monitoring window with no evidence either way |
statutory_authority (controlled vocabulary)
| Token | Legal basis |
IEEPA | International Emergency Economic Powers Act, 50 U.S.C. §§1701–1708 |
Section_301 | Trade Act of 1974, §301 (unfair trade practices) |
Section_232 | Trade Expansion Act of 1962, §232 (national security) |
Section_122 | Trade Act of 1974, §122 (balance-of-payments) |
Executive_Order | Generic EO without enumerated authority |
USMCA | United States–Mexico–Canada Agreement |
None | No enumerated authority (foreign-policy / rhetorical events) |
threat_source
Where the threat was first observed: truth_social, executive_order, proclamation, memorandum, determination, ustr_notice, press_remarks. Free on every event — it says where the threat came from, not what it cost.
2. Event object
Returned by GET /api/v1/events (summary, Standard) and GET /api/v1/events/{event_id} (detail, Standard). The event objects in /api/v1/snapshot (free teaser) and /api/v1/snapshot/full (Standard) carry a subset of the same fields — identity, dates, status, score, summary — plus the two provenance markers and the live-pressure signals marked snapshot below; the free teaser carries none of the paid economic detail.
| Field | Type | Null | Description |
event_id | string | N | Stable identifier: TACO-YYYY-NNNN |
domain | enum | N | Top-level domain (see §1) |
sub_type | string | N | Finer category within the domain (e.g. tariff, sanction, military) |
status | enum | N | Lifecycle status (see §1) |
threat_date | timestamp | N | UTC timestamp the threat was made publicly |
threat_summary | string | N | One-line human-readable summary, ≤280 chars |
target_entities | string[] | N | Countries, organizations, or persons targeted |
severity_score | integer | N | Initial severity of the threat as stated, 0–100 |
stated_deadline | date | Y | Named deadline. Null = the threat committed to no date |
outcome_type | enum | Y | Final resolution (see §1; default pending) |
composite_score | number | Y | PEPI score 0–100. Null until resolved. |
days_past_deadline | integer | Y | Days the effective deadline has been exceeded for an unresolved event; drives live pressure |
threat_source | enum | Y | Channel the threat was observed on (see §1) |
statutory_authority | enum | Y | Legal authority invoked (see §1) |
outcome_evidence_source | enum | Y | Outcome provenance (see §1) — published on every snapshot event, free tier included (snapshot) |
live_pressure_score | number | Y | Provisional pressure accrued by an overdue, unresolved threat; folds into index.live_value (snapshot) |
Detail-only fields (/events/{event_id}): |
threat_text | string | N | Verbatim threat text |
stated_consequence | string | Y | The consequence the threat named |
outcome_date | timestamp | Y | UTC timestamp the outcome was determined; always on or after threat_date |
outcome_description | string | Y | Human-readable account of how the event resolved |
actual_consequence | string | Y | What actually happened, against stated_consequence |
reversal_magnitude | number | Y | Reversal Magnitude dimension, 0–100 |
timeline_slippage_days | integer | Y | Days the action slipped past its stated deadline |
rhetorical_dilution | number | Y | Rhetorical Dilution dimension. Null until a follow-up statement is matched to the event, in which case the dimension contributes nothing |
scope_reduction_pct | number | Y | Share of the threatened scope exempted or removed in the final action |
framing_shift | number | Y | Framing Shift dimension — whether a reversal was claimed as a win |
repetition_count | integer | N | Near-duplicate restatements collapsed into this event (posting volume). The cross-time lineage that feeds the Repetition dimension — which resolved prior threat this one re-makes — is exposed as the re-threat lineage view in the Snowflake sample. |
market_threat_delta | number | Y | S&P 500 % change on threat day |
market_outcome_delta | number | Y | S&P 500 % change on outcome day |
taco_trade_return | number | Y | Theoretical PEPI trade return (long threat→outcome) |
analyst_notes | string | Y | Operator notes recorded at review |
confidence | number | N | Classifier confidence that this is a PEPI event (0.0–1.0) |
3. Index series
One row per calendar day. GET /api/v1/index/history (Standard) returns the composite and domain columns; the free snapshot's index_history and GET /api/v1/index/branch/{branch} (free) carry the branch-reaction columns and the S&P 500 context.
| Field | Type | Null | Description |
date | date | N | Calendar date (UTC) |
composite_index | number | N | Recency-weighted composite PEPI score, 0–100 |
trade_index | number | Y | Trade domain sub-index |
foreign_policy_index | number | Y | Foreign-policy sub-index |
domestic_index | number | Y | Domestic policy sub-index |
rhetorical_index | number | Y | Rhetorical sub-index. Like every sub-index, null only on dates before that domain has any scored events. |
judicial_index | number | Y | Judicial reaction sub-index: a 0–100 saturating measure of relevant court filings, activity-weighted by court, plus court-evidenced resolutions over a trailing window. 0 = no judicial activity. |
congressional_index | number | Y | Congressional reaction sub-index: the same construction over actions on the bills threats name and on the joint resolutions Congress files in response (emergency terminations, rule disapprovals), Congressional Budget Office cost estimates on those bills, and congress-evidenced resolutions |
active_events | integer | Y | Events with status in (confirmed, monitoring) |
sp500_close | number | Y | S&P 500 close for the day (market context; carried forward over non-trading days; null before market-data coverage) |
4. Tariff rates
GET /api/v1/tariff-rates (Standard) — latest applied rate per country
| Field | Type | Description |
country_code | string | ISO-2 country code; coverage spans the major U.S. trading partners |
avg_applied_pct | number | Customs-value-weighted applied rate across the country's HS chapters |
hs_chapter_count | integer | HS chapters with data in the latest snapshot |
data_as_of | date | Period end of the USITC snapshot |
GET /api/v1/tariff-rates/detail?country= (Standard) — per HS chapter
| Field | Type | Description |
country_code | string | ISO-2 country code |
hs_code | string | HS-2 chapter (e.g. 03 = Fish & Seafood) |
applied_rate_pct | number|null | Effective applied tariff rate as published by USITC — customs-collected duties relative to import value |
snapshot_date | date | Period end date of the USITC snapshot |
GET /api/v1/events/{event_id}/tariff-rates (Premium) — statutory vs. applied per event
| Field | Type | Description |
snapshot_date | date | Snapshot the applied rate was measured on |
statutory_rate_pct | number | Announced / headline tariff rate |
applied_rate_pct | number | Rate actually collected |
statutory_applied_gap | number | Announced minus applied, in percentage points |
gap_as_pct_of_announced | number | Share of the announced rate that was never collected |
hs10_codes | string[] | Product codes in scope, where the event names them |
country_codes | string[] | Countries the event targets |
5. Economic indicators
GET /api/v1/economic-indicators (Standard). Time series from BLS and FRED; filter by series_id, source, and date range. Values are latest vintage — a revised observation replaces the earlier one (see data vintage & revisions).
| Field | Type | Null | Description |
series_id | string | N | The publishing agency's series code |
source | string | N | bls or fred |
series_name | string | Y | Human-readable series name |
observation_date | date | N | Observation period date |
value | number | Y | Observed value. Null = not yet released by source. |
unit | string | Y | Units (e.g. index 1982-84=100, percent) |
6. Price impact
GET /api/v1/events/{event_id}/price-impact (Premium). One row per observation date; the four-group BLS CPI proxy method for trade-domain events. Series are normalized to 1.0 at the threat date.
| Field | Type | Null | Description |
date | date | N | Date of this price observation |
imported_affected_index | number | N | Price index proxy for tariff-affected imports |
domestic_affected_index | number | Y | Domestic goods competing with tariffed imports |
imported_trend_deviation_pp | number | N | Deviation from pre-tariff trend (pp). Core price impact signal. |
domestic_trend_deviation_pp | number | Y | Domestic spillover deviation (pp) |
retail_passthrough_pct | number | Y | Rolling estimate of how much of the applied tariff has reached retail prices (%) |
7. Economic impact summary
GET /api/v1/events/{event_id}/economic-impact (Premium). The per-event summary of the tariff gap and its measured price consequences.
| Field | Type | Description |
event_id | string | Parent event |
statutory_rate_announced | number | Announced headline rate % |
applied_rate_final | number | Applied rate % from USITC |
statutory_applied_gap | number | Announced minus applied (pp) |
gap_as_pct_of_announced | number | Share of the announced rate never collected |
price_impact_imported_pp | number | Latest measured deviation of affected import prices from trend (pp) |
price_impact_domestic_pp | number | Latest measured domestic spillover (pp) |
retail_passthrough_pct | number | Latest measured retail pass-through (%) |
cpi_contribution_pp | number | Estimated contribution to all-items CPI (pp, expenditure-weighted) |
consumer_burden_pct | number | Consumer share of the tariff cost (%) |
firm_burden_pct | number | Share absorbed by firms (%) |
low_price_quartile_impact | number | Price impact on the lower price quartile within affected categories (pp) |
high_price_quartile_impact | number | Price impact on the upper price quartile (pp) |
distributional_gap_pp | number | Lower minus upper quartile impact |
is_regressive | bool | Whether lower-priced goods rose more |
affected_product_count | integer | Product sample size behind the distributional figures |
top_affected_sectors | string[] | Sectors with the largest measured import price impact |
methodology | string | Citation for the pass-through methodology |
8. Sector impact
GET /api/v1/events/{event_id}/sector-impact (Standard). Returns {event_id, sectors[]}; one entry per consumer-price sector (COICOP level 3) touched by the event's applied tariff rates.
| Field | Type | Null | Description |
coicop3_code | string | N | COICOP-3 sector code (e.g. HF = Household Furnishings) |
coicop3_label | string | N | Human-readable sector name |
imported_pp | number | Y | Price impact on affected imports (pp) |
domestic_pp | number | Y | Spillover to domestic competitors (pp) |
cpi_contrib_pp | number | Y | CPI contribution from this sector (pp) |
consumer_pct | number | Y | Consumer incidence share (%) |
source | string | Y | Measurement basis for the row |
as_of | date | Y | Applied-rate snapshot the row was computed from |
9. Market reaction
GET /api/v1/events/{event_id}/market-impact (Premium). Daily market closes around threat/outcome dates. Market reaction is context — it is not an input to the behavioral score.
| Field | Type | Null | Description |
date | date | N | Market session date |
days_from_threat | integer | N | Offset from the threat date |
sp500_close | number | N | S&P 500 closing level |
sp500_pct_change | number | N | Day-over-day % change |
vix_close | number | Y | CBOE VIX closing value |
xlp_close | number | Y | Consumer-staples sector ETF close (domestic-spillover proxy) |
xli_close | number | Y | Industrials sector ETF close (firm-margin proxy) |
xly_close | number | Y | Consumer-discretionary sector ETF close (import pass-through proxy) |
eem_close | number | Y | Emerging-markets ETF close (origin-country incidence proxy) |
cumulative_return_pct | number | N | S&P 500 cumulative % return since the threat date |
GET /api/v1/events/{event_id}/sector-reaction (Premium) and GET /api/v1/sector-reactions (Standard) derive threat-day and threat→outcome moves per sector, each relative to the S&P 500, from the same series.
10. TACO trade analysis
GET /api/v1/events/{event_id}/taco-trade (Premium). The theoretical return of a long position entered on the threat day and exited at the outcome.
| Field | Type | Description |
event_id | string | Parent event |
threat_date / outcome_date | date | Entry and exit dates (exit null while unresolved) |
sp500_at_threat / sp500_at_low / sp500_at_outcome | number | S&P 500 at entry, at the trough, and at exit |
low_date | date | Date of the trough between threat and outcome |
taco_trade_entry_price / taco_trade_exit_price | number | Entry and exit prices |
taco_trade_return_pct | number|null | Return over the hold |
hold_days | integer|null | Days from threat to outcome |
annualized_return_pct | number|null | Return annualized over the hold |
11. Federal Register documents
GET /api/v1/events/{event_id}/federal-register (Standard). The Federal Register documents linked to an event — the one it was minted from, and the ones that implement or withdraw it.
| Field | Type | Null | Description |
document_number | string | N | FR document number (e.g. 2025-12345) |
title | string | N | Document title |
type | string | N | Federal Register document type (presidential document, notice, …) |
subtype | string | Y | Presidential subtype: executive order, proclamation, memorandum, determination |
publication_date | date | Y | Date published in the Federal Register |
effective_on | date | Y | Effective date |
abstract | string | Y | FR abstract text |
html_url | string | Y | Canonical URL on federalregister.gov |
executive_order_number | string | Y | EO number (e.g. 14257) |
proclamation_number | string | Y | Proclamation number (e.g. 10908) |
match_role | string | Y | How the document relates to the event: initial (the document the event was minted from), auto (a linked candidate not yet judged), or the resolver's verdict — implementing, reversing, modifying, unrelated |
match_confidence | number | Y | Confidence the link is correct (0.0–1.0) |
12. Event timeline
GET /api/v1/events/{event_id}/timeline (Standard). Chronological log, one entry per event state change: a threat entry at creation, an outcome entry at terminal resolution, and review entries for operator actions.
| Field | Type | Null | Description |
entry_date | timestamp | N | UTC timestamp of this entry (threat date or resolved outcome date) |
entry_type | string | N | Lifecycle type — threat, outcome, review |
description | string | N | Human-readable summary of the entry |
source_url | string | Y | Citation URL for the threat/outcome, when available |
severity_delta | integer | N | Signed change in severity this entry represents (negative for a reversal, positive for implementation, 0 otherwise) |
13. Free endpoint shapes
/api/v1/index (Free)
| Field | Type | Description |
value | float | Settled composite PEPI score (0–100), from resolved events. The live headline (settled plus overdue-threat pressure) is index.live_value in the snapshot |
trend_30d | float | 30-day change in composite score |
trend_90d | float | 90-day change in composite score |
active_events | int | Events currently in confirmed or monitoring status |
resolved_30d | int | Events resolved in the last 30 days |
as_of | date | Publication date of the latest index value |
/api/v1/index/branch/{judicial|congressional} (Free)
| Field | Type | Description |
value | float | Branch reaction sub-index (0–100) |
trend_30d / trend_90d | float | Change versus 30 and 90 days ago |
activity_30d | int | Underlying filings or bill actions in the trailing 30 days |
resolutions_30d | int | Branch-evidenced event resolutions in the trailing 30 days |
as_of | date | Date of the latest value |
cbo_estimates_30d | int | Congressional only: Congressional Budget Office cost estimates published on linked bills in the trailing 30 days |
related_bills[] | object[] | Congressional only: linked bills, newest action first (below) |
related_bills[] (congressional)
| Field | Type | Description |
bill | string | Citation label, e.g. S.J.Res. 49 |
url | string | Congress.gov page |
title | string|null | Official title |
status | string | pending, passed (enacted) or failed |
latest_action_date / latest_action | date / string | Most recent recorded action |
linked_threats | int | Tracked threats the bill is linked to |
relation | string | named_by_threat (the threat names the bill) or response (Congress filed it in answer to the threat; adds activity, never decides an outcome) |
cbo_estimates | int | Congressional Budget Office cost estimates on the bill |
/api/v1/labor/government (Free)
| Field | Type | Description |
as_of | date | Latest payroll month |
turnover_as_of | date | Latest federal job-turnover month (publishes about a month after payrolls) |
baseline | date | Fixed comparison month for change_since_baseline (January 2025) |
measures[].key | string | federal, federal_ex_postal, state, local, federal_job_openings, federal_hires, federal_quits, federal_layoffs |
measures[].label / group / unit | string | Display name, payroll or turnover, and unit (thousands) |
measures[].latest | object | date, value |
measures[].change_1m / change_12m / change_since_baseline | object|null | change, pct, from (comparison month) |
measures[].series[] | object[] | 24 months of date, value |
related_threats[] | object[] | Tracked threats aimed at government workers: id, name, threat_date, domain, status, outcome (display link; not a score input) |
related_threats_total | int | Count before the list is truncated |
/api/v1/snapshot (Free) — top level
| Field | Type | Description |
index | object | The /api/v1/index fields plus live_value — the live headline |
live_pressure | object | overdue_events, avg_pressure, max_pressure, settled_value, live_value, lift, as_of, contributors[] (the overdue threats adding pressure) |
index_history[] | object[] | Recent daily index rows with branch-reaction columns and S&P 500 context |
events[] | object[] | Event summaries (teaser fields, outcome provenance, live pressure) |
stats | object | The /api/v1/stats aggregates plus headline S&P 500 / VIX |
branch_reaction | object | judicial and congressional, as in /api/v1/index/branch/{branch} |
government_workforce | object | As in /api/v1/labor/government |
sources_status[] | object[] | As in /api/v1/sources/status |
tier | string | free on the teaser (absent on /api/v1/snapshot/full) |
generated_at | ISO 8601 | When the snapshot was built |
/api/v1/stats (Free)
| Field | Type | Description |
total_events | int | Scored and monitoring events in the catalogue |
overall_avg_score | float | Mean composite score across resolved events |
overall_chicken_rate_pct | float | Share of resolved events that ended in a reversal-type outcome |
avg_days_to_reversal | float | Mean span from threat to outcome |
most_targeted_entities | object[] | Entities most often targeted, with counts |
domains[] | object[] | Per-domain totals: total_events, resolved, avg_score, avg_slippage_days, full_chickens, chicken_out_rate_pct |
/api/v1/sources/status (Free)
| Field | Type | Description |
sources[].source_id | string | Source identifier |
sources[].name | string | Source category display name |
sources[].description | string | What the source provides, in one line |
sources[].update_cadence | string | Official release frequency |
sources[].role | string | Role in the index: threat detection, outcome resolution, economic measurement, or context |
sources[].used_in_score | bool | Whether this source feeds the PEPI score |
sources[].last_changed | date|null | “Data through” — newest reference period in the source (a monthly report released mid-month carries the prior month's dates; expected) |
sources[].last_ingested | date|null | “Last ingested” — when the pipeline last pulled this source (the freshness signal); null where no ingest stamp exists |
sources[].record_count | integer|null | Total rows this source has contributed — aggregate volume only (no row content); null if uncountable |
sources[].fetch_failing | bool|null | True when the most recent pull errored; null where the source records no fetch attempts |
generated_at | ISO 8601 | Response generation timestamp |
/api/v1/status/api-health (Free)
| Field | Type | Description |
endpoints[].endpoint | string | Probed path |
endpoints[].tier | string | free / standard / premium |
endpoints[].verdict | string | ok / gap / slippage / drift / breakage / skipped |
endpoints[].operational | bool | Whether the verdict was ok |
endpoints[].data_through | date|null | Newest data the endpoint served |
summary | object | total, degraded, unmonitored counts |
checked_at | ISO 8601 | When the probe ran |