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