Developer Reference

API Documentation

Complete reference for the Interest Rates API — central bank rates, interbank benchmarks, and treasury yields.

Sections

Introduction

Rates API aggregates interest-rate data from official sources — the Federal Reserve (FRED), European Central Bank, and Bank for International Settlements (BIS) — and normalizes it under a single REST interface. Instead of parsing institution-specific formats and schedules, you query one consistent schema with predictable symbols and response structures.

The API covers four rate categories: central bank policy rates (50+ countries, including Fed Funds, ECB MRO, BoE Bank Rate, SELIC, TIIE, PBOC LPR, and 40+ more), interbank benchmarks (SOFR, SONIA, €STR, TONAR, EURIBOR 1W/1M/3M/6M/12M, STIBOR, NIBOR, CIBOR, WIBOR, PRIBOR, MIBOR), treasury yields (US 2Y, 5Y, 10Y, 30Y), and reference rates (Prime Rate, 30Y Mortgage). All endpoints return JSON.

Data update frequency follows each institution's own publication schedule: SOFR and US Treasuries update daily, ECB policy rates and EURIBOR averages update monthly. The dates field in every response tells you the exact observation date per symbol.

Base URL

https://interestratesapi.com/api/v1

Authentication

All requests must include your API key using the api_key query parameter.

Replace YOUR_API_KEY with your actual key from your dashboard.

Try in your browser

https://interestratesapi.com/api/v1/latest?symbols=FED_FUNDS,SOFR&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/latest \
  --data-urlencode "symbols=FED_FUNDS,SOFR" \
  --data-urlencode "api_key=YOUR_API_KEY"

Keep your API key secret. Never expose it in client-side JavaScript or public repositories. If a key is compromised, rotate it immediately from the dashboard.

Symbol Model

Every rate is identified by a normalized symbol — a stable string like FED_FUNDS or EURIBOR_3M. Symbols are grouped into four categories:

Central Bank category=central_bank

Policy rates set by central banks globally. Examples: FED_FUNDS, ECB_MRO, ECB_DEPOSIT, BOE_BANK_RATE, BOJ_POLICY_RATE, SELIC, BANXICO_RATE, PBOC_LPR_1Y, RBI_REPO_RATE, SNB_POLICY_RATE, RBA_CASH_RATE, and 40+ more.

Interbank category=interbank

Overnight and term benchmarks. Examples: SOFR, SONIA, ESTR, TONAR, EURIBOR_1W, EURIBOR_1M, EURIBOR_3M, EURIBOR_6M, EURIBOR_12M, STIBOR, NIBOR, CIBOR, WIBOR, PRIBOR, MIBOR.

Treasury category=treasury

Sovereign yield curve tenors. Examples: US_TREASURY_2Y, US_TREASURY_5Y, US_TREASURY_10Y, US_TREASURY_30Y.

Reference category=reference

Derived or composite rates. Examples: PRIME_RATE (3 pp above Fed Funds target), MORTGAGE_30Y (Freddie Mac Primary Mortgage Market Survey).

Use GET /symbols to list all active symbols with metadata. Pass category or base to filter. The base parameter filters by currency code (e.g. base=EUR returns all EUR-denominated rates), not FX conversion.

Validation note: if base does not match a supported active currency code, the API returns 422.

GET /symbols

Discover all available rate symbols with their metadata. Use this endpoint to build dynamic symbol pickers or validate that a symbol exists before querying other endpoints.

Parameters

Param Type Required Description
basestring (3)optionalFilter rates by currency code. Must be a supported active currency code; otherwise returns 422.
categorystringoptionalOne of: central_bank, interbank, treasury, reference. Invalid values return 422 including the allowed list.
providerstringoptionalOne of: fred, ecb, bis. Invalid values return 422 including the allowed list.

Example request

Try in your browser

https://interestratesapi.com/api/v1/symbols?category=interbank&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/symbols \
  --data-urlencode "category=interbank" \
  --data-urlencode "api_key=YOUR_API_KEY"

Response

{
  "success": true,
  "count": 6,
  "symbols": [
    {
      "symbol":        "EURIBOR_1M",
      "name":          "EURIBOR 1-Month",
      "category":      "interbank",
      "country_code":  "EU",
      "currency_code": "EUR",
      "frequency":     "monthly",
      "description":   "Euro Interbank Offered Rate, 1-month tenor. Monthly average published by the ECB."
    },
    {
      "symbol":        "SOFR",
      "name":          "Secured Overnight Financing Rate",
      "category":      "interbank",
      "country_code":  "US",
      "currency_code": "USD",
      "frequency":     "daily",
      "description":   "Volume-weighted median of overnight Treasury repo transactions. Published daily by NY Fed."
    }
    // ... more symbols
  ]
}
GET /latest

Returns the most recent available value for each requested symbol.

Parameters

Param Type Required Description
symbolsstringrequiredComma-separated symbol names. E.g. FED_FUNDS,SOFR,ECB_MRO.
basestring (3)optionalFilter by currency code. Must be a supported active currency code; otherwise returns 422.
categorystringoptionalFilter by category. One of: central_bank, interbank, treasury, reference.

Example request

Try in your browser

https://interestratesapi.com/api/v1/latest?symbols=FED_FUNDS,SOFR,ECB_MRO,SONIA&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/latest \
  --data-urlencode "symbols=FED_FUNDS,SOFR,ECB_MRO,SONIA" \
  --data-urlencode "api_key=YOUR_API_KEY"

Response

{
  "success": true,
  "date":    "2026-04-20",
  "base":    "MIXED",
  "rates": {
    "FED_FUNDS": 4.33,
    "SOFR":      4.31,
    "ECB_MRO":   2.65,
    "SONIA":     4.70
  },
  "dates": {
    "FED_FUNDS": "2026-04-20",
    "SOFR":      "2026-04-19",
    "ECB_MRO":   "2026-03-31",
    "SONIA":     "2026-04-20"
  },
  "currencies": {
    "FED_FUNDS": "USD",
    "SOFR": "USD",
    "ECB_MRO": "EUR",
    "SONIA": "GBP"
  }
}
Important: if you pass base, symbols with a different currency code are excluded. For example, with base=USD, EUR/GBP symbols like ECB_MRO or SONIA will not be returned.
The top-level date is the most recent date across all returned rates. Use the dates object to see the exact observation date per symbol — daily rates (SOFR, SONIA) and monthly rates (ECB, BIS) will naturally differ.
GET /historical

Returns values for all requested symbols on a specific date. Monthly-frequency symbols (ECB, BIS) are stored on the last day of the month — query any day in that month to retrieve the monthly value.

Parameters

Param Type Required Description
datedate (YYYY-MM-DD)requiredThe date to query.
symbolsstringrequiredComma-separated symbol names.
basestring (3)optionalFilter rates by currency code. Must be a supported active currency code; otherwise returns 422.

Example request

Try in your browser

https://interestratesapi.com/api/v1/historical?date=2025-09-15&symbols=FED_FUNDS,EURIBOR_3M&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/historical \
  --data-urlencode "date=2025-09-15" \
  --data-urlencode "symbols=FED_FUNDS,EURIBOR_3M" \
  --data-urlencode "api_key=YOUR_API_KEY"

Response

{
  "success": true,
  "date":    "2025-09-15",
  "base":    "MIXED",
  "rates": {
    "FED_FUNDS":   5.33,
    "EURIBOR_3M":  3.52
  },
  "currencies": {
    "FED_FUNDS": "USD",
    "EURIBOR_3M": "EUR"
  }
}
Frequency note: some symbols are monthly and others are daily. FED_FUNDS is monthly average; if you need daily Fed series use FED_FUNDS_DAILY. This is why one symbol can have fewer data points than another in the same range.
GET /timeseries

Returns all observations for the requested symbols between start and end, keyed by date. Ideal for charting and trend analysis.

Parameters

Param Type Required Description
startdate (YYYY-MM-DD)requiredStart date (inclusive).
enddate (YYYY-MM-DD)requiredEnd date (inclusive). Must be ≥ start.
symbolsstringrequiredComma-separated symbol names.
basestring (3)optionalFilter rates by currency code. Must be a supported active currency code; otherwise returns 422.

Example request

Try in your browser

https://interestratesapi.com/api/v1/timeseries?start=2025-01-01&end=2025-03-31&symbols=FED_FUNDS,SOFR&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/timeseries \
  --data-urlencode "start=2025-01-01" \
  --data-urlencode "end=2025-03-31" \
  --data-urlencode "symbols=FED_FUNDS,SOFR" \
  --data-urlencode "api_key=YOUR_API_KEY"

Response

{
  "success":    true,
  "base":       "MIXED",
  "start_date": "2025-01-01",
  "end_date":   "2025-03-31",
  "rates": {
    "FED_FUNDS": {
      "2025-01-31": 4.33,
      "2025-02-28": 4.33,
      "2025-03-31": 4.33
    },
    "SOFR": {
      "2025-01-02": 4.30,
      "2025-01-03": 4.31,
      "2025-01-06": 4.31
      // ... daily observations
    }
  },
  "frequencies": {
    "FED_FUNDS": "monthly",
    "SOFR": "daily"
  },
  "currencies": {
    "FED_FUNDS": "USD",
    "SOFR": "USD"
  }
}
GET /fluctuation

Returns the start value, end value, absolute change, and percentage change for each symbol over the requested period. Calculations use the first and last available observations inside the requested range (not synthetic values for missing days).

Parameters

Param Type Required Description
startdate (YYYY-MM-DD)requiredStart date of the period.
enddate (YYYY-MM-DD)requiredEnd date of the period.
symbolsstringrequiredComma-separated symbol names.
basestring (3)optionalFilter rates by currency code. Must be a supported active currency code; otherwise returns 422.

Example request

Try in your browser

https://interestratesapi.com/api/v1/fluctuation?start=2025-01-01&end=2026-01-01&symbols=SOFR,SONIA&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/fluctuation \
  --data-urlencode "start=2025-01-01" \
  --data-urlencode "end=2026-01-01" \
  --data-urlencode "symbols=SOFR,SONIA" \
  --data-urlencode "api_key=YOUR_API_KEY"

Response

{
  "success":    true,
  "base":       "USD",
  "start_date": "2025-01-01",
  "end_date":   "2026-01-01",
  "rates": {
    "SOFR": {
      "requested_start_date": "2025-01-01",
      "requested_end_date": "2026-01-01",
      "start_date": "2025-01-02",
      "end_date": "2025-12-31",
      "start_value": 4.30,
      "end_value":   4.31,
      "change":      0.01,
      "change_pct":  0.2326
    },
    "SONIA": {
      "requested_start_date": "2025-01-01",
      "requested_end_date": "2026-01-01",
      "start_date": "2025-01-02",
      "end_date": "2025-12-31",
      "start_value": 4.70,
      "end_value":   4.45,
      "change":      -0.25,
      "change_pct":  -5.3191
    }
  }
}
Date alignment note: if your requested boundary falls on a non-publishing day (holiday/weekend/provider gap), start_date and end_date may differ from the requested dates. Use requested_start_date and requested_end_date to see the original input.
Why this happens: providers do not publish every calendar day. Most series are business-day only (no weekends/holidays), and some symbols are monthly or weekly by definition. The endpoint therefore computes fluctuation from the first and last available observations inside the requested window.
GET /ohlc

Returns open/high/low/close aggregates for each symbol over weekly, monthly, or quarterly periods. Designed for charting libraries and volatility analysis dashboards.

Parameters

Param Type Required Description
symbolsstringrequiredComma-separated symbol names.
periodstringoptionalOne of: weekly, monthly (default), quarterly.
startdate (YYYY-MM-DD)optionalStart date. Defaults to 1 year ago.
enddate (YYYY-MM-DD)optionalEnd date. Defaults to today.
basestring (3)optionalFilter rates by currency code. Must be a supported active currency code; otherwise returns 422.

Example request

Try in your browser

https://interestratesapi.com/api/v1/ohlc?symbols=SOFR&period=monthly&start=2025-01-01&end=2025-06-30&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/ohlc \
  --data-urlencode "symbols=SOFR" \
  --data-urlencode "period=monthly" \
  --data-urlencode "start=2025-01-01" \
  --data-urlencode "end=2025-06-30" \
  --data-urlencode "api_key=YOUR_API_KEY"

Response

{
  "success":    true,
  "period":     "monthly",
  "start_date": "2025-01-01",
  "end_date":   "2025-06-30",
  "rates": {
    "SOFR": [
      {
        "period":      "2025-01",
        "open":        4.30,
        "high":        4.34,
        "low":         4.28,
        "close":       4.31,
        "data_points": 22
      },
      {
        "period":      "2025-02",
        "open":        4.31,
        "high":        4.35,
        "low":         4.29,
        "close":       4.33,
        "data_points": 20
      }
      // ... more periods
    ]
  }
}
GET /convert

Compares the total interest cost of a loan amount under two different rate symbols. Given a principal and term, returns the total interest and payment for each rate, plus the spread and interest savings between them.

Use cases: SOFR vs EURIBOR loan comparison, fixed vs floating rate analysis, cross-border lending cost benchmarking.

Parameters

Param Type Required Description
fromstringrequiredThe base rate symbol (e.g. SOFR).
tostringrequiredThe comparison rate symbol (e.g. EURIBOR_3M).
amountnumericrequiredLoan principal amount.
term_monthsintegeroptionalLoan term in months. Min 1, max 360. Defaults to 12.

Example request

Try in your browser

https://interestratesapi.com/api/v1/convert?from=SOFR&to=EURIBOR_3M&amount=500000&term_months=24&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/convert \
  --data-urlencode "from=SOFR" \
  --data-urlencode "to=EURIBOR_3M" \
  --data-urlencode "amount=500000" \
  --data-urlencode "term_months=24" \
  --data-urlencode "api_key=YOUR_API_KEY"

Response

{
  "success":     true,
  "amount":      500000,
  "term_months": 24,
  "from": {
    "symbol":         "SOFR",
    "rate":           4.31,
    "date":           "2026-04-19",
    "total_interest": 43100.00,
    "total_payment":  543100.00
  },
  "to": {
    "symbol":         "EURIBOR_3M",
    "rate":           2.41,
    "date":           "2026-03-31",
    "total_interest": 24100.00,
    "total_payment":  524100.00
  },
  "difference": {
    "rate_spread":    1.9,
    "interest_saved": 19000.00
  }
}

Error Codes

All errors return a consistent JSON payload with success: false and a human-readable error message.

{
  "success": false,
  "error": "No symbols matched the requested base currency (USD). Requested symbol currencies: BANXICO_RATE=MXN."
}
HTTP Code Meaning Common cause
401UnauthorizedMissing or invalid api_key query parameter.
404Not FoundNo data found for the given symbols or date.
422Validation ErrorMissing required parameter, invalid date format, or unsupported value (e.g. unknown category).
429Too Many RequestsPer-minute rate limit exceeded. Back off and retry after a few seconds.

Rate Limits & Quotas

Each plan has a monthly request quota and a per-minute rate limit. Both are enforced independently. Quota resets on the 1st of each month. Monitor usage in real time from your dashboard.

Plan Requests / month Requests / minute
Starter 250 60
Professional 750 120
Business 4,000 240

• When the per-minute limit is exceeded the API returns HTTP 429. Implement exponential back-off in your client.

• When the monthly quota is exhausted the API returns HTTP 429 until the quota resets or you upgrade your plan.

• Use the symbols parameter to request only what you need — this is the most effective way to reduce quota consumption.

• Need more than 4,000 requests/month? Contact us for a custom plan.

Ready to start building?

Get your API key, make your first request in under 2 minutes, and start shipping interest-rate features today.