Model MatchHelp

Recipes

Forecast a market

Project a metro's originations six months ahead under a rate scenario. The time-series endpoint returns history plus a forecast band.

Add forecast to a monthly market time series and the API appends a projection from Amazon’s Chronos-2 model, conditioned on a path for the 30-year fixed rate. You pick the horizon and the rate scenario. The model returns a median and a p10 to p90 band for each month.

Projected originations six months out under a rate scenario.

Flip the scenario to see how much the rate path moves the projection. The three runs are real responses to the request below, one per rate30y preset.

The request

curl -X POST https://api.modelmatch.com/v1/market/analytics/time-series \
  -H "x-api-key: mm_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "flatFilters": { "metro": "12420" },
    "period": "last12Months",
    "interval": "monthly",
    "measure": "originatedUnits",
    "forecast": { "horizon": 6, "scenario": { "rate30y": "fall" } }
  }'

With the MCP server connected, ask:

Forecast monthly originations in the Austin metro for the next 6 months if mortgage rates fall by a point. Show the range, not just the midpoint.

rate30y takes hold (today’s rate stays flat), fall (down one point over the horizon), rise (up one point), or an explicit array with one rate per month. The rate is an input the model conditions on, never something it predicts.

What comes back

{
  "measure": "originatedUnits",
  "current": [
    { "date": "2026-01-20", "measureValue": 2340, "complete": true },
    { "date": "2026-02-20", "measureValue": 2228, "complete": true },
    { "date": "2026-03-20", "measureValue": 2054, "complete": true },
    { "date": "2026-04-20", "measureValue": 2156, "complete": true },
    { "date": "2026-05-20", "measureValue": 1887, "complete": true },
    { "date": "2026-06-20", "measureValue": 1666, "complete": true }
  ],
  "forecast": {
    "model": "amazon/chronos-2",
    "asOf": "2026-06-01",
    "horizon": 6,
    "scenario": { "rate30y": [7.23, 7.07, 6.9, 6.73, 6.57, 6.4] },
    "support": 1928.17,
    "confidence": "high",
    "points": [
      { "date": "2026-07-01", "p10": 1694, "p50": 1865, "p90": 2034 },
      { "date": "2026-08-01", "p10": 1534, "p50": 1705, "p90": 1886 },
      { "date": "2026-09-01", "p10": 1546, "p50": 1722, "p90": 1905 },
      { "date": "2026-10-01", "p10": 1550, "p50": 1738, "p90": 1928 },
      { "date": "2026-11-01", "p10": 1370, "p50": 1560, "p90": 1756 },
      { "date": "2026-12-01", "p10": 1264, "p50": 1468, "p90": 1674 }
    ]
  }
}
  • asOf is the last complete month the model saw. Incomplete recent months are trimmed from the history before forecasting, so the projection doesn’t start from a partial month.
  • confidence reflects how much data backs the series: high is 100 or more per month, medium 20 or more, low below that. Treat a low forecast as a shape, not a number.
  • p50 is the median. p10 and p90 bound the likely range.

Make it yours

  • Compare scenarios: run hold, fall, and rise and chart the three medians together.
  • Volume instead of units: set "measure": "originatedVolume". Any sentinel-guarded measure works.
  • Per-segment forecasts: add "segment": "loanType" to get an independent projection for each product.
  • Smaller markets: a county or ZIP works too, but watch confidence. Thin series produce wide bands.