hypox.ch

Menu

Developer API

Swiss Interest Rate API

A free, public JSON API for Swiss interest rate data: the SNB policy rate, the mortgage reference rate and aggregated provider mortgage rates. No API key, no registration — fair use. The data is refreshed daily and served straight from the edge.

Endpoints

Endpoint Description Source
GET /api/v1/policy-rate SNB policy rate — current value plus full history of change decisions since 2008. Swiss National Bank (SNB)
GET /api/v1/reference-rate Mortgage reference rate — current value plus history since 2008, used for Swiss rent adjustments. Federal Office for Housing (BWO/OFL)
GET /api/v1/mortgage-rates Aggregated mortgage rates per provider — average of published rates across our sources, for SARON, variable and fixed mortgages. Daily hypox survey of Swiss providers

Response

The two rate-series endpoints (policy-rate, reference-rate) return the same shape and always respond with HTTP 200 — a static fallback guarantees the series is never empty.

{
  "rateType": "snb-policy-rate",
  "current": { "rate": 0, "validFrom": "2025-06-19" },
  "changes": [
    { "validFrom": "2008-12-11", "rate": 0.5 },
    { "validFrom": "2025-06-19", "rate": 0 }
  ],
  "updatedAt": "2026-06-18",
  "provider": "hypox.ch"
}
Field Type Description
rateType string Series identifier: "snb-policy-rate" or "mortgage-reference-rate".
current object The currently valid entry — always the last element of "changes".
current.rate number Rate in percent per annum (percentage points), e.g. 0.5.
current.validFrom string ISO date (YYYY-MM-DD) the rate became effective.
changes array All change points in ascending order; the rate holds until the next entry.
updatedAt string ISO timestamp or date of the latest update.
provider string Always "hypox.ch".

Response: mortgage-rates

The /api/v1/mortgage-rates endpoint returns aggregated guide rates per provider (average across our sources, standard conditions only). There is no static fallback for this data: if it is temporarily unavailable, the endpoint responds with HTTP 503 (uncached) — integrations should handle this case.

{
  "rateType": "mortgage-provider-averages",
  "count": 57,
  "providers": [
    {
      "id": "zkb",
      "name": "Zürcher Kantonalbank",
      "rates": [
        { "product": "saron", "termYears": null, "rate": 1.05, "isFromRate": false, "sources": 2 },
        { "product": "fixed", "termYears": 10, "rate": 1.58, "isFromRate": true, "sources": 3 }
      ]
    }
  ],
  "updatedAt": "2026-07-10T05:30:00.000Z",
  "provider": "hypox.ch"
}
Field Type Description
rateType string Always "mortgage-provider-averages".
count number Number of providers in "providers".
providers array One entry per provider, sorted alphabetically by "id".
providers[].id string Stable provider slug, e.g. "zkb".
providers[].name string Display name of the provider.
providers[].rates array One entry per product (SARON, variable, fixed terms).
rates[].product string "saron", "variable" or "fixed".
rates[].termYears number | null Term in years for fixed mortgages, otherwise null.
rates[].rate number Average published rate in percent per annum.
rates[].isFromRate boolean true if at least one source publishes a "from" rate.
rates[].sources number Number of sources averaged.
updatedAt string ISO timestamp or date of the latest update.
provider string Always "hypox.ch".

Freshness & caching

  • Data is refreshed daily: policy and reference rate from the official sources (SNB and BWO), provider mortgage rates from our own survey.
  • Responses are edge-cached for one hour (Cache-Control: public, s-maxage=3600).
  • These rates change only a few times a year, so hourly caching is more than fresh enough.

Examples

curl

curl -s https://www.hypox.ch/api/v1/policy-rate | jq '.current'

JavaScript

const res = await fetch("https://www.hypox.ch/api/v1/policy-rate");
const data = await res.json();
console.log(data.current.rate, "% —", data.current.validFrom);

Google Sheets

=IMPORTDATA("https://www.hypox.ch/api/v1/policy-rate?format=csv")

All endpoints return a flat CSV table with ?format=csv — ideal for Google Sheets (IMPORTDATA), Excel or data pipelines.

Embed widget: current policy rate

Want to show the current SNB policy rate on your website without wiring up the API yourself? Copy this snippet: the script fills the placeholder with the current value — the rest is plain HTML you can reword and style freely.

<p>
  Current SNB policy rate: <strong data-hypox-rate>–</strong>
  (Source: <a href="https://www.hypox.ch/en/policy-rate">hypox.ch</a>)
</p>
<script async src="https://www.hypox.ch/embed/policy-rate.js"></script>

Preview

Current SNB policy rate: (Source: hypox.ch)

The script is tiny (under 1 KB), loads asynchronously and only touches elements with the data-hypox-rate attribute. We appreciate it if the source link to hypox.ch stays in the snippet.

CORS

The API sends Access-Control-Allow-Origin: *, so you can call it directly from any browser-based frontend.

Versioning

The path is versioned (/api/v1/). Within v1 we only add fields, never remove or rename them, so existing integrations keep working.

Attribution & terms

Free to use. If the data helps you, a link back to hypox.ch is appreciated. The underlying figures are official public data from the Swiss National Bank (SNB) and the Federal Office for Housing (BWO/OFL); hypox.ch collects and republishes them. Provided without warranty — always verify against the official sources for legally binding decisions.

Questions? hello@hypox.ch