Docs
On this page
Docs/Data Bank/Responses and Data Types

API Reference · Data Bank

Responses and Data Types

Series endpoints return a JSON object containing request/release metadata and a list of metric series. This format supports grouped market measures, scalar rates, curves and forward paths without assigning one misleading unit or date to the whole response.

Response Envelope

FieldTypeMeaning
request_idStringServer-generated identifier for this HTTP request; also returned as X-Request-ID.
datasetStringDataset selected by the request.
release_idStringFamily release actually read. Retain it for reproducibility.
published_atTimestamp or nullRecorded publication time, not the date of each observation. Null when no publication timestamp is recorded.
release_statusStringState of the selected package. Normal serving requires accepted; use /releases/current to identify the current release.
selectionObjectResolved selectors and supplied dates/node bounds, plus mode (latest or range).
revision_policyStringReminder that subsequent releases can revise values.
seriesArrayMetric series represented on this page.
next_cursorString or nullContinuation token, or null when this selection is complete.

The selection object is not a complete echo of every parameter. It does not contain credentials and does not currently echo metrics or page_size. Numeric query selectors can appear as strings in selection; numeric series dimensions are numbers. Do not infer a JSON Schema for one from the other.

The API generates request_id; this contract does not accept a caller-supplied request ID/reference. A new continuation request has its own request ID. The release ID and series ID have different purposes and are not request tickets.

Each Series

FieldTypeMeaning
series_idStringStable identity for a metric and its dimensions. Treat it as opaque.
metricStringMachine-readable measure name.
unitStringSuch as GBP, GBP/month, GBP/m2, GBP/km2, percent, basis_points, sales, homes or index.
frequencyStringNative observation/snapshot frequency, monthly or daily.
basisStringInterpretation category described below.
dimensionsObjectNode-specific selectors such as maturity, term or horizon; often empty for market/scalar series.
availabilityObjectstatus, from and to for the stored series in the selected release.
observationsArraySelected observations on this page; absent from /coverage responses.
window_monthsInteger or nullMarket calculation window where applicable. Yield instead discloses separate input windows.
rental_window_months, capital_window_monthsIntegersYield's distinct input windows.
bounds_basisStringmodelled_uncertainty for new-build differential bounds.
history_capabilityStringRates history type: retained observations, latest summary per release or saved snapshot only.
empty_reasonString, conditionalWhy this page has no observations for a represented series.
noticeString, conditionalFor example, requested dates extend beyond the stored history.

availability.status is available or not_available. Its bounds describe the release's stored support, not only the current page. Availability does not guarantee that every requested endpoint has a finite value. Read observations too.

Do not depend on array positions. Identify a series by series_id and inspect metric/dimensions. A curve contains multiple series with the same metric, one for each node. A multi-metric dataset may span pages, so absence from one page is not proof of exclusion.

Each Observation

Every observation contains period, value and status. value is a finite number, integer count or null. Optional metadata describes the relevant window, interval or reason.

Status/basisInterpretation
recorded_revisableFiltered summaries of recorded property activity; later source updates can revise them.
estimatedModelled property-market measure, not an exhaustive directly observed statistic.
observedPublished rate/index/quoted benchmark observation.
derivedCalculation from reference observations, such as a rate spread.
indicativeCurve-derived/fitted reference, not an executable price.
scenarioHypothetical future assumption; not an observed outcome or assigned probability.
not_availableUnsupported observation. Its value must not be displayed as zero.
withheld_pending_reviewAn estimate retained as a gap while it is reviewed. Its value is null; other periods and metrics can remain available.

basis is a series-level description; status belongs to an individual observation. A null value can retain the basis status and supply reason: missing_value or zero_denominator. Always test the value as well as the status.

Withheld Observations

An estimate under review retains its period and window metadata and includes reason and review_reference. For example, an observation may contain:

json
{
  "period": "2021-07",
  "value": null,
  "status": "withheld_pending_review",
  "reason": "movement_evidence_insufficient",
  "review_reference": "<review-reference>"
}

This is an illustrative observation fragment. Treat reason codes as extensible and the review reference as opaque. A withheld capital estimate also withholds a yield that depends on it; rent can remain available. HTTP 200 can include these gaps. The latest selection does not fall back to the last non-null value.

Nulls, Zero and Empty Arrays

  • value: 0 is a genuine zero, such as no recorded sales in an eligible window.
  • value: null with reason: zero_denominator means a ratio cannot be calculated, not a 0% ratio.
  • reason: missing_value means no finite published value was available for that observation.
  • reason: outside_supported_coverage identifies an unsupported estimate.
  • observations: [] with empty_reason: not_available means the series has no admitted observations in the release.
  • observations: [] with empty_reason: no_observations_in_requested_range means no observations match this selection; the series can still have history elsewhere.

A valid horizon selection may also yield an empty series array when no retained points match. Do not treat a missing/corrupt release as equivalent: that returns an error.

Market Observation Metadata

period_start and period_end are inclusive dates defining the window, not additional observations. period is the monthly endpoint.

For price bands, each observation contains band_lower_gbp, band_upper_gbp, lower_inclusive, upper_inclusive and band_basis. Outer bounds can be null. Equality with an internal boundary belongs to the higher band. Bounds change with the observation window.

Rent adds rental_observation_month and structure_observation_month. Capital adds capital_observation_month. Yield adds both input dates, input_month_gap, mixed_vintage, rental_period_start, rental_period_end, capital_period_start and capital_period_end. It deliberately does not pretend to have a single input window.

Development-size observations add total_deliveries_count, classified_deliveries_count, unclassified_deliveries_count and classification_coverage_pct. These coverage values concern the matching area/type/window, not a count of development sites.

New-build price differential observations may include a warnings array. An estimate retained under the historical-evidence policy uses:

json
{
  "code": "historical_evidence_below_current_threshold",
  "message": "Historical estimate retained with limited evidence; uncertainty may be elevated."
}

This object appears inside warnings on the affected observation, including its lower and upper estimate series. The observation remains estimated, not observed; its numeric value is unchanged. Display the warning alongside the figure. It is not a failed API request. The array is omitted when no warning applies.

Rates Observation Metadata

These fields appear only when applicable and supplied by the saved product. Do not require every field on every rate dataset.

FieldsInterpretation
snapshot_dateCurve/path snapshot date; distinct from future interval dates.
interval_kindType of economic rate interval.
interval_start_month, interval_end_monthOffset boundaries for an interval.
interval_start_date, interval_end_dateActual interval dates.
compounding, day_count, sonia_compoundingRate conventions; preserve the returned values.
projection_start_month, projection_end_monthProjection interval offsets.
projection_start_date, projection_end_dateDates covered by the scenario point/interval.
mortgage_latest_observation_date, svr_latest_observation_dateUnderlying monthly evidence dates.
swap_2y_end_date, swap_5y_end_date, swap_10y_end_dateEnd dates of the relevant forward swap intervals.
matched_swap_as_of_dateDate of the swap reference attached to a spread.
observations_usedInput observation count for a summary, where supplied.
reference_basissame_month_average or last_available_reference; read this before comparing spreads.

Common numeric dimensions are tenor_months, term_years, horizon_month and, for BTL scenarios, ltv_pct. The chosen scenario or mortgage product is also identified in the response selection.

Numeric Precision and Presentation

Percent values are in percentage units: 4.25 means 4.25%. A value of 125 basis points means 1.25 percentage points. index is not a percentage. Currency uses GBP.

Counts are integers. Other values retain the published numeric precision; the contract does not round all amounts to whole pounds. JSON floating-point serialization can use scientific notation. Round for display only, and preserve underlying values when comparing releases or reproducing calculations.

The service returns Cache-Control: private, no-store. Do not introduce shared HTTP caching of authenticated responses. Any permitted application-level storage should retain release provenance and comply with your data licence.

Complete machine-readable examples accompany this documentation. They illustrate response structure with example release identifiers and historical values, not current market quotes or a guarantee of coverage.