Ctrl K
ComunidadGuías…

docs/api/EconomicService.openapi.json

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
{"components":{"schemas":{"AutomationFit":{"properties":{"classificationVersion":{"type":"string"},"evidence":{"items":{"type":"string"},"type":"array"},"level":{"type":"string"},"matchReasons":{"items":{"type":"string"},"type":"array"},"score":{"format":"int32","type":"integer"}},"type":"object"},"BigMacCountryPrice":{"properties":{"available":{"type":"boolean"},"code":{"type":"string"},"currency":{"type":"string"},"flag":{"type":"string"},"fxRate":{"format":"double","type":"number"},"localPrice":{"format":"double","type":"number"},"name":{"type":"string"},"sourceSite":{"type":"string"},"usdPrice":{"format":"double","type":"number"},"wowPct":{"format":"double","type":"number"}},"type":"object"},"BillingVerificationError":{"description":"Returned with HTTP 503 when paid access cannot be confirmed right now: the billing provider is re-verifying a recently expired subscription, or the entitlement backend is unreachable. Retryable — honor Retry-After.","properties":{"code":{"description":"Machine-readable billing-verification state, mirrored in the X-Billing-Verification response header.","enum":["renewal_verification_pending","renewal_verification_failed","entitlement_verification_unavailable"],"type":"string"},"error":{"description":"Human-readable billing-verification failure reason.","type":"string"},"requiredTier":{"description":"Minimum entitlement tier required for this endpoint, when the denial came from a tier gate.","format":"int32","type":"integer"}},"required":["error","code"],"type":"object"},"BisCreditToGdp":{"description":"BisCreditToGdp represents total credit as percentage of GDP from BIS.","properties":{"countryCode":{"description":"ISO 2-letter country code.","type":"string"},"countryName":{"description":"Country or region name.","type":"string"},"creditGdpRatio":{"description":"Total credit as percentage of GDP.","format":"double","type":"number"},"date":{"description":"Date as YYYY-QN.","type":"string"},"previousRatio":{"description":"Previous quarter ratio.","format":"double","type":"number"}},"type":"object"},"BisExchangeRate":{"description":"BisExchangeRate represents effective exchange rate indices from BIS.","properties":{"countryCode":{"description":"ISO 2-letter country code.","type":"string"},"countryName":{"description":"Country or region name.","type":"string"},"date":{"description":"Date as YYYY-MM.","type":"string"},"nominalEer":{"description":"Nominal effective exchange rate index.","format":"double","type":"number"},"realChange":{"description":"Percentage change from previous period (real).","format":"double","type":"number"},"realEer":{"description":"Real effective exchange rate index.","format":"double","type":"number"}},"type":"object"},"BisPolicyRate":{"description":"BisPolicyRate represents a central bank policy rate from BIS.","properties":{"centralBank":{"description":"Central bank name (e.g. \"Federal Reserve\").","type":"string"},"countryCode":{"description":"ISO 2-letter country code (US, GB, JP, etc.)","type":"string"},"countryName":{"description":"Country or region name.","type":"string"},"date":{"description":"Date as YYYY-MM.","type":"string"},"previousRate":{"description":"Previous period rate percentage.","format":"double","type":"number"},"rate":{"description":"Current policy rate percentage.","format":"double","type":"number"}},"type":"object"},"BlsObservation":{"description":"BlsObservation is a single BLS data point.","properties":{"period":{"description":"Period code (e.g. \"M01\" for January, \"A01\" for annual).","type":"string"},"periodName":{"description":"Human-readable period name.","type":"string"},"value":{"description":"Observed value.","type":"string"},"year":{"description":"Year of the observation.","type":"string"}},"type":"object"},"BlsSeries":{"description":"BlsSeries is a BLS time series with metadata and observations.","properties":{"observations":{"items":{"$ref":"#/components/schemas/BlsObservation"},"type":"array"},"seriesId":{"description":"BLS series ID (e.g. \"CES0500000001\").","type":"string"},"title":{"description":"Human-readable series title.","type":"string"},"units":{"description":"Unit of measure.","type":"string"}},"type":"object"},"CapitalFlowBank":{"description":"CapitalFlowBank is the BIS locational banking view of one country's residents.","properties":{"householdDepositsAbroad":{"$ref":"#/components/schemas/CapitalFlowPosition"},"latestPeriod":{"description":"Latest quarter, YYYY-Qn.","type":"string"},"nonBankBorrowingFromAbroad":{"$ref":"#/components/schemas/CapitalFlowPosition"},"nonBankDepositsAbroad":{"$ref":"#/components/schemas/CapitalFlowPosition"},"publishesBilateral":{"description":"True when the country's own banks publish a by-counterparty breakdown to the BIS. Some reporting systems publish aggregates only.","type":"boolean"},"topBankLocations":{"items":{"$ref":"#/components/schemas/CapitalFlowCounterparty"},"type":"array"},"topDepositorOrigins":{"items":{"$ref":"#/components/schemas/CapitalFlowCounterparty"},"type":"array"}},"type":"object"},"CapitalFlowBop":{"description":"CapitalFlowBop is the IMF balance-of-payments view of one country.","properties":{"episodes":{"$ref":"#/components/schemas/CapitalFlowEpisodes"},"frequency":{"description":"quarterly when a current quarterly series exists, otherwise annual. Annual series carry no state and no episodes.","type":"string"},"latestPeriod":{"description":"Latest period in the series: YYYY-Qn or YYYY.","type":"string"},"series":{"items":{"$ref":"#/components/schemas/CapitalFlowPeriod"},"type":"array"},"state":{"$ref":"#/components/schemas/CapitalFlowState"},"totals":{"$ref":"#/components/schemas/CapitalFlowTotals"}},"type":"object"},"CapitalFlowComponents":{"description":"CapitalFlowComponents splits one side of the financial account by functional category, in USD billions. A component is absent when the source does not report it for the period.","properties":{"fdi":{"description":"Direct investment: lasting-interest stakes of 10% or more, including reinvested earnings and intercompany debt.","format":"double","type":"number"},"other":{"description":"Other investment: loans, deposits, currency, trade credit and other accounts.","format":"double","type":"number"},"portfolio":{"description":"Portfolio investment: equity and debt securities that are not direct investment.","format":"double","type":"number"},"total":{"description":"Sum of the three categories. Set only when all three are reported for the period; a partial sum would read as a collapse.","format":"double","type":"number"}},"type":"object"},"CapitalFlowCounterparty":{"description":"CapitalFlowCounterparty is one partner country in a ranked bilateral list, in USD billions.","properties":{"country":{"description":"ISO 3166-1 alpha-2 code of the partner.","type":"string"},"flow4qUsdBn":{"description":"Four-quarter adjusted flow. Bank lists only.","format":"double","type":"number"},"stockUsdBn":{"description":"Outstanding amount.","format":"double","type":"number"}},"type":"object"},"CapitalFlowCountry":{"description":"CapitalFlowCountry carries every capital-flow view for one country. A view is absent when its source publishes nothing for the country.","properties":{"bank":{"$ref":"#/components/schemas/CapitalFlowBank"},"bop":{"$ref":"#/components/schemas/CapitalFlowBop"},"country":{"description":"ISO 3166-1 alpha-2 code.","type":"string"},"fdi":{"$ref":"#/components/schemas/CapitalFlowFdi"},"gdpUsdBn":{"description":"GDP used for percent-of-GDP figures, USD billions (World Bank, current US dollars).","format":"double","type":"number"},"gdpYear":{"description":"Year of that GDP figure.","format":"int32","type":"integer"},"iso3":{"description":"ISO 3166-1 alpha-3 code.","type":"string"},"portfolio":{"$ref":"#/components/schemas/CapitalFlowPortfolio"}},"type":"object"},"CapitalFlowEpisode":{"description":"CapitalFlowEpisode is one Forbes and Warnock (2012) episode on a quarterly series. Derived from reported flows, not published by the source.","properties":{"end":{"description":"Last quarter of the episode, YYYY-Qn. Equals the series' latest quarter while the episode is still open.","type":"string"},"peakPeriod":{"description":"Quarter of the peak z-score, YYYY-Qn.","type":"string"},"peakZ":{"description":"Largest absolute z-score reached during the episode; always at least 2.","format":"double","type":"number"},"quarters":{"description":"Number of quarters in the episode; always at least 2.","format":"int32","type":"integer"},"start":{"description":"First quarter of the episode, YYYY-Qn: the first quarter the change in four-quarter flows moved more than one standard deviation from its trailing mean.","type":"string"}},"type":"object"},"CapitalFlowEpisodes":{"description":"CapitalFlowEpisodes lists the episodes that ended within the last ten years, oldest first, by type.","properties":{"flight":{"items":{"$ref":"#/components/schemas/CapitalFlowEpisode"},"type":"array"},"retrenchment":{"items":{"$ref":"#/components/schemas/CapitalFlowEpisode"},"type":"array"},"stop":{"items":{"$ref":"#/components/schemas/CapitalFlowEpisode"},"type":"array"},"surge":{"items":{"$ref":"#/components/schemas/CapitalFlowEpisode"},"type":"array"}},"type":"object"},"CapitalFlowFdi":{"description":"CapitalFlowFdi is the IMF direct-investment positions view of one country, as the country itself reports them, by immediate counterpart, in USD billions. Conduit economies carry large pass-through positions.","properties":{"inwardUsdBn":{"description":"Direct investment in the country by all counterparts.","format":"double","type":"number"},"outwardUsdBn":{"description":"The country's direct investment abroad.","format":"double","type":"number"},"topDestinations":{"items":{"$ref":"#/components/schemas/CapitalFlowCounterparty"},"type":"array"},"topInvestors":{"items":{"$ref":"#/components/schemas/CapitalFlowCounterparty"},"type":"array"},"year":{"description":"Reference year: the newest year at least 80% as well reported as the year before.","format":"int32","type":"integer"}},"type":"object"},"CapitalFlowLatest":{"description":"CapitalFlowLatest names the newest period of each source.","properties":{"bisQuarter":{"description":"Latest BIS banking quarter, YYYY-Qn.","type":"string"},"bopQuarter":{"description":"Quarter most quarterly balance-of-payments reporters have reached, YYYY-Qn.","type":"string"},"bopYear":{"description":"Year most annual-only reporters have reached.","type":"string"},"fdiYear":{"description":"Direct-investment positions reference year.","format":"int32","type":"integer"},"pipYear":{"description":"Portfolio-positions reference year.","format":"int32","type":"integer"}},"type":"object"},"CapitalFlowPair":{"description":"CapitalFlowPair carries a country (a) and a counterpart (b) in both directions across bank, portfolio and direct-investment channels.","properties":{"aBorrowingFromB":{"$ref":"#/components/schemas/CapitalFlowPairLeg"},"aDepositsInB":{"$ref":"#/components/schemas/CapitalFlowPairLeg"},"aFdiInB":{"$ref":"#/components/schemas/CapitalFlowPairLeg"},"aHoldingsOfB":{"$ref":"#/components/schemas/CapitalFlowPairLeg"},"bBorrowingFromA":{"$ref":"#/components/schemas/CapitalFlowPairLeg"},"bDepositsInA":{"$ref":"#/components/schemas/CapitalFlowPairLeg"},"bFdiInA":{"$ref":"#/components/schemas/CapitalFlowPairLeg"},"bHoldingsOfA":{"$ref":"#/components/schemas/CapitalFlowPairLeg"},"bankPeriod":{"description":"BIS quarter of the bank legs, YYYY-Qn. Portfolio and FDI legs carry their own years below.","type":"string"},"counterpart":{"description":"ISO 3166-1 alpha-2 code of b, the counterpart.","type":"string"},"country":{"description":"ISO 3166-1 alpha-2 code of a, the requested country.","type":"string"},"fdiYear":{"description":"IMF direct-investment positions year of the FDI legs.","format":"int32","type":"integer"},"portfolioYear":{"description":"IMF portfolio-positions year of the holding legs.","format":"int32","type":"integer"}},"type":"object"},"CapitalFlowPairLeg":{"description":"CapitalFlowPairLeg is one direction of a bilateral position, in USD billions.","properties":{"basis":{"description":"FDI legs: investor when stockUsdBn is the investor's outward figure, host when only the host's inward figure exists. Empty for other legs.","type":"string"},"counterpartReportUsdBn":{"description":"FDI legs: the other side's figure for the same position. The two sides' reports often differ.","format":"double","type":"number"},"flow4qUsdBn":{"description":"Bank legs: sum of the last four FX- and break-adjusted quarterly changes.","format":"double","type":"number"},"history":{"items":{"$ref":"#/components/schemas/CapitalFlowPairPoint"},"type":"array"},"instrument":{"description":"Bank legs: loans_deposits (BIS instrument G) normally; all_instruments (instrument A, which adds debt securities) for a reporting system that publishes no loans-and-deposits breakdown. Empty for other legs.","type":"string"},"prevYearUsdBn":{"description":"Portfolio legs: the same holding a year earlier.","format":"double","type":"number"},"status":{"description":"reported: the reporting side published a current figure. not_itemized: the reporting side publishes bilateral data but has no current figure for this partner (zero, small, confidential, or a series that stopped); unknown, not zero. not_published: the reporting side publishes no bilateral breakdown.","type":"string"},"stockUsdBn":{"description":"Outstanding position at the leg's reference period.","format":"double","type":"number"}},"type":"object"},"CapitalFlowPairPoint":{"description":"CapitalFlowPairPoint is one quarterly adjusted bank flow.","properties":{"period":{"description":"Quarter, YYYY-Qn.","type":"string"},"usdBn":{"description":"Adjusted flow in the quarter, USD billions. Positive means the position grew.","format":"double","type":"number"}},"type":"object"},"CapitalFlowPeriod":{"description":"CapitalFlowPeriod is one period of gross balance-of-payments financial-account flows.","properties":{"errorsOmissions":{"description":"Net errors and omissions, USD billions. Persistent negative values can indicate outflows the official categories do not record.","format":"double","type":"number"},"inflows":{"$ref":"#/components/schemas/CapitalFlowComponents"},"outflows":{"$ref":"#/components/schemas/CapitalFlowComponents"},"period":{"description":"Period label: YYYY-Qn for quarterly series, YYYY for annual series.","type":"string"}},"type":"object"},"CapitalFlowPortfolio":{"description":"CapitalFlowPortfolio is the IMF portfolio-positions view of one country, from mirror data, in USD billions.","properties":{"changePct":{"description":"Change between the two, percent. Mixes new money with price and exchange-rate moves.","format":"double","type":"number"},"foreignHoldingsPrevYearUsdBn":{"description":"The same reporters' holdings a year earlier, so the change is like for like.","format":"double","type":"number"},"foreignHoldingsUsdBn":{"description":"Securities issued by residents of this country held by every reporting economy.","format":"double","type":"number"},"holdingsAbroadUsdBn":{"description":"The country's own holdings of foreign securities, when it reports them.","format":"double","type":"number"},"reporterCount":{"description":"Number of reporting economies holding the country's securities.","format":"int32","type":"integer"},"topDestinations":{"items":{"$ref":"#/components/schemas/CapitalFlowCounterparty"},"type":"array"},"topHolders":{"items":{"$ref":"#/components/schemas/CapitalFlowCounterparty"},"type":"array"},"year":{"description":"Reference year: the newest year at least 80% as well reported as the year before.","format":"int32","type":"integer"}},"type":"object"},"CapitalFlowPosition":{"description":"CapitalFlowPosition is a cross-border bank position from BIS locational banking statistics, in USD billions.","properties":{"flow4qUsdBn":{"description":"Sum of the last four FX- and break-adjusted quarterly changes: money moved, net of exchange-rate effects and reporting breaks. Positive means the position grew.","format":"double","type":"number"},"stockUsdBn":{"description":"Outstanding amount at the latest quarter.","format":"double","type":"number"}},"type":"object"},"CapitalFlowState":{"description":"CapitalFlowState is the episode classification at the latest quarter both sides report. Derived, not published by the source.","properties":{"inflow":{"description":"surge or stop when an inflow episode is open at the latest quarter; empty otherwise.","type":"string"},"inflowZ":{"description":"Inflow z-score at the latest quarter: the change in four-quarter inflows against its trailing 20-quarter mean, in standard deviations. Beyond plus or minus 2 is an episode-level move.","format":"double","type":"number"},"outflow":{"description":"flight or retrenchment when an outflow episode is open at the latest quarter; empty otherwise.","type":"string"},"outflowZ":{"description":"Outflow z-score at the latest quarter, on the same basis.","format":"double","type":"number"}},"type":"object"},"CapitalFlowTotals":{"description":"CapitalFlowTotals summarizes gross flows over the trailing four quarters (quarterly series) or the latest year (annual series). USD billions unless the name ends in Pct or PctGdp.","properties":{"inflowsPctGdp":{"description":"Gross inflows as a percent of GDP.","format":"double","type":"number"},"inflowsUsdBn":{"description":"Gross inflows over the window. Absent when any quarter in it is incomplete or the quarters are not consecutive.","format":"double","type":"number"},"inflowsYoyPct":{"description":"Year-on-year change in gross inflows, percent. Annual series only, and only when the prior year is reported.","format":"double","type":"number"},"netUsdBn":{"description":"Inflows minus outflows. Positive means the country took in more than it sent out.","format":"double","type":"number"},"outflowsPctGdp":{"description":"Gross outflows as a percent of GDP.","format":"double","type":"number"},"outflowsUsdBn":{"description":"Gross outflows over the window, on the same basis.","format":"double","type":"number"},"outflowsYoyPct":{"description":"Year-on-year change in gross outflows, percent, on the same basis.","format":"double","type":"number"}},"type":"object"},"ChinaMacroIndicator":{"properties":{"category":{"type":"string"},"comparisonBasis":{"type":"string"},"comparisonValue":{"format":"double","type":"number"},"contextOnly":{"type":"boolean"},"direction":{"type":"string"},"directionReason":{"type":"string"},"geography":{"type":"string"},"hasComparisonValue":{"type":"boolean"},"hasPriorValue":{"type":"boolean"},"hasValue":{"type":"boolean"},"id":{"description":"Kept as \"indicator\" for API compatibility; each row is a versioned,\n revision-aware official observation in cache schema v2.","type":"string"},"label":{"type":"string"},"observationDate":{"type":"string"},"observationPeriod":{"type":"string"},"periodKind":{"type":"string"},"priorValue":{"format":"double","type":"number"},"provenanceJson":{"description":"Canonical #5581 payload, validated before crossing the cache/API boundary.","type":"string"},"releaseTime":{"type":"string"},"retrievalTime":{"type":"string"},"revisionSequence":{"format":"int32","type":"integer"},"revisionState":{"type":"string"},"seasonalAdjustment":{"type":"string"},"source":{"type":"string"},"sourceUrl":{"type":"string"},"stale":{"type":"boolean"},"transportFailureReason":{"type":"string"},"transportStatus":{"type":"string"},"unavailableReason":{"type":"string"},"unit":{"type":"string"},"value":{"format":"double","type":"number"},"vintageId":{"type":"string"},"vintages":{"items":{"$ref":"#/components/schemas/ChinaMacroVintage"},"type":"array"}},"type":"object"},"ChinaMacroPillarPulse":{"properties":{"direction":{"type":"string"},"observationIds":{"items":{"type":"string"},"type":"array"},"pillar":{"type":"string"},"reason":{"type":"string"}},"type":"object"},"ChinaMacroSourceDecision":{"properties":{"checkedAt":{"type":"string"},"host":{"type":"string"},"optional":{"type":"boolean"},"publisherId":{"type":"string"},"reason":{"type":"string"},"redirectBehavior":{"type":"string"},"requestBudget":{"format":"int32","type":"integer"},"requestCount":{"format":"int32","type":"integer"},"robotsStatus":{"type":"string"},"source":{"type":"string"},"sourceUrl":{"type":"string"},"status":{"type":"string"},"termsStatus":{"type":"string"}},"type":"object"},"ChinaMacroVintage":{"properties":{"hasValue":{"type":"boolean"},"observationPeriod":{"type":"string"},"periodKind":{"type":"string"},"provenanceJson":{"type":"string"},"releaseTime":{"type":"string"},"retrievalTime":{"type":"string"},"sequence":{"format":"int32","type":"integer"},"state":{"type":"string"},"supersededBy":{"type":"string"},"value":{"format":"double","type":"number"},"vintageId":{"type":"string"}},"type":"object"},"ChinaReleaseEvent":{"properties":{"countryCode":{"type":"string"},"event":{"type":"string"},"id":{"type":"string"},"kind":{"type":"string"},"releaseDate":{"type":"string"},"releaseTime":{"type":"string"},"source":{"type":"string"},"sourceUrl":{"type":"string"},"status":{"type":"string"},"timezone":{"type":"string"}},"type":"object"},"CountriesEntry":{"properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/EurostatCountryEntry"}},"type":"object"},"CountryBasket":{"properties":{"code":{"type":"string"},"currency":{"type":"string"},"flag":{"type":"string"},"fxRate":{"format":"double","type":"number"},"items":{"items":{"$ref":"#/components/schemas/GroceryItemPrice"},"type":"array"},"name":{"type":"string"},"totalUsd":{"format":"double","type":"number"},"wowPct":{"format":"double","type":"number"}},"type":"object"},"CrudeInventoryWeek":{"description":"CrudeInventoryWeek represents one week of US commercial crude oil stockpile data from EIA WCESTUS1.","properties":{"period":{"description":"ISO week period (YYYY-MM-DD, Monday of the EIA report week).","type":"string"},"stocksMb":{"description":"Total crude oil stocks in millions of barrels.","format":"double","type":"number"},"weeklyChangeMb":{"description":"Week-over-week change in millions of barrels. Positive = build (bearish), negative = draw (bullish).\n Absent for the oldest week when no prior week is available for comparison.","format":"double","type":"number"}},"type":"object"},"CrudeInventoryWeekRef":{"properties":{"period":{"type":"string"},"stocksMb":{"format":"double","type":"number"},"weeklyChangeMb":{"format":"double","type":"number"}},"type":"object"},"EcbFxRate":{"description":"EcbFxRate is a single ECB official reference rate for a currency pair.","properties":{"change1d":{"description":"1-day change in rate (absolute).","format":"double","type":"number"},"date":{"description":"Date of the observation in YYYY-MM-DD format.","type":"string"},"pair":{"description":"Currency pair label, e.g. \"EURUSD\".","type":"string"},"rate":{"description":"Exchange rate (units of quote currency per 1 EUR).","format":"double","type":"number"}},"type":"object"},"EconomicEvent":{"properties":{"actual":{"type":"string"},"country":{"type":"string"},"date":{"type":"string"},"estimate":{"type":"string"},"event":{"type":"string"},"impact":{"type":"string"},"previous":{"type":"string"},"unit":{"type":"string"}},"type":"object"},"EconomicStressComponent":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"missing":{"type":"boolean"},"rawValue":{"format":"double","type":"number"},"score":{"format":"double","type":"number"},"weight":{"format":"double","type":"number"}},"type":"object"},"EnergyCapacitySeries":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EnergyCapacityYear"},"type":"array"},"energySource":{"type":"string"},"name":{"type":"string"}},"type":"object"},"EnergyCapacityYear":{"properties":{"capacityMw":{"format":"double","type":"number"},"year":{"format":"int32","type":"integer"}},"type":"object"},"EnergyCrisisPolicy":{"description":"EnergyCrisisPolicy represents a single government policy response to the 2026 energy crisis.","properties":{"category":{"description":"Policy category: \"conservation\" or \"consumer_support\".","type":"string"},"country":{"description":"Country name.","type":"string"},"countryCode":{"description":"ISO 3166-1 alpha-2 country code.","type":"string"},"dateAnnounced":{"description":"Date announced in ISO-8601 (YYYY-MM-DD) format.","type":"string"},"measure":{"description":"Description of the policy measure.","type":"string"},"sector":{"description":"Affected sector: transport, buildings, industry, electricity, agriculture, general.","type":"string"},"status":{"description":"Status of the policy: active, planned, or ended.","type":"string"}},"type":"object"},"EnergyPrice":{"description":"EnergyPrice represents a current energy commodity price from EIA.","properties":{"change":{"description":"Percentage change from previous period.","format":"double","type":"number"},"commodity":{"description":"Energy commodity identifier.","minLength":1,"type":"string"},"frequency":{"type":"string"},"name":{"description":"Human-readable name (e.g., \"WTI Crude Oil\", \"Henry Hub Natural Gas\").","type":"string"},"price":{"description":"Observed price in USD. Check stale before treating it as current.","format":"double","type":"number"},"priceAt":{"description":"Observation date as Unix epoch milliseconds. For weekly prices, the week ending date.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"priceBasis":{"type":"string"},"priceSource":{"type":"string"},"stale":{"description":"True when the observation is undated, future-dated, or older than the freshness budget.","type":"boolean"},"unit":{"description":"Unit of measurement (e.g., \"$/barrel\", \"$/MMBtu\").","type":"string"}},"required":["commodity"],"type":"object"},"Error":{"description":"Error is returned when a handler encounters an error. It contains a simple error message that the developer can customize.","properties":{"message":{"description":"Error message (e.g., 'user not found', 'database connection failed')","type":"string"}},"type":"object"},"EuFsiObservation":{"properties":{"date":{"type":"string"},"value":{"format":"double","type":"number"}},"type":"object"},"EuGasStorageHistoryEntry":{"description":"EuGasStorageHistoryEntry represents one day of EU aggregate gas storage data.","properties":{"date":{"description":"Calendar date (YYYY-MM-DD).","type":"string"},"fillPct":{"description":"Storage fill level as a percentage of working gas volume capacity.","format":"double","type":"number"},"gasTwh":{"description":"Working gas volume in storage (TWh).","format":"double","type":"number"}},"type":"object"},"EuYieldCurveData":{"description":"EuYieldCurveData holds a single observation of the ECB Euro Area AAA yield curve.","properties":{"date":{"description":"Date of the observation (YYYY-MM or YYYY-MM-DD).","type":"string"},"rates":{"additionalProperties":{"format":"double","type":"number"},"description":"Spot rates by tenor. Keys: \"1Y\", \"2Y\", \"5Y\", \"10Y\", \"20Y\", \"30Y\".","type":"object"},"source":{"description":"Data source identifier (e.g. \"ecb-aaa\").","type":"string"},"updatedAt":{"description":"ISO 8601 timestamp when this was last seeded.","type":"string"}},"type":"object"},"EurostatCountryEntry":{"description":"EurostatCountryEntry holds all available metrics for one EU country.","properties":{"cpi":{"$ref":"#/components/schemas/EurostatMetric"},"gdpGrowth":{"$ref":"#/components/schemas/EurostatMetric"},"unemployment":{"$ref":"#/components/schemas/EurostatMetric"}},"type":"object"},"EurostatMetric":{"description":"EurostatMetric holds a single economic metric value for a country.","properties":{"date":{"description":"Period string (e.g. \"2024-01\" for monthly, \"2024-Q1\" for quarterly).","type":"string"},"hasPrior":{"description":"True when prior_value is present (proto3 can't distinguish 0 from absent).","type":"boolean"},"priorValue":{"description":"Prior period value for delta calculation (e.g. previous month/quarter).","format":"double","type":"number"},"unit":{"description":"Unit of measurement (e.g. \"%\").","type":"string"},"value":{"description":"Numeric value (e.g. 2.3 for 2.3%).","format":"double","type":"number"}},"type":"object"},"FaoFoodPricePoint":{"properties":{"cereals":{"format":"double","type":"number"},"dairy":{"format":"double","type":"number"},"date":{"type":"string"},"ffpi":{"format":"double","type":"number"},"meat":{"format":"double","type":"number"},"oils":{"format":"double","type":"number"},"sugar":{"format":"double","type":"number"}},"type":"object"},"FearGreedHistoryEntry":{"description":"FearGreedHistoryEntry is a single day's Fear \u0026 Greed index reading.","properties":{"date":{"description":"Date string (YYYY-MM-DD).","type":"string"},"value":{"description":"Index value (0-100).","format":"int32","maximum":100,"minimum":0,"type":"integer"}},"type":"object"},"FearGreedSignal":{"description":"FearGreedSignal tracks the Crypto Fear \u0026 Greed index.","properties":{"history":{"items":{"$ref":"#/components/schemas/FearGreedHistoryEntry"},"type":"array"},"status":{"description":"Classification label (e.g., \"Extreme Fear\", \"Greed\").","type":"string"},"value":{"description":"Current index value (0-100).","format":"int32","type":"integer"}},"type":"object"},"FieldViolation":{"description":"FieldViolation describes a single validation error for a specific field.","properties":{"description":{"description":"Human-readable description of the validation violation (e.g., 'must be a valid email address', 'required field missing')","type":"string"},"field":{"description":"The field path that failed validation (e.g., 'user.email' for nested fields). For header validation, this will be the header name (e.g., 'X-API-Key')","type":"string"}},"required":["field","description"],"type":"object"},"FlowStructureSignal":{"description":"FlowStructureSignal compares BTC vs QQQ 5-day returns.","properties":{"btcReturn5":{"description":"BTC 5-day return percentage.","format":"double","type":"number"},"qqqReturn5":{"description":"QQQ 5-day return percentage.","format":"double","type":"number"},"status":{"description":"\"PASSIVE GAP\", \"ALIGNED\", or \"UNKNOWN\".","type":"string"}},"type":"object"},"FoodMarketPrice":{"properties":{"currency":{"type":"string"},"date":{"type":"string"},"item":{"type":"string"},"market":{"type":"string"},"marketType":{"type":"string"},"origin":{"type":"string"},"previousDate":{"description":"Date of the baseline price. Empty when wow_available is false.","type":"string"},"previousPrice":{"description":"Baseline price in the same unit and currency. 0 when wow_available is false.","format":"double","type":"number"},"price":{"format":"double","type":"number"},"unit":{"type":"string"},"wowAvailable":{"description":"True only when the same series has a price exactly seven days before `date`.\n When false, there is no comparison: wow_pct, previous_date and previous_price\n are placeholders (0 or empty), not a 0% change.","type":"boolean"},"wowPct":{"description":"Week-over-week change in percent. Meaningful only when wow_available is true.","format":"double","type":"number"}},"type":"object"},"FoodPriceSource":{"properties":{"attribution":{"description":"Citation the publisher asks for (for example a licence or required credit). Empty when none is stated.","type":"string"},"cadence":{"type":"string"},"contextOnly":{"type":"boolean"},"contexts":{"items":{"$ref":"#/components/schemas/FoodSecurityContext"},"type":"array"},"country":{"type":"string"},"countryCode":{"type":"string"},"fetchedAt":{"type":"string"},"id":{"type":"string"},"latestReportDate":{"type":"string"},"name":{"type":"string"},"prices":{"items":{"$ref":"#/components/schemas/FoodMarketPrice"},"type":"array"},"status":{"description":"current, partial, stale, or unavailable. A successful fetch does not reset the report date.","type":"string"},"url":{"type":"string"}},"type":"object"},"FoodSecurityContext":{"properties":{"country":{"type":"string"},"countryCode":{"type":"string"},"fetchedAt":{"type":"string"},"referenceDate":{"type":"string"},"status":{"description":"current, stale, or unavailable, independently for each country brief.","type":"string"},"title":{"type":"string"},"url":{"type":"string"}},"type":"object"},"ForbiddenError":{"description":"Returned when a PRO-gated endpoint denies access because the caller has no resolved authenticated user, entitlements cannot be verified, or the caller lacks the required entitlement tier.","properties":{"code":{"description":"Machine-readable denial code, present when the 403 is a billing-provider-confirmed subscription lapse (mirrored in the X-Billing-Verification response header).","enum":["subscription_lapsed"],"type":"string"},"currentTier":{"description":"Caller entitlement tier when known.","format":"int32","type":"integer"},"error":{"description":"Human-readable entitlement failure reason.","type":"string"},"planKey":{"description":"Caller plan key when known.","type":"string"},"requiredTier":{"description":"Minimum entitlement tier required for this endpoint.","format":"int32","type":"integer"}},"required":["error"],"type":"object"},"FredObservation":{"description":"FredObservation represents a single data point from a FRED economic series.","properties":{"date":{"description":"Observation date as YYYY-MM-DD string.","type":"string"},"value":{"description":"Observation value.","format":"double","type":"number"}},"type":"object"},"FredSeries":{"description":"FredSeries represents a FRED time series with metadata.","properties":{"frequency":{"description":"Data frequency (e.g., \"Monthly\", \"Quarterly\").","type":"string"},"observations":{"items":{"$ref":"#/components/schemas/FredObservation"},"type":"array"},"seriesId":{"description":"Series identifier (e.g., \"GDP\", \"UNRATE\", \"CPIAUCSL\").","minLength":1,"type":"string"},"title":{"description":"Series title.","type":"string"},"units":{"description":"Unit of measurement.","type":"string"}},"required":["seriesId"],"type":"object"},"FuelCountryPrice":{"properties":{"code":{"type":"string"},"currency":{"type":"string"},"diesel":{"$ref":"#/components/schemas/FuelPrice"},"flag":{"type":"string"},"fxRate":{"format":"double","type":"number"},"gasoline":{"$ref":"#/components/schemas/FuelPrice"},"name":{"type":"string"}},"type":"object"},"FuelPrice":{"properties":{"available":{"type":"boolean"},"grade":{"type":"string"},"localPrice":{"format":"double","type":"number"},"observedAt":{"type":"string"},"source":{"type":"string"},"usdPrice":{"format":"double","type":"number"},"wowPct":{"format":"double","type":"number"}},"type":"object"},"GatewayError":{"description":"Returned by gateway infrastructure errors before an RPC handler runs, such as origin, routing, method, authentication, or quota checks.","properties":{"error":{"description":"Gateway error reason or structured gateway failure details.","oneOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]}},"required":["error"],"type":"object"},"GetBisCreditRequest":{"description":"GetBisCreditRequest requests credit-to-GDP ratio data.","type":"object"},"GetBisCreditResponse":{"description":"GetBisCreditResponse contains BIS credit-to-GDP data.","properties":{"entries":{"items":{"$ref":"#/components/schemas/BisCreditToGdp"},"type":"array"}},"type":"object"},"GetBisExchangeRatesRequest":{"description":"GetBisExchangeRatesRequest requests effective exchange rates.","type":"object"},"GetBisExchangeRatesResponse":{"description":"GetBisExchangeRatesResponse contains BIS effective exchange rate data.","properties":{"rates":{"items":{"$ref":"#/components/schemas/BisExchangeRate"},"type":"array"}},"type":"object"},"GetBisPolicyRatesRequest":{"description":"GetBisPolicyRatesRequest requests central bank policy rates.","type":"object"},"GetBisPolicyRatesResponse":{"description":"GetBisPolicyRatesResponse contains BIS policy rate data.","properties":{"rates":{"items":{"$ref":"#/components/schemas/BisPolicyRate"},"type":"array"}},"type":"object"},"GetBlsSeriesRequest":{"description":"GetBlsSeriesRequest specifies which BLS series to retrieve.","properties":{"limit":{"description":"Maximum number of observations to return. Defaults to 60.","format":"int32","type":"integer"},"seriesId":{"description":"BLS/FRED-backed series ID. Supported values: \"USPRIV\", \"ECIALLCIV\".","type":"string"}},"type":"object"},"GetBlsSeriesResponse":{"description":"GetBlsSeriesResponse contains the requested BLS series data.","properties":{"series":{"$ref":"#/components/schemas/BlsSeries"}},"type":"object"},"GetCapitalFlowsRequest":{"description":"GetCapitalFlowsRequest selects countries, an optional counterpart, and detail.","properties":{"counterpart":{"description":"Optional ISO 3166-1 alpha-2 partner. With country, the response adds pair (both directions) and the counterpart's own view. Ignored without country, and when equal to country.","maxLength":2,"type":"string"},"country":{"description":"Optional ISO 3166-1 alpha-2 filter. When set, only that country is returned (and the counterpart, if given).","maxLength":2,"type":"string"},"includeSeries":{"description":"When true, include each returned country's period-by-period BOP series. Defaults to false.","type":"boolean"}},"type":"object"},"GetCapitalFlowsResponse":{"description":"GetCapitalFlowsResponse is cross-country capital-flow data from IMF and BIS official statistics. Amounts are USD billions.","properties":{"countries":{"items":{"$ref":"#/components/schemas/CapitalFlowCountry"},"type":"array"},"latest":{"$ref":"#/components/schemas/CapitalFlowLatest"},"method":{"additionalProperties":{"type":"string"},"description":"Short method notes keyed by view: bop, episodes, bank, portfolio, fdi, pairs, caveat.","type":"object"},"pair":{"$ref":"#/components/schemas/CapitalFlowPair"},"seededAt":{"description":"When the dataset was built, Unix epoch milliseconds. 0 when unavailable.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"sources":{"items":{"description":"Source URLs.","type":"string"},"type":"array"},"unavailable":{"description":"True when the seeded dataset is unavailable. An empty country list is not zero flow.","type":"boolean"}},"type":"object"},"GetChinaActivityNowcastRequest":{"type":"object"},"GetChinaActivityNowcastResponse":{"properties":{"comparisonState":{"type":"string"},"generatedAt":{"type":"string"},"methodVersion":{"type":"string"},"payloadJson":{"description":"Canonical inspectable method payload. Numeric computation and state\n assignment are deterministic and validated before crossing this boundary.","type":"string"},"upstreamUnavailable":{"description":"True only when no official vintage or proxy contribution is available.\n Methodological insufficiency with otherwise healthy inputs remains false.","type":"boolean"}},"type":"object"},"GetChinaMacroSnapshotRequest":{"type":"object"},"GetChinaMacroSnapshotResponse":{"properties":{"contentObservationDate":{"type":"string"},"countryCode":{"type":"string"},"generatedAt":{"type":"string"},"indicators":{"items":{"$ref":"#/components/schemas/ChinaMacroIndicator"},"type":"array"},"latestObservationDate":{"type":"string"},"launchReady":{"type":"boolean"},"pillars":{"items":{"$ref":"#/components/schemas/ChinaMacroPillarPulse"},"type":"array"},"releaseEvents":{"items":{"$ref":"#/components/schemas/ChinaReleaseEvent"},"type":"array"},"schemaVersion":{"format":"int32","type":"integer"},"sourceDecisions":{"items":{"$ref":"#/components/schemas/ChinaMacroSourceDecision"},"type":"array"},"status":{"type":"string"},"unavailable":{"description":"True when the seeded snapshot or release calendar is unavailable; callers\n should render the response as degraded rather than treating it as current.","type":"boolean"}},"type":"object"},"GetCrudeInventoriesRequest":{"description":"GetCrudeInventoriesRequest is the request message for GetCrudeInventories.","type":"object"},"GetCrudeInventoriesResponse":{"description":"GetCrudeInventoriesResponse contains the 8 most recent weeks of US crude oil inventory data.","properties":{"latestPeriod":{"description":"Timestamp of the most recent EIA data point (ISO 8601).","type":"string"},"weeks":{"items":{"$ref":"#/components/schemas/CrudeInventoryWeek"},"type":"array"}},"type":"object"},"GetEcbFxRatesRequest":{"description":"GetEcbFxRatesRequest is empty; returns all tracked EUR pairs.","type":"object"},"GetEcbFxRatesResponse":{"description":"GetEcbFxRatesResponse contains the latest ECB reference rates.","properties":{"rates":{"items":{"$ref":"#/components/schemas/EcbFxRate"},"type":"array"},"seededAt":{"description":"Unix ms when the data was last seeded.","format":"int64","type":"string"},"unavailable":{"description":"True when Redis key is missing or data is unavailable.\n True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"},"updatedAt":{"description":"ISO 8601 timestamp of the ECB publication.","type":"string"}},"type":"object"},"GetEconomicCalendarRequest":{"properties":{"fromDate":{"description":"Inclusive lower date bound in YYYY-MM-DD format.","type":"string"},"toDate":{"description":"Inclusive upper date bound in YYYY-MM-DD format.","type":"string"}},"type":"object"},"GetEconomicCalendarResponse":{"properties":{"asOf":{"type":"string"},"events":{"items":{"$ref":"#/components/schemas/EconomicEvent"},"type":"array"},"fromDate":{"type":"string"},"toDate":{"type":"string"},"total":{"format":"int32","type":"integer"},"unavailable":{"description":"True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"}},"type":"object"},"GetEconomicStressRequest":{"type":"object"},"GetEconomicStressResponse":{"properties":{"components":{"items":{"$ref":"#/components/schemas/EconomicStressComponent"},"type":"array"},"compositeScore":{"format":"double","type":"number"},"label":{"type":"string"},"seededAt":{"type":"string"},"unavailable":{"description":"True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"}},"type":"object"},"GetEnergyCapacityRequest":{"properties":{"energySources":{"items":{"description":"Energy source codes to query (e.g., \"SUN\", \"WND\", \"COL\").\n Empty returns all tracked sources (SUN, WND, COL).","type":"string"},"type":"array"},"years":{"description":"Number of years of historical data. Default 20 if not set.\n Accepted but currently ignored; no-op until this handler supports the parameter.","format":"int32","type":"integer"}},"type":"object"},"GetEnergyCapacityResponse":{"properties":{"series":{"items":{"$ref":"#/components/schemas/EnergyCapacitySeries"},"type":"array"}},"type":"object"},"GetEnergyCrisisPoliciesRequest":{"description":"GetEnergyCrisisPoliciesRequest allows optional filtering by country or category.","properties":{"category":{"description":"Optional category filter: \"conservation\" or \"consumer_support\".","type":"string"},"countryCode":{"description":"Optional ISO-2 country code filter.","type":"string"}},"type":"object"},"GetEnergyCrisisPoliciesResponse":{"description":"GetEnergyCrisisPoliciesResponse contains energy crisis policy data from the IEA tracker.","properties":{"context":{"description":"Context description.","type":"string"},"policies":{"items":{"$ref":"#/components/schemas/EnergyCrisisPolicy"},"type":"array"},"source":{"description":"Source attribution.","type":"string"},"sourceUrl":{"description":"Source URL.","type":"string"},"unavailable":{"description":"True when upstream seed data is unavailable (fallback result).\n True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"},"updatedAt":{"description":"UTC ISO-8601 timestamp when this data was last updated.","type":"string"}},"type":"object"},"GetEnergyPricesRequest":{"description":"GetEnergyPricesRequest specifies which energy commodities to retrieve.","properties":{"commodities":{"items":{"description":"Optional commodity filter. Empty returns all tracked commodities.","type":"string"},"type":"array"}},"type":"object"},"GetEnergyPricesResponse":{"description":"GetEnergyPricesResponse contains energy price data.","properties":{"prices":{"items":{"$ref":"#/components/schemas/EnergyPrice"},"type":"array"}},"type":"object"},"GetEuFsiRequest":{"type":"object"},"GetEuFsiResponse":{"properties":{"history":{"items":{"$ref":"#/components/schemas/EuFsiObservation"},"type":"array"},"label":{"type":"string"},"latestDate":{"type":"string"},"latestValue":{"format":"double","type":"number"},"seededAt":{"type":"string"},"stale":{"description":"True when latest_date is older than the CISS content-age budget: the ECB\n series has stopped publishing. Do not present a stale reading as current.","type":"boolean"},"unavailable":{"description":"True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"}},"type":"object"},"GetEuGasStorageRequest":{"description":"GetEuGasStorageRequest is empty — returns latest EU aggregate snapshot.","type":"object"},"GetEuGasStorageResponse":{"description":"GetEuGasStorageResponse contains the EU aggregate gas storage snapshot.","properties":{"fillPct":{"description":"Current storage fill level as a percentage of working gas volume (0–100).","format":"double","type":"number"},"fillPctChange1d":{"description":"1-day change in fill percentage (positive = injecting, negative = withdrawing).","format":"double","type":"number"},"gasDaysConsumption":{"description":"Approximate days of consumption remaining at average EU winter drawdown rate.","format":"double","type":"number"},"history":{"items":{"$ref":"#/components/schemas/EuGasStorageHistoryEntry"},"type":"array"},"seededAt":{"description":"UTC ms timestamp when seed data was written.","format":"int64","type":"string"},"trend":{"description":"Current storage trend: \"injecting\", \"withdrawing\", or \"stable\".","type":"string"},"unavailable":{"description":"True when upstream data is unavailable (fallback result).\n True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"},"updatedAt":{"description":"Calendar date of the most recent data point (YYYY-MM-DD).","type":"string"}},"type":"object"},"GetEuYieldCurveRequest":{"description":"GetEuYieldCurveRequest fetches the ECB Euro Area AAA sovereign yield curve.","type":"object"},"GetEuYieldCurveResponse":{"description":"GetEuYieldCurveResponse contains the latest ECB Euro Area AAA sovereign yield curve.","properties":{"data":{"$ref":"#/components/schemas/EuYieldCurveData"},"unavailable":{"description":"True if data is not yet available in cache.\n True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"}},"type":"object"},"GetEurostatCountryDataRequest":{"description":"GetEurostatCountryDataRequest requests Eurostat per-country economic data.","type":"object"},"GetEurostatCountryDataResponse":{"description":"GetEurostatCountryDataResponse contains per-country CPI, unemployment, and GDP growth.","properties":{"countries":{"additionalProperties":{"$ref":"#/components/schemas/EurostatCountryEntry"},"description":"Map of ISO2 country code to economic metrics (e.g. \"DE\", \"FR\", \"IT\").","type":"object"},"seededAt":{"description":"UTC ms timestamp when seed data was written.","format":"int64","type":"string"},"unavailable":{"description":"True when upstream data is unavailable (fallback result).\n True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"}},"type":"object"},"GetFaoFoodPriceIndexRequest":{"type":"object"},"GetFaoFoodPriceIndexResponse":{"properties":{"currentFfpi":{"format":"double","type":"number"},"fetchedAt":{"type":"string"},"momPct":{"format":"double","type":"number"},"points":{"items":{"$ref":"#/components/schemas/FaoFoodPricePoint"},"type":"array"},"yoyPct":{"format":"double","type":"number"}},"type":"object"},"GetFoodPricesRequest":{"type":"object"},"GetFoodPricesResponse":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/FoodPriceSource"},"type":"array"},"unavailable":{"description":"True when all source caches are unavailable; missing prices are not zero.","type":"boolean"}},"type":"object"},"GetFredSeriesBatchRequest":{"description":"GetFredSeriesBatchRequest looks up multiple FRED series in a single call.","properties":{"limit":{"description":"Maximum number of observations per series. Defaults to 120.","format":"int32","type":"integer"},"seriesIds":{"items":{"description":"FRED series IDs (e.g., \"WALCL\", \"FEDFUNDS\"). Max 20.","maxItems":20,"minItems":1,"type":"string"},"maxItems":20,"minItems":1,"type":"array"}},"type":"object"},"GetFredSeriesBatchResponse":{"description":"GetFredSeriesBatchResponse contains the requested FRED series data.","properties":{"fetched":{"description":"Number of series successfully fetched.","format":"int32","type":"integer"},"requested":{"description":"Number of series requested.","format":"int32","type":"integer"},"results":{"additionalProperties":{"$ref":"#/components/schemas/FredSeries"},"description":"Map of series_id -\u003e FRED series for found series.","type":"object"}},"type":"object"},"GetFredSeriesRequest":{"description":"GetFredSeriesRequest specifies which FRED series to retrieve.","properties":{"limit":{"description":"Maximum number of observations to return. Defaults to 120.","format":"int32","type":"integer"},"seriesId":{"description":"FRED series ID (e.g., \"GDP\", \"UNRATE\", \"CPIAUCSL\").","minLength":1,"type":"string"}},"required":["seriesId"],"type":"object"},"GetFredSeriesResponse":{"description":"GetFredSeriesResponse contains the requested FRED series data.","properties":{"series":{"$ref":"#/components/schemas/FredSeries"}},"type":"object"},"GetGovernmentYieldCurveRequest":{"description":"GetGovernmentYieldCurveRequest selects one sovereign market and window.","properties":{"country":{"description":"ISO 3166-1 alpha-2 code of the sovereign, e.g. \"JP\" or \"DE\".","minLength":1,"type":"string"},"history":{"description":"True for every stored business day; false for the latest day.","type":"boolean"},"limit":{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","format":"int32","maximum":366,"minimum":0,"type":"integer"}},"required":["country"],"type":"object"},"GetGovernmentYieldCurveResponse":{"description":"GetGovernmentYieldCurveResponse is the curve for the requested market.","properties":{"country":{"description":"Echoed uppercase ISO 3166-1 alpha-2 code.","type":"string"},"curves":{"items":{"$ref":"#/components/schemas/YieldCurvePoint"},"type":"array"},"measure":{"description":"Yield measure: \"par\", \"spot\", \"benchmark\", or \"monthly-10y\".","type":"string"},"source":{"description":"Covered-market descriptor, e.g. \"jp-mof-cmt\" or \"uk-boe-spot\".","type":"string"},"unavailable":{"description":"True when the market is uncovered or its seeded curve is unavailable. An\n empty curves list is graceful degradation, not a confirmed zero yield.","type":"boolean"}},"type":"object"},"GetMacroSignalsRequest":{"description":"GetMacroSignalsRequest requests the current macro signal dashboard.","type":"object"},"GetMacroSignalsResponse":{"description":"GetMacroSignalsResponse contains the full macro signal dashboard with 7 signals and verdict.","properties":{"bullishCount":{"description":"Number of bullish signals.","format":"int32","type":"integer"},"meta":{"$ref":"#/components/schemas/MacroMeta"},"signals":{"$ref":"#/components/schemas/MacroSignals"},"timestamp":{"description":"ISO 8601 timestamp of computation.","type":"string"},"totalCount":{"description":"Total number of evaluated signals (excluding UNKNOWN).","format":"int32","type":"integer"},"unavailable":{"description":"True when upstream data is unavailable (fallback result).\n True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"},"verdict":{"description":"Overall verdict: \"BUY\", \"CASH\", or \"UNKNOWN\".","type":"string"}},"type":"object"},"GetNatGasStorageRequest":{"description":"GetNatGasStorageRequest is the request message for GetNatGasStorage.","type":"object"},"GetNatGasStorageResponse":{"description":"GetNatGasStorageResponse contains the 8 most recent weeks of US natural gas storage data.","properties":{"latestPeriod":{"description":"Timestamp of the most recent EIA data point (ISO 8601).","type":"string"},"weeks":{"items":{"$ref":"#/components/schemas/NatGasStorageWeek"},"type":"array"}},"type":"object"},"GetNationalDebtRequest":{"description":"GetNationalDebtRequest requests national debt data for all countries.","type":"object"},"GetNationalDebtResponse":{"description":"GetNationalDebtResponse wraps the full list of national debt entries.","properties":{"entries":{"items":{"$ref":"#/components/schemas/NationalDebtEntry"},"type":"array"},"seededAt":{"description":"ISO 8601 timestamp when seed data was written.","type":"string"},"unavailable":{"description":"True when upstream data is unavailable (fallback result).\n True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"}},"type":"object"},"GetNo2ActivityRequest":{"description":"Filters combine with AND; none means every registered region.","properties":{"countryCode":{"description":"ISO 3166-1 alpha-2: the country plus its clusters.","pattern":"^([A-Za-z]{2})?$","type":"string"},"kind":{"enum":["NO2_REGION_KIND_UNSPECIFIED","NO2_REGION_KIND_COUNTRY","NO2_REGION_KIND_CLUSTER"],"type":"string"},"regionId":{"description":"Registry id, e.g. \"yangtze-river-delta\".","pattern":"^([a-z0-9-]{1,64})?$","type":"string"}},"type":"object"},"GetNo2ActivityResponse":{"properties":{"attribution":{"description":"Required Copernicus credit line.","type":"string"},"generatedAt":{"type":"string"},"methodVersion":{"description":"Pins the method constants in scripts/shared/no2-activity.mjs.","type":"string"},"regions":{"items":{"$ref":"#/components/schemas/No2ActivityRegion"},"type":"array"},"stale":{"description":"Older than the 72 h health budget.","type":"boolean"},"unavailableReason":{"description":"NOT_COVERED is a contract answer; the rest are faults.","enum":["NO2_ACTIVITY_UNAVAILABLE_REASON_UNSPECIFIED","NO2_ACTIVITY_UNAVAILABLE_REASON_INVALID_REQUEST","NO2_ACTIVITY_UNAVAILABLE_REASON_NOT_COVERED","NO2_ACTIVITY_UNAVAILABLE_REASON_SEED_MISSING","NO2_ACTIVITY_UNAVAILABLE_REASON_INVALID_DATASET","NO2_ACTIVITY_UNAVAILABLE_REASON_CACHE_UNAVAILABLE"],"type":"string"},"upstreamUnavailable":{"description":"False when served or not covered.","type":"boolean"}},"type":"object"},"GetOilInventoriesRequest":{"type":"object"},"GetOilInventoriesResponse":{"properties":{"crudeWeeks":{"items":{"$ref":"#/components/schemas/CrudeInventoryWeekRef"},"type":"array"},"euGas":{"$ref":"#/components/schemas/OilInventoriesEuGas"},"ieaStocks":{"$ref":"#/components/schemas/OilInventoriesIeaStocks"},"natGasWeeks":{"items":{"$ref":"#/components/schemas/NatGasWeekRef"},"type":"array"},"refinery":{"$ref":"#/components/schemas/OilInventoriesRefinery"},"spr":{"$ref":"#/components/schemas/OilInventoriesSprSnapshot"},"updatedAt":{"type":"string"}},"type":"object"},"GetOilStocksAnalysisRequest":{"description":"GetOilStocksAnalysisRequest is empty — returns the latest global analysis snapshot.","type":"object"},"GetOilStocksAnalysisResponse":{"description":"GetOilStocksAnalysisResponse contains the IEA oil stocks days-of-cover analysis.","properties":{"belowObligation":{"items":{"description":"ISO2 codes of countries currently below the 90-day obligation.","type":"string"},"type":"array"},"dataMonth":{"description":"Data month in YYYY-MM format (source: IEA monthly release).","type":"string"},"ieaMembers":{"items":{"$ref":"#/components/schemas/OilStocksAnalysisMember"},"type":"array"},"regionalSummary":{"$ref":"#/components/schemas/OilStocksRegionalSummary"},"unavailable":{"description":"True when upstream seed data is unavailable (fallback result).\n True when the upstream or seed-backed variant is unavailable; empty payload fields\n are graceful degradation, not confirmed zero data.","type":"boolean"},"updatedAt":{"description":"UTC ISO-8601 timestamp when this analysis was written.","type":"string"}},"type":"object"},"GetUsCpiMonthlyRequest":{"description":"GetUsCpiMonthlyRequest chooses the latest print or the full monthly history.","properties":{"history":{"description":"When true, return every stored month. When false, return only the latest month.","type":"boolean"},"limit":{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","format":"int32","maximum":366,"minimum":0,"type":"integer"}},"type":"object"},"GetUsCpiMonthlyResponse":{"description":"GetUsCpiMonthlyResponse is the CPI basket for the requested window.","properties":{"months":{"items":{"$ref":"#/components/schemas/UsCpiMonth"},"type":"array"},"unavailable":{"description":"True when the seeded series is unavailable. An empty month list is not a zero print.","type":"boolean"}},"type":"object"},"GetUsInterestRatesRequest":{"description":"GetUsInterestRatesRequest chooses the latest prints or the full history.","properties":{"history":{"description":"When true, return every stored observation. When false, return the latest point of each series.","type":"boolean"},"limit":{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","format":"int32","maximum":366,"minimum":0,"type":"integer"}},"type":"object"},"GetUsInterestRatesResponse":{"description":"GetUsInterestRatesResponse is the US rate basket for the requested window.","properties":{"series":{"items":{"$ref":"#/components/schemas/UsInterestRateSeries"},"type":"array"},"unavailable":{"description":"True when the seeded rates are unavailable. An empty series list is not a zero rate.","type":"boolean"}},"type":"object"},"GetUsTreasuryParYieldCurveRequest":{"description":"GetUsTreasuryParYieldCurveRequest chooses the latest business day or the daily history.","properties":{"history":{"description":"When true, return every stored business day since 1990. When false, return the latest day.","type":"boolean"},"limit":{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","format":"int32","maximum":366,"minimum":0,"type":"integer"}},"type":"object"},"GetUsTreasuryParYieldCurveResponse":{"description":"GetUsTreasuryParYieldCurveResponse is the par curve for the requested window.","properties":{"curves":{"items":{"$ref":"#/components/schemas/UsTreasuryParYieldCurve"},"type":"array"},"unavailable":{"description":"True when the seeded curve is unavailable. An empty list is not a zero yield.","type":"boolean"}},"type":"object"},"GetWorldCpiMonthlyRequest":{"description":"GetWorldCpiMonthlyRequest chooses the latest print or the stored history.","properties":{"country":{"description":"Optional ISO 3166-1 alpha-2 filter. When set, only that country is returned.","type":"string"},"history":{"description":"When true, return every stored period. When false, return only the latest period per country.","type":"boolean"},"limit":{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","format":"int32","maximum":366,"minimum":0,"type":"integer"}},"type":"object"},"GetWorldCpiMonthlyResponse":{"description":"GetWorldCpiMonthlyResponse is the worldwide CPI series for the requested window.","properties":{"countries":{"items":{"$ref":"#/components/schemas/WorldCpiCountry"},"type":"array"},"unavailable":{"description":"True when every seeded series is unavailable. An empty country list is not a zero print.","type":"boolean"}},"type":"object"},"GlobalTender":{"properties":{"automationFit":{"$ref":"#/components/schemas/AutomationFit"},"buyer":{"type":"string"},"categoryCodes":{"items":{"type":"string"},"type":"array"},"countryCode":{"type":"string"},"deadline":{"type":"string"},"description":{"type":"string"},"eligibilityRequirements":{"items":{"type":"string"},"type":"array"},"id":{"type":"string"},"money":{"$ref":"#/components/schemas/TenderMoney"},"noticeType":{"type":"string"},"officialUrl":{"type":"string"},"participationMode":{"type":"string"},"publishedAt":{"type":"string"},"region":{"type":"string"},"sectors":{"items":{"type":"string"},"type":"array"},"source":{"type":"string"},"sourceNoticeId":{"type":"string"},"status":{"type":"string"},"submissionUrls":{"items":{"type":"string"},"type":"array"},"title":{"type":"string"},"updatedAt":{"type":"string"}},"type":"object"},"GroceryItemPrice":{"properties":{"available":{"type":"boolean"},"currency":{"type":"string"},"itemId":{"type":"string"},"itemName":{"type":"string"},"localPrice":{"format":"double","type":"number"},"sourceSite":{"type":"string"},"unit":{"type":"string"},"usdPrice":{"format":"double","type":"number"}},"type":"object"},"HashRateSignal":{"description":"HashRateSignal tracks Bitcoin hash rate momentum.","properties":{"change30d":{"description":"Hash rate change over 30 days as percentage.","format":"double","type":"number"},"status":{"description":"\"GROWING\", \"DECLINING\", \"STABLE\", or \"UNKNOWN\".","type":"string"}},"type":"object"},"InvalidRequestBodyError":{"description":"Returned when a JSON POST request body is empty or malformed.","properties":{"message":{"description":"Invalid request body","type":"string"}},"required":["message"],"type":"object"},"JmespathProjectionError":{"description":"Returned when a REST jmespath projection is invalid or exceeds the expression/output byte limits.","properties":{"_jmespath_error":{"description":"Projection error discriminator and details.","type":"string"},"original_keys":{"description":"Top-level keys or shape of the unprojected response.","items":{"type":"string"},"type":"array"}},"required":["_jmespath_error","original_keys"],"type":"object"},"LiquiditySignal":{"description":"LiquiditySignal tracks JPY 30d rate of change as a liquidity proxy.","properties":{"sparkline":{"items":{"description":"Last 30 JPY close prices.","format":"double","type":"number"},"type":"array"},"status":{"description":"\"SQUEEZE\", \"NORMAL\", or \"UNKNOWN\".","type":"string"},"value":{"description":"JPY 30d ROC percentage, absent if unavailable.","format":"double","type":"number"}},"type":"object"},"ListBigMacPricesRequest":{"type":"object"},"ListBigMacPricesResponse":{"properties":{"cheapestCountry":{"type":"string"},"countries":{"items":{"$ref":"#/components/schemas/BigMacCountryPrice"},"type":"array"},"fetchedAt":{"type":"string"},"mostExpensiveCountry":{"type":"string"},"prevFetchedAt":{"type":"string"},"wowAvailable":{"type":"boolean"},"wowAvgPct":{"format":"double","type":"number"}},"type":"object"},"ListFuelPricesRequest":{"type":"object"},"ListFuelPricesResponse":{"properties":{"cheapestDiesel":{"type":"string"},"cheapestGasoline":{"type":"string"},"countries":{"items":{"$ref":"#/components/schemas/FuelCountryPrice"},"type":"array"},"countryCount":{"format":"int32","type":"integer"},"fetchedAt":{"type":"string"},"mostExpensiveDiesel":{"type":"string"},"mostExpensiveGasoline":{"type":"string"},"prevFetchedAt":{"type":"string"},"sourceCount":{"format":"int32","type":"integer"},"wowAvailable":{"type":"boolean"}},"type":"object"},"ListGlobalTendersRequest":{"properties":{"buyer":{"description":"Case-insensitive buyer or contracting-authority text to match.","type":"string"},"category":{"description":"Procurement category or classification code to match.","type":"string"},"countries":{"items":{"description":"One or more ISO 3166-1 alpha-2 country codes to match.","type":"string"},"type":"array"},"country":{"description":"ISO 3166-1 alpha-2 country code to match.","type":"string"},"currency":{"description":"ISO 4217 currency code used with min_value and max_value.","type":"string"},"cursor":{"description":"Opaque cursor from a previous response's next_cursor field.","type":"string"},"deadlineFrom":{"description":"Include opportunities whose deadline is on or after this ISO-8601 timestamp.","type":"string"},"deadlineTo":{"description":"Include opportunities whose deadline is on or before this ISO-8601 timestamp.","type":"string"},"maxValue":{"description":"Include opportunities with a stated estimated value at or below this amount.","format":"double","type":"number"},"minAutomationScore":{"description":"Include only opportunities whose keyword-based automation_fit score is at\n or above this integer value (1-100; values above 100 are clamped, and\n non-integer or non-positive values disable the filter). Disabled when 0\n or unset, which preserves the default all-open-opportunities behavior.\n This is an evidence-backed text-relevance threshold only; it does not\n assert that any party is eligible to bid.","format":"int32","type":"integer"},"minValue":{"description":"Include opportunities with a stated estimated value at or above this amount.","format":"double","type":"number"},"pageSize":{"description":"Maximum number of tenders to return per page; capped at 100.","format":"int32","type":"integer"},"publishedFrom":{"description":"Include opportunities published on or after this ISO-8601 timestamp.","type":"string"},"publishedTo":{"description":"Include opportunities published on or before this ISO-8601 timestamp.","type":"string"},"query":{"description":"Case-insensitive search text matched against tender titles and descriptions.","type":"string"},"region":{"description":"Geographic region label to match, such as Europe or North America.","type":"string"},"sort":{"description":"Result ordering: newest, closing_soon, estimated_value, or relevance.","type":"string"},"source":{"description":"Source adapter identifier: sam, ted, contracts-finder, canada-buys, gets, or world-bank.","type":"string"},"status":{"description":"Source-provided tender status to match, such as open or published.","type":"string"}},"type":"object"},"ListGlobalTendersResponse":{"properties":{"appliedFilters":{"items":{"type":"string"},"type":"array"},"availability":{"type":"string"},"countryCoverage":{"description":"`unknown` means the snapshot contains no record for a requested country;\n it must not be interpreted as a confirmed no-opportunity or unsupported-country result.","type":"string"},"dataAvailable":{"type":"boolean"},"fetchedAt":{"type":"string"},"nextCursor":{"type":"string"},"sourceStatuses":{"items":{"$ref":"#/components/schemas/TenderSourceStatus"},"type":"array"},"tenders":{"items":{"$ref":"#/components/schemas/GlobalTender"},"type":"array"},"total":{"format":"int32","type":"integer"}},"type":"object"},"ListGroceryBasketPricesRequest":{"type":"object"},"ListGroceryBasketPricesResponse":{"properties":{"cheapestCountry":{"type":"string"},"countries":{"items":{"$ref":"#/components/schemas/CountryBasket"},"type":"array"},"fetchedAt":{"type":"string"},"mostExpensiveCountry":{"type":"string"},"prevFetchedAt":{"type":"string"},"upstreamUnavailable":{"type":"boolean"},"wowAvailable":{"type":"boolean"},"wowAvgPct":{"format":"double","type":"number"}},"type":"object"},"ListWorldBankIndicatorsRequest":{"description":"ListWorldBankIndicatorsRequest specifies filters for retrieving World Bank data.","properties":{"countryCode":{"description":"Optional country filter (ISO 3166-1 alpha-2).","type":"string"},"cursor":{"description":"Cursor for next page.\n Accepted but currently ignored; no-op until this handler supports the parameter.","type":"string"},"indicatorCode":{"description":"World Bank indicator code (e.g., \"NY.GDP.MKTP.CD\").","minLength":1,"type":"string"},"pageSize":{"description":"Maximum items per page.\n Accepted but currently ignored; no-op until this handler supports the parameter.","format":"int32","type":"integer"},"year":{"description":"Optional year filter. Defaults to latest available.","format":"int32","type":"integer"}},"required":["indicatorCode"],"type":"object"},"ListWorldBankIndicatorsResponse":{"description":"ListWorldBankIndicatorsResponse contains World Bank indicator data.","properties":{"data":{"items":{"$ref":"#/components/schemas/WorldBankCountryData"},"type":"array"},"pagination":{"$ref":"#/components/schemas/PaginationResponse"}},"type":"object"},"MacroMeta":{"description":"MacroMeta contains supplementary chart data.","properties":{"qqqSparkline":{"items":{"description":"Last 30 QQQ close prices for sparkline.","format":"double","type":"number"},"type":"array"}},"type":"object"},"MacroRegimeSignal":{"description":"MacroRegimeSignal compares QQQ vs XLP 20-day rate of change.","properties":{"qqqRoc20":{"description":"QQQ 20d ROC percentage.","format":"double","type":"number"},"status":{"description":"\"RISK-ON\", \"DEFENSIVE\", or \"UNKNOWN\".","type":"string"},"xlpRoc20":{"description":"XLP 20d ROC percentage.","format":"double","type":"number"}},"type":"object"},"MacroSignals":{"description":"MacroSignals contains all 7 individual signal computations.","properties":{"fearGreed":{"$ref":"#/components/schemas/FearGreedSignal"},"flowStructure":{"$ref":"#/components/schemas/FlowStructureSignal"},"hashRate":{"$ref":"#/components/schemas/HashRateSignal"},"liquidity":{"$ref":"#/components/schemas/LiquiditySignal"},"macroRegime":{"$ref":"#/components/schemas/MacroRegimeSignal"},"priceMomentum":{"$ref":"#/components/schemas/PriceMomentumSignal"},"technicalTrend":{"$ref":"#/components/schemas/TechnicalTrendSignal"}},"type":"object"},"MethodEntry":{"properties":{"key":{"type":"string"},"value":{"type":"string"}},"type":"object"},"NatGasStorageWeek":{"description":"NatGasStorageWeek represents one week of US natural gas working gas storage data from EIA.","properties":{"period":{"description":"ISO week period (YYYY-MM-DD, Monday of the EIA report week).","type":"string"},"storBcf":{"description":"Working gas in underground storage, Lower-48 States, in Bcf.","format":"double","type":"number"},"weeklyChangeBcf":{"description":"Week-over-week change in Bcf. Positive = build (bearish for gas prices), negative = draw (bullish).\n Absent for the oldest week when no prior week is available for comparison.","format":"double","type":"number"}},"type":"object"},"NatGasWeekRef":{"properties":{"period":{"type":"string"},"storBcf":{"format":"double","type":"number"},"weeklyChangeBcf":{"format":"double","type":"number"}},"type":"object"},"NationalDebtEntry":{"description":"NationalDebtEntry holds debt data for a single country.","properties":{"annualGrowth":{"description":"Year-over-year debt growth percent (2023-\u003e2024).","format":"double","type":"number"},"baselineTs":{"description":"UTC ms timestamp anchoring the debt_usd figure (2024-01-01T00:00:00Z).","format":"int64","type":"string"},"debtToGdp":{"description":"Debt as % of GDP.","format":"double","type":"number"},"debtUsd":{"description":"Total debt in USD at baseline_ts.","format":"double","type":"number"},"gdpUsd":{"description":"GDP in USD (nominal, latest year).","format":"double","type":"number"},"iso3":{"description":"ISO3 country code (e.g. \"USA\").","type":"string"},"perDayRate":{"description":"Deficit-derived accrual in USD per day.","format":"double","type":"number"},"perSecondRate":{"description":"Deficit-derived accrual in USD per second.","format":"double","type":"number"},"source":{"description":"Human-readable source string.","type":"string"}},"type":"object"},"No2ActivityRegion":{"properties":{"baselineMeanNo2MolM2":{"format":"double","type":"number"},"baselineYears":{"items":{"description":"Prior years whose window entered the baseline, newest first.","format":"int32","type":"integer"},"type":"array"},"bbox":{"items":{"description":"West, south, east, north.","format":"double","type":"number"},"type":"array"},"changePercent":{"description":"Percent against the baseline mean; absent when excluded.","format":"double","type":"number"},"countryCode":{"type":"string"},"current":{"$ref":"#/components/schemas/No2Window"},"direction":{"enum":["NO2_DIRECTION_UNSPECIFIED","NO2_DIRECTION_STRENGTHENING","NO2_DIRECTION_WEAKENING","NO2_DIRECTION_UNCHANGED"],"type":"string"},"exclusion":{"description":"BASELINE_BACKFILL_PENDING is expected for a new region, not a fault.","enum":["NO2_REGION_EXCLUSION_UNSPECIFIED","NO2_REGION_EXCLUSION_REQUEST_FAILED","NO2_REGION_EXCLUSION_BASELINE_BACKFILL_PENDING","NO2_REGION_EXCLUSION_INSUFFICIENT_VALID_DAYS","NO2_REGION_EXCLUSION_INSUFFICIENT_BASELINE_YEARS"],"type":"string"},"id":{"type":"string"},"kind":{"enum":["NO2_REGION_KIND_UNSPECIFIED","NO2_REGION_KIND_COUNTRY","NO2_REGION_KIND_CLUSTER"],"type":"string"},"label":{"type":"string"}},"type":"object"},"No2Window":{"properties":{"meanNo2MolM2":{"description":"Mean tropospheric NO2 column, mol/m2; absent with no valid day.","format":"double","type":"number"},"validDays":{"description":"Days with enough cloud-free, quality-filtered pixels.","format":"int32","type":"integer"},"windowEnd":{"type":"string"},"windowStart":{"type":"string"}},"type":"object"},"OilInventoriesEuGas":{"properties":{"fillPct":{"format":"double","type":"number"},"fillPctChange1d":{"format":"double","type":"number"},"history":{"items":{"$ref":"#/components/schemas/OilInventoriesEuGasDay"},"type":"array"},"trend":{"type":"string"}},"type":"object"},"OilInventoriesEuGasDay":{"properties":{"date":{"type":"string"},"fillPct":{"format":"double","type":"number"}},"type":"object"},"OilInventoriesIeaMember":{"properties":{"belowObligation":{"type":"boolean"},"daysOfCover":{"format":"double","type":"number"},"iso2":{"type":"string"},"netExporter":{"type":"boolean"}},"type":"object"},"OilInventoriesIeaStocks":{"properties":{"asiaPacific":{"$ref":"#/components/schemas/OilInventoriesRegionStats"},"dataMonth":{"type":"string"},"europe":{"$ref":"#/components/schemas/OilInventoriesRegionStats"},"members":{"items":{"$ref":"#/components/schemas/OilInventoriesIeaMember"},"type":"array"},"northAmerica":{"$ref":"#/components/schemas/OilInventoriesRegionStats"}},"type":"object"},"OilInventoriesRefinery":{"properties":{"inputsMbpd":{"format":"double","type":"number"},"period":{"type":"string"}},"type":"object"},"OilInventoriesRegionStats":{"properties":{"avgDays":{"format":"double","type":"number"},"countBelowObligation":{"format":"int32","type":"integer"},"minDays":{"format":"double","type":"number"}},"type":"object"},"OilInventoriesSprSnapshot":{"properties":{"changeWow":{"format":"double","type":"number"},"latestStocksMb":{"format":"double","type":"number"},"weeks":{"items":{"$ref":"#/components/schemas/OilInventoriesSprWeek"},"type":"array"}},"type":"object"},"OilInventoriesSprWeek":{"properties":{"period":{"type":"string"},"stocksMb":{"format":"double","type":"number"}},"type":"object"},"OilStocksAnalysisMember":{"description":"OilStocksAnalysisMember holds days-of-cover data and obligation status for one IEA member country.","properties":{"belowObligation":{"description":"True when days_of_cover \u003c 90 (IEA 90-day obligation threshold).","type":"boolean"},"daysOfCover":{"description":"Days of supply cover (absent when country is a net exporter or data anomaly).","format":"int32","type":"integer"},"iso2":{"description":"ISO 3166-1 alpha-2 country code.","type":"string"},"netExporter":{"description":"True when the country is classified as a net exporter by IEA.","type":"boolean"},"obligationMet":{"description":"True when the 90-day obligation is met (net exporters always true).","type":"boolean"},"rank":{"description":"Rank within the IEA member ranking (1-indexed, net exporters ranked last).","format":"int32","type":"integer"},"vsObligation":{"description":"days_of_cover - 90; absent for net exporters.","format":"int32","type":"integer"}},"type":"object"},"OilStocksRegionalSummary":{"description":"OilStocksRegionalSummary holds regional aggregates for the three IEA regions.","properties":{"asiaPacific":{"$ref":"#/components/schemas/OilStocksRegionalSummaryAsiaPacific"},"europe":{"$ref":"#/components/schemas/OilStocksRegionalSummaryEurope"},"northAmerica":{"$ref":"#/components/schemas/OilStocksRegionalSummaryNorthAmerica"}},"type":"object"},"OilStocksRegionalSummaryAsiaPacific":{"description":"OilStocksRegionalSummaryAsiaPacific aggregates days-of-cover for Asia-Pacific IEA members.","properties":{"avgDays":{"description":"Mean days of cover across Asia-Pacific members (AU, JP, KR, NZ).","format":"int32","type":"integer"},"countBelowObligation":{"description":"Count of Asia-Pacific members below the 90-day obligation.","format":"int32","type":"integer"},"minDays":{"description":"Minimum days of cover across Asia-Pacific members.","format":"int32","type":"integer"}},"type":"object"},"OilStocksRegionalSummaryEurope":{"description":"OilStocksRegionalSummaryEurope aggregates days-of-cover for European IEA members.","properties":{"avgDays":{"description":"Mean days of cover across non-net-exporter European members.","format":"int32","type":"integer"},"countBelowObligation":{"description":"Count of European members below the 90-day obligation.","format":"int32","type":"integer"},"minDays":{"description":"Minimum days of cover across non-net-exporter European members.","format":"int32","type":"integer"}},"type":"object"},"OilStocksRegionalSummaryNorthAmerica":{"description":"OilStocksRegionalSummaryNorthAmerica aggregates data for North American IEA members.","properties":{"avgDays":{"description":"Average days of cover for non-exporter North American members (if any).","format":"int32","type":"integer"},"netExporters":{"description":"Count of net exporters in North America (CA, MX, US).","format":"int32","type":"integer"}},"type":"object"},"PaginationResponse":{"description":"PaginationResponse contains pagination metadata returned alongside list results.","properties":{"nextCursor":{"description":"Cursor for fetching the next page. Empty string indicates no more pages.","type":"string"},"totalCount":{"description":"Total count of items matching the query, if known. Zero if the total is unknown.","format":"int32","type":"integer"}},"type":"object"},"PriceMomentumSignal":{"description":"PriceMomentumSignal uses the Mayer Multiple (price/SMA200) as a market-adaptive signal.","properties":{"status":{"description":"\"STRONG\", \"MODERATE\", \"WEAK\", or \"UNKNOWN\".","type":"string"}},"type":"object"},"RateLimitError":{"description":"Returned when a gateway or handler rate limit rejects the request.","properties":{"error":{"description":"Human-readable rate-limit failure reason.","type":"string"}},"required":["error"],"type":"object"},"RatesEntry":{"properties":{"key":{"type":"string"},"value":{"format":"double","type":"number"}},"type":"object"},"ResultsEntry":{"properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/FredSeries"}},"type":"object"},"TechnicalTrendSignal":{"description":"TechnicalTrendSignal evaluates BTC price vs moving averages and VWAP.","properties":{"btcPrice":{"description":"Current BTC price.","format":"double","type":"number"},"mayerMultiple":{"description":"Mayer multiple (BTC price / SMA200).","format":"double","type":"number"},"sma200":{"description":"200-day simple moving average.","format":"double","type":"number"},"sma50":{"description":"50-day simple moving average.","format":"double","type":"number"},"sparkline":{"items":{"description":"Last 30 BTC close prices.","format":"double","type":"number"},"type":"array"},"status":{"description":"\"BULLISH\", \"BEARISH\", \"NEUTRAL\", or \"UNKNOWN\".","type":"string"},"vwap30d":{"description":"30-day volume-weighted average price.","format":"double","type":"number"}},"type":"object"},"TenderMoney":{"properties":{"amount":{"format":"double","type":"number"},"currency":{"type":"string"}},"type":"object"},"TenderSourceStatus":{"properties":{"error":{"type":"string"},"fetchedAt":{"description":"Time of the most recent retrieval attempt for this source.","type":"string"},"lastSuccessfulAt":{"description":"Time of the most recent successful retrieval; preserved across failures.","type":"string"},"paced":{"type":"boolean"},"recordCount":{"format":"int32","type":"integer"},"source":{"type":"string"},"stale":{"type":"boolean"},"state":{"type":"string"}},"type":"object"},"TenorsEntry":{"properties":{"key":{"type":"string"},"value":{"format":"double","type":"number"}},"type":"object"},"UnauthorizedError":{"description":"Returned when the API key is missing, malformed, or lacks current API access.","properties":{"error":{"description":"Human-readable error message.","type":"string"}},"required":["error"],"type":"object"},"UsCpiMonth":{"description":"UsCpiMonth is one month of the US CPI basket.","properties":{"core":{"$ref":"#/components/schemas/UsCpiReading"},"energy":{"$ref":"#/components/schemas/UsCpiReading"},"food":{"$ref":"#/components/schemas/UsCpiReading"},"headline":{"$ref":"#/components/schemas/UsCpiReading"},"month":{"description":"UTC midnight on the first day of the observation month, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"services":{"$ref":"#/components/schemas/UsCpiReading"},"shelter":{"$ref":"#/components/schemas/UsCpiReading"}},"type":"object"},"UsCpiPercentChange":{"description":"UsCpiPercentChange is a simple percent change computed from the index.","properties":{"percent":{"description":"Percent change. 2.5 means 2.5 percent, not an annualized rate.","format":"double","type":"number"}},"type":"object"},"UsCpiReading":{"description":"UsCpiReading is one seasonally adjusted CPI-U index for one month.","properties":{"index":{"description":"Index level, 1982-84=100.","format":"double","type":"number"},"monthOverMonth":{"$ref":"#/components/schemas/UsCpiPercentChange"},"yearOverYear":{"$ref":"#/components/schemas/UsCpiPercentChange"}},"type":"object"},"UsInterestRateObservation":{"description":"One published US interest rate. Percent per year. Zero is a real print.","properties":{"date":{"description":"UTC midnight of the observation date, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"percent":{"description":"Percent per year. 4.25 means 4.25 percent.","format":"double","type":"number"}},"type":"object"},"UsInterestRateSeries":{"description":"One named series. id is fed_funds_effective, fed_funds_target_lower,\n fed_funds_target_upper, treasury_one_month, treasury_three_month,\n treasury_six_month, treasury_one_year, treasury_two_year, treasury_five_year,\n treasury_ten_year, treasury_thirty_year, or sofr.","properties":{"id":{"description":"Stable series id.","type":"string"},"points":{"items":{"$ref":"#/components/schemas/UsInterestRateObservation"},"type":"array"}},"type":"object"},"UsTreasuryParYieldCurve":{"description":"UsTreasuryParYieldCurve is one business day's Treasury par yield curve.\n A tenor is absent when Treasury did not publish it that day.","properties":{"date":{"description":"UTC midnight of the business day, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"fiveYear":{"description":"5-year par yield, in percent.","format":"double","type":"number"},"fourMonth":{"description":"4-month par yield, in percent.","format":"double","type":"number"},"oneAndAHalfMonth":{"description":"1.5-month par yield, in percent.","format":"double","type":"number"},"oneMonth":{"description":"1-month par yield, in percent.","format":"double","type":"number"},"oneYear":{"description":"1-year par yield, in percent.","format":"double","type":"number"},"sevenYear":{"description":"7-year par yield, in percent.","format":"double","type":"number"},"sixMonth":{"description":"6-month par yield, in percent.","format":"double","type":"number"},"tenYear":{"description":"10-year par yield, in percent.","format":"double","type":"number"},"thirtyYear":{"description":"30-year par yield, in percent.","format":"double","type":"number"},"threeMonth":{"description":"3-month par yield, in percent.","format":"double","type":"number"},"threeYear":{"description":"3-year par yield, in percent.","format":"double","type":"number"},"twentyYear":{"description":"20-year par yield, in percent.","format":"double","type":"number"},"twoMonth":{"description":"2-month par yield, in percent.","format":"double","type":"number"},"twoYear":{"description":"2-year par yield, in percent.","format":"double","type":"number"}},"type":"object"},"ValidationError":{"description":"ValidationError is returned when request validation fails. It contains a list of field violations describing what went wrong.","properties":{"violations":{"description":"List of validation violations","items":{"$ref":"#/components/schemas/FieldViolation"},"type":"array"}},"required":["violations"],"type":"object"},"WorldBankCountryData":{"description":"WorldBankCountryData represents a World Bank indicator value for a country.","properties":{"countryCode":{"description":"ISO 3166-1 alpha-2 country code.","minLength":1,"type":"string"},"countryName":{"description":"Country name.","type":"string"},"indicatorCode":{"description":"World Bank indicator code (e.g., \"NY.GDP.MKTP.CD\").","minLength":1,"type":"string"},"indicatorName":{"description":"Indicator name.","type":"string"},"value":{"description":"Indicator value.","format":"double","type":"number"},"year":{"description":"Data year.","format":"int32","type":"integer"}},"required":["countryCode","indicatorCode"],"type":"object"},"WorldCpiCountry":{"description":"WorldCpiCountry is the preferred CPI series for one country.","properties":{"country":{"description":"ISO 3166-1 alpha-2 country code.","type":"string"},"frequency":{"description":"Series frequency: M for monthly, Q for quarterly. Australia is quarterly.","type":"string"},"indexBase":{"description":"Index base label from the source, e.g. 2020=100 or 2015=100. Never compare levels across bases or sources.","type":"string"},"periods":{"items":{"$ref":"#/components/schemas/WorldCpiPeriod"},"type":"array"},"source":{"description":"Which source supplied this series. One of: estat-cpi, eurostat-hicp, imf-cpi, imf-hicp, abs-cpi.","type":"string"}},"type":"object"},"WorldCpiPercentChange":{"description":"WorldCpiPercentChange is a simple percent change computed from the index.","properties":{"percent":{"description":"Percent change. 2.5 means 2.5 percent, not an annualized rate.","format":"double","type":"number"}},"type":"object"},"WorldCpiPeriod":{"description":"WorldCpiPeriod is one observation of a country's CPI series.","properties":{"period":{"description":"UTC midnight on the first day of the observation period, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"reading":{"$ref":"#/components/schemas/WorldCpiReading"}},"type":"object"},"WorldCpiReading":{"description":"WorldCpiReading is one country's index for one period.","properties":{"index":{"description":"Index level in the source's own base. Bases differ per source, so compare changes, not levels.","format":"double","type":"number"},"periodOverPeriod":{"$ref":"#/components/schemas/WorldCpiPercentChange"},"yearOverYear":{"$ref":"#/components/schemas/WorldCpiPercentChange"}},"type":"object"},"YieldCurvePoint":{"description":"One business day's curve for one sovereign. Tenor keys are lowercase\n maturity labels (\"3m\"…\"40y\"); an absent tenor was not published that day.","properties":{"date":{"description":"UTC midnight of the business day, as Unix epoch milliseconds.. Warning: Values \u003e 2^53 may lose precision in JavaScript","format":"int64","type":"integer"},"tenors":{"additionalProperties":{"format":"double","type":"number"},"description":"Yield per tenor, in percent, as published (never converted between measures).","type":"object"}},"type":"object"}},"securitySchemes":{"ApiKeyHeader":{"description":"Alias header for the WorldMonitor API key (X-WorldMonitor-Key).","in":"header","name":"X-Api-Key","type":"apiKey"},"BearerAuth":{"description":"Bearer token: a Clerk-issued JWT for browser session flows, passed as Authorization: Bearer \u003ctoken\u003e.","scheme":"bearer","type":"http"},"WorldMonitorKey":{"description":"User-issued WorldMonitor API key.","in":"header","name":"X-WorldMonitor-Key","type":"apiKey"}}},"info":{"title":"EconomicService API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/economic/v1/get-bis-credit":{"get":{"description":"GetBisCredit retrieves the latest quarterly credit-to-GDP ratio and prior quarter from BIS WS_TC for 12 economies, including the US, euro area and China.","operationId":"GetBisCredit","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"entries":[{"countryCode":"US","countryName":"US","creditGdpRatio":42.5,"date":"2026-01-15","previousRatio":42.5}]},"schema":{"$ref":"#/components/schemas/GetBisCreditResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetBisCredit","tags":["EconomicService"]}},"/api/economic/v1/get-bis-exchange-rates":{"get":{"description":"GetBisExchangeRates retrieves the latest monthly real effective exchange rate from BIS WS_EER, with monthly change, for 12 economies including the euro area.","operationId":"GetBisExchangeRates","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"rates":[{"countryCode":"US","countryName":"US","date":"2026-01-15","nominalEer":1.5,"realChange":1.5}]},"schema":{"$ref":"#/components/schemas/GetBisExchangeRatesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetBisExchangeRates","tags":["EconomicService"]}},"/api/economic/v1/get-bis-policy-rates":{"get":{"description":"Retrieve BIS central bank policy rates with country, central bank, observation date and previous rate for comparing monetary policy across available countries.","operationId":"GetBisPolicyRates","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"rates":[{"centralBank":"example","countryCode":"US","countryName":"US","date":"2026-01-15","previousRate":75.25}]},"schema":{"$ref":"#/components/schemas/GetBisPolicyRatesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetBisPolicyRates","tags":["EconomicService"]}},"/api/economic/v1/get-bls-series":{"get":{"description":"GetBlsSeries returns a BLS labor series, private nonfarm payrolls (USPRIV) or the employment cost index (ECIALLCIV), mirrored from FRED with recent history.","operationId":"GetBlsSeries","parameters":[{"description":"BLS/FRED-backed series ID. Supported values: \"USPRIV\", \"ECIALLCIV\".","example":"USPRIV","in":"query","name":"series_id","required":false,"schema":{"enum":["USPRIV","ECIALLCIV"],"type":"string"}},{"description":"Maximum number of observations to return. Defaults to 60.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"series":{"observations":[{"period":"daily","periodName":"daily","value":"example","year":"example"}],"seriesId":"example-id","title":"example","units":"example"}},"schema":{"$ref":"#/components/schemas/GetBlsSeriesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetBlsSeries","tags":["EconomicService"]}},"/api/economic/v1/get-capital-flows":{"get":{"description":"GetCapitalFlows returns where money enters and leaves about 230 economies, and between any two, from official statistics. Per country: IMF balance-of-payments gross inflows and outflows by FDI, portfolio and other investment (quarterly where reported, annual otherwise) with derived Forbes and Warnock surge, stop, flight and retrenchment states; BIS cross-border deposits and borrowing of non-bank residents; IMF portfolio holdings of the country's securities; and IMF direct-investment positions. With country and counterpart: both directions of the pair across bank deposits and lending (with eight quarters of adjusted flows), portfolio holdings and direct investment (with both sides' figures), each leg marked reported, not_itemized or not_published. A person changing residence is not a balance-of-payments flow, so wealth migration does not appear.","operationId":"GetCapitalFlows","parameters":[{"description":"Optional ISO 3166-1 alpha-2 filter. When set, only that country is returned (and the counterpart, if given).","example":"US","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"description":"When true, include each returned country's period-by-period BOP series. Defaults to false.","example":true,"in":"query","name":"include_series","required":false,"schema":{"type":"boolean"}},{"description":"Optional ISO 3166-1 alpha-2 partner. With country, the response adds pair (both directions) and the counterpart's own view. Ignored without country, and when equal to country.","example":"DE","in":"query","name":"counterpart","required":false,"schema":{"type":"string"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"countries":[{"bank":{"householdDepositsAbroad":{"flow4qUsdBn":1.5,"stockUsdBn":1.5},"latestPeriod":"2026-Q1","nonBankBorrowingFromAbroad":{"flow4qUsdBn":1.5,"stockUsdBn":1.5},"nonBankDepositsAbroad":{"flow4qUsdBn":1.5,"stockUsdBn":1.5},"publishesBilateral":true},"bop":{"episodes":{"flight":[{"end":"2026-Q1","peakPeriod":"2026-Q1","peakZ":1.5,"quarters":1,"start":"2026-Q1"}],"retrenchment":[{"end":"2026-Q1","peakPeriod":"2026-Q1","peakZ":1.5,"quarters":1,"start":"2026-Q1"}],"stop":[{"end":"2026-Q1","peakPeriod":"2026-Q1","peakZ":1.5,"quarters":1,"start":"2026-Q1"}],"surge":[{"end":"2026-Q1","peakPeriod":"2026-Q1","peakZ":1.5,"quarters":1,"start":"2026-Q1"}]},"frequency":"example","latestPeriod":"2026-Q1","series":[{"errorsOmissions":1.5,"inflows":{"fdi":1.5,"other":1.5,"portfolio":1.5,"total":1},"outflows":{"fdi":1.5,"other":1.5,"portfolio":1.5,"total":1},"period":"2026-Q1"}],"state":{"inflow":"example","inflowZ":1.5,"outflow":"example","outflowZ":1.5}},"country":"US","fdi":{"inwardUsdBn":1.5,"outwardUsdBn":1.5,"topDestinations":[{"country":"US","flow4qUsdBn":1.5,"stockUsdBn":1.5}],"topInvestors":[{"country":"US","flow4qUsdBn":1.5,"stockUsdBn":1.5}],"year":1},"gdpUsdBn":1.5}],"latest":{"bisQuarter":"2026-Q1","bopQuarter":"2026-Q1","bopYear":"example","fdiYear":1,"pipYear":1},"method":{"exampleKey":"example"},"pair":{"aBorrowingFromB":{"basis":"example","counterpartReportUsdBn":1,"flow4qUsdBn":1.5,"history":[{"period":"2026-Q1","usdBn":1.5}],"instrument":"example"},"aDepositsInB":{"basis":"example","counterpartReportUsdBn":1,"flow4qUsdBn":1.5,"history":[{"period":"2026-Q1","usdBn":1.5}],"instrument":"example"},"aFdiInB":{"basis":"example","counterpartReportUsdBn":1,"flow4qUsdBn":1.5,"history":[{"period":"2026-Q1","usdBn":1.5}],"instrument":"example"},"aHoldingsOfB":{"basis":"example","counterpartReportUsdBn":1,"flow4qUsdBn":1.5,"history":[{"period":"2026-Q1","usdBn":1.5}],"instrument":"example"},"bBorrowingFromA":{"basis":"example","counterpartReportUsdBn":1,"flow4qUsdBn":1.5,"history":[{"period":"2026-Q1","usdBn":1.5}],"instrument":"example"}},"seededAt":1717200000000},"schema":{"$ref":"#/components/schemas/GetCapitalFlowsResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetCapitalFlows","tags":["EconomicService"]}},"/api/economic/v1/get-china-activity-nowcast":{"get":{"description":"GetChinaActivityNowcast compares the revision-aware official macro pulse\n with reviewed proxy families using a deterministic, no-lookahead method.","operationId":"GetChinaActivityNowcast","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"comparisonState":"example","generatedAt":"2026-01-15T12:00:00Z","methodVersion":"example","payloadJson":"example","upstreamUnavailable":false},"schema":{"$ref":"#/components/schemas/GetChinaActivityNowcastResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetChinaActivityNowcast","tags":["EconomicService"]}},"/api/economic/v1/get-china-macro-snapshot":{"get":{"description":"GetChinaMacroSnapshot reads the normalized China macro and official release\n calendar seeds. It never fans out to upstream providers on a cache miss.","operationId":"GetChinaMacroSnapshot","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"contentObservationDate":"2026-01-15","countryCode":"US","generatedAt":"2026-01-15T12:00:00Z","indicators":[{"category":"cs.AI","comparisonBasis":"example","comparisonValue":1.5,"contextOnly":true,"direction":"example"}],"latestObservationDate":"2026-01-15"},"schema":{"$ref":"#/components/schemas/GetChinaMacroSnapshotResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetChinaMacroSnapshot","tags":["EconomicService"]}},"/api/economic/v1/get-crude-inventories":{"get":{"description":"GetCrudeInventories retrieves the 8 most recent weeks of US commercial crude oil inventories excluding the SPR (EIA series WCESTUS1) with the latest period.","operationId":"GetCrudeInventories","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"latestPeriod":"daily","weeks":[{"period":"daily","stocksMb":1.5,"weeklyChangeMb":1.5}]},"schema":{"$ref":"#/components/schemas/GetCrudeInventoriesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetCrudeInventories","tags":["EconomicService"]}},"/api/economic/v1/get-ecb-fx-rates":{"get":{"description":"Retrieve daily ECB reference exchange rates for the euro against major currencies, with one-day changes, dates and availability status for currency analysis.","operationId":"GetEcbFxRates","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"rates":[{"change1d":1.5,"date":"2026-01-15","pair":"example","rate":75.25}],"seededAt":"1717200000000","unavailable":false,"updatedAt":"2026-01-15"},"schema":{"$ref":"#/components/schemas/GetEcbFxRatesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEcbFxRates","tags":["EconomicService"]}},"/api/economic/v1/get-economic-calendar":{"get":{"description":"GetEconomicCalendar returns scheduled FOMC and ECB rate decisions, US CPI, payrolls, GDP, PCE and retail sales, and Eurostat releases, filtered by date range.","operationId":"GetEconomicCalendar","parameters":[{"description":"Inclusive lower date bound in YYYY-MM-DD format.","example":"2026-01-15","in":"query","name":"fromDate","required":false,"schema":{"type":"string"}},{"description":"Inclusive upper date bound in YYYY-MM-DD format.","example":"2026-01-15","in":"query","name":"toDate","required":false,"schema":{"type":"string"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"asOf":"example","events":[{"actual":"example","country":"US","date":"2026-01-15","estimate":"example","event":"example"}],"fromDate":"2026-01-15","toDate":"2026-01-15","total":1},"schema":{"$ref":"#/components/schemas/GetEconomicCalendarResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEconomicCalendar","tags":["EconomicService"]}},"/api/economic/v1/get-economic-stress":{"get":{"description":"Review the Economic Stress Index from six FRED series, with its 0-100 composite score, component readings, missing-data flags and snapshot time for context.","operationId":"GetEconomicStress","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"components":[{"id":"example-id","label":"example","missing":true,"rawValue":1.5,"score":42.5}],"compositeScore":42.5,"label":"example","seededAt":"2026-01-15T12:00:00Z","unavailable":false},"schema":{"$ref":"#/components/schemas/GetEconomicStressResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEconomicStress","tags":["EconomicService"]}},"/api/economic/v1/get-energy-capacity":{"get":{"description":"Retrieve cached EIA installed capacity series by energy source, with annual megawatt values for comparing available solar, wind and coal generation capacity.","operationId":"GetEnergyCapacity","parameters":[{"description":"Energy source codes to query (e.g., \"SUN\", \"WND\", \"COL\").\n Empty returns all tracked sources (SUN, WND, COL).","example":["example"],"explode":true,"in":"query","name":"energy_sources","required":false,"schema":{"items":{"type":"string"},"type":"array"},"style":"form"},{"description":"Number of years of historical data. Default 20 if not set.\n Accepted but currently ignored; no-op until this handler supports the parameter.","example":1,"in":"query","name":"years","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"series":[{"data":[{"capacityMw":1.5,"year":1}],"energySource":"example","name":"WorldMonitor Analyst"}]},"schema":{"$ref":"#/components/schemas/GetEnergyCapacityResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEnergyCapacity","tags":["EconomicService"]}},"/api/economic/v1/get-energy-crisis-policies":{"get":{"description":"GetEnergyCrisisPolicies retrieves government responses to the 2026 energy crisis from the IEA policy tracker, filterable by country code and policy category.","operationId":"GetEnergyCrisisPolicies","parameters":[{"description":"Optional ISO-2 country code filter.","example":"US","in":"query","name":"country_code","required":false,"schema":{"type":"string"}},{"description":"Optional category filter: \"conservation\" or \"consumer_support\".","example":"cs.AI","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"context":"example","policies":[{"category":"cs.AI","country":"US","countryCode":"US","dateAnnounced":"2026-01-15","measure":"example"}],"source":"example","sourceUrl":"https://example.com/worldmonitor","unavailable":false},"schema":{"$ref":"#/components/schemas/GetEnergyCrisisPoliciesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEnergyCrisisPolicies","tags":["EconomicService"]}},"/api/economic/v1/get-energy-prices":{"get":{"description":"Retrieve current EIA energy commodity prices for selected commodities, with names, units, price changes and observation times for energy market monitoring.","operationId":"GetEnergyPrices","parameters":[{"description":"Optional commodity filter. Empty returns all tracked commodities.","example":["example"],"explode":true,"in":"query","name":"commodities","required":false,"schema":{"items":{"type":"string"},"type":"array"},"style":"form"},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"prices":[{"change":1.5,"commodity":"example","frequency":"example","name":"WorldMonitor Analyst","price":75.25,"priceAt":1717200000000}]},"schema":{"$ref":"#/components/schemas/GetEnergyPricesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEnergyPrices","tags":["EconomicService"]}},"/api/economic/v1/get-eu-fsi":{"get":{"description":"GetEuFsi retrieves the ECB Composite Indicator of Systemic Stress (CISS) for the euro area: latest daily value, a year of daily history and a staleness flag.","operationId":"GetEuFsi","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"history":[{"date":"2026-01-15","value":1.5}],"label":"example","latestDate":"2026-01-15","latestValue":1.5,"seededAt":"2026-01-15T12:00:00Z"},"schema":{"$ref":"#/components/schemas/GetEuFsiResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEuFsi","tags":["EconomicService"]}},"/api/economic/v1/get-eu-gas-storage":{"get":{"description":"GetEuGasStorage returns EU gas storage fill % from GIE AGSI+, with day-over-day change, injection or withdrawal trend, and up to five days of history.","operationId":"GetEuGasStorage","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"fillPct":1.5,"fillPctChange1d":1.5,"gasDaysConsumption":7,"history":[{"date":"2026-01-15","fillPct":1.5,"gasTwh":1.5}],"seededAt":"1717200000000"},"schema":{"$ref":"#/components/schemas/GetEuGasStorageResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEuGasStorage","tags":["EconomicService"]}},"/api/economic/v1/get-eu-yield-curve":{"get":{"description":"GetEuYieldCurve retrieves the latest ECB euro area AAA government bond yield curve (Svensson spot rates) at the 1Y, 2Y, 5Y, 10Y, 20Y and 30Y tenors.","operationId":"GetEuYieldCurve","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":{"date":"2026-01-15","rates":{"exampleKey":1.5},"source":"example","updatedAt":"2026-01-15"},"unavailable":false},"schema":{"$ref":"#/components/schemas/GetEuYieldCurveResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEuYieldCurve","tags":["EconomicService"]}},"/api/economic/v1/get-eurostat-country-data":{"get":{"description":"GetEurostatCountryData retrieves HICP inflation, unemployment and quarterly GDP growth from Eurostat for 10 EU member states, including Germany and France.","operationId":"GetEurostatCountryData","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"countries":{"exampleKey":{"cpi":{"date":"2026-01-15","hasPrior":true,"priorValue":1.5,"unit":"example","value":1.5},"gdpGrowth":{"date":"2026-01-15","hasPrior":true,"priorValue":1.5,"unit":"example","value":1.5},"unemployment":{"date":"2026-01-15","hasPrior":true,"priorValue":1.5,"unit":"example","value":1.5}}},"seededAt":"1717200000000","unavailable":false},"schema":{"$ref":"#/components/schemas/GetEurostatCountryDataResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetEurostatCountryData","tags":["EconomicService"]}},"/api/economic/v1/get-fao-food-price-index":{"get":{"description":"GetFaoFoodPriceIndex retrieves 12 months of the FAO Food Price Index with meat, dairy, cereals, oils and sugar sub-indices, plus monthly and annual change.","operationId":"GetFaoFoodPriceIndex","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"currentFfpi":1.5,"fetchedAt":"2026-01-15T12:00:00Z","momPct":1.5,"points":[{"cereals":1.5,"dairy":1.5,"date":"2026-01-15","ffpi":1.5,"meat":1717200000000}],"yoyPct":1.5},"schema":{"$ref":"#/components/schemas/GetFaoFoodPriceIndexResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetFaoFoodPriceIndex","tags":["EconomicService"]}},"/api/economic/v1/get-food-prices":{"get":{"description":"GetFoodPrices returns local-currency market prices with exact prior-week comparisons, plus dated GIEWS and Tunisia context. Missing comparisons are explicitly unavailable. Market, market type, product, origin, unit and currency must match; levels are not comparable across countries.","operationId":"GetFoodPrices","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"sources":[{"attribution":"example","cadence":"example","contextOnly":true,"contexts":[{"country":"US","countryCode":"US","fetchedAt":"2026-01-15T12:00:00Z","referenceDate":"2026-01-15","status":"example"}],"country":"US"}],"unavailable":false},"schema":{"$ref":"#/components/schemas/GetFoodPricesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetFoodPrices","tags":["EconomicService"]}},"/api/economic/v1/get-fred-series":{"get":{"description":"Retrieve a Federal Reserve Economic Data series by ID, with an observation limit, dated values, title, units and frequency for economic time-series analysis.","operationId":"GetFredSeries","parameters":[{"description":"FRED series ID. Supported values: \"BAMLC0A0CM\", \"BAMLH0A0HYM2\", \"CPIAUCSL\", \"DCOILWTICO\", \"DGS1\", \"DGS10\", \"DGS1MO\", \"DGS2\", \"DGS30\", \"DGS3MO\", \"DGS5\", \"DGS6MO\", \"ESTR\", \"EURIBOR1Y\", \"EURIBOR3M\", \"EURIBOR6M\", \"FEDFUNDS\", \"GDP\", \"GSCPI\", \"ICSA\", \"M2SL\", \"MORTGAGE30US\", \"SOFR\", \"STLFSI4\", \"T10Y2Y\", \"T10Y3M\", \"UNRATE\", \"VIXCLS\", \"WALCL\".","example":"BAMLC0A0CM","in":"query","name":"series_id","required":true,"schema":{"enum":["BAMLC0A0CM","BAMLH0A0HYM2","CPIAUCSL","DCOILWTICO","DGS1","DGS10","DGS1MO","DGS2","DGS30","DGS3MO","DGS5","DGS6MO","ESTR","EURIBOR1Y","EURIBOR3M","EURIBOR6M","FEDFUNDS","GDP","GSCPI","ICSA","M2SL","MORTGAGE30US","SOFR","STLFSI4","T10Y2Y","T10Y3M","UNRATE","VIXCLS","WALCL"],"type":"string"}},{"description":"Maximum number of observations to return. Defaults to 120.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"series":{"frequency":"example","observations":[{"date":"2026-01-15","value":1.5}],"seriesId":"GDP","title":"example","units":"example"}},"schema":{"$ref":"#/components/schemas/GetFredSeriesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetFredSeries","tags":["EconomicService"]}},"/api/economic/v1/get-fred-series-batch":{"post":{"description":"Retrieve multiple Federal Reserve Economic Data series in one request, with dated observations and series metadata, plus requested and fetched result counts.","operationId":"GetFredSeriesBatch","parameters":[{"description":"Optional client-generated idempotency key. Retrying a POST with the same key and an identical request body replays the original response (only the status, body, and Content-Type are reproduced) instead of re-executing; reusing the key with a different body is rejected with 422. For mutations this avoids duplicating the side effect, while for batch-read POSTs it replays a cached snapshot that can be up to 24 hours stale. Keys are scoped per authenticated caller (falling back to the source IP for unauthenticated endpoints) and retained for 24 hours.","example":"4f8b9c2e-1a3d-4b6f-8e0a-2c5d7f9b1e34","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"minLength":1,"pattern":"^[\\x21-\\x7E]{1,255}$","type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"limit":25,"seriesIds":["GDP"]},"schema":{"$ref":"#/components/schemas/GetFredSeriesBatchRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"fetched":1,"requested":1,"results":{"exampleKey":{"frequency":"example","observations":[{"date":"2026-01-15","value":1.5}],"seriesId":"GDP","title":"example","units":"example"}}},"schema":{"$ref":"#/components/schemas/GetFredSeriesBatchResponse"}}},"description":"Successful response","headers":{"Idempotency-Key":{"description":"The idempotency key echoed from the request. Present only when the client opted into idempotency.","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when this response was replayed from an earlier request with the same key, false on the first (original) request. Present only when the client opted into idempotency.","schema":{"type":"boolean"}}}},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"type":"object"},{"$ref":"#/components/schemas/InvalidRequestBodyError"}]}}},"description":"Validation error, invalid Idempotency-Key header, or malformed JSON request body"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"type":"object"}}},"description":"A request with this Idempotency-Key is still being processed","headers":{"Idempotency-Key":{"description":"The idempotency key supplied by the client.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying the in-flight request.","schema":{"type":"string"}}}},"422":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"type":"object"}}},"description":"The Idempotency-Key was already used with a different request body","headers":{"Idempotency-Key":{"description":"The idempotency key supplied by the client.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetFredSeriesBatch","tags":["EconomicService"]}},"/api/economic/v1/get-government-yield-curve":{"get":{"description":"GetGovernmentYieldCurve returns one sovereign market's daily yield curve from its official national publisher, or the OECD monthly 10Y benchmark when no daily curve is covered. Yields keep their publisher's measure and are never converted.","operationId":"GetGovernmentYieldCurve","parameters":[{"description":"ISO 3166-1 alpha-2 code of the sovereign, e.g. \"JP\" or \"DE\".","example":"US","in":"query","name":"country","required":true,"schema":{"type":"string"}},{"description":"True for every stored business day; false for the latest day.","example":true,"in":"query","name":"history","required":false,"schema":{"type":"boolean"}},{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"country":"US","curves":[{"date":1717200000000,"tenors":{"exampleKey":1.5}}],"measure":"example","source":"example","unavailable":false},"schema":{"$ref":"#/components/schemas/GetGovernmentYieldCurveResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetGovernmentYieldCurve","tags":["EconomicService"]}},"/api/economic/v1/get-macro-signals":{"get":{"description":"Review seven macro signals with bullish counts and BUY, CASH or UNKNOWN verdicts; unavailable cached data returns UNKNOWN to keep missing evidence explicit.","operationId":"GetMacroSignals","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"bullishCount":1,"meta":{"qqqSparkline":[1.5]},"signals":{"fearGreed":{"history":[{"date":"2026-01-15","value":1}],"status":"example","value":1},"flowStructure":{"btcReturn5":1.5,"qqqReturn5":1.5,"status":"example"},"hashRate":{"change30d":1.5,"status":"example"},"liquidity":{"sparkline":[1.5],"status":"example","value":1.5},"macroRegime":{"qqqRoc20":1.5,"status":"example","xlpRoc20":1.5}},"timestamp":"2026-01-15T12:00:00Z","totalCount":1},"schema":{"$ref":"#/components/schemas/GetMacroSignalsResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetMacroSignals","tags":["EconomicService"]}},"/api/economic/v1/get-nat-gas-storage":{"get":{"description":"GetNatGasStorage retrieves the 8 most recent weeks of US natural gas working gas storage from EIA (NW2_EPG0_SWO_R48_BCF).","operationId":"GetNatGasStorage","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"latestPeriod":"daily","weeks":[{"period":"daily","storBcf":1.5,"weeklyChangeBcf":1.5}]},"schema":{"$ref":"#/components/schemas/GetNatGasStorageResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetNatGasStorage","tags":["EconomicService"]}},"/api/economic/v1/get-national-debt":{"get":{"description":"GetNationalDebt estimates government debt in USD by country from IMF WEO debt-to-GDP and GDP with a deficit-based growth rate; US uses Treasury debt data.","operationId":"GetNationalDebt","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"entries":[{"annualGrowth":1.5,"baselineTs":"1717200000000","debtToGdp":1.5,"debtUsd":1.5,"gdpUsd":1.5}],"seededAt":"2026-01-15T12:00:00Z","unavailable":false},"schema":{"$ref":"#/components/schemas/GetNationalDebtResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetNationalDebt","tags":["EconomicService"]}},"/api/economic/v1/get-no2-activity":{"get":{"description":"GetNo2Activity returns Sentinel-5P NO2 year-over-year activity direction for 167 countries and 32 industrial clusters, filterable by country, region and kind.","operationId":"GetNo2Activity","parameters":[{"description":"ISO 3166-1 alpha-2: the country plus its clusters.","example":"US","in":"query","name":"country_code","required":false,"schema":{"pattern":"^([A-Za-z]{2})?$","type":"string"}},{"description":"Registry id, e.g. \"yangtze-river-delta\".","example":"yangtze-river-delta","in":"query","name":"region_id","required":false,"schema":{"pattern":"^([a-z0-9-]{1,64})?$","type":"string"}},{"description":"Countries, clusters, or both when unspecified.","example":"NO2_REGION_KIND_COUNTRY","in":"query","name":"kind","required":false,"schema":{"enum":["NO2_REGION_KIND_COUNTRY","NO2_REGION_KIND_CLUSTER"],"type":"string"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"attribution":"example","generatedAt":"2026-01-15T12:00:00Z","methodVersion":"example","regions":[{"baselineMeanNo2MolM2":1.5,"baselineYears":[1],"bbox":[1.5],"changePercent":42.5,"countryCode":"US"}],"stale":true},"schema":{"$ref":"#/components/schemas/GetNo2ActivityResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetNo2Activity","tags":["EconomicService"]}},"/api/economic/v1/get-oil-inventories":{"get":{"description":"GetOilInventories returns recent oil-inventory series: US crude weeks, the SPR snapshot, natural-gas weeks, EU gas storage, and IEA stocks.","operationId":"GetOilInventories","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"crudeWeeks":[{"period":"daily","stocksMb":1.5,"weeklyChangeMb":1.5}],"euGas":{"fillPct":1.5,"fillPctChange1d":1.5,"history":[{"date":"2026-01-15","fillPct":1.5}],"trend":"example"},"ieaStocks":{"asiaPacific":{"avgDays":7,"countBelowObligation":1,"minDays":7},"dataMonth":"example","europe":{"avgDays":7,"countBelowObligation":1,"minDays":7},"members":[{"belowObligation":true,"daysOfCover":7,"iso2":"US","netExporter":true}],"northAmerica":{"avgDays":7,"countBelowObligation":1,"minDays":7}},"natGasWeeks":[{"period":"daily","storBcf":1.5,"weeklyChangeBcf":1.5}],"refinery":{"inputsMbpd":1.5,"period":"daily"}},"schema":{"$ref":"#/components/schemas/GetOilInventoriesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetOilInventories","tags":["EconomicService"]}},"/api/economic/v1/get-oil-stocks-analysis":{"get":{"description":"GetOilStocksAnalysis ranks IEA members by oil stock days of net-import cover against the 90-day obligation, with Europe, Asia-Pacific and North America data.","operationId":"GetOilStocksAnalysis","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"belowObligation":["example"],"dataMonth":"example","ieaMembers":[{"belowObligation":true,"daysOfCover":7,"iso2":"US","netExporter":true,"obligationMet":true}],"regionalSummary":{"asiaPacific":{"avgDays":7,"countBelowObligation":1,"minDays":7},"europe":{"avgDays":7,"countBelowObligation":1,"minDays":7},"northAmerica":{"avgDays":7,"netExporters":1}},"unavailable":false},"schema":{"$ref":"#/components/schemas/GetOilStocksAnalysisResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetOilStocksAnalysis","tags":["EconomicService"]}},"/api/economic/v1/get-us-cpi-monthly":{"get":{"description":"GetUsCpiMonthly returns seasonally adjusted US CPI-U for headline, core, food, energy, shelter, and services. Month-over-month and year-over-year changes are computed from that index. history=false is the latest month. history=true is every month from 1947.","operationId":"GetUsCpiMonthly","parameters":[{"description":"When true, return every stored month. When false, return only the latest month.","example":true,"in":"query","name":"history","required":false,"schema":{"type":"boolean"}},{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"months":[{"core":{"index":1.5,"monthOverMonth":{"percent":42.5},"yearOverYear":{"percent":42.5}},"energy":{"index":1.5,"monthOverMonth":{"percent":42.5},"yearOverYear":{"percent":42.5}},"food":{"index":1.5,"monthOverMonth":{"percent":42.5},"yearOverYear":{"percent":42.5}},"headline":{"index":1.5,"monthOverMonth":{"percent":42.5},"yearOverYear":{"percent":42.5}},"month":1717200000000}],"unavailable":false},"schema":{"$ref":"#/components/schemas/GetUsCpiMonthlyResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetUsCpiMonthly","tags":["EconomicService"]}},"/api/economic/v1/get-us-interest-rates":{"get":{"description":"GetUsInterestRates returns the effective federal funds rate, target range, H.15 Treasury yields, and SOFR. history=false is the latest point of each series. history=true is the full history. This is not the Treasury par curve.","operationId":"GetUsInterestRates","parameters":[{"description":"When true, return every stored observation. When false, return the latest point of each series.","example":true,"in":"query","name":"history","required":false,"schema":{"type":"boolean"}},{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"series":[{"id":"fed_funds_effective","points":[{"date":1717200000000,"percent":42.5}]}],"unavailable":false},"schema":{"$ref":"#/components/schemas/GetUsInterestRatesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetUsInterestRates","tags":["EconomicService"]}},"/api/economic/v1/get-us-treasury-par-yield-curve":{"get":{"description":"GetUsTreasuryParYieldCurve returns the daily Treasury par yield curve, 1-month through 30-year. A missing tenor was not published that day. history=false is the latest business day. history=true is every business day since 1990.","operationId":"GetUsTreasuryParYieldCurve","parameters":[{"description":"When true, return every stored business day since 1990. When false, return the latest day.","example":true,"in":"query","name":"history","required":false,"schema":{"type":"boolean"}},{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"curves":[{"date":1717200000000,"fiveYear":1.5,"fourMonth":1.5,"oneAndAHalfMonth":1.5,"oneMonth":1.5}],"unavailable":false},"schema":{"$ref":"#/components/schemas/GetUsTreasuryParYieldCurveResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetUsTreasuryParYieldCurve","tags":["EconomicService"]}},"/api/economic/v1/get-world-cpi-monthly":{"get":{"description":"GetWorldCpiMonthly returns one national CPI series per country, worldwide. The per-country source is chosen by precedence (national overlay, then HICP for Europe, then IMF, then OECD) with a staleness fall-through, so each row carries its source, frequency and index base. Month-over-month and year-over-year changes are computed from that index; levels are not comparable across sources. history=false is the latest period per country. history=true is the stored 10-year window.","operationId":"GetWorldCpiMonthly","parameters":[{"description":"When true, return every stored period. When false, return only the latest period per country.","example":true,"in":"query","name":"history","required":false,"schema":{"type":"boolean"}},{"description":"Optional ISO 3166-1 alpha-2 filter. When set, only that country is returned.","example":"US","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"description":"Maximum recent observations per series, up to 366. Omit or use zero for the full stored history.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"countries":[{"country":"US","frequency":"example","indexBase":"example","periods":[{"period":1,"reading":{"index":1.5,"periodOverPeriod":{"percent":42.5},"yearOverYear":{"percent":42.5}}}],"source":"example"}],"unavailable":false},"schema":{"$ref":"#/components/schemas/GetWorldCpiMonthlyResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"GetWorldCpiMonthly","tags":["EconomicService"]}},"/api/economic/v1/list-bigmac-prices":{"get":{"description":"ListBigMacPrices retrieves weekly Big Mac prices in local currency and USD for 49 countries via Exa web search, with cheapest, priciest and weekly change.","operationId":"ListBigMacPrices","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cheapestCountry":"US","countries":[{"available":true,"code":"example","currency":"USD","flag":"example","fxRate":75.25}],"fetchedAt":"2026-01-15T12:00:00Z","mostExpensiveCountry":"US","prevFetchedAt":"2026-01-15T12:00:00Z"},"schema":{"$ref":"#/components/schemas/ListBigMacPricesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"ListBigMacPrices","tags":["EconomicService"]}},"/api/economic/v1/list-fuel-prices":{"get":{"description":"ListFuelPrices retrieves weekly retail gasoline and diesel prices in USD for 30+ countries from official sources such as the EU Oil Bulletin and US EIA.","operationId":"ListFuelPrices","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cheapestDiesel":"example","cheapestGasoline":"example","countries":[{"code":"example","currency":"USD","diesel":{"available":true,"grade":"example","localPrice":75.25,"observedAt":"2026-01-15T12:00:00Z","source":"example"},"flag":"example","fxRate":75.25}],"countryCount":1,"fetchedAt":"2026-01-15T12:00:00Z"},"schema":{"$ref":"#/components/schemas/ListFuelPricesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"ListFuelPrices","tags":["EconomicService"]}},"/api/economic/v1/list-global-tenders":{"get":{"description":"ListGlobalTenders returns the Pro-gated, paginated, seed-backed canonical procurement feed. Requires entitlement tier \u003e= 1.","operationId":"ListGlobalTenders","parameters":[{"description":"ISO 3166-1 alpha-2 country code to match.","example":"US","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"description":"One or more ISO 3166-1 alpha-2 country codes to match.","example":["US"],"explode":true,"in":"query","name":"countries","required":false,"schema":{"items":{"type":"string"},"type":"array"},"style":"form"},{"description":"Geographic region label to match, such as Europe or North America.","example":"example","in":"query","name":"region","required":false,"schema":{"type":"string"}},{"description":"Source adapter identifier: sam, ted, contracts-finder, canada-buys, gets, or world-bank.","example":"example","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Source-provided tender status to match, such as open or published.","example":"example","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Include opportunities whose deadline is on or after this ISO-8601 timestamp.","example":"example","in":"query","name":"deadline_from","required":false,"schema":{"type":"string"}},{"description":"Include opportunities whose deadline is on or before this ISO-8601 timestamp.","example":"example","in":"query","name":"deadline_to","required":false,"schema":{"type":"string"}},{"description":"Include opportunities with a stated estimated value at or above this amount.","example":1.5,"in":"query","name":"min_value","required":false,"schema":{"format":"double","type":"number"}},{"description":"Include opportunities with a stated estimated value at or below this amount.","example":1.5,"in":"query","name":"max_value","required":false,"schema":{"format":"double","type":"number"}},{"description":"ISO 4217 currency code used with min_value and max_value.","example":"USD","in":"query","name":"currency","required":false,"schema":{"type":"string"}},{"description":"Procurement category or classification code to match.","example":"cs.AI","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"Case-insensitive search text matched against tender titles and descriptions.","example":"supply chain risk","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Maximum number of tenders to return per page; capped at 100.","example":25,"in":"query","name":"page_size","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Opaque cursor from a previous response's next_cursor field.","example":"next-page-token","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},{"description":"Result ordering: newest, closing_soon, estimated_value, or relevance.","example":"example","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Case-insensitive buyer or contracting-authority text to match.","example":"example","in":"query","name":"buyer","required":false,"schema":{"type":"string"}},{"description":"Include opportunities published on or after this ISO-8601 timestamp.","example":"example","in":"query","name":"published_from","required":false,"schema":{"type":"string"}},{"description":"Include opportunities published on or before this ISO-8601 timestamp.","example":"example","in":"query","name":"published_to","required":false,"schema":{"type":"string"}},{"description":"Include only opportunities whose keyword-based automation_fit score is at\n or above this integer value (1-100; values above 100 are clamped, and\n non-integer or non-positive values disable the filter). Disabled when 0\n or unset, which preserves the default all-open-opportunities behavior.\n This is an evidence-backed text-relevance threshold only; it does not\n assert that any party is eligible to bid.","example":42,"in":"query","name":"min_automation_score","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"appliedFilters":["example"],"availability":"example","countryCoverage":"US","dataAvailable":true,"fetchedAt":"2026-01-15T12:00:00Z"},"schema":{"$ref":"#/components/schemas/ListGlobalTendersResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"PRO entitlement access denied.","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"security":[{"WorldMonitorKey":[]},{"ApiKeyHeader":[]},{"BearerAuth":[]}],"summary":"ListGlobalTenders","tags":["EconomicService"]}},"/api/economic/v1/list-grocery-basket-prices":{"get":{"description":"ListGroceryBasketPrices compares the weekly USD cost of a 10-item grocery basket (rice, eggs, milk, bread and more) across 24 countries, with weekly change.","operationId":"ListGroceryBasketPrices","parameters":[{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cheapestCountry":"US","countries":[{"code":"example","currency":"USD","flag":"example","fxRate":75.25,"items":[{"available":true,"currency":"USD","itemId":"example-id","itemName":"WorldMonitor Analyst","localPrice":75.25}]}],"fetchedAt":"2026-01-15T12:00:00Z","mostExpensiveCountry":"US","prevFetchedAt":"2026-01-15T12:00:00Z"},"schema":{"$ref":"#/components/schemas/ListGroceryBasketPricesResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"ListGroceryBasketPrices","tags":["EconomicService"]}},"/api/economic/v1/list-world-bank-indicators":{"get":{"description":"Retrieve World Bank development indicators with country filters, country names, indicator codes and annual values for economic and development data analysis.","operationId":"ListWorldBankIndicators","parameters":[{"description":"World Bank indicator code (e.g., \"NY.GDP.MKTP.CD\").","example":"NY.GDP.MKTP.CD","in":"query","name":"indicator_code","required":true,"schema":{"type":"string"}},{"description":"Optional country filter (ISO 3166-1 alpha-2).","example":"US","in":"query","name":"country_code","required":false,"schema":{"type":"string"}},{"description":"Optional year filter. Defaults to latest available.","example":1,"in":"query","name":"year","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Maximum items per page.\n Accepted but currently ignored; no-op until this handler supports the parameter.","example":25,"in":"query","name":"page_size","required":false,"schema":{"format":"int32","type":"integer"}},{"description":"Cursor for next page.\n Accepted but currently ignored; no-op until this handler supports the parameter.","example":"next-page-token","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},{"description":"Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.","example":"keys(@)","in":"query","name":"jmespath","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"countryCode":"US","countryName":"US","indicatorCode":"NY.GDP.MKTP.CD","indicatorName":"WorldMonitor Analyst","value":1.5,"year":1}],"pagination":{"nextCursor":"next-page-token","totalCount":1}},"schema":{"$ref":"#/components/schemas/ListWorldBankIndicatorsResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidationError"},{"$ref":"#/components/schemas/JmespathProjectionError"}]}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}},"description":"API access requires an active subscription (the API key's subscription is inactive or expired).","headers":{"X-Billing-Verification":{"description":"Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/RateLimitError"}]}}},"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests allowed in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active rate-limit window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix epoch milliseconds when the active rate-limit window resets.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingVerificationError"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (1-60).","schema":{"type":"string"}},"X-Billing-Verification":{"description":"Billing-verification state that produced this response (matches the body `code`).","schema":{"type":"string"}},"X-RateLimit-Mode":{"description":"Present with value degraded when a fail-closed rate-limit dependency is unavailable.","schema":{"type":"string"}},"X-Validation-Mode":{"description":"Present with value degraded when user API-key validation is temporarily unavailable.","schema":{"type":"string"}}}},"default":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/GatewayError"}]}}},"description":"Gateway or handler error response."}},"summary":"ListWorldBankIndicators","tags":["EconomicService"]}}},"security":[{"WorldMonitorKey":[]},{"ApiKeyHeader":[]}],"servers":[{"url":"https://api.worldmonitor.app"}]}