How to Get the SNB (SNB_POLICY_RATE) Rate

How to Get the SNB (SNB_POLICY_RATE) Rate

You need the Swiss National Bank policy rate inside your software with the least possible glue code. By the end of this article you’ll query SNB_POLICY_RATE from the Interest Rates API, understand its update cadence, read effective dates correctly, and use the value to compute spreads and monthly payments in your own applications.

What the SNB policy rate is and how it’s represented in the API

SNB_POLICY_RATE is the Swiss National Bank Policy Rate. It’s the core policy rate for CHF that informs money-market conditions, bank lending benchmarks, and pricing for Swiss franc-denominated loans and deposits.

Illustration: How to Get the SNB (SNB_POLICY_RATE) Rate

In the Interest Rates API, SNB_POLICY_RATE is a central bank rate with monthly frequency. While central bank decisions don’t occur every day, the API exposes a daily time index where the rate generally remains constant between decision dates. For “monthly” symbols, the historical endpoint uses the last available day with data in that month.

Units: values are expressed in percent (for example: 1.75 means 1.75%). The currency context is CHF for this symbol. When reading dates in the responses, use the “dates” map (for latest) or the requested date range (for historical/time series). The API timestamps are calendar dates (Y-m-d); central bank rates typically do not depend on market trading sessions but do align with publication days. Cache accordingly.

Documentation and more examples: https://interestratesapi.com. To start building, you’ll need an API key: Register for Interest Rates API or Register.

Quick start: fetch the latest SNB policy rate

The latest endpoint returns one value per requested symbol. Authentication is via api_key as a query parameter. Method is GET.

cURL (official sample)

curl -s "https://interestratesapi.com/api/v1/latest?api_key=YOUR_API_KEY&symbols=SNB_POLICY_RATE"

JSON (official sample)

{
    "success": true,
    "date": "2026-09-30",
    "base": "CHF",
    "rates": {
        "SNB_POLICY_RATE": 0
    },
    "dates": {
        "SNB_POLICY_RATE": "2026-09-30"
    },
    "currencies": {
        "SNB_POLICY_RATE": "CHF"
    },
    "base_filter_note": null
}

How to read this:

  • rates map: key is the symbol, value is the rate in percent.
  • date: the API’s reference date for the set of latest rates.
  • dates map: per-symbol effective date — use this for symbol-level recency.
  • currencies map: CHF for SNB_POLICY_RATE.

Python (requests)

import requests

url = "https://interestratesapi.com/api/v1/latest"
params = {
"symbols": "SNB_POLICY_RATE",
"api_key": "YOUR_API_KEY"
}
resp = requests.get(url, params=params)
data = resp.json()

value = data["rates"]["SNB_POLICY_RATE"]
effective_date = data["dates"]["SNB_POLICY_RATE"]
currency = data["currencies"]["SNB_POLICY_RATE"]
print(f"SNB policy rate: {value}% effective {effective_date} ({currency})")

JavaScript (fetch)

const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY'
);
const data = await response.json();
const value = data.rates.SNB_POLICY_RATE;
const effectiveDate = data.dates.SNB_POLICY_RATE;
const ccy = data.currencies.SNB_POLICY_RATE;
console.log(`SNB policy rate: ${value}% effective ${effectiveDate} (${ccy})`);

PHP

<?php
$url = "https://interestratesapi.com/api/v1/latest?symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY";
$json = file_get_contents($url);
$data = json_decode($json, true);
$value = $data["rates"]["SNB_POLICY_RATE"];
$eff = $data["dates"]["SNB_POLICY_RATE"];
$ccy = $data["currencies"]["SNB_POLICY_RATE"];
echo "SNB policy rate: {$value}% effective {$eff} ({$ccy})";
?>

Explore the API catalog and MCP: Interest Rates API MCP and MCP.

Endpoint reference for SNB_POLICY_RATE

All endpoints are GET and live under https://interestratesapi.com/api/v1/. Authentication uses the api_key query parameter. Below we cover all seven endpoints you’ll use to work with SNB_POLICY_RATE: symbols, latest, historical, timeseries, fluctuation, ohlc, and convert.

1) /symbols — discover the symbol

Use this to confirm symbol metadata, including frequency and currency. You can filter by category=central_bank and base=CHF to narrow down.

cURL

JSON example

Notes:

  • The example above shows one symbol (FED_FUNDS) as a template. When you call with base=CHF you will retrieve CHF-centric central bank symbols, including SNB_POLICY_RATE, along with each field (symbol, name, category, frequency, currency_code).

Python

import requests

resp = requests.get(
"https://interestratesapi.com/api/v1/symbols",
params={"category": "central_bank", "base": "CHF", "api_key": "YOUR_API_KEY"}
)
symbols = resp.json()["symbols"]
snb = [s for s in symbols if s["symbol"] == "SNB_POLICY_RATE"]
print(snb)

JavaScript

const res = await fetch(
"https://interestratesapi.com/api/v1/symbols?category=central_bank&base=CHF&api_key=YOUR_API_KEY"
);
const payload = await res.json();
const snb = payload.symbols.find(s => s.symbol === "SNB_POLICY_RATE");
console.log(snb);

PHP

<?php
$url = "https://interestratesapi.com/api/v1/symbols?category=central_bank&base=CHF&api_key=YOUR_API_KEY";
$data = json_decode(file_get_contents($url), true);
$snb = array_values(array_filter($data["symbols"], fn($s) => $s["symbol"] === "SNB_POLICY_RATE"));
print_r($snb);
?>

2) /latest — get the current SNB policy rate

Use the official sample shown earlier under Quick start. It returns the latest rate with symbol-level effective date and currency. Keep in mind that central bank policy rates update on decision days; between decisions the “latest” date remains the same.

Additional cURL (multi-symbol)

JSON example (multi-symbol)

Values in examples may be illustrative; rely on live responses for production decisions.

Python

import requests
r = requests.get(
"https://interestratesapi.com/api/v1/latest",
params={"symbols": "SNB_POLICY_RATE", "api_key": "YOUR_API_KEY"}
)
print(r.json())

JavaScript

const r = await fetch(
"https://interestratesapi.com/api/v1/latest?symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY"
);
console.log(await r.json());

PHP

<?php
echo file_get_contents("https://interestratesapi.com/api/v1/latest?symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY");
?>

3) /historical — value on a specific date

For monthly symbols, the last day with data within that month is used if you request a date within the month. This is ideal for end-of-month snapshots, accounting, and month-over-month analyses.

cURL

JSON example

Python

import requests

resp = requests.get(
"https://interestratesapi.com/api/v1/historical",
params={"date": "2025-06-15", "symbols": "SNB_POLICY_RATE", "api_key": "YOUR_API_KEY"}
)
data = resp.json()
print(data["rates"]["SNB_POLICY_RATE"])

JavaScript

const res = await fetch(
"https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY"
);
const hist = await res.json();
console.log(hist.rates.SNB_POLICY_RATE);

PHP

<?php
$url = "https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY";
echo file_get_contents($url);
?>

4) /timeseries — daily series between two dates

Returns a date-to-value map for each symbol. For central bank rates, values typically repeat between decisions. Use this to plot charts, compute moving averages, or resample for portfolio analytics.

cURL

JSON example

Key fields:

  • rates: per-symbol nested map of date to value.
  • frequencies: the effective time step returned (often daily for series even if the symbol’s fundamental cadence is monthly).
  • currencies: CHF is the natural currency for SNB_POLICY_RATE; examples may show other bases in mixed queries.

Python

import requests

resp = requests.get(
"https://interestratesapi.com/api/v1/timeseries",
params={
"start": "2025-10-27",
"end": "2026-10-27",
"symbols": "SNB_POLICY_RATE",
"api_key": "YOUR_API_KEY"
}
)
series = resp.json()["rates"]["SNB_POLICY_RATE"]
print(list(series.items())[:5])

JavaScript

const url = "https://interestratesapi.com/api/v1/timeseries?start=2025-10-27&end=2026-10-27&symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY";
const ts = await (await fetch(url)).json();
console.log(ts.rates.SNB_POLICY_RATE);

PHP

<?php
echo file_get_contents("https://interestratesapi.com/api/v1/timeseries?start=2025-10-27&end=2026-10-27&symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY");
?>

5) /fluctuation — changes and extremes over a period

Compute absolute and percent changes plus high/low across a range without pulling the full time series client-side.

cURL

JSON example

Field notes:

  • change_pct is null if start_value is 0 to avoid division by zero.
  • high/low are the extremes within the given date range.

Python

import requests
resp = requests.get(
"https://interestratesapi.com/api/v1/fluctuation",
params={"start": "2025-10-27", "end": "2026-10-27", "symbols": "SNB_POLICY_RATE", "api_key": "YOUR_API_KEY"}
)
stats = resp.json()["rates"]["SNB_POLICY_RATE"]
print(stats["change"], stats["high"], stats["low"])

JavaScript

const res = await fetch(
"https://interestratesapi.com/api/v1/fluctuation?start=2025-10-27&end=2026-10-27&symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY"
);
const payload = await res.json();
console.log(payload.rates.SNB_POLICY_RATE);

PHP

<?php
$url = "https://interestratesapi.com/api/v1/fluctuation?start=2025-10-27&end=2026-10-27&symbols=SNB_POLICY_RATE&api_key=YOUR_API_KEY";
echo file_get_contents($url);
?>

6) /ohlc — monthly or weekly candlesticks for policy-rate charts

OHLC is computed on the fly from daily values. For central bank rates, it shows how the rate opened and closed a period and the extremes within.

cURL

JSON example

data_points counts the number of daily observations used for that OHLC bar.

Python

import requests

resp = requests.get(
"https://interestratesapi.com/api/v1/ohlc",
params={"symbols": "SNB_POLICY_RATE", "period": "monthly", "start": "2025-10-27", "end": "2026-10-27", "api_key": "YOUR_API_KEY"}
)
ohlc = resp.json()["rates"]["SNB_POLICY_RATE"]
print(ohlc[:1])

JavaScript

const res = await fetch(
"https://interestratesapi.com/api/v1/ohlc?symbols=SNB_POLICY_RATE&period=monthly&start=2025-10-27&end=2026-10-27&api_key=YOUR_API_KEY"
);
const ohlc = await res.json();
console.log(ohlc.rates.SNB_POLICY_RATE);

PHP

<?php
$url = "https://interestratesapi.com/api/v1/ohlc?symbols=SNB_POLICY_RATE&(period)=monthly&start=2025-10-27&end=2026-10-27&api_key=YOUR_API_KEY";
echo file_get_contents("https://interestratesapi.com/api/v1/ohlc?symbols=SNB_POLICY_RATE&period=monthly&start=2025-10-27&end=2026-10-27&api_key=YOUR_API_KEY");
?>

7) /convert — compare loan interest cost using SNB vs another policy rate

This endpoint estimates total interest for a simple loan at the latest rates of two symbols. Use it for quick comparisons or to generate a rate spread for dashboards and pre-qualification tools.

cURL

JSON example

Fields:

  • from/to.rate: latest rates (percent) on the given dates.
  • total_interest and total_payment: simple interest comparison for the provided amount and term_months.
  • difference.rate_spread: from.rate − to.rate (percent points). interest_saved: difference in total_interest.

Python

import requests

resp = requests.get(
"https://interestratesapi.com/api/v1/convert",
params={
"from": "SNB_POLICY_RATE",
"to": "ECB_MRO",
"amount": 250000,
"term_months": 24,
"api_key": "YOUR_API_KEY"
}
)
print(resp.json())

JavaScript

const url = "https://interestratesapi.com/api/v1/convert?from=SNB_POLICY_RATE&to=ECB_MRO&amount=250000&term_months=24&api_key=YOUR_API_KEY";
console.log(await (await fetch(url)).json());

PHP

<?php
$url = "https://interestratesapi.com/api/v1/convert?from=SNB_POLICY_RATE&to=ECB_MRO&amount=250000&term_months=24&api_key=YOUR_API_KEY";
echo file_get_contents($url);
?>

How SNB_POLICY_RATE is updated and how to cache it

Publication cadence: SNB policy decisions occur on scheduled dates, and the policy rate is not a market-traded instrument. As a result, the latest value may remain unchanged for weeks. The API presents daily indices so you can align with other daily series, but value changes occur on decision or announcement days.

Business days vs calendar days: For central bank rates, “non-trading days” are not material in the same way as interbank rates. Still, your downstream usage might be business-day aware. The timeseries endpoint lets you request any calendar range; repeated values across weekends are expected. For monthly symbols, historical uses the last available day in the month when you query a date within that month.

Caching guidance:

  • Cache /latest responses for the symbol-level effective date: if dates.SNB_POLICY_RATE is unchanged, you can safely serve from cache.
  • For /timeseries charts, cache by (start, end, symbols). Refresh around known central bank decision windows.
  • Respect rate limit headers when present: X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset.

Using SNB_POLICY_RATE in your calculations

Rate spread

Spread between SNB policy rate and another benchmark (for example, ECB_MRO) is simply:

spread_percent_points = snb_rate - other_rate

Use /latest or /convert (difference.rate_spread) for a straightforward read without manual subtraction.

Monthly payment (amortizing loan)

If you price a CHF mortgage or loan off SNB_POLICY_RATE plus a margin m, first compute the APR approximation as:

apr_percent = snb_rate + m

Convert to a decimal and monthly rate:

r = apr_percent / 100.0
i = r / 12.0

For principal P and term in months n, the standard fixed-payment formula is:

payment = P * (i * (1 + i)**n) / ((1 + i)**n - 1)

If you need pure simple interest instead of amortization for a short-dated facility, use:

total_interest = P * r * (n / 12.0)
monthly_payment_simple = (P + total_interest) / n

Do not hard-code rate values; always fetch from /latest for production quoting and display the effective date next to the rate the user sees.

Real-world use cases for SNB_POLICY_RATE

  • Rate dashboards: Show SNB policy rate next to EUR and USD policy benchmarks, with OHLC mini-charts derived from /ohlc and fluctuations from /fluctuation.
  • Lending and pricing engines: Fetch /latest to anchor CHF product pricing (add your margin and risk adjustments), display the effective date, and compute indicative payments.
  • Treasury and ALM: Use /timeseries to model policy-rate paths, bucket changes by quarter, and stress-test funding costs.
  • Macro research: Pull /historical monthly snapshots to build time-aligned panels with other macro variables.

More on the service: https://interestratesapi.com. When you’re ready to integrate, Get started with Interest Rates API.

Error handling and reliability

All errors share a common shape: success=false and error=message (some 404s also include details). Typical statuses:

  • 401: Missing or invalid api_key
  • 403: Account without active plan
  • 404: No symbols matched or no data for requested date/range (check details for available ranges)
  • 422: Validation error (date format, invalid symbol)
  • 429: Request quota exhausted (Retry-After and X-RateLimit-* headers included)

Make your client resilient by surfacing clear validation messages (e.g., wrong Y-m-d formatting) and applying exponential backoff or honoring Retry-After when rate limited.

Putting it together: minimal workflow for SNB_POLICY_RATE

  1. Discover the symbol with /symbols if needed (filter base=CHF, category=central_bank) and confirm its metadata.
  2. Fetch the latest rate with /latest and display the value and dates.SNB_POLICY_RATE to users, indicating the effective date.
  3. For charts and analysis, use /timeseries and /ohlc for your desired horizon.
  4. For reporting, use /historical with end-of-month dates to build month-over-month tables.
  5. For quick comparative analytics and spreads, call /fluctuation or /convert.

FAQ

Q1: What is the unit of SNB_POLICY_RATE?
A percent rate. For example, a value of 1.50 means 1.50% per annum.

Q2: How often does SNB_POLICY_RATE update?
It reflects policy decisions on scheduled days. The API exposes a daily index, but the value typically changes only on decision dates. Historical requests within a month resolve to the last day with data for monthly symbols.

Q3: Which date should my UI display as “effective”?
Use dates.SNB_POLICY_RATE from /latest, or the key dates in the /timeseries mapping. For historical month queries, document that the value corresponds to the last available day in that month.

Q4: Can I compute spreads and payment estimates with one call?
Yes. /convert compares two symbols and returns rate_spread and interest_saved. For amortizing payments, fetch the rate via /latest then apply your margin and compute via the standard loan formula.

Q5: How should I cache?
Cache /latest keyed by symbol and effective date; refresh around known decision windows. For chart ranges, cache /timeseries and /ohlc by (symbols, start, end, period). Always handle 429s with the Retry-After hint.

Build your SNB policy rate integration now. Read the catalog in the MCP and Register to get your API key.

Ready to get started?

Get your API key and start validating bank data in minutes.

Get API Key