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.
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
- Discover the symbol with /symbols if needed (filter base=CHF, category=central_bank) and confirm its metadata.
- Fetch the latest rate with /latest and display the value and dates.SNB_POLICY_RATE to users, indicating the effective date.
- For charts and analysis, use /timeseries and /ohlc for your desired horizon.
- For reporting, use /historical with end-of-month dates to build month-over-month tables.
- 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.