EURIBOR 1-Month Rate Change API

EURIBOR 1-Month Rate Change API

You need to quantify and monitor changes in the EURIBOR 1-Month benchmark inside your software, without hand-maintaining data or scraping. By the end of this guide you’ll query the EURIBOR_1M rate, compute changes over any date range, build time series and OHLC aggregates, and estimate loan interest costs and spreads directly from the Interest Rates API.

What EURIBOR_1M is and how to read it in the API

EURIBOR_1M is the one-month EURIBOR benchmark: the unsecured euro interbank offered rate with a one-month tenor. It’s widely used as a floating-rate index in euro-denominated loans, deposits, commercial paper, and hedging instruments. Inside the API, the symbol for this rate is exactly EURIBOR_1M (category: interbank).

Illustration: EURIBOR 1-Month Rate Change API

In all endpoints, the API returns numeric rate levels as percentage values (for example, 5.33 means 5.33%). You’ll also receive date fields and currency metadata:

  • rates: a map symbol → numeric percentage
  • dates: a map symbol → effective date string (Y-m-d)
  • currencies: a map symbol → currency code (ISO 3-letter)

For “monthly” symbols and point-in-time queries, the historical endpoint selects the last available business day within the month if you request a date inside that month. For range queries, you’ll typically receive a daily sequence of observations covering business days.

All data and examples in this article come from interestratesapi.com. To start calling these endpoints with your own key, use the call to action at the end or simply Get started with Interest Rates API.

Authentication, base URL, and request method

Every request to the Interest Rates API is a GET, against the base URL:

https://interestratesapi.com/api/v1/

Authentication is via the api_key query parameter. Do not send a header- or body-based token. For example:

  • .../latest?symbols=EURIBOR_1M&api_key=YOUR_API_KEY

All examples below use GET and append api_key in the query string. You can explore models and connectors in the MCP, and you can also visit Interest Rates API MCP for an overview.

Discover the EURIBOR_1M symbol with /symbols

Use the catalogue to confirm available symbols or to filter by category, currency, or provider. The EURIBOR_1M symbol is in the interbank category with euro currency. Below is the official format for /symbols (sample from documentation):

curl -s "https://interestratesapi.com/api/v1/latest?api_key=YOUR_API_KEY&symbols=SOFR"
{
"success": true,
"date": "2026-09-30",
"base": "USD",
"rates": {
"SOFR": 3.9
},
"dates": {
"SOFR": "2026-09-30"
},
"currencies": {
"SOFR": "USD"
},
"base_filter_note": null
}

In your application, you can request interbank symbols in EUR to discover EURIBOR maturities, then select EURIBOR_1M.

Python (requests) — symbols

import requests

params = dict(category='interbank', base='EUR', api_key='YOUR_API_KEY')
resp = requests.get('https://interestratesapi.com/api/v1/symbols', params=params)
symbols = resp.json()
print(symbols.get('count'), 'symbols returned')

JavaScript (fetch) — symbols

const url = 'https://interestratesapi.com/api/v1/symbols?category=interbank&base=EUR&api_key=YOUR_API_KEY';
const response = await fetch(url);
const data = await response.json();
console.log(data.count, 'symbols');

PHP — symbols

<?php
$url = 'https://interestratesapi.com/api/v1/symbols?category=interbank&base=EUR&api_key=YOUR_API_KEY';
$json = file_get_contents($url);
$data = json_decode($json, true);
echo $data['count'] . " symbols\n";

Get the latest EURIBOR_1M value with /latest

Pull the most recent effective EURIBOR_1M level. The endpoint can return multiple symbols at once (for example EURIBOR_1M and ECB_MRO for spread monitoring):

Key fields you will read:

  • date: the batch date of this response (Y-m-d)
  • rates[symbol]: the latest percentage value
  • dates[symbol]: the specific effective date of that symbol’s latest observation
  • currencies[symbol]: currency code for the rate

Python (requests) — latest

import requests

response = requests.get(
'https://interestratesapi.com/api/v1/latest',
params=dict(symbols='EURIBOR_1M,ECB_MRO', api_key='YOUR_API_KEY')
)
data = response.json()
euribor = data['rates']['EURIBOR_1M']
euribor_date = data['dates']['EURIBOR_1M']
print('EURIBOR_1M', euribor, 'on', euribor_date)

JavaScript (fetch) — latest

const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=EURIBOR_1M,ECB_MRO&api_key=YOUR_API_KEY'
);
const data = await response.json();
console.log('EURIBOR_1M', data.rates.EURIBOR_1M, 'effective', data.dates.EURIBOR_1M);

PHP — latest

<?php
$url = 'https://interestratesapi.com/api/v1/latest?symbols=EURIBOR_1M,ECB_MRO&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
echo 'EURIBOR_1M ' . $data['rates']['EURIBOR_1M'] . ' on ' . $data['dates']['EURIBOR_1M'] . PHP_EOL;

Official sample block from the docs

The documentation also includes the following canonical latest request/response pair, which you may use to validate your integration flow (note the symbol is SOFR in this one):

Get EURIBOR_1M on a specific date with /historical

Use this endpoint when backtesting or aligning valuations to an accounting date. For monthly symbols, if the date falls within a month, the API returns the last available business day’s value in that month.

Python (requests) — historical

import requests

params = dict(date='2025-06-15', symbols='EURIBOR_1M', api_key='YOUR_API_KEY')
resp = requests.get('https://interestratesapi.com/api/v1/historical', params=params)
data = resp.json()
value = data['rates']['EURIBOR_1M']
print('EURIBOR_1M on', data['date'], '=', value)

JavaScript (fetch) — historical

const url = 'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=EURIBOR_1M&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
console.log('Value:', data.rates.EURIBOR_1M, 'date field:', data.date);

PHP — historical

<?php
$url = 'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=EURIBOR_1M&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
echo 'On ' . $data['date'] . ' EURIBOR_1M was ' . $data['rates']['EURIBOR_1M'] . PHP_EOL;

Build a EURIBOR_1M time series with /timeseries

For charts, VaR windows, and rolling analytics, request a contiguous range. The API returns per-day observations within your range. You specify start and end (inclusive):

Key fields:

  • rates[symbol][date]: daily percentage values in your range
  • frequencies[symbol]: sampling frequency reported by the API (e.g., “daily”)

Python (requests) — timeseries

import requests

params = dict(
start='2025-10-02',
end='2026-10-02',
symbols='EURIBOR_1M',
api_key='YOUR_API_KEY'
)
resp = requests.get('https://interestratesapi.com/api/v1/timeseries', params=params)
ts = resp.json()['rates']['EURIBOR_1M']
for d, v in list(ts.items())[:3]:
print(d, v)

JavaScript (fetch) — timeseries

const url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-02&end=2026-10-02&symbols=EURIBOR_1M&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
const series = data.rates.EURIBOR_1M;
console.log(Object.keys(series).slice(0, 3).map(d => [d, series[d]]));

PHP — timeseries

<?php
$url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-02&end=2026-10-02&symbols=EURIBOR_1M&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
$series = $data['rates']['EURIBOR_1M'];
$first3 = array_slice($series, 0, 3, true);
print_r($first3);

Measure EURIBOR_1M changes with /fluctuation

The fluctuation endpoint gives you range statistics: start/end values, absolute and percent change, high, and low. This is ideal for dashboards that show a “1M change” or “YTD change” badge.

Use change for the absolute move in percentage points and change_pct for percent change relative to the start_value. If start_value is 0, change_pct is null (avoid division by zero in your UI).

Python (requests) — fluctuation

import requests

params = dict(
start='2025-10-02',
end='2026-10-02',
symbols='EURIBOR_1M',
api_key='YOUR_API_KEY'
)
res = requests.get('https://interestratesapi.com/api/v1/fluctuation', params=params).json()
stats = res['rates']['EURIBOR_1M']
print('Δ', stats['change'], '(', stats['change_pct'], '%)', 'High', stats['high'], 'Low', stats['low'])

JavaScript (fetch) — fluctuation

const url = 'https://interestratesapi.com/api/v1/fluctuation?start=2025-10-02&end=2026-10-02&symbols=EURIBOR_1M&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
const s = data.rates.EURIBOR_1M;
console.log(`Change ${s.change} (${s.change_pct}%) range [${s.low}, ${s.high}]`);

PHP — fluctuation

<?php
$url = 'https://interestratesapi.com/api/v1/fluctuation?start=2025-10-02&end=2026-10-02&symbols=EURIBOR_1M&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
$s = $data['rates']['EURIBOR_1M'];
echo "Change {$s['change']} ({$s['change_pct']}%) High {$s['high']} Low {$s['low']}\n";

Aggregate EURIBOR_1M with /ohlc

For charting and quant views, request on-the-fly open-high-low-close aggregates. The API computes OHLC from daily observations, with your desired period (monthly is default):

data_points counts the number of business-day observations rolled up into each OHLC bar. Use open/close for month-over-month moves and high/low for intra-period extremes.

Python (requests) — ohlc

import requests

params = dict(symbols='EURIBOR_1M', period='monthly', start='2025-10-02', end='2026-10-02', api_key='YOUR_API_KEY')
res = requests.get('https://interestratesapi.com/api/v1/ohlc', params=params).json()
bars = res['rates']['EURIBOR_1M']
for bar in bars:
print(bar['period'], bar['open'], bar['close'], bar['data_points'])

JavaScript (fetch) — ohlc

const url = 'https://interestratesapi.com/api/v1/ohlc?symbols=EURIBOR_1M&period=monthly&start=2025-10-02&end=2026-10-02&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
data.rates.EURIBOR_1M.forEach(b => console.log(b.period, b.open, b.close, b.data_points));

PHP — ohlc

<?php
$url = 'https://interestratesapi.com/api/v1/ohlc?symbols=EURIBOR_1M&period=monthly&start=2025-10-02&end=2026-10-02&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
foreach ($data['rates']['EURIBOR_1M'] as $bar) {
echo "{$bar['period']} O={$bar['open']} H={$bar['high']} L={$bar['low']} C={$bar['close']} n={$bar['data_points']}\n";
}

Compare interest costs and spreads with /convert

To compare financing costs linked to different benchmarks, use /convert. It calculates the total interest and total payment for a simple loan given the latest rate of each symbol. This is handy for showing “EURIBOR_1M vs ECB_MRO” spread effects on a sample amount.

How to interpret:

  • from/to.rate: latest percentage values for each symbol
  • total_interest, total_payment: computed from these latest rates for the supplied amount and term
  • difference.rate_spread: simple difference between the two latest rates (percentage points)

Python (requests) — convert

import requests

params = dict(from='EURIBOR_1M', to='ECB_MRO', amount=100000, term_months=12, api_key='YOUR_API_KEY')
res = requests.get('https://interestratesapi.com/api/v1/convert', params=params).json()
print('Spread (pp):', res['difference']['rate_spread'])
print('Interest saved:', res['difference']['interest_saved'])

JavaScript (fetch) — convert

const url = 'https://interestratesapi.com/api/v1/convert?from=EURIBOR_1M&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
console.log('Spread (pp):', data.difference.rate_spread, 'Interest saved:', data.difference.interest_saved);

PHP — convert

<?php
$url = 'https://interestratesapi.com/api/v1/convert?from=EURIBOR_1M&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
echo 'Rate spread: ' . $data['difference']['rate_spread'] . ' Interest saved: ' . $data['difference']['interest_saved'] . PHP_EOL;

Computing a spread or monthly payment from returned values

  • Spread: If you fetch both EURIBOR_1M and ECB_MRO via /latest, spread_pp = rates["EURIBOR_1M"] − rates["ECB_MRO"]. This is a percentage-point difference.
  • Monthly payment: For a simple-interest estimate on amount A over T months at annual rate r% from /latest, total_interest ≈ A × (r/100) × (T/12), and monthly_payment ≈ (A + total_interest) / T. Use /convert for a ready-made comparison without implementing math client-side.

Operational notes that save time in production

Effective dates and business days:

  • The dates map returns the specific effective date for each symbol. Always display this next to the value to avoid confusion in dashboards and emails.
  • For monthly symbols queried via /historical, the API returns the last day with data in that month when the requested date falls within that month.
  • Time series are returned across business days; weekends and holidays may have no new value and will not create duplicate entries unless the benchmark itself publishes identical consecutive values across days.

Caching and refresh cadence:

  • Cache /latest and /fluctuation responses in your app layer to avoid hitting rate limits; revalidate on a schedule aligned to publication cadence for interbank benchmarks (e.g., once daily on business days).
  • When “date” or “dates[symbol]” changes, invalidate dependent views. Cache OHLC less frequently than raw timeseries if your charts can be computed client-side.

Error handling and limits:

  • 401/403 indicate auth or plan state issues; surface a clear message to operators and halt retries.
  • 404 can mean no symbols matched or no data in range; if “details” are present, bubble them up for diagnostics.
  • 422 signals input validation errors (e.g., date format); ensure Y-m-d and exact symbol names like EURIBOR_1M.
  • 429 includes Retry-After and X-RateLimit-* headers; back off based on Retry-After and re-queue tasks.

Headers you may inspect for rate limiting:

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset

Only use the documented base URL and GET requests with api_key query parameter. Do not send POST/PUT/DELETE; they are not supported. For broader context and tooling, see interestratesapi.com and the MCP.

End-to-end examples you can copy into your stack

Below are minimal snippets you can drop into a jobs pipeline or a microservice to keep EURIBOR_1M in sync.

cURL — one-liners for ops

  • Latest EURIBOR_1M:
  • Fluctuation YTD (example dates):

Python — scheduled sync

import os, json, requests, datetime as dt

API = 'https://interestratesapi.com/api/v1'
KEY = os.environ.get('IR_API_KEY', 'YOUR_API_KEY')

def latest_euribor_1m():
r = requests.get(f'{API}/latest', params={'symbols':'EURIBOR_1M', 'api_key':KEY}).json()
return r['dates']['EURIBOR_1M'], r['rates']['EURIBOR_1M']

def range_stats(start, end):
r = requests.get(f'{API}/fluctuation', params={'start':start, 'end':end, 'symbols':'EURIBOR_1M', 'api_key':KEY}).json()
return r['rates']['EURIBOR_1M']

d, v = latest_euribor_1m()
print('EURIBOR_1M', v, 'as of', d)
stats = range_stats('2025-10-02', '2026-10-02')
print(json.dumps(stats, indent=2))

JavaScript — dashboard widget

async function euriborWidget() {
const url = 'https://interestratesapi.com/api/v1/latest?symbols=EURIBOR_1M&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
const v = data.rates.EURIBOR_1M;
const d = data.dates.EURIBOR_1M;
document.querySelector('#euribor1m').textContent = `${v}% (as of ${d})`;
}
euriborWidget();

PHP — simple comparator

<?php
$base = 'https://interestratesapi.com/api/v1';
$key = 'YOUR_API_KEY';

function latest($symbols, $key, $base) {
$url = $base . '/latest?symbols=' . urlencode($symbols) . '&api_key=' . urlencode($key);
return json_decode(file_get_contents($url), true);
}

$data = latest('EURIBOR_1M,ECB_MRO', $key, $base);
$spread = $data['rates']['EURIBOR_1M'] - $data['rates']['ECB_MRO'];
echo "Spread (EURIBOR_1M - ECB_MRO): {$spread} pp\n";

Where EURIBOR_1M change data fits in your stack

  • Interest rate dashboards: Daily tiles showing the latest EURIBOR_1M with a 1D/1W/1M change via /fluctuation.
  • Loan and mortgage platforms: Compute loan interest comparisons or display an index-linked APR component using /latest and /convert.
  • Treasury ALM and hedging: Pull time series windows for rolling DV01 estimates and stress views via /timeseries and OHLC for monthly summaries.
  • Macro and quant research: Align snapshots to month-end or quarter-end valuations with /historical and build event studies over date bands using /fluctuation.

For integration details and available models, visit interestratesapi.com and the Interest Rates API MCP. To get a key and start building, you can Register for Interest Rates API now or Get started with Interest Rates API.

FAQ

Q1: How often is EURIBOR_1M updated in the API?
A: Use /latest and inspect the dates map to know the effective date of the most recent observation. For historical alignment within a month, /historical returns the last day with data in that month when requested inside that month. For continuous analytics, /timeseries provides daily observations over business days in your range.

Q2: What unit is the rate in?
A: Numeric values are percentages. For example, 5.33 means 5.33%. When computing spreads, subtract the two percentage values to get percentage points. For interest calculations, convert to a fraction via r/100.

Q3: How do I handle missing data or holidays?
A: If a day has no new observation, it won’t appear as a separate entry in /timeseries. Use /historical for month-end alignment, and when charting, avoid forward-filling unless that matches your methodology.

Q4: How do I avoid rate limit issues?
A: Cache results and reuse them across widgets. Respect 429 Retry-After and the X-RateLimit-* headers. Batch symbols in a single request (e.g., EURIBOR_1M and ECB_MRO together) where possible.

Q5: Can I compute a monthly payment directly from this API?
A: Yes. For a simple-interest approximation, use total_interest ≈ amount × (rate/100) × (term_months/12), then monthly_payment ≈ (amount + total_interest)/term_months. If you need a quick two-rate comparison, /convert returns total_interest and total_payment for both symbols and the rate_spread.

Build your EURIBOR_1M integrations now. Grab your key and ship a reliable rate pipeline with these endpoints: Register and explore connectors in the MCP. For more details, visit interestratesapi.com.

Ready to get started?

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

Get API Key

Related posts