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. Most endpoints include a dates field with the exact observation date per symbol — the exception is ohlc, which groups values into candles by period instead of a single date.

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=SOFR&api_key=YOUR_API_KEY

Example using cURL

curl -G https://interestratesapi.com/api/v1/latest \
  --data-urlencode "symbols=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=SOFR&api_key=YOUR_API_KEY

Example using cURL

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

Shown with 1 symbol (Starter limit). Professional and above allow multiple comma-separated symbols per request, e.g. FED_FUNDS,SOFR,ECB_MRO,SONIA.

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. For monthly-frequency symbols, query any day in that month to retrieve the monthly value — the dates field in the response tells you the actual stored observation date, which varies by source: FRED (e.g. FED_FUNDS) stores the first day of the month, while ECB and BIS symbols store the last day.

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.
nearestbooleanoptionalIf true, daily symbols with no publication on date (weekend/holiday) fall back to the closest available observation on or before it instead of returning 404.

Example request

Try in your browser

https://interestratesapi.com/api/v1/historical?date=2025-09-15&symbols=FED_FUNDS&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" \
  --data-urlencode "api_key=YOUR_API_KEY"

Response

{
  "success": true,
  "date":    "2025-09-15",
  "base":    "USD",
  "rates": {
    "FED_FUNDS": 5.33
  },
  "dates": {
    "FED_FUNDS": "2025-09-01"
  },
  "currencies": {
    "FED_FUNDS": "USD"
  }
}
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.
Weekends and holidays: daily symbols only publish on business days. By default, querying a weekend/holiday date returns 404 with the nearest available dates in details. Pass nearest=true to get the closest observation on or before the requested date instead.
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=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=SOFR" \
  --data-urlencode "api_key=YOUR_API_KEY"

Shown with 1 symbol and an 89-day range (Starter limits: 1 symbol, 90 days max). Professional and above allow more symbols and up to 365 days.

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=2025-03-31&symbols=SOFR&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=2025-03-31" \
  --data-urlencode "symbols=SOFR" \
  --data-urlencode "api_key=YOUR_API_KEY"

Shown with 1 symbol and an 89-day range (Starter limits: 1 symbol, 90 days max). Professional and above allow more symbols and up to 365 days.

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-03-31&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-03-31" \
  --data-urlencode "api_key=YOUR_API_KEY"

Shown with an 89-day range (Starter limit: 90 days max). Professional and above allow up to 365 days.

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 Symbols / request Max date range
Starter 250 60 1 90 days
Professional 750 120 5 180 days
Business 4,000 240 10 365 days

• 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.

• Requesting more symbols than your plan's Symbols / request limit, or a date range longer than Max date range, returns HTTP 422.

• 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.