Building loan pricing, risk dashboards, and treasury tools requires accurate, machine-readable benchmarks. By the end of this guide you will query the STIBOR 3-Month benchmark (symbol: STIBOR_3M) from interestratesapi.com, compute changes and spreads, and plug the data into applications using cURL, Python, JavaScript, and PHP across the full endpoint set: catalogue, latest, historical, time series, fluctuation, OHLC, and convert.
STIBOR_3M in practice: what it is and how to read it
STIBOR 3-Month (STIBOR_3M) is an interbank offered rate for Swedish kronor (SEK) with a three-month tenor. It is used as a floating-rate benchmark for corporate loans, mortgages, and derivatives linked to SEK. In the Interest Rates API, STIBOR_3M is delivered as a symbol under the interbank category.
Units and scale: values are returned as percent per annum (e.g., 5.33 means 5.33% annualized). When you receive a value from the API, you should divide by 100 if your calculation library expects a decimal rate. Effective dates: the API accompanies values with a date per symbol, indicating the date the rate value applies to in the dataset. For monthly symbols, the historical endpoint resolves to the last date with data in the target month. Always read the date fields before applying a rate to time-sensitive calculations.
Publication cadence: the STIBOR_3M symbol is listed as monthly in the catalogue. In time series and analytics endpoints, you may still receive per-day entries for convenience; rely on the dates that are present in the response and the frequencies map to determine how the series is exposed for your query window. Business days: interbank benchmarks are generally published on business days of their local calendar; you should expect gaps on weekends and local holidays. Cache appropriately if your application polls during off-hours.
Reference links: see product pages at https://interestratesapi.com and the multi-endpoint capability overview at Interest Rates API MCP. To begin, you will need an API key; you can Register for Interest Rates API or Get started with Interest Rates API.
Authentication, base URL, and request method
All requests use GET and the base URL https://interestratesapi.com/api/v1/. Authentication is by query parameter api_key, not by headers. Example: ?api_key=YOUR_KEY appended to every request URL.
Symbols: discover STIBOR_3M
Use the catalogue to confirm symbol availability, metadata, and frequency. You can filter by category and base currency. The example below shows a central bank filter; you can change category=interbank and base=SEK to explore interbank SEK benchmarks, which include STIBOR_3M.
cURL
curl -s "https://interestratesapi.com/api/v1/latest?api_key=YOUR_API_KEY&symbols=SOFR"
JSON response
{
"success": true,
"date": "2026-10-05",
"base": "USD",
"rates": {
"SOFR": 3.89
},
"dates": {
"SOFR": "2026-10-05"
},
"currencies": {
"SOFR": "USD"
},
"base_filter_note": null
}
Key fields: symbol (use exactly as-is in other endpoints), category (interbank for STIBOR_3M), frequency (exposure cadence), and currency_code. For STIBOR_3M you will use the exact identifier STIBOR_3M in downstream calls.
Python (requests)
import requests
resp = requests.get(
'https://interestratesapi.com/api/v1/symbols',
params=dict(category='interbank', base='SEK', api_key='YOUR_KEY')
)
symbols = resp.json()
print(symbols.get('success'), symbols.get('count'))
JavaScript (fetch)
const response = await fetch(
'https://interestratesapi.com/api/v1/symbols?category=interbank&base=SEK&api_key=YOUR_KEY'
);
const data = await response.json();
console.log(data.success, data.count);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/symbols?category=interbank&base=SEK&api_key=YOUR_KEY';
$data = file_get_contents($url);
$json = json_decode($data, true);
echo ($json['success'] ? 'ok' : 'error') . PHP_EOL;
?>
Latest: get the current STIBOR_3M value
Use the latest endpoint to fetch the current value and effective date. The response includes three maps you should read together: rates (numeric values), dates (effective dates per symbol), and currencies (currency codes per symbol).
Official sample (verbatim)
The following official sample demonstrates the latest endpoint shape. It uses SOFR; copy it verbatim if you need a working smoke test.
cURL (STIBOR_3M)
JSON response
How to read: rates.STIBOR_3M is the annualized percentage. dates.STIBOR_3M is the effective date for that rate in the dataset. currencies provides the associated currency code; use it to avoid mismatches when combining multiple benchmarks.
Python (requests)
import requests
response = requests.get(
'https://interestratesapi.com/api/v1/latest',
params=dict(symbols='STIBOR_3M,ECB_MRO', api_key='YOUR_KEY')
)
data = response.json()
stibor = data['rates']['STIBOR_3M']
stibor_date = data['dates']['STIBOR_3M']
print(f"STIBOR_3M = {stibor}% on {stibor_date}")
JavaScript (fetch)
const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=STIBOR_3M&api_key=YOUR_KEY'
);
const data = await response.json();
const stibor = data.rates['STIBOR_3M'];
const asOf = data.dates['STIBOR_3M'];
console.log(`STIBOR_3M ${stibor}% as of ${asOf}`);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/latest?symbols=STIBOR_3M&api_key=YOUR_KEY';
$json = json_decode(file_get_contents($url), true);
echo 'STIBOR_3M ', $json['rates']['STIBOR_3M'], '% as of ', $json['dates']['STIBOR_3M'], PHP_EOL;
?>
Historical: value of STIBOR_3M on a specific date
Use this to pin a rate on a specific calendar date. For monthly symbols, the API uses the last day with data within that month.
cURL
JSON response
Practical tip: Always use the rate alongside the date you requested so your application records the intended valuation date. If your request date falls in a month with a later fixing date, the value corresponds to the last day with data in that month.
Python (requests)
import requests
params = dict(date='2025-06-15', symbols='STIBOR_3M', api_key='YOUR_KEY')
resp = requests.get('https://interestratesapi.com/api/v1/historical', params=params)
hist = resp.json()
value = hist['rates']['STIBOR_3M']
print('Historical STIBOR_3M:', value)
JavaScript (fetch)
const url = 'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=STIBOR_3M&api_key=YOUR_KEY';
const res = await fetch(url);
const hist = await res.json();
console.log('STIBOR_3M on 2025-06-15:', hist.rates['STIBOR_3M']);
PHP
<?php
$u = 'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=STIBOR_3M&api_key=YOUR_KEY';
$j = json_decode(file_get_contents($u), true);
echo 'Value: ', $j['rates']['STIBOR_3M'], PHP_EOL;
?>
Time series: STIBOR_3M between two dates
Pull a contiguous series for charting and time-based analytics. Use the dates in the nested map to iterate in order.
cURL
JSON response
Key fields: rates.STIBOR_3M is a date-to-value map; frequencies shows the exposure cadence the API returned for this query; currencies shows the associated currency. Iterate the inner dates in ascending order to compute moving averages, duration-weighted values, or visualization points.
Python (requests)
import requests
p = dict(start='2025-10-07', end='2026-10-07', symbols='STIBOR_3M', api_key='YOUR_KEY')
r = requests.get('https://interestratesapi.com/api/v1/timeseries', params=p).json()
series = r['rates']['STIBOR_3M']
dates = sorted(series.keys())
values = [series[d] for d in dates]
print(dates[0], series[dates[0]], '...', dates[-1], series[dates[-1]])
JavaScript (fetch)
const q = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-07&end=2026-10-07&symbols=STIBOR_3M&api_key=YOUR_KEY';
const res = await fetch(q);
const ts = await res.json();
const map = ts.rates['STIBOR_3M'];
const points = Object.keys(map).sort().map(d => ({ date: d, value: map[d] }));
console.log(points.length, 'points');
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-07&end=2026-10-07&symbols=STIBOR_3M&api_key=YOUR_KEY';
$json = json_decode(file_get_contents($url), true);
$series = $json['rates']['STIBOR_3M'];
ksort($series);
foreach ($series as $d => $v) {
echo $d, ',', $v, PHP_EOL;
}
?>
Fluctuation: changes in STIBOR_3M over a period
Compute absolute and percent change, plus high and low across a window. Use this to show “rate change since X” on dashboards or to define thresholds in risk models.
cURL
JSON response
Field notes: change is end_value − start_value in percentage points. change_pct is the percent move relative to start_value. Use high and low to draw a band in charts or to set alerts.
Python (requests)
import requests
params = dict(start='2025-10-07', end='2026-10-07', symbols='STIBOR_3M', api_key='YOUR_KEY')
out = requests.get('https://interestratesapi.com/api/v1/fluctuation', params=params).json()
delta = out['rates']['STIBOR_3M']
print('Change (pp):', delta['change'], 'Change (%):', delta['change_pct'])
JavaScript (fetch)
const url = 'https://interestratesapi.com/api/v1/fluctuation?start=2025-10-07&end=2026-10-07&symbols=STIBOR_3M&api_key=YOUR_KEY';
const res = await fetch(url);
const fx = await res.json();
const stats = fx.rates['STIBOR_3M'];
console.log(stats.start_date, '→', stats.end_date, stats.change, 'pp');
PHP
<?php
$u = 'https://interestratesapi.com/api/v1/fluctuation?start=2025-10-07&end=2026-10-07&symbols=STIBOR_3M&api_key=YOUR_KEY';
$j = json_decode(file_get_contents($u), true);
$s = $j['rates']['STIBOR_3M'];
printf("Δ=%.2f pp; Δ%%=%.2f\n", $s['change'], $s['change_pct']);
?>
OHLC: candlestick-style aggregates for STIBOR_3M
Generate open, high, low, close aggregates over monthly, weekly, or quarterly periods. Useful for visualizations and quick summaries of intra-period movement. The OHLC is computed from daily observations on the fly.
cURL
JSON response
Interpretation: period is the calendar bucket (YYYY-MM for monthly). data_points is the number of underlying observations contributing to the aggregate. Use open and close for month-over-month change charts; use high and low to display ranges.
Python (requests)
import requests
p = dict(symbols='STIBOR_3M', period='monthly', start='2025-10-07', end='2026-10-07', api_key='YOUR_KEY')
r = requests.get('https://interestratesapi.com/api/v1/ohlc', params=p).json()
rows = r['rates']['STIBOR_3M']
for row in rows:
print(row['period'], row['open'], row['high'], row['low'], row['close'], row['data_points'])
JavaScript (fetch)
const u = 'https://interestratesapi.com/api/v1/ohlc?symbols=STIBOR_3M&period=monthly&start=2025-10-07&end=2026-10-07&api_key=YOUR_KEY';
const res = await fetch(u);
const ohlc = await res.json();
const candles = ohlc.rates['STIBOR_3M'];
candles.forEach(c => console.log(c.period, c.open, c.close));
PHP
<?php
$u = 'https://interestratesapi.com/api/v1/ohlc?symbols=STIBOR_3M&period=monthly&start=2025-10-07&end=2026-10-07&api_key=YOUR_KEY';
$j = json_decode(file_get_contents($u), true);
foreach ($j['rates']['STIBOR_3M'] as $row) {
echo $row['period'], ' O:', $row['open'], ' H:', $row['high'], ' L:', $row['low'], ' C:', $row['close'], PHP_EOL;
}
?>
Convert: compare loan interest cost vs. another rate
This endpoint compares the total interest cost of a simple loan priced at the latest value of two symbols. It returns totals and a spread, enabling quick cost comparisons in loan apps or treasury tools. This is also a clean way to compute a rate spread between STIBOR_3M and a reference like ECB_MRO without manually fetching both and subtracting.
cURL
JSON response
Field notes: difference.rate_spread is the simple subtraction of the two latest rates (percentage points). total_interest is computed using a simple loan model at the quoted annual rate over term_months. You can surface these numbers directly in a quote tool. If you need an amortized monthly payment instead, apply your amortization formula to the returned rate (convert percent to decimal) and the requested term; do not assume compounding model beyond what your application requires.
Python (requests)
import requests
params = dict(from='STIBOR_3M', to='ECB_MRO', amount=250000, term_months=24, api_key='YOUR_KEY')
r = requests.get('https://interestratesapi.com/api/v1/convert', params=params).json()
spread = r['difference']['rate_spread']
print('Spread (pp):', spread, 'From total interest:', r['from']['total_interest'])
JavaScript (fetch)
const url = 'https://interestratesapi.com/api/v1/convert?from=STIBOR_3M&to=ECB_MRO&amount=250000&term_months=24&api_key=YOUR_KEY';
const res = await fetch(url);
const cmp = await res.json();
console.log('Rate spread (pp):', cmp.difference.rate_spread);
PHP
<?php
$u = 'https://interestratesapi.com/api/v1/convert?from=STIBOR_3M&to=ECB_MRO&amount=250000&term_months=24&api_key=YOUR_KEY';
$j = json_decode(file_get_contents($u), true);
echo 'From rate=', $j['from']['rate'], ' To rate=', $j['to']['rate'], ' Spread=', $j['difference']['rate_spread'], PHP_EOL;
?>
How to compute spreads and payments from returned values
- Rate spread: if you already fetched two latest values, compute spread_pp = rateA − rateB (in percentage points). The convert endpoint returns difference.rate_spread directly.
- Monthly interest-only payment: payment_io = principal × (annual_rate_percent / 100) ÷ 12. Use this when quoting an interest-only period tied to STIBOR_3M.
- Amortizing payment: use your standard amortization formula with monthly_rate = (annual_rate_percent / 100) ÷ 12, term in months, and principal. Keep rounding consistent with product rules.
- Caching: cache latest for a suitable TTL (e.g., until the next business day or known publication time). For historical and time series, you can cache indefinitely unless backfills are expected.
Error handling, rate limits, and reliability
Plan for standard HTTP status codes and the shared error shape: success=false, error=message string (some 404s also include details). Common statuses include 401 (missing or invalid api_key), 403 (inactive account), 404 (no symbols matched or no data for date/range), 422 (validation, e.g., malformed date), and 429 (quota exhausted). Inspect Retry-After and X-RateLimit-* headers to back off and retry responsibly.
Tips that save time: validate your symbol list with /symbols at startup and pin the exact identifiers (e.g., STIBOR_3M). When requesting monthly series, align your UI grouping to the effective dates returned by the API. Use the currencies map to prevent mixing series with different currencies on one scale. For weekend/holiday behavior, accept that there may be gaps; do not attempt to synthetically fill dates unless your model explicitly calls for carry-forward values.
Explore the API family at interestratesapi.com and the multi-capability overview at MCP. When you are ready to integrate, get your key here: Register.
Real-world uses for STIBOR_3M data
- Loan pricing engines: index a floating-rate mortgage or corporate facility to STIBOR_3M plus a margin; recompute payments when latest changes.
- Treasury dashboards: display the rate, daily/monthly change, and OHLC ranges; set alerts when change exceeds configured thresholds.
- Macro and risk research: pull time series into models estimating sensitivity of SEK credit portfolios; compute drawdowns from fluctuation stats.
- Fintech apps: present cost comparisons against policy benchmarks using /convert to quantify rate spreads for borrowers.
FAQ
How is the STIBOR_3M value expressed?
As a percent per annum. For calculations that require a decimal, divide by 100. For monthly or daily computations, convert to a per-period rate (e.g., divide by 12 for a monthly approximation if that fits your model).
What date should I display in my UI?
Use the date specific to the symbol (from the dates map or per-symbol date field) rather than the top-level date. This ensures your label matches the effective date for STIBOR_3M.
Why are there gaps in the time series?
Interbank benchmarks are not published on weekends and local holidays. Handle missing dates by carrying forward the last value if your application explicitly requires it, or chart only observed dates.
Can I compute the rate spread myself?
Yes. Fetch both symbols with /latest and subtract. Alternatively, use /convert which returns difference.rate_spread directly along with simple loan cost comparisons.
Where do I manage my key and see endpoint capabilities?
Visit Interest Rates API MCP for an overview, and Register for Interest Rates API to obtain a key.
Ship your STIBOR_3M integration now. Review the capabilities at MCP and grab your API key here: Register. If you prefer, you can also Get started with Interest Rates API directly.




