[Enhancement] Fixed Income Enhancements (#6490)

* improve effr and move sofr to fixedincome.rate

* federal_reserve default start date

* fred cassette

* commercial paper

* cp series map

* update sofr and add federal_reserve to endpoint

* examples

* update ameribor

* maturity_dict

* add overnight bank funding rate

* add federal reserve to obfr

* pop footnoteId

* central bank holdings descriptions

* move moody's bond indices to the bond_indices endpoint

* add it to the INDEX_CHOICES

* improve hqm

* handle none

* add treasury minus fed funds to yield curve

* static assets

* estr

* description

* missed file in commit

* second return statement
This commit is contained in:
Danglewood
2024-06-18 13:42:55 -07:00
committed by GitHub
parent d465f22fbd
commit 1a990ba7f0
62 changed files with 7508 additions and 3431 deletions

View File

@@ -13,7 +13,7 @@ from openbb_core.provider.utils.descriptions import (
)
class AMERIBORQueryParams(QueryParams):
class AmeriborQueryParams(QueryParams):
"""AMERIBOR Query."""
start_date: Optional[dateType] = Field(
@@ -26,8 +26,19 @@ class AMERIBORQueryParams(QueryParams):
)
class AMERIBORData(Data):
class AmeriborData(Data):
"""AMERIBOR Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: Optional[float] = Field(description="AMERIBOR rate.")
symbol: Optional[str] = Field(
default=None, description=DATA_DESCRIPTIONS.get("symbol", "")
)
maturity: str = Field(description="Maturity length of the item.")
rate: float = Field(
description="Interest rate.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
title: Optional[str] = Field(
default=None,
description="Title of the series.",
)

View File

@@ -3,9 +3,9 @@
from datetime import (
date as dateType,
)
from typing import Literal, Optional
from typing import Optional
from pydantic import Field, field_validator
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
@@ -26,28 +26,21 @@ class CommercialPaperParams(QueryParams):
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
maturity: Literal["overnight", "7d", "15d", "30d", "60d", "90d"] = Field(
default="30d",
description="The maturity.",
)
category: Literal["asset_backed", "financial", "nonfinancial"] = Field(
default="financial",
description="The category.",
)
grade: Literal["aa", "a2_p2"] = Field(
default="aa",
description="The grade.",
)
@field_validator("maturity", "category", "grade", mode="before", check_fields=False)
@classmethod
def to_lower(cls, v: Optional[str]) -> Optional[str]:
"""Convert field to lowercase."""
return v.lower() if v else v
class CommercialPaperData(Data):
"""Commercial Paper Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: Optional[float] = Field(description="Commercial Paper Rate.")
symbol: Optional[str] = Field(
default=None, description=DATA_DESCRIPTIONS.get("symbol", "")
)
maturity: str = Field(description="Maturity length of the item.")
rate: float = Field(
description="Interest rate.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
title: Optional[str] = Field(
default=None,
description="Title of the series.",
)

View File

@@ -1,33 +0,0 @@
"""ESTR Standard Model."""
from datetime import date as dateType
from typing import Optional
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)
class ESTRQueryParams(QueryParams):
"""ESTR Query."""
start_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("start_date", ""),
)
end_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
class ESTRData(Data):
"""ESTR Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: Optional[float] = Field(description="ESTR rate.")

View File

@@ -0,0 +1,67 @@
"""Euro Short Term Rate Standard Model."""
from datetime import date as dateType
from typing import Optional
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)
class EuroShortTermRateQueryParams(QueryParams):
"""Euro Short Term Rate Query."""
start_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("start_date", ""),
)
end_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
class EuroShortTermRateData(Data):
"""Euro Short Term Rate Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: float = Field(
description="Volume-weighted trimmed mean rate.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_25: Optional[float] = Field(
default=None,
description="Rate at 25th percentile of volume.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_75: Optional[float] = Field(
default=None,
description="Rate at 75th percentile of volume.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
volume: Optional[float] = Field(
default=None,
description=DATA_DESCRIPTIONS.get("volume", "")+ " (Millions of €EUR).",
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1e6,
},
)
transactions: Optional[int] = Field(
default=None,
description="Number of transactions.",
)
number_of_banks: Optional[int] = Field(
default=None,
description="Number of active banks.",
)
large_bank_share_of_volume: Optional[float] = Field(
default=None,
description="The percent of volume attributable to the 5 largest active banks.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)

View File

@@ -1,33 +0,0 @@
"""FED Standard Model."""
from datetime import date as dateType
from typing import Optional
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)
class FEDQueryParams(QueryParams):
"""FED Query."""
start_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("start_date", ""),
)
end_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
class FEDData(Data):
"""FED Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: Optional[float] = Field(description="FED rate.")

View File

@@ -0,0 +1,75 @@
"""Federal Funds Rate Standard Model."""
from datetime import date as dateType
from typing import Optional
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)
class FederalFundsRateQueryParams(QueryParams):
"""Federal Funds Rate Query."""
start_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("start_date", ""),
)
end_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
class FederalFundsRateData(Data):
"""Federal Funds Rate Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: float = Field(
description="Effective federal funds rate.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
target_range_upper: Optional[float] = Field(
default=None,
description="Upper bound of the target range.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
target_range_lower: Optional[float] = Field(
default=None,
description="Lower bound of the target range.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_1: Optional[float] = Field(
default=None,
description="1st percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_25: Optional[float] = Field(
default=None,
description="25th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_75: Optional[float] = Field(
default=None,
description="75th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_99: Optional[float] = Field(
default=None,
description="99th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
volume: Optional[float] = Field(
default=None,
description=DATA_DESCRIPTIONS.get("volume", "")
+ "The notional volume of transactions (Billions of $).",
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1e9,
},
)

View File

@@ -3,9 +3,9 @@
from datetime import (
date as dateType,
)
from typing import Literal, Optional
from typing import Optional, Union
from pydantic import Field, field_validator
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
@@ -18,26 +18,18 @@ from openbb_core.provider.utils.descriptions import (
class HighQualityMarketCorporateBondQueryParams(QueryParams):
"""High Quality Market Corporate Bond Query."""
date: Optional[dateType] = Field(
date: Optional[Union[dateType, str]] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("date", ""),
)
yield_curve: Literal["spot", "par"] = Field(
default="spot",
description="The yield curve type.",
)
@field_validator("yield_curve", mode="before", check_fields=False)
@classmethod
def to_lower(cls, v: Optional[str]) -> Optional[str]:
"""Convert field to lowercase."""
return v.lower() if v else v
class HighQualityMarketCorporateBondData(Data):
"""High Quality Market Corporate Bond Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: Optional[float] = Field(description="HighQualityMarketCorporateBond Rate.")
rate: float = Field(
description="Interest rate.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
maturity: str = Field(description="Maturity.")
yield_curve: Literal["spot", "par"] = Field(description="The yield curve type.")

View File

@@ -0,0 +1,65 @@
"""Overnight Bank Funding Rate Standard Model."""
from datetime import date as dateType
from typing import Optional
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)
class OvernightBankFundingRateQueryParams(QueryParams):
"""Overnight Bank Funding Rate Query."""
start_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("start_date", ""),
)
end_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
class OvernightBankFundingRateData(Data):
"""Overnight Bank Funding Rate Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: float = Field(
description="Overnight Bank Funding Rate.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_1: Optional[float] = Field(
default=None,
description="1st percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_25: Optional[float] = Field(
default=None,
description="25th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_75: Optional[float] = Field(
default=None,
description="75th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_99: Optional[float] = Field(
default=None,
description="99th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
volume: Optional[float] = Field(
default=None,
description=DATA_DESCRIPTIONS.get("volume", "")
+ "The notional volume of transactions (Billions of $).",
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1e9,
},
)

View File

@@ -0,0 +1,65 @@
"""Secured Overnight Financing Rate Standard Model."""
from datetime import date as dateType
from typing import Optional
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)
class SOFRQueryParams(QueryParams):
"""Secured Overnight Financing Rate Query."""
start_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("start_date", ""),
)
end_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
class SOFRData(Data):
"""SOFR Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: float = Field(
description="Effective federal funds rate.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_1: Optional[float] = Field(
default=None,
description="1st percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_25: Optional[float] = Field(
default=None,
description="25th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_75: Optional[float] = Field(
default=None,
description="75th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
percentile_99: Optional[float] = Field(
default=None,
description="99th percentile of the distribution.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
volume: Optional[float] = Field(
default=None,
description=DATA_DESCRIPTIONS.get("volume", "")
+ "The notional volume of transactions (Billions of $).",
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1e9,
},
)

View File

@@ -1,33 +0,0 @@
"""SOFR Standard Model."""
from datetime import date as dateType
from typing import Optional
from pydantic import Field
from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)
class SOFRQueryParams(QueryParams):
"""SOFR Query."""
start_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("start_date", ""),
)
end_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
class SOFRData(Data):
"""SOFR Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
rate: Optional[float] = Field(description="SOFR rate.")

View File

@@ -60,10 +60,18 @@ def test_fixedincome_government_us_yield_curve(params, headers):
@parametrize(
"params",
[
({"start_date": "2023-01-01", "end_date": "2023-06-06"}),
(
{
"period": "overnight",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"provider": "federal_reserve",
}
),
(
{
"frequency": None,
"transform": None,
"aggregation_method": None,
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
@@ -86,10 +94,18 @@ def test_fixedincome_sofr(params, headers):
@parametrize(
"params",
[
({"start_date": "2023-01-01", "end_date": "2023-06-06"}),
(
{
"parameter": "volume_weighted_trimmed_mean_rate",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"provider": "federal_reserve",
}
),
(
{
"frequency": None,
"transform": None,
"aggregation_method": None,
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
@@ -98,6 +114,33 @@ def test_fixedincome_sofr(params, headers):
],
)
@pytest.mark.integration
def test_fixedincome_rate_sofr(params, headers):
"""Test the SOFR endpoint."""
params = {p: v for p, v in params.items() if v}
query_str = get_querystring(params, [])
url = f"http://0.0.0.0:8000/api/v1/fixedincome/rate/sofr?{query_str}"
result = requests.get(url, headers=headers, timeout=10)
assert isinstance(result, requests.Response)
assert result.status_code == 200
@parametrize(
"params",
[
(
{
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"transform": None,
"aggregation_method": None,
"frequency": None,
}
),
],
)
@pytest.mark.integration
def test_fixedincome_rate_estr(params, headers):
"""Test the ESTR rate endpoint."""
params = {p: v for p, v in params.items() if v}
@@ -138,13 +181,15 @@ def test_fixedincome_rate_sonia(params, headers):
@parametrize(
"params",
[
({"start_date": "2023-01-01", "end_date": "2023-06-06"}),
(
{
"parameter": "overnight",
"maturity": "overnight",
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"transform": None,
"aggregation_method": None,
"frequency": None,
}
),
],
@@ -166,7 +211,10 @@ def test_fixedincome_rate_ameribor(params, headers):
[
(
{
"parameter": "weekly",
"frequency": "w",
"transform": None,
"aggregation_method": "avg",
"effr_only": False,
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
@@ -328,9 +376,11 @@ def test_fixedincome_corporate_moody(params, headers):
{
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"maturity": "30d",
"maturity": "overnight",
"category": "financial",
"grade": "aa",
"transform": None,
"aggregation_method": None,
"frequency": None,
"provider": "fred",
}
)
@@ -720,3 +770,37 @@ def test_fixedincome_mortgage_indices(params, headers):
result = requests.get(url, headers=headers, timeout=10)
assert isinstance(result, requests.Response)
assert result.status_code == 200
@parametrize(
"params",
[
(
{
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"transform": None,
"aggregation_method": None,
"frequency": None,
"provider": "fred",
}
),
(
{
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"provider": "federal_reserve",
}
),
],
)
@pytest.mark.integration
def test_fixedincome_rate_overnight_bank_funding(params, headers):
"""Test the Overnight Bank Funding Rate endpoint."""
params = {p: v for p, v in params.items() if v}
query_str = get_querystring(params, [])
url = f"http://0.0.0.0:8000/api/v1/fixedincome/rate/overnight_bank_funding?{query_str}"
result = requests.get(url, headers=headers, timeout=10)
assert isinstance(result, requests.Response)
assert result.status_code == 200

View File

@@ -51,10 +51,18 @@ def test_fixedincome_government_us_yield_curve(params, obb):
@parametrize(
"params",
[
({"start_date": "2023-01-01", "end_date": "2023-06-06"}),
(
{
"period": "overnight",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"provider": "federal_reserve",
}
),
(
{
"frequency": None,
"transform": None,
"aggregation_method": None,
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
@@ -74,10 +82,18 @@ def test_fixedincome_sofr(params, obb):
@parametrize(
"params",
[
({"start_date": "2023-01-01", "end_date": "2023-06-06"}),
(
{
"parameter": "volume_weighted_trimmed_mean_rate",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"provider": "federal_reserve",
}
),
(
{
"frequency": None,
"transform": None,
"aggregation_method": None,
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
@@ -86,6 +102,30 @@ def test_fixedincome_sofr(params, obb):
],
)
@pytest.mark.integration
def test_fixedincome_rate_sofr(params, obb):
"""Test the fixedincome rate sofr endpoint."""
result = obb.fixedincome.rate.sofr(**params)
assert result
assert isinstance(result, OBBject)
assert len(result.results) > 0
@parametrize(
"params",
[
(
{
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"transform": None,
"aggregation_method": None,
"frequency": None,
}
),
],
)
@pytest.mark.integration
def test_fixedincome_rate_estr(params, obb):
"""Test the ESTR endpoint."""
result = obb.fixedincome.rate.estr(**params)
@@ -120,13 +160,15 @@ def test_fixedincome_rate_sonia(params, obb):
@parametrize(
"params",
[
({"start_date": "2023-01-01", "end_date": "2023-06-06"}),
(
{
"parameter": "overnight",
"maturity": "overnight",
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"transform": None,
"aggregation_method": None,
"frequency": None,
}
),
],
@@ -145,7 +187,10 @@ def test_fixedincome_rate_ameribor(params, obb):
[
(
{
"parameter": "weekly",
"frequency": "w",
"transform": None,
"aggregation_method": "avg",
"effr_only": False,
"provider": "fred",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
@@ -153,9 +198,9 @@ def test_fixedincome_rate_ameribor(params, obb):
),
(
{
"provider": "federal_reserve",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"provider": "federal_reserve",
}
),
],
@@ -299,9 +344,11 @@ def test_fixedincome_corporate_moody(params, obb):
{
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"maturity": "30d",
"maturity": "overnight",
"category": "financial",
"grade": "aa",
"transform": None,
"aggregation_method": None,
"frequency": None,
"provider": "fred",
}
)
@@ -672,3 +719,34 @@ def test_fixedincome_mortgage_indices(params, obb):
assert result
assert isinstance(result, OBBject)
assert len(result.results) > 0
@parametrize(
"params",
[
(
{
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"transform": None,
"aggregation_method": None,
"frequency": None,
"provider": "fred",
}
),
(
{
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"provider": "federal_reserve",
}
),
],
)
@pytest.mark.integration
def test_fixedincome_rate_overnight_bank_funding(params, obb):
"""Test the Overnight Bank Funding Rate endpoint."""
result = obb.fixedincome.rate.overnight_bank_funding(**params)
assert result
assert isinstance(result, OBBject)
assert len(result.results) > 0

View File

@@ -48,6 +48,13 @@ async def ice_bofa(
@router.command(
deprecated=True,
deprecation=OpenBBDeprecationWarning(
message="This endpoint is deprecated; use `/fixedincome/bond_indices` instead."
+ " Set `category` to `us` and `index` to `seasoned_corporate`.",
since=(4, 2),
expected_removal=(4, 5),
),
model="MoodyCorporateBondIndex",
examples=[
APIEx(parameters={"provider": "fred"}),
@@ -120,7 +127,7 @@ async def spot_rates(
model="CommercialPaper",
examples=[
APIEx(parameters={"provider": "fred"}),
APIEx(parameters={"maturity": "15d", "provider": "fred"}),
APIEx(parameters={"category": "all", "maturity": "15d", "provider": "fred"}),
],
)
async def commercial_paper(

View File

@@ -2,6 +2,7 @@
# pylint: disable=W0613:unused-argument
from openbb_core.app.deprecation import OpenBBDeprecationWarning
from openbb_core.app.model.command_context import CommandContext
from openbb_core.app.model.example import APIEx
from openbb_core.app.model.obbject import OBBject
@@ -29,8 +30,13 @@ router.include_router(corporate_router)
model="SOFR",
examples=[
APIEx(parameters={"provider": "fred"}),
APIEx(parameters={"period": "overnight", "provider": "fred"}),
],
deprecated=True,
deprecation=OpenBBDeprecationWarning(
message="This endpoint is deprecated; use `/fixedincome/rate/sofr` instead.",
since=(4, 2),
expected_removal=(4, 5),
),
)
async def sofr(
cc: CommandContext,

View File

@@ -17,10 +17,13 @@ router = Router(prefix="/rate")
@router.command(
model="AMERIBOR",
model="Ameribor",
examples=[
APIEx(parameters={"provider": "fred"}),
APIEx(parameters={"parameter": "30_day_ma", "provider": "fred"}),
APIEx(
description="The change from one year ago is applied with the transform parameter.",
parameters={"maturity": "all", "transform": "pc1", "provider": "fred"},
),
],
)
async def ameribor(
@@ -29,9 +32,9 @@ async def ameribor(
standard_params: StandardParams,
extra_params: ExtraParams,
) -> OBBject: # type: ignore
"""Ameribor.
"""AMERIBOR.
Ameribor (short for the American interbank offered rate) is a benchmark interest rate that reflects the true cost of
AMERIBOR (short for the American interbank offered rate) is a benchmark interest rate that reflects the true cost of
short-term interbank borrowing. This rate is based on transactions in overnight unsecured loans conducted on the
American Financial Exchange (AFX).
"""
@@ -60,6 +63,26 @@ async def sonia(
return await OBBject.from_query(Query(**locals()))
@router.command(
model="SOFR",
examples=[
APIEx(parameters={"provider": "fred"}),
],
)
async def sofr(
cc: CommandContext,
provider_choices: ProviderChoices,
standard_params: StandardParams,
extra_params: ExtraParams,
) -> OBBject: # type: ignore
"""Secured Overnight Financing Rate.
The Secured Overnight Financing Rate (SOFR) is a broad measure of the cost of
borrowing cash overnight collateralizing by Treasury securities.
"""
return await OBBject.from_query(Query(**locals()))
@router.command(
model="IORB",
examples=[APIEx(parameters={"provider": "fred"})],
@@ -80,10 +103,10 @@ async def iorb(
@router.command(
model="FEDFUNDS",
model="FederalFundsRate",
examples=[
APIEx(parameters={"provider": "fred"}),
APIEx(parameters={"parameter": "daily", "provider": "fred"}),
APIEx(parameters={"effr_only": True, "provider": "fred"}),
],
)
async def effr(
@@ -95,8 +118,7 @@ async def effr(
"""Fed Funds Rate.
Get Effective Federal Funds Rate data. A bank rate is the interest rate a nation's central bank charges to its
domestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the
United States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate.
domestic banks to borrow money. The rates central banks charge are set to stabilize the economy.
"""
return await OBBject.from_query(Query(**locals()))
@@ -125,10 +147,10 @@ async def effr_forecast(
@router.command(
model="ESTR",
model="EuroShortTermRate",
examples=[
APIEx(parameters={"provider": "fred"}),
APIEx(parameters={"parameter": "number_of_active_banks", "provider": "fred"}),
APIEx(parameters={"transform": "ch1", "provider": "fred"}),
],
)
async def estr(
@@ -142,7 +164,7 @@ async def estr(
The euro short-term rate (€STR) reflects the wholesale euro unsecured overnight borrowing costs of banks located in
the euro area. The €STR is published on each TARGET2 business day based on transactions conducted and settled on
the previous TARGET2 business day (the reporting date “T”) with a maturity date of T+1 which are deemed to have been
executed at arm’s length and thus reflect market rates in an unbiased way.
executed at arm's length and thus reflect market rates in an unbiased way.
"""
return await OBBject.from_query(Query(**locals()))
@@ -199,3 +221,22 @@ async def dpcredit(
also known as the discount rate.
"""
return await OBBject.from_query(Query(**locals()))
@router.command(
model="OvernightBankFundingRate",
examples=[APIEx(parameters={"provider": "fred"})],
)
async def overnight_bank_funding(
cc: CommandContext,
provider_choices: ProviderChoices,
standard_params: StandardParams,
extra_params: ExtraParams,
) -> OBBject: # type: ignore
"""Overnight Bank Funding.
For the United States, the overnight bank funding rate (OBFR) is calculated as a volume-weighted median of
overnight federal funds transactions and Eurodollar transactions reported in the
FR 2420 Report of Selected Money Market Rates.
"""
return await OBBject.from_query(Query(**locals()))

File diff suppressed because it is too large Load Diff

View File

@@ -440,9 +440,9 @@ class ROUTER_economy(Container):
term : Optional[str]
Term of the security. Only returned for Agency securities. (provider: federal_reserve)
face_value : Optional[float]
Current face value of the security (Thousands). Current face value of the securities, which is the remaining principal balance of the securities. (provider: federal_reserve)
Current face value of the security (Thousands of $USD). Current face value of the securities, which is the remaining principal balance of the securities. (provider: federal_reserve)
par_value : Optional[float]
Par value of the security (Thousands). Changes in par may reflect primary and secondary market transactions and/or custodial account activity. (provider: federal_reserve)
Par value of the security (Thousands of $USD). Changes in par may reflect primary and secondary market transactions and/or custodial account activity. (provider: federal_reserve)
coupon : Optional[float]
Coupon rate of the security. (provider: federal_reserve)
spread : Optional[float]
@@ -450,27 +450,27 @@ class ROUTER_economy(Container):
percent_outstanding : Optional[float]
Total percent of the outstanding CUSIP issuance. (provider: federal_reserve)
bills : Optional[float]
Treasury bills amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Treasury bills amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
frn : Optional[float]
Floating rate Treasury notes amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Floating rate Treasury notes amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
notes_and_bonds : Optional[float]
Treasuy Notes and bonds amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Treasuy Notes and bonds amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
tips : Optional[float]
Treasury inflation-protected securities amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Treasury inflation-protected securities amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
mbs : Optional[float]
Mortgage-backed securities amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Mortgage-backed securities amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
cmbs : Optional[float]
Commercial mortgage-backed securities amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Commercial mortgage-backed securities amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
agencies : Optional[float]
Agency securities amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Agency securities amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
total : Optional[float]
Total SOMA holdings amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Total SOMA holdings amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
tips_inflation_compensation : Optional[float]
Treasury inflation-protected securities inflation compensation amount (Thousands). Only returned when 'summary' is True. (provider: federal_reserve)
Treasury inflation-protected securities inflation compensation amount (Thousands of $USD). Only returned when 'summary' is True. (provider: federal_reserve)
change_prior_week : Optional[float]
Change in SOMA holdings from the prior week (Thousands). (provider: federal_reserve)
Change in SOMA holdings from the prior week (Thousands of $USD). (provider: federal_reserve)
change_prior_year : Optional[float]
Change in SOMA holdings from the prior year (Thousands). (provider: federal_reserve)
Change in SOMA holdings from the prior year (Thousands of $USD). (provider: federal_reserve)
Examples
--------

View File

@@ -2,13 +2,15 @@
import datetime
from typing import Literal, Optional, Union
from warnings import simplefilter, warn
from openbb_core.app.deprecation import OpenBBDeprecationWarning
from openbb_core.app.model.field import OpenBBField
from openbb_core.app.model.obbject import OBBject
from openbb_core.app.static.container import Container
from openbb_core.app.static.utils.decorators import exception_handler, validate
from openbb_core.app.static.utils.filters import filter_inputs
from typing_extensions import Annotated
from typing_extensions import Annotated, deprecated
class ROUTER_fixedincome(Container):
@@ -322,6 +324,10 @@ class ROUTER_fixedincome(Container):
@exception_handler
@validate
@deprecated(
"This endpoint is deprecated; use `/fixedincome/rate/sofr` instead. Deprecated in OpenBB Platform V4.2 to be removed in V4.5.",
category=OpenBBDeprecationWarning,
)
def sofr(
self,
start_date: Annotated[
@@ -333,9 +339,9 @@ class ROUTER_fixedincome(Container):
OpenBBField(description="End date of the data, in YYYY-MM-DD format."),
] = None,
provider: Annotated[
Optional[Literal["fred"]],
Optional[Literal["federal_reserve", "fred"]],
OpenBBField(
description="The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred."
description="The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred."
),
] = None,
**kwargs
@@ -352,17 +358,52 @@ class ROUTER_fixedincome(Container):
Start date of the data, in YYYY-MM-DD format.
end_date : Union[datetime.date, None, str]
End date of the data, in YYYY-MM-DD format.
provider : Optional[Literal['fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred.
period : Literal['overnight', '30_day', '90_day', '180_day', 'index']
Period of SOFR rate. (provider: fred)
provider : Optional[Literal['federal_reserve', 'fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred.
frequency : Optional[Literal['a', 'q', 'm', 'w', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']]
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
(provider: fred)
aggregation_method : Optional[Literal['avg', 'sum', 'eop']]
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
(provider: fred)
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']]
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
(provider: fred)
Returns
-------
OBBject
results : List[SOFR]
Serializable results.
provider : Optional[Literal['fred']]
provider : Optional[Literal['federal_reserve', 'fred']]
Provider name.
warnings : Optional[List[Warning_]]
List of warnings.
@@ -375,16 +416,40 @@ class ROUTER_fixedincome(Container):
----
date : date
The date of the data.
rate : Optional[float]
SOFR rate.
rate : float
Effective federal funds rate.
percentile_1 : Optional[float]
1st percentile of the distribution.
percentile_25 : Optional[float]
25th percentile of the distribution.
percentile_75 : Optional[float]
75th percentile of the distribution.
percentile_99 : Optional[float]
99th percentile of the distribution.
volume : Optional[float]
The trading volume.The notional volume of transactions (Billions of $).
average_30d : Optional[float]
30-Day Average SOFR (provider: fred)
average_90d : Optional[float]
90-Day Average SOFR (provider: fred)
average_180d : Optional[float]
180-Day Average SOFR (provider: fred)
index : Optional[float]
SOFR index as 2018-04-02 = 1 (provider: fred)
Examples
--------
>>> from openbb import obb
>>> obb.fixedincome.sofr(provider='fred')
>>> obb.fixedincome.sofr(period='overnight', provider='fred')
""" # noqa: E501
simplefilter("always", DeprecationWarning)
warn(
"This endpoint is deprecated; use `/fixedincome/rate/sofr` instead. Deprecated in OpenBB Platform V4.2 to be removed in V4.5.",
category=DeprecationWarning,
stacklevel=2,
)
return self._run(
"/fixedincome/sofr",
**filter_inputs(
@@ -392,7 +457,7 @@ class ROUTER_fixedincome(Container):
"provider": self._get_provider(
provider,
"fixedincome.sofr",
("fred",),
("federal_reserve", "fred"),
)
},
standard_params={

View File

@@ -37,17 +37,6 @@ class ROUTER_fixedincome_corporate(Container):
Union[datetime.date, None, str],
OpenBBField(description="End date of the data, in YYYY-MM-DD format."),
] = None,
maturity: Annotated[
Literal["overnight", "7d", "15d", "30d", "60d", "90d"],
OpenBBField(description="The maturity."),
] = "30d",
category: Annotated[
Literal["asset_backed", "financial", "nonfinancial"],
OpenBBField(description="The category."),
] = "financial",
grade: Annotated[
Literal["aa", "a2_p2"], OpenBBField(description="The grade.")
] = "aa",
provider: Annotated[
Optional[Literal["fred"]],
OpenBBField(
@@ -70,14 +59,49 @@ class ROUTER_fixedincome_corporate(Container):
Start date of the data, in YYYY-MM-DD format.
end_date : Union[datetime.date, None, str]
End date of the data, in YYYY-MM-DD format.
maturity : Literal['overnight', '7d', '15d', '30d', '60d', '90d']
The maturity.
category : Literal['asset_backed', 'financial', 'nonfinancial']
The category.
grade : Literal['aa', 'a2_p2']
The grade.
provider : Optional[Literal['fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred.
maturity : Union[str, Literal['all', 'overnight', '7d', '15d', '30d', '60d', '90d']]
A target maturity. Multiple comma separated items allowed. (provider: fred)
category : Union[str, Literal['all', 'asset_backed', 'financial', 'nonfinancial', 'a2p2']]
The category of asset. Multiple comma separated items allowed. (provider: fred)
frequency : Optional[Literal['a', 'q', 'm', 'w', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']]
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
(provider: fred)
aggregation_method : Optional[Literal['avg', 'sum', 'eop']]
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
(provider: fred)
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']]
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
(provider: fred)
Returns
-------
@@ -97,14 +121,22 @@ class ROUTER_fixedincome_corporate(Container):
---------------
date : date
The date of the data.
rate : Optional[float]
Commercial Paper Rate.
symbol : Optional[str]
Symbol representing the entity requested in the data.
maturity : str
Maturity length of the item.
rate : float
Interest rate.
title : Optional[str]
Title of the series.
asset_type : Optional[Literal['asset_backed', 'financial', 'nonfinancial', 'a2p2']]
The category of asset. (provider: fred)
Examples
--------
>>> from openbb import obb
>>> obb.fixedincome.corporate.commercial_paper(provider='fred')
>>> obb.fixedincome.corporate.commercial_paper(maturity='15d', provider='fred')
>>> obb.fixedincome.corporate.commercial_paper(category='all', maturity='15d', provider='fred')
""" # noqa: E501
return self._run(
@@ -120,11 +152,12 @@ class ROUTER_fixedincome_corporate(Container):
standard_params={
"start_date": start_date,
"end_date": end_date,
"maturity": maturity,
"category": category,
"grade": grade,
},
extra_params=kwargs,
info={
"maturity": {"fred": {"multiple_items_allowed": True}},
"category": {"fred": {"multiple_items_allowed": True}},
},
)
)
@@ -133,12 +166,11 @@ class ROUTER_fixedincome_corporate(Container):
def hqm(
self,
date: Annotated[
Union[datetime.date, None, str],
OpenBBField(description="A specific date to get data for."),
Union[str, datetime.date, None, List[Union[str, datetime.date, None]]],
OpenBBField(
description="A specific date to get data for. Multiple comma separated items allowed for provider(s): fred."
),
] = None,
yield_curve: Annotated[
Literal["spot", "par"], OpenBBField(description="The yield curve type.")
] = "spot",
provider: Annotated[
Optional[Literal["fred"]],
OpenBBField(
@@ -157,12 +189,12 @@ class ROUTER_fixedincome_corporate(Container):
Parameters
----------
date : Union[datetime.date, None, str]
A specific date to get data for.
yield_curve : Literal['spot', 'par']
The yield curve type.
date : Union[str, datetime.date, None, List[Union[str, datetime.d...
A specific date to get data for. Multiple comma separated items allowed for provider(s): fred.
provider : Optional[Literal['fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred.
yield_curve : Literal['spot', 'par']
The yield curve type. (provider: fred)
Returns
-------
@@ -182,14 +214,10 @@ class ROUTER_fixedincome_corporate(Container):
------------------------------
date : date
The date of the data.
rate : Optional[float]
HighQualityMarketCorporateBond Rate.
rate : float
Interest rate.
maturity : str
Maturity.
yield_curve : Literal['spot', 'par']
The yield curve type.
series_id : Optional[str]
FRED series id. (provider: fred)
Examples
--------
@@ -210,9 +238,9 @@ class ROUTER_fixedincome_corporate(Container):
},
standard_params={
"date": date,
"yield_curve": yield_curve,
},
extra_params=kwargs,
info={"date": {"fred": {"multiple_items_allowed": True}}},
)
)
@@ -328,6 +356,10 @@ class ROUTER_fixedincome_corporate(Container):
@exception_handler
@validate
@deprecated(
"This endpoint is deprecated; use `/fixedincome/bond_indices` instead. Set `category` to `us` and `index` to `seasoned_corporate`. Deprecated in OpenBB Platform V4.2 to be removed in V4.5.",
category=OpenBBDeprecationWarning,
)
def moody(
self,
start_date: Annotated[
@@ -398,6 +430,13 @@ class ROUTER_fixedincome_corporate(Container):
>>> obb.fixedincome.corporate.moody(index_type='baa', provider='fred')
""" # noqa: E501
simplefilter("always", DeprecationWarning)
warn(
"This endpoint is deprecated; use `/fixedincome/bond_indices` instead. Set `category` to `us` and `index` to `seasoned_corporate`. Deprecated in OpenBB Platform V4.2 to be removed in V4.5.",
category=DeprecationWarning,
stacklevel=2,
)
return self._run(
"/fixedincome/corporate/moody",
**filter_inputs(

View File

@@ -242,7 +242,7 @@ class ROUTER_fixedincome_government(Container):
The country to get data. New Zealand, Mexico, Singapore, and Thailand have only monthly data. The nearest date to the requested one will be used. (provider: econdb)
use_cache : bool
If true, cache the request for four hours. (provider: econdb)
yield_curve_type : Literal['nominal', 'real', 'breakeven', 'corporate_spot', 'corporate_par']
yield_curve_type : Literal['nominal', 'real', 'breakeven', 'treasury_minus_fed_funds', 'corporate_spot', 'corporate_par']
Yield curve type. Nominal and Real Rates are available daily, others are monthly. The closest date to the requested date will be returned. (provider: fred)
Returns

View File

@@ -20,6 +20,8 @@ class ROUTER_fixedincome_rate(Container):
effr_forecast
estr
iorb
overnight_bank_funding
sofr
sonia
"""
@@ -46,9 +48,9 @@ class ROUTER_fixedincome_rate(Container):
] = None,
**kwargs
) -> OBBject:
"""Ameribor.
"""AMERIBOR.
Ameribor (short for the American interbank offered rate) is a benchmark interest rate that reflects the true cost of
AMERIBOR (short for the American interbank offered rate) is a benchmark interest rate that reflects the true cost of
short-term interbank borrowing. This rate is based on transactions in overnight unsecured loans conducted on the
American Financial Exchange (AFX).
@@ -61,13 +63,50 @@ class ROUTER_fixedincome_rate(Container):
End date of the data, in YYYY-MM-DD format.
provider : Optional[Literal['fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred.
parameter : Literal['overnight', 'term_30', 'term_90', '1_week_term_structure', '1_month_term_structure', '3_month_term_structure', '6_month_term_structure', '1_year_term_structure', '2_year_term_structure', '30_day_ma', '90_day_ma']
Period of AMERIBOR rate. (provider: fred)
maturity : Union[Literal['all', 'overnight', 'average_30d', 'average_90d', 'term_30d', 'term_90d'], str]
Period of AMERIBOR rate. Multiple comma separated items allowed. (provider: fred)
frequency : Optional[Literal['a', 'q', 'm', 'w', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']]
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
(provider: fred)
aggregation_method : Optional[Literal['avg', 'sum', 'eop']]
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
(provider: fred)
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']]
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
(provider: fred)
Returns
-------
OBBject
results : List[AMERIBOR]
results : List[Ameribor]
Serializable results.
provider : Optional[Literal['fred']]
Provider name.
@@ -78,18 +117,25 @@ class ROUTER_fixedincome_rate(Container):
extra : Dict[str, Any]
Extra info.
AMERIBOR
Ameribor
--------
date : date
The date of the data.
rate : Optional[float]
AMERIBOR rate.
symbol : Optional[str]
Symbol representing the entity requested in the data.
maturity : str
Maturity length of the item.
rate : float
Interest rate.
title : Optional[str]
Title of the series.
Examples
--------
>>> from openbb import obb
>>> obb.fixedincome.rate.ameribor(provider='fred')
>>> obb.fixedincome.rate.ameribor(parameter='30_day_ma', provider='fred')
>>> # The change from one year ago is applied with the transform parameter.
>>> obb.fixedincome.rate.ameribor(maturity='all', transform='pc1', provider='fred')
""" # noqa: E501
return self._run(
@@ -107,6 +153,7 @@ class ROUTER_fixedincome_rate(Container):
"end_date": end_date,
},
extra_params=kwargs,
info={"maturity": {"fred": {"multiple_items_allowed": True}}},
)
)
@@ -310,8 +357,7 @@ class ROUTER_fixedincome_rate(Container):
"""Fed Funds Rate.
Get Effective Federal Funds Rate data. A bank rate is the interest rate a nation's central bank charges to its
domestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the
United States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate.
domestic banks to borrow money. The rates central banks charge are set to stabilize the economy.
Parameters
@@ -322,13 +368,50 @@ class ROUTER_fixedincome_rate(Container):
End date of the data, in YYYY-MM-DD format.
provider : Optional[Literal['federal_reserve', 'fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred.
parameter : Literal['monthly', 'daily', 'weekly', 'daily_excl_weekend', 'annual', 'biweekly', 'volume']
Period of FED rate. (provider: fred)
frequency : Optional[Literal['a', 'q', 'm', 'w', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']]
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
(provider: fred)
aggregation_method : Optional[Literal['avg', 'sum', 'eop']]
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
(provider: fred)
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']]
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
(provider: fred)
effr_only : bool
Return data without quantiles, target ranges, and volume. (provider: fred)
Returns
-------
OBBject
results : List[FEDFUNDS]
results : List[FederalFundsRate]
Serializable results.
provider : Optional[Literal['federal_reserve', 'fred']]
Provider name.
@@ -339,18 +422,40 @@ class ROUTER_fixedincome_rate(Container):
extra : Dict[str, Any]
Extra info.
FEDFUNDS
--------
FederalFundsRate
----------------
date : date
The date of the data.
rate : Optional[float]
FED rate.
rate : float
Effective federal funds rate.
target_range_upper : Optional[float]
Upper bound of the target range.
target_range_lower : Optional[float]
Lower bound of the target range.
percentile_1 : Optional[float]
1st percentile of the distribution.
percentile_25 : Optional[float]
25th percentile of the distribution.
percentile_75 : Optional[float]
75th percentile of the distribution.
percentile_99 : Optional[float]
99th percentile of the distribution.
volume : Optional[float]
The trading volume.The notional volume of transactions (Billions of $).
intraday_low : Optional[float]
Intraday low. This field is only present for data before 2016. (provider: federal_reserve)
intraday_high : Optional[float]
Intraday high. This field is only present for data before 2016. (provider: federal_reserve)
standard_deviation : Optional[float]
Standard deviation. This field is only present for data before 2016. (provider: federal_reserve)
revision_indicator : Optional[str]
Indicates a revision of the data for that date. (provider: federal_reserve)
Examples
--------
>>> from openbb import obb
>>> obb.fixedincome.rate.effr(provider='fred')
>>> obb.fixedincome.rate.effr(parameter='daily', provider='fred')
>>> obb.fixedincome.rate.effr(effr_only=True, provider='fred')
""" # noqa: E501
return self._run(
@@ -478,7 +583,7 @@ class ROUTER_fixedincome_rate(Container):
The euro short-term rate (€STR) reflects the wholesale euro unsecured overnight borrowing costs of banks located in
the euro area. The €STR is published on each TARGET2 business day based on transactions conducted and settled on
the previous TARGET2 business day (the reporting date “T”) with a maturity date of T+1 which are deemed to have been
executed at arm’s length and thus reflect market rates in an unbiased way.
executed at arm's length and thus reflect market rates in an unbiased way.
Parameters
@@ -489,13 +594,48 @@ class ROUTER_fixedincome_rate(Container):
End date of the data, in YYYY-MM-DD format.
provider : Optional[Literal['fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred.
parameter : Literal['volume_weighted_trimmed_mean_rate', 'number_of_transactions', 'number_of_active_banks', 'total_volume', 'share_of_volume_of_the_5_largest_active_banks', 'rate_at_75th_percentile_of_volume', 'rate_at_25th_percentile_of_volume']
Period of ESTR rate. (provider: fred)
frequency : Optional[Literal['a', 'q', 'm', 'w', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']]
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
(provider: fred)
aggregation_method : Optional[Literal['avg', 'sum', 'eop']]
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
(provider: fred)
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']]
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
(provider: fred)
Returns
-------
OBBject
results : List[ESTR]
results : List[EuroShortTermRate]
Serializable results.
provider : Optional[Literal['fred']]
Provider name.
@@ -506,18 +646,30 @@ class ROUTER_fixedincome_rate(Container):
extra : Dict[str, Any]
Extra info.
ESTR
----
EuroShortTermRate
-----------------
date : date
The date of the data.
rate : Optional[float]
ESTR rate.
rate : float
Volume-weighted trimmed mean rate.
percentile_25 : Optional[float]
Rate at 25th percentile of volume.
percentile_75 : Optional[float]
Rate at 75th percentile of volume.
volume : Optional[float]
Volume (Millions of €EUR).
transactions : Optional[int]
Number of transactions.
number_of_banks : Optional[int]
Number of active banks.
large_bank_share_of_volume : Optional[float]
The percent of volume attributable to the 5 largest active banks.
Examples
--------
>>> from openbb import obb
>>> obb.fixedincome.rate.estr(provider='fred')
>>> obb.fixedincome.rate.estr(parameter='number_of_active_banks', provider='fred')
>>> obb.fixedincome.rate.estr(transform='ch1', provider='fred')
""" # noqa: E501
return self._run(
@@ -619,6 +771,271 @@ class ROUTER_fixedincome_rate(Container):
)
)
@exception_handler
@validate
def overnight_bank_funding(
self,
start_date: Annotated[
Union[datetime.date, None, str],
OpenBBField(description="Start date of the data, in YYYY-MM-DD format."),
] = None,
end_date: Annotated[
Union[datetime.date, None, str],
OpenBBField(description="End date of the data, in YYYY-MM-DD format."),
] = None,
provider: Annotated[
Optional[Literal["federal_reserve", "fred"]],
OpenBBField(
description="The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred."
),
] = None,
**kwargs
) -> OBBject:
"""Overnight Bank Funding.
For the United States, the overnight bank funding rate (OBFR) is calculated as a volume-weighted median of
overnight federal funds transactions and Eurodollar transactions reported in the
FR 2420 Report of Selected Money Market Rates.
Parameters
----------
start_date : Union[datetime.date, None, str]
Start date of the data, in YYYY-MM-DD format.
end_date : Union[datetime.date, None, str]
End date of the data, in YYYY-MM-DD format.
provider : Optional[Literal['federal_reserve', 'fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred.
frequency : Optional[Literal['a', 'q', 'm', 'w', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']]
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
(provider: fred)
aggregation_method : Optional[Literal['avg', 'sum', 'eop']]
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
(provider: fred)
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']]
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
(provider: fred)
Returns
-------
OBBject
results : List[OvernightBankFundingRate]
Serializable results.
provider : Optional[Literal['federal_reserve', 'fred']]
Provider name.
warnings : Optional[List[Warning_]]
List of warnings.
chart : Optional[Chart]
Chart object.
extra : Dict[str, Any]
Extra info.
OvernightBankFundingRate
------------------------
date : date
The date of the data.
rate : float
Overnight Bank Funding Rate.
percentile_1 : Optional[float]
1st percentile of the distribution.
percentile_25 : Optional[float]
25th percentile of the distribution.
percentile_75 : Optional[float]
75th percentile of the distribution.
percentile_99 : Optional[float]
99th percentile of the distribution.
volume : Optional[float]
The trading volume.The notional volume of transactions (Billions of $).
revision_indicator : Optional[str]
Indicates a revision of the data for that date. (provider: federal_reserve)
Examples
--------
>>> from openbb import obb
>>> obb.fixedincome.rate.overnight_bank_funding(provider='fred')
""" # noqa: E501
return self._run(
"/fixedincome/rate/overnight_bank_funding",
**filter_inputs(
provider_choices={
"provider": self._get_provider(
provider,
"fixedincome.rate.overnight_bank_funding",
("federal_reserve", "fred"),
)
},
standard_params={
"start_date": start_date,
"end_date": end_date,
},
extra_params=kwargs,
)
)
@exception_handler
@validate
def sofr(
self,
start_date: Annotated[
Union[datetime.date, None, str],
OpenBBField(description="Start date of the data, in YYYY-MM-DD format."),
] = None,
end_date: Annotated[
Union[datetime.date, None, str],
OpenBBField(description="End date of the data, in YYYY-MM-DD format."),
] = None,
provider: Annotated[
Optional[Literal["federal_reserve", "fred"]],
OpenBBField(
description="The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred."
),
] = None,
**kwargs
) -> OBBject:
"""Secured Overnight Financing Rate.
The Secured Overnight Financing Rate (SOFR) is a broad measure of the cost of
borrowing cash overnight collateralizing by Treasury securities.
Parameters
----------
start_date : Union[datetime.date, None, str]
Start date of the data, in YYYY-MM-DD format.
end_date : Union[datetime.date, None, str]
End date of the data, in YYYY-MM-DD format.
provider : Optional[Literal['federal_reserve', 'fred']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred.
frequency : Optional[Literal['a', 'q', 'm', 'w', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']]
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
(provider: fred)
aggregation_method : Optional[Literal['avg', 'sum', 'eop']]
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
(provider: fred)
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']]
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
(provider: fred)
Returns
-------
OBBject
results : List[SOFR]
Serializable results.
provider : Optional[Literal['federal_reserve', 'fred']]
Provider name.
warnings : Optional[List[Warning_]]
List of warnings.
chart : Optional[Chart]
Chart object.
extra : Dict[str, Any]
Extra info.
SOFR
----
date : date
The date of the data.
rate : float
Effective federal funds rate.
percentile_1 : Optional[float]
1st percentile of the distribution.
percentile_25 : Optional[float]
25th percentile of the distribution.
percentile_75 : Optional[float]
75th percentile of the distribution.
percentile_99 : Optional[float]
99th percentile of the distribution.
volume : Optional[float]
The trading volume.The notional volume of transactions (Billions of $).
average_30d : Optional[float]
30-Day Average SOFR (provider: fred)
average_90d : Optional[float]
90-Day Average SOFR (provider: fred)
average_180d : Optional[float]
180-Day Average SOFR (provider: fred)
index : Optional[float]
SOFR index as 2018-04-02 = 1 (provider: fred)
Examples
--------
>>> from openbb import obb
>>> obb.fixedincome.rate.sofr(provider='fred')
""" # noqa: E501
return self._run(
"/fixedincome/rate/sofr",
**filter_inputs(
provider_choices={
"provider": self._get_provider(
provider,
"fixedincome.rate.sofr",
("federal_reserve", "fred"),
)
},
standard_params={
"start_date": start_date,
"end_date": end_date,
},
extra_params=kwargs,
)
)
@exception_handler
@validate
def sonia(

View File

@@ -4,10 +4,16 @@ from openbb_core.provider.abstract.provider import Provider
from openbb_federal_reserve.models.central_bank_holdings import (
FederalReserveCentralBankHoldingsFetcher,
)
from openbb_federal_reserve.models.fed_rates import FederalReserveFEDFetcher
from openbb_federal_reserve.models.federal_funds_rate import (
FederalReserveFederalFundsRateFetcher,
)
from openbb_federal_reserve.models.money_measures import (
FederalReserveMoneyMeasuresFetcher,
)
from openbb_federal_reserve.models.overnight_bank_funding_rate import (
FederalReserveOvernightBankFundingRateFetcher,
)
from openbb_federal_reserve.models.sofr import FederalReserveSOFRFetcher
from openbb_federal_reserve.models.treasury_rates import (
FederalReserveTreasuryRatesFetcher,
)
@@ -21,7 +27,9 @@ federal_reserve_provider = Provider(
"CentralBankHoldings": FederalReserveCentralBankHoldingsFetcher,
"TreasuryRates": FederalReserveTreasuryRatesFetcher,
"MoneyMeasures": FederalReserveMoneyMeasuresFetcher,
"FEDFUNDS": FederalReserveFEDFetcher,
"OvernightBankFundingRate": FederalReserveOvernightBankFundingRateFetcher,
"FederalFundsRate": FederalReserveFederalFundsRateFetcher,
"SOFR": FederalReserveSOFRFetcher,
"YieldCurve": FederalReserveYieldCurveFetcher,
},
repr_name="Federal Reserve (FED)",

View File

@@ -111,15 +111,21 @@ class FederalReserveCentralBankHoldingsData(CentralBankHoldingsData):
)
face_value: Optional[float] = Field(
default=None,
description="Current face value of the security (Thousands)."
description="Current face value of the security (Thousands of $USD)."
+ " Current face value of the securities, which is the remaining principal balance of the securities.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
par_value: Optional[float] = Field(
default=None,
description="Par value of the security (Thousands)."
description="Par value of the security (Thousands of $USD)."
+ " Changes in par may reflect primary and secondary market transactions and/or custodial account activity.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
coupon: Optional[float] = Field(
default=None,
@@ -138,68 +144,101 @@ class FederalReserveCentralBankHoldingsData(CentralBankHoldingsData):
)
bills: Optional[float] = Field(
default=None,
description="Treasury bills amount (Thousands)."
description="Treasury bills amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
frn: Optional[float] = Field(
default=None,
description="Floating rate Treasury notes amount (Thousands)."
description="Floating rate Treasury notes amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
notes_and_bonds: Optional[float] = Field(
default=None,
description="Treasuy Notes and bonds amount (Thousands)."
description="Treasuy Notes and bonds amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
tips: Optional[float] = Field(
default=None,
description="Treasury inflation-protected securities amount (Thousands)."
description="Treasury inflation-protected securities amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
mbs: Optional[float] = Field(
default=None,
description="Mortgage-backed securities amount (Thousands)."
description="Mortgage-backed securities amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
cmbs: Optional[float] = Field(
default=None,
description="Commercial mortgage-backed securities amount (Thousands)."
description="Commercial mortgage-backed securities amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
agencies: Optional[float] = Field(
default=None,
description="Agency securities amount (Thousands)."
description="Agency securities amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
total: Optional[float] = Field(
default=None,
description="Total SOMA holdings amount (Thousands)."
description="Total SOMA holdings amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
tips_inflation_compensation: Optional[float] = Field(
default=None,
description="Treasury inflation-protected securities inflation compensation amount (Thousands)."
description="Treasury inflation-protected securities inflation compensation amount (Thousands of $USD)."
+ " Only returned when 'summary' is True.",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
alias="inflationCompensation",
)
change_prior_week: Optional[float] = Field(
default=None,
description="Change in SOMA holdings from the prior week (Thousands).",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
description="Change in SOMA holdings from the prior week (Thousands of $USD).",
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
change_prior_year: Optional[float] = Field(
default=None,
description="Change in SOMA holdings from the prior year (Thousands).",
json_schema_extra={"x-unit_measurement": "usd", "x-frontend_multiply": 1000},
description="Change in SOMA holdings from the prior year (Thousands of $USD).",
json_schema_extra={
"x-unit_measurement": "currency",
"x-frontend_multiply": 1000,
},
)
@field_validator("security_type", mode="before", check_fields=False)

View File

@@ -1,83 +0,0 @@
"""Federal Reserve FED Model."""
from datetime import datetime, timedelta
from io import BytesIO
from typing import Any, Dict, List, Optional
import pandas as pd
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.fed_rates import (
FEDData,
FEDQueryParams,
)
from openbb_core.provider.utils.helpers import make_request
from pydantic import field_validator
class FederalReserveFEDQueryParams(FEDQueryParams):
"""FederalReserve FED Query."""
class FederalReserveFEDData(FEDData):
"""FederalReserve FED Data."""
@field_validator("rate", mode="before", check_fields=False)
@classmethod
def value_validate(cls, v):
"""Validate rate."""
try:
return float(v)
except ValueError:
return None
class FederalReserveFEDFetcher(
Fetcher[FederalReserveFEDQueryParams, List[Dict[str, List[FederalReserveFEDData]]]]
):
"""FederalReserve FED Model."""
data_type = FederalReserveFEDData
@staticmethod
def transform_query(params: Dict[str, Any]) -> FederalReserveFEDQueryParams:
"""Transform query."""
transformed_params = params
now = datetime.now().date()
if params.get("start_date") is None:
transformed_params["start_date"] = now - timedelta(days=10 * 365)
if params.get("end_date") is None:
transformed_params["end_date"] = now
return FederalReserveFEDQueryParams(**transformed_params)
# pylint: disable=unused-argument
@staticmethod
def extract_data(
query: FederalReserveFEDQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any
) -> dict:
"""Extract data."""
url = (
"https://www.federalreserve.gov/datadownload/Output.aspx?rel=H15&series=c5025f4bbbed155a6f17c587772ed69e"
"&lastobs=&from=01/01/1938&to=12/31/3023&filetype=csv&label=include&layout=seriescolumn"
)
r = make_request(url, **kwargs)
df = pd.read_csv(BytesIO(r.content), header=5, index_col=None, parse_dates=True)
df.columns = ["date", "rate"]
df = df[
(pd.to_datetime(df.date) >= pd.to_datetime(query.start_date))
& (pd.to_datetime(df.date) <= pd.to_datetime(query.end_date))
]
return df.to_dict(orient="records")
# pylint: disable=unused-argument
@staticmethod
def transform_data(
query: FederalReserveFEDQueryParams, data: dict, **kwargs: Any
) -> List[Dict[str, List[FederalReserveFEDData]]]:
"""Transform data."""
return [FederalReserveFEDData.model_validate(d) for d in data]

View File

@@ -0,0 +1,139 @@
"""Federal Reserve Federal Funds Rate Model."""
# pylint: disable=unused-argument
from datetime import datetime
from typing import Any, Dict, List, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.federal_funds_rate import (
FederalFundsRateData,
FederalFundsRateQueryParams,
)
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_core.provider.utils.helpers import amake_request
from pydantic import Field, field_validator
class FederalReserveFederalFundsRateQueryParams(FederalFundsRateQueryParams):
"""FederalReserve FED Query."""
class FederalReserveFederalFundsRateData(FederalFundsRateData):
"""FederalReserve FED Data."""
__alias_dict__ = {
"date": "effectiveDate",
"rate": "percentRate",
"target_range_upper": "targetRateTo",
"target_range_lower": "targetRateFrom",
"percentile_1": "percentPercentile1",
"percentile_25": "percentPercentile25",
"percentile_75": "percentPercentile75",
"percentile_99": "percentPercentile99",
"volume": "volumeInBillions",
"intraday_low": "intraDayLow",
"intraday_high": "intraDayHigh",
"standard_deviation": "stdDeviation",
"revision_indicator": "revisionIndicator",
}
intraday_low: Optional[float] = Field(
default=None,
description="Intraday low. This field is only present for data before 2016.",
)
intraday_high: Optional[float] = Field(
default=None,
description="Intraday high. This field is only present for data before 2016.",
)
standard_deviation: Optional[float] = Field(
default=None,
description="Standard deviation. This field is only present for data before 2016.",
)
revision_indicator: Optional[str] = Field(
default=None,
description="Indicates a revision of the data for that date.",
)
@field_validator("revision_indicator", mode="before", check_fields=False)
@classmethod
def validate_revision_indicator(cls, v):
"""Validate revision indicator."""
return None if v in ("", "''") else v
@field_validator(
"rate",
"target_range_upper",
"target_range_lower",
"percentile_1",
"percentile_25",
"percentile_75",
"percentile_99",
"intraday_high",
"intraday_low",
mode="before",
check_fields=False,
)
@classmethod
def normalize_percent(cls, v):
"""Normalize percent."""
if v is not None:
return v / 100 if v != 0 else 0
return None
class FederalReserveFederalFundsRateFetcher(
Fetcher[
FederalReserveFederalFundsRateQueryParams,
List[FederalReserveFederalFundsRateData],
]
):
"""Federal Reserve Federal Funds Fetcher."""
@staticmethod
def transform_query(
params: Dict[str, Any]
) -> FederalReserveFederalFundsRateQueryParams:
"""Transform query."""
transformed_params = params.copy()
now = datetime.now().date()
if params.get("start_date") is None:
transformed_params["start_date"] = datetime(2016, 3, 1).date()
if params.get("end_date") is None:
transformed_params["end_date"] = now
return FederalReserveFederalFundsRateQueryParams(**transformed_params)
@staticmethod
async def aextract_data(
query: FederalReserveFederalFundsRateQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> List[Dict]:
"""Extract the raw data."""
url = (
"https://markets.newyorkfed.org/api/rates/unsecured/effr/search.json?"
+ f"startDate={query.start_date}&endDate={query.end_date}"
)
results: List[Dict] = []
response = await amake_request(url, **kwargs)
if response.get("refRates"):
results = response["refRates"]
if not results:
raise EmptyDataError()
return results
@staticmethod
def transform_data(
query: FederalReserveFederalFundsRateQueryParams,
data: List[Dict],
**kwargs: Any,
) -> List[FederalReserveFederalFundsRateData]:
"""Transform data."""
results: List[FederalReserveFederalFundsRateData] = []
for d in data.copy():
_ = d.pop("type", None)
_ = d.pop("footnoteId", None)
results.append(FederalReserveFederalFundsRateData.model_validate(d))
return results

View File

@@ -0,0 +1,120 @@
"""Federal Reserve Federal Funds Rate Model."""
# pylint: disable=unused-argument
from datetime import datetime
from typing import Any, Dict, List, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.overnight_bank_funding_rate import (
OvernightBankFundingRateData,
OvernightBankFundingRateQueryParams,
)
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_core.provider.utils.helpers import amake_request
from pydantic import Field, field_validator
class FederalReserveOvernightBankFundingRateQueryParams(
OvernightBankFundingRateQueryParams
):
"""FederalReserve Overnight Bank Funding Rate Query."""
class FederalReserveOvernightBankFundingRateData(OvernightBankFundingRateData):
"""FederalReserve Overnight Bank Funding Rate Data."""
__alias_dict__ = {
"date": "effectiveDate",
"rate": "percentRate",
"percentile_1": "percentPercentile1",
"percentile_25": "percentPercentile25",
"percentile_75": "percentPercentile75",
"percentile_99": "percentPercentile99",
"volume": "volumeInBillions",
}
revision_indicator: Optional[str] = Field(
default=None,
description="Indicates a revision of the data for that date.",
)
@field_validator("revision_indicator", mode="before", check_fields=False)
@classmethod
def validate_revision_indicator(cls, v):
"""Validate revision indicator."""
return None if v in ("", "''") else v
@field_validator(
"rate",
"percentile_1",
"percentile_25",
"percentile_75",
"percentile_99",
mode="before",
check_fields=False,
)
@classmethod
def normalize_percent(cls, v):
"""Normalize percent."""
if v is not None:
return v / 100 if v != 0 else 0
return None
class FederalReserveOvernightBankFundingRateFetcher(
Fetcher[
FederalReserveOvernightBankFundingRateQueryParams,
List[FederalReserveOvernightBankFundingRateData],
]
):
"""Federal Reserve Federal Funds Fetcher."""
@staticmethod
def transform_query(
params: Dict[str, Any]
) -> FederalReserveOvernightBankFundingRateQueryParams:
"""Transform query."""
transformed_params = params.copy()
now = datetime.now().date()
if params.get("start_date") is None:
transformed_params["start_date"] = datetime(2016, 3, 1).date()
if params.get("end_date") is None:
transformed_params["end_date"] = now
return FederalReserveOvernightBankFundingRateQueryParams(**transformed_params)
@staticmethod
async def aextract_data(
query: FederalReserveOvernightBankFundingRateQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> List[Dict]:
"""Extract the raw data."""
url = (
"https://markets.newyorkfed.org/api/rates/unsecured/obfr/search.json?"
+ f"startDate={query.start_date}&endDate={query.end_date}"
)
results: List[Dict] = []
response = await amake_request(url, **kwargs)
if response.get("refRates"):
results = response["refRates"]
if not results:
raise EmptyDataError()
return results
@staticmethod
def transform_data(
query: FederalReserveOvernightBankFundingRateQueryParams,
data: List[Dict],
**kwargs: Any,
) -> List[FederalReserveOvernightBankFundingRateData]:
"""Transform data."""
results: List[FederalReserveOvernightBankFundingRateData] = []
for d in data.copy():
_ = d.pop("type", None)
_ = d.pop("revisionIndicator", None)
_ = d.pop("footnoteId", None)
results.append(FederalReserveOvernightBankFundingRateData.model_validate(d))
return results

View File

@@ -0,0 +1,107 @@
"""Federal Reserve SOFR Model."""
# pylint: disable=unused-argument
from datetime import datetime
from typing import Any, Dict, List, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.sofr import (
SOFRData,
SOFRQueryParams,
)
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_core.provider.utils.helpers import amake_request
from pydantic import field_validator
class FederalReserveSOFRQueryParams(SOFRQueryParams):
"""FederalReserve FED Query."""
class FederalReserveSOFRData(SOFRData):
"""FederalReserve FED Data."""
__alias_dict__ = {
"date": "effectiveDate",
"rate": "percentRate",
"percentile_1": "percentPercentile1",
"percentile_25": "percentPercentile25",
"percentile_75": "percentPercentile75",
"percentile_99": "percentPercentile99",
"volume": "volumeInBillions",
}
@field_validator(
"rate",
"target_range_upper",
"target_range_lower",
"percentile_1",
"percentile_25",
"percentile_75",
"percentile_99",
mode="before",
check_fields=False,
)
@classmethod
def normalize_percent(cls, v):
"""Normalize percent."""
if v not in (None, "", "''", "NA"):
return float(v) / 100 if v != 0 else 0
return None
class FederalReserveSOFRFetcher(
Fetcher[
FederalReserveSOFRQueryParams,
List[FederalReserveSOFRData],
]
):
"""Federal Reserve Federal Funds Fetcher."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> FederalReserveSOFRQueryParams:
"""Transform query."""
transformed_params = params.copy()
now = datetime.now().date()
if params.get("start_date") is None:
transformed_params["start_date"] = datetime(2018, 4, 2).date()
if params.get("end_date") is None:
transformed_params["end_date"] = now
return FederalReserveSOFRQueryParams(**transformed_params)
@staticmethod
async def aextract_data(
query: FederalReserveSOFRQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> List[Dict]:
"""Extract the raw data."""
url = (
"https://markets.newyorkfed.org/api/rates/secured/sofr/search.json?"
+ f"startDate={query.start_date}&endDate={query.end_date}"
)
results: List[Dict] = []
response = await amake_request(url, **kwargs)
if response.get("refRates"):
results = response["refRates"]
if not results:
raise EmptyDataError()
return results
@staticmethod
def transform_data(
query: FederalReserveSOFRQueryParams,
data: List[Dict],
**kwargs: Any,
) -> List[FederalReserveSOFRData]:
"""Transform data."""
results: List[FederalReserveSOFRData] = []
for d in data.copy():
_ = d.pop("type", None)
_ = d.pop("footnoteId", None)
_ = d.pop("revisionIndicator", None)
results.append(FederalReserveSOFRData.model_validate(d))
return results

View File

@@ -0,0 +1,92 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://markets.newyorkfed.org/api/rates/unsecured/effr/search.json?startDate=2023-01-01&endDate=2023-06-06
response:
body:
string: !!binary |
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
YHcAAA==
headers:
Access-Control-Allow-Headers:
- Content-Type,Content-Disposition
Access-Control-Allow-Methods:
- OPTIONS,GET
Access-Control-Allow-Origin:
- '*'
Access-Control-Expose-Headers:
- Content-Disposition
Cache-Control:
- no-store
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1828'
Content-Type:
- application/json; charset=utf-8
Date:
- Thu, 06 Jun 2024 20:57:40 GMT
Pragma:
- no-cache
Set-Cookie:
- ak_bmsc=708282FD0DF0D37D7B8EEC7F6E7FE0D5~000000000000000000000000000000~YAAQ1pUeuGBXpLmPAQAAQ9BX7xhONWLFcCw0okbGYS1e9pk21yRgiUPaNTZNMp5Sv9xCMmLwMKLdnw8O6Hc7zrRz89eYCSlfosascqu+Yqns9+dnqyMafbNYXR1i4J9ECjdQLp8lM2L6xh8gQsdf6ZZVkGVSqC5IDB3Pi1i4wvt78Ceorh+Mf4dGp/TidQtDSRT6Ed4NntmHOWnqzNYlBqwdeijotrIOFBRsrkEbmcsTX+4Ohj+5tKKfXG9+EdvLCrb2eJvB7+U9cthYZec/uWt5lDrA7WEnXvXskwrJFBCOTrHgZnk6pJQtGhkE9oewQLQl0h0gV7izDf/SYN64eCW7wHrSnKgkOj4nXN4Zj0ZdDBdI1o+h6pD9xB1d7PiDHAtWWuMlPcqXReNef/lMse81AoQXJSvvXB4=;
Domain=.newyorkfed.org; Path=/; Expires=Thu, 06 Jun 2024 22:57:40 GMT; Max-Age=7200
Vary:
- Accept-Encoding
strict-transport-security:
- max-age=31536000; includeSubDomains
x-amz-apigw-id:
- Y9pewFa8CYcFueA=
x-amzn-requestid:
- 6cc5ccab-5d40-4dfc-a97f-37ab9cdd7ef5
x-amzn-trace-id:
- Root=1-666222c4-11bb458333c0ee1d7b67d155;Parent=42d70ec18dfba284;Sampled=0;lineage=e7c0e2ee:0
x-frame-options:
- SAMEORIGIN
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,63 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://markets.newyorkfed.org/api/rates/unsecured/obfr/search.json?startDate=2024-06-01&endDate=2024-06-06
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWUCpKTQtKLEktVrJSiFaoVlBKTUtLTS7JLEt1SSxJVbJSUDIyMDLRNTDTNTBT
0lFQKqksAIv6O7kFKSnoKBWkFiWn5pWAjFCyUjDVMzZCCAZA5DJzUg3Bckam2OSMTMGSxobYJM2h
ksbYJC0tITotFXSUyvJzSnNTPfOcMnNyMvPzQN4xsgDZV5RallmcmZ/nmZeSmZxYkl8E8pOSQq0O
fs+aDlbPWuDwrDlIgkzPmgw1z1oYKOgokelZ46HmWXN8yRgwhViFWgD5Rz99xgMAAA==
headers:
Access-Control-Allow-Headers:
- Content-Type,Content-Disposition
Access-Control-Allow-Methods:
- OPTIONS,GET
Access-Control-Allow-Origin:
- '*'
Access-Control-Expose-Headers:
- Content-Disposition
Cache-Control:
- no-store
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '220'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 11 Jun 2024 02:34:03 GMT
Pragma:
- no-cache
Set-Cookie:
- cookiesession1=678A3E0EE607407E823ED4EA4F0C28B9;Expires=Wed, 11 Jun 2025 02:34:03
GMT;Path=/;Secure;HttpOnly
Vary:
- Accept-Encoding
strict-transport-security:
- max-age=31536000; includeSubDomains
x-amz-apigw-id:
- ZLmgUG4BCYcFe8Q=
x-amzn-requestid:
- b77d47db-cd3e-492d-a63f-1ab9a17c16f8
x-amzn-trace-id:
- Root=1-6667b79b-358f5ab1a50c2313c1e18089;Parent=15119c60494acd17;Sampled=0;lineage=e7c0e2ee:0
x-frame-options:
- SAMEORIGIN
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,64 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://markets.newyorkfed.org/api/rates/secured/sofr/search.json?startDate=2024-06-01&endDate=2024-06-06
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWUCpKTQtKLEktVrJSiFaoVlBKTUtLTS7JLEt1SSxJVbJSUDIyMDLRNTDTNTBT
0lFQKqksAIsG+7sFKSnoKBWkFiWn5pWAjFCyUjDVMzZGCAZA5DJzUg3BckaW2OSMTMGSxkbYJM0h
kiYG2CQtLcE6TUwUdJTK8nNKc1M985wyc3Iy8/NA3jEyMLBQ0FEqSi3LLM7Mz/PMS8lMTizJLwJ5
SkmhVge/b00p9a0xVjcT41tjrOEE8y0ogLH41tDSAqSNTN+aUOpbusetJSi9kOlbY6J8a4otzQ1I
Sja0NMTnW8AUYhVqAQ8xhrzKAwAA
headers:
Access-Control-Allow-Headers:
- Content-Type,Content-Disposition
Access-Control-Allow-Methods:
- OPTIONS,GET
Access-Control-Allow-Origin:
- '*'
Access-Control-Expose-Headers:
- Content-Disposition
Cache-Control:
- no-store
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '249'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 08 Jun 2024 05:59:35 GMT
Pragma:
- no-cache
Set-Cookie:
- cookiesession1=678A3E0EBA19E6E38D9D5186C73F260F;Expires=Sun, 08 Jun 2025 05:59:35
GMT;Path=/;Secure;HttpOnly
Vary:
- Accept-Encoding
strict-transport-security:
- max-age=31536000; includeSubDomains
x-amz-apigw-id:
- ZCLzNFtZiYcFmHQ=
x-amzn-requestid:
- 67713ca6-2c16-438f-a2a5-fd48b4fb02a1
x-amzn-trace-id:
- Root=1-6663f347-775ee28c7594e08357ca5722;Parent=7fe874cce0755572;Sampled=0;lineage=e7c0e2ee:0
x-frame-options:
- SAMEORIGIN
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
version: 1

View File

@@ -7,10 +7,16 @@ from openbb_core.app.service.user_service import UserService
from openbb_federal_reserve.models.central_bank_holdings import (
FederalReserveCentralBankHoldingsFetcher,
)
from openbb_federal_reserve.models.fed_rates import FederalReserveFEDFetcher
from openbb_federal_reserve.models.federal_funds_rate import (
FederalReserveFederalFundsRateFetcher,
)
from openbb_federal_reserve.models.money_measures import (
FederalReserveMoneyMeasuresFetcher,
)
from openbb_federal_reserve.models.overnight_bank_funding_rate import (
FederalReserveOvernightBankFundingRateFetcher,
)
from openbb_federal_reserve.models.sofr import FederalReserveSOFRFetcher
from openbb_federal_reserve.models.treasury_rates import (
FederalReserveTreasuryRatesFetcher,
)
@@ -51,11 +57,11 @@ def test_federal_reserve_money_measures_fetcher(credentials=test_credentials):
@pytest.mark.record_http
def test_federal_reserve_fed_fetcher(credentials=test_credentials):
"""Test the Federal Reserve FED fetcher."""
def test_federal_reserve_federal_funds_rate_fetcher(credentials=test_credentials):
"""Test the Federal Reserve Federal Funds Rate fetcher."""
params = {"start_date": date(2023, 1, 1), "end_date": date(2023, 6, 6)}
fetcher = FederalReserveFEDFetcher()
fetcher = FederalReserveFederalFundsRateFetcher()
result = fetcher.test(params, credentials)
assert result is None
@@ -78,3 +84,25 @@ def test_federal_reserve_central_bank_holdings_fetcher(credentials=test_credenti
fetcher = FederalReserveCentralBankHoldingsFetcher()
result = fetcher.test(params, credentials)
assert result is None
@pytest.mark.record_http
def test_federal_reserve_sofr_fetcher(credentials=test_credentials):
"""Test the Federal Reserve SOFR Fetcher."""
params = {"start_date": date(2024, 6, 1), "end_date": date(2024, 6, 6)}
fetcher = FederalReserveSOFRFetcher()
result = fetcher.test(params, credentials)
assert result is None
@pytest.mark.record_http
def test_federal_reserve_overnight_bank_funding_rate_fetcher(
credentials=test_credentials,
):
"""Test the Federal Reserve Overnight Bank Funding Rate Fetcher."""
params = {"start_date": date(2024, 6, 1), "end_date": date(2024, 6, 6)}
fetcher = FederalReserveOvernightBankFundingRateFetcher()
result = fetcher.test(params, credentials)
assert result is None

View File

@@ -1,20 +1,22 @@
"""FRED provider module."""
from openbb_core.provider.abstract.provider import Provider
from openbb_fred.models.ameribor_rates import FREDAMERIBORFetcher
from openbb_fred.models.ameribor import FredAmeriborFetcher
from openbb_fred.models.balance_of_payments import FredBalanceOfPaymentsFetcher
from openbb_fred.models.bond_indices import FredBondIndicesFetcher
from openbb_fred.models.commercial_paper import FREDCommercialPaperFetcher
from openbb_fred.models.consumer_price_index import FREDConsumerPriceIndexFetcher
from openbb_fred.models.cp import FREDCommercialPaperFetcher
from openbb_fred.models.dwpcr_rates import FREDDiscountWindowPrimaryCreditRateFetcher
from openbb_fred.models.ecb_interest_rates import (
FREDEuropeanCentralBankInterestRatesFetcher,
)
from openbb_fred.models.estr_rates import FREDESTRFetcher
from openbb_fred.models.euro_short_term_rate import FredEuroShortTermRateFetcher
from openbb_fred.models.fed_projections import FREDPROJECTIONFetcher
from openbb_fred.models.fed_rates import FREDFEDFetcher
from openbb_fred.models.federal_funds_rate import FredFederalFundsRateFetcher
from openbb_fred.models.ffrmc import FREDSelectedTreasuryConstantMaturityFetcher
from openbb_fred.models.hqm import FREDHighQualityMarketCorporateBondFetcher
from openbb_fred.models.high_quality_market import (
FredHighQualityMarketCorporateBondFetcher,
)
from openbb_fred.models.ice_bofa import FREDICEBofAFetcher
from openbb_fred.models.iorb_rates import FREDIORBFetcher
from openbb_fred.models.manufacturing_outlook_texas import (
@@ -22,6 +24,9 @@ from openbb_fred.models.manufacturing_outlook_texas import (
)
from openbb_fred.models.moody import FREDMoodyCorporateBondIndexFetcher
from openbb_fred.models.mortgage_indices import FredMortgageIndicesFetcher
from openbb_fred.models.overnight_bank_funding_rate import (
FredOvernightBankFundingRateFetcher,
)
from openbb_fred.models.regional import FredRegionalDataFetcher
from openbb_fred.models.retail_prices import FredRetailPricesFetcher
from openbb_fred.models.search import (
@@ -31,7 +36,7 @@ from openbb_fred.models.senior_loan_officer_survey import (
FredSeniorLoanOfficerSurveyFetcher,
)
from openbb_fred.models.series import FredSeriesFetcher
from openbb_fred.models.sofr_rates import FREDSOFRFetcher
from openbb_fred.models.sofr import FREDSOFRFetcher
from openbb_fred.models.sonia_rates import FREDSONIAFetcher
from openbb_fred.models.spot import FREDSpotRateFetcher
from openbb_fred.models.survey_of_economic_conditions_chicago import (
@@ -58,10 +63,10 @@ Research division of the Federal Reserve Bank of St. Louis that has more than
"ConsumerPriceIndex": FREDConsumerPriceIndexFetcher,
"USYieldCurve": FREDUSYieldCurveFetcher,
"SOFR": FREDSOFRFetcher,
"ESTR": FREDESTRFetcher,
"EuroShortTermRate": FredEuroShortTermRateFetcher,
"SONIA": FREDSONIAFetcher,
"AMERIBOR": FREDAMERIBORFetcher,
"FEDFUNDS": FREDFEDFetcher,
"Ameribor": FredAmeriborFetcher,
"FederalFundsRate": FredFederalFundsRateFetcher,
"PROJECTIONS": FREDPROJECTIONFetcher,
"IORB": FREDIORBFetcher,
"DiscountWindowPrimaryCreditRate": FREDDiscountWindowPrimaryCreditRateFetcher,
@@ -70,6 +75,7 @@ Research division of the Federal Reserve Bank of St. Louis that has more than
"ManufacturingOutlookTexas": FredManufacturingOutlookTexasFetcher,
"MoodyCorporateBondIndex": FREDMoodyCorporateBondIndexFetcher,
"MortgageIndices": FredMortgageIndicesFetcher,
"OvernightBankFundingRate": FredOvernightBankFundingRateFetcher,
"CommercialPaper": FREDCommercialPaperFetcher,
"FredSearch": FredSearchFetcher,
"FredSeries": FredSeriesFetcher,
@@ -77,7 +83,7 @@ Research division of the Federal Reserve Bank of St. Louis that has more than
"RetailPrices": FredRetailPricesFetcher,
"SeniorLoanOfficerSurvey": FredSeniorLoanOfficerSurveyFetcher,
"SpotRate": FREDSpotRateFetcher,
"HighQualityMarketCorporateBond": FREDHighQualityMarketCorporateBondFetcher,
"HighQualityMarketCorporateBond": FredHighQualityMarketCorporateBondFetcher,
"TreasuryConstantMaturity": FREDTreasuryConstantMaturityFetcher,
"SelectedTreasuryConstantMaturity": FREDSelectedTreasuryConstantMaturityFetcher,
"SelectedTreasuryBill": FREDSelectedTreasuryBillFetcher,

View File

@@ -0,0 +1,227 @@
"""FRED AMERIBOR Model."""
# pylint: disable=unused-argument
from typing import Any, Dict, List, Literal, Optional, Union
from openbb_core.provider.abstract.annotated_result import AnnotatedResult
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.ameribor import (
AmeriborData,
AmeriborQueryParams,
)
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_fred.models.series import FredSeriesFetcher
from pandas import Categorical, DataFrame
from pydantic import Field
MATURITY_TO_FRED_ID = {
"all": "AMERIBOR,AMBOR30,AMBOR90,AMBOR30T,AMBOR90T",
"overnight": "AMERIBOR",
"average_30d": "AMBOR30",
"average_90d": "AMBOR90",
"term_30d": "AMBOR30T",
"term_90d": "AMBOR90T",
}
class FredAmeriborQueryParams(AmeriborQueryParams):
"""FRED AMERIBOR Query."""
__json_schema_extra__ = {"maturity": {"multiple_items_allowed": True}}
maturity: Union[
Literal[
"all",
"overnight",
"average_30d",
"average_90d",
"term_30d",
"term_90d",
],
str,
] = Field(
default="all",
description="Period of AMERIBOR rate.",
json_schema_extra={
"choices": [
"all",
"overnight",
"average_30d",
"average_90d",
"term_30d",
"term_90d",
]
},
)
frequency: Union[
None,
Literal[
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
],
] = Field(
default=None,
description="""
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
""",
json_schema_extra={
"choices": [
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
]
},
)
aggregation_method: Union[None, Literal["avg", "sum", "eop"]] = Field(
default=None,
description="""
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
""",
json_schema_extra={"choices": ["avg", "sum", "eop"]},
)
transform: Union[
None, Literal["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
] = Field(
default=None,
description="""
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
""",
json_schema_extra={
"choices": ["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
},
)
class FredAmeriborData(AmeriborData):
"""FRED AMERIBOR Data."""
class FredAmeriborFetcher(Fetcher[FredAmeriborQueryParams, List[FredAmeriborData]]):
"""FRED Ameribor Fetcher."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> FredAmeriborQueryParams:
"""Transform query."""
return FredAmeriborQueryParams(**params)
@staticmethod
async def aextract_data(
query: FredAmeriborQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> Dict:
"""Extract data."""
maturities = query.maturity.split(",")
ids = ""
if len(maturities) == 1 or "all" in maturities:
ids = MATURITY_TO_FRED_ID[query.maturity]
else:
ids = ",".join([MATURITY_TO_FRED_ID[m] for m in maturities])
try:
response = await FredSeriesFetcher.fetch_data(
dict(
symbol=ids,
start_date=query.start_date,
end_date=query.end_date,
frequency=query.frequency,
aggregation_method=query.aggregation_method,
transform=query.transform,
),
credentials,
)
except Exception as e:
raise e from e
return {
"metadata": response.metadata,
"data": [d.model_dump() for d in response.result],
}
@staticmethod
def transform_data(
query: FredAmeriborQueryParams,
data: Dict,
**kwargs: Any,
) -> AnnotatedResult[List[FredAmeriborData]]:
"""Transform data."""
if not data["data"]:
raise EmptyDataError("The request was returned with no data.")
metadata = data.get("metadata", {})
maturity_dict = {
"AMERIBOR": "overnight",
"AMBOR30": "day_30",
"AMBOR90": "day_90",
"AMBOR30T": "day_30",
"AMBOR90T": "day_90",
}
df = DataFrame(data.get("data", []))
# Flatten data
df = df.melt(id_vars="date", var_name="symbol", value_name="value").query(
"value.notnull()"
)
df = df.rename(columns={"value": "rate"}).sort_values(by="date")
# Normalize percent values
df["rate"] = df["rate"].astype(float) / 100
df["maturity"] = df["symbol"].apply(lambda x: maturity_dict.get(x, x))
df["title"] = df["symbol"].apply(lambda x: metadata.get(x, {}).get("title", x))
maturity_categories = ["overnight", "day_30", "day_90"]
df["maturity"] = Categorical(
df["maturity"], categories=maturity_categories, ordered=True
)
df.sort_values(by=["date", "maturity"], inplace=True)
records = df.to_dict(orient="records")
return AnnotatedResult(
result=[FredAmeriborData.model_validate(d) for d in records],
metadata=metadata,
)

View File

@@ -1,92 +0,0 @@
"""FRED AMERIBOR Model."""
from typing import Any, Dict, List, Literal, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.ameribor_rates import (
AMERIBORData,
AMERIBORQueryParams,
)
from openbb_fred.utils.fred_base import Fred
from pydantic import Field, field_validator
AMERIBOR_PARAMETER_TO_FRED_ID = {
"overnight": "AMERIBOR",
"term_30": "AMBOR30T",
"term_90": "AMBOR90T",
"1_week_term_structure": "AMBOR1W",
"1_month_term_structure": "AMBOR1M",
"3_month_term_structure": "AMBOR3M",
"6_month_term_structure": "AMBOR6M",
"1_year_term_structure": "AMBOR1Y",
"2_year_term_structure": "AMBOR2Y",
"30_day_ma": "AMBOR30",
"90_day_ma": "AMBOR90",
}
class FREDAMERIBORQueryParams(AMERIBORQueryParams):
"""FRED AMERIBOR Query."""
parameter: Literal[
"overnight",
"term_30",
"term_90",
"1_week_term_structure",
"1_month_term_structure",
"3_month_term_structure",
"6_month_term_structure",
"1_year_term_structure",
"2_year_term_structure",
"30_day_ma",
"90_day_ma",
] = Field(default="overnight", description="Period of AMERIBOR rate.")
class FREDAMERIBORData(AMERIBORData):
"""FRED AMERIBOR Data."""
__alias_dict__ = {"rate": "value"}
@field_validator("rate", mode="before", check_fields=False)
@classmethod
def value_validate(cls, v):
"""Validate rate."""
try:
return float(v)
except ValueError:
return None
class FREDAMERIBORFetcher(
Fetcher[FREDAMERIBORQueryParams, List[Dict[str, List[FREDAMERIBORData]]]]
):
"""Transform the query, extract and transform the data from the FRED endpoints."""
data_type = FREDAMERIBORData
@staticmethod
def transform_query(params: Dict[str, Any]) -> FREDAMERIBORQueryParams:
"""Transform query."""
return FREDAMERIBORQueryParams(**params)
@staticmethod
def extract_data(
query: FREDAMERIBORQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> dict:
"""Extract data."""
key = credentials.get("fred_api_key") if credentials else ""
fred_series = AMERIBOR_PARAMETER_TO_FRED_ID[query.parameter]
fred = Fred(key)
data = fred.get_series(fred_series, query.start_date, query.end_date, **kwargs)
return data
@staticmethod
def transform_data(
query: FREDAMERIBORQueryParams, data: dict, **kwargs: Any
) -> List[Dict[str, List[FREDAMERIBORData]]]:
"""Transform data."""
keys = ["date", "value"]
return [FREDAMERIBORData(**{k: x[k] for k in keys}) for x in data]

View File

@@ -45,6 +45,12 @@ BAML_CATEGORIES = {
"oas": "BAMLC0A0CM",
"yield_to_worst": "BAMLC0A0CMSYTW",
},
"seasoned_corporate": {
"total_return": "",
"yield": "DAAA,AAA10Y,AAAFF,DBAA,BAA10Y,BAAFF",
"oas": "",
"yield_to_worst": "",
},
"high_yield": {
"total_return": "BAMLHYH0A0HYM2TRIV",
"yield": "BAMLH0A0HYM2EY",
@@ -259,6 +265,7 @@ BAML_CATEGORIES = {
BamlCategories = Literal["high_yield", "us", "emerging_markets"]
INDEX_CHOICES = [
"corporate",
"seasoned_corporate",
"liquid_corporate",
"yield_curve",
"crossover",
@@ -449,6 +456,15 @@ class FredBondIndicesFetcher(
+ f" Must be one of {','.join(BAML_CATEGORIES.get('us'))}."
)
messages.append(message)
elif (
index == "seasoned_corporate"
and values["index_type"] != "yield"
):
message = (
"Invalid index_type for index: 'seasoned_corporate'."
+ " Must be 'yield'."
)
messages.append(message)
else:
new_index.append(index)
if values["category"] == "high_yield":

View File

@@ -0,0 +1,372 @@
"""FRED Commercial Paper Model."""
# pylint: disable=unused-argument
from typing import Any, Dict, List, Literal, Optional, Union
from openbb_core.provider.abstract.annotated_result import AnnotatedResult
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.commercial_paper import (
CommercialPaperData,
CommercialPaperParams,
)
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_fred.models.series import FredSeriesFetcher
from pandas import Categorical, DataFrame
from pydantic import Field
CP_SERIES_IDS = {
"RIFSPPAAAD01NB": {
"maturity": "overnight",
"asset": "asset_backed",
"title": "Overnight AA Asset-Backed Commercial Paper Interest Rate",
},
"RIFSPPAAAD07NB": {
"maturity": "day_7",
"asset": "asset_backed",
"title": "7-Day AA Asset-Backed Commercial Paper Interest Rate",
},
"RIFSPPAAAD15NB": {
"maturity": "day_15",
"asset": "asset_backed",
"title": "15-Day AA Asset-Backed Commercial Paper Interest Rate",
},
"RIFSPPAAAD30NB": {
"maturity": "day_30",
"asset": "asset_backed",
"title": "30-Day AA Asset-Backed Commercial Paper Interest Rate",
},
"RIFSPPAAAD60NB": {
"maturity": "day_60",
"asset": "asset_backed",
"title": "60-Day AA Asset-Backed Commercial Paper Interest Rate",
},
"RIFSPPAAAD90NB": {
"maturity": "day_90",
"asset": "asset_backed",
"title": "90-Day AA Asset-Backed Commercial Paper Interest Rate",
},
"RIFSPPFAAD01NB": {
"maturity": "overnight",
"asset": "financial",
"title": "Overnight AA Financial Commercial Paper Interest Rate",
},
"RIFSPPFAAD07NB": {
"maturity": "day_7",
"asset": "financial",
"title": "7-Day AA Financial Commercial Paper Interest Rate",
},
"RIFSPPFAAD15NB": {
"maturity": "day_15",
"asset": "financial",
"title": "15-Day AA Financial Commercial Paper Interest Rate",
},
"RIFSPPFAAD30NB": {
"maturity": "day_30",
"asset": "financial",
"title": "30-Day AA Financial Commercial Paper Interest Rate",
},
"RIFSPPFAAD60NB": {
"maturity": "day_60",
"asset": "financial",
"title": "60-Day AA Financial Commercial Paper Interest Rate",
},
"RIFSPPFAAD90NB": {
"maturity": "day_90",
"asset": "financial",
"title": "90-Day AA Financial Commercial Paper Interest Rate",
},
"RIFSPPNAAD01NB": {
"maturity": "overnight",
"asset": "nonfinancial",
"title": "Overnight AA Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNAAD07NB": {
"maturity": "day_7",
"asset": "nonfinancial",
"title": "7-Day AA Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNAAD15NB": {
"maturity": "day_15",
"asset": "nonfinancial",
"title": "15-Day AA Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNAAD30NB": {
"maturity": "day_30",
"asset": "nonfinancial",
"title": "30-Day AA Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNAAD60NB": {
"maturity": "day_60",
"asset": "nonfinancial",
"title": "60-Day AA Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNAAD90NB": {
"maturity": "day_90",
"asset": "nonfinancial",
"title": "90-Day AA Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNA2P2D01NB": {
"maturity": "overnight",
"asset": "a2p2",
"title": "Overnight A2/P2 Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNA2P2D07NB": {
"maturity": "day_7",
"asset": "a2p2",
"title": "7-Day A2/P2 Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNA2P2D15NB": {
"maturity": "day_15",
"asset": "a2p2",
"title": "15-Day A2/P2 Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNA2P2D30NB": {
"maturity": "day_30",
"asset": "a2p2",
"title": "30-Day A2/P2 Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNA2P2D60NB": {
"maturity": "day_60",
"asset": "a2p2",
"title": "60-Day A2/P2 Nonfinancial Commercial Paper Interest Rate",
},
"RIFSPPNA2P2D90NB": {
"maturity": "day_90",
"asset": "a2p2",
"title": "90-Day A2/P2 Nonfinancial Commercial Paper Interest Rate",
},
}
ALL_IDS = list(CP_SERIES_IDS)
class FREDCommercialPaperParams(CommercialPaperParams):
"""FRED Commercial Paper Query."""
__json_schema_extra__ = {
"maturity": {"multiple_items_allowed": True},
"category": {"multiple_items_allowed": True},
}
maturity: Union[
str, Literal["all", "overnight", "7d", "15d", "30d", "60d", "90d"]
] = Field(
default="all",
description="A target maturity.",
json_schema_extra={
"choices": ["all", "overnight", "7d", "15d", "30d", "60d", "90d"]
},
)
category: Union[
str, Literal["all", "asset_backed", "financial", "nonfinancial", "a2p2"]
] = Field(
default="all",
description="The category of asset.",
json_schema_extra={
"choices": ["all", "asset_backed", "financial", "nonfinancial", "a2p2"]
},
)
frequency: Union[
None,
Literal[
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
],
] = Field(
default=None,
description="""
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
""",
json_schema_extra={
"choices": [
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
]
},
)
aggregation_method: Union[None, Literal["avg", "sum", "eop"]] = Field(
default=None,
description="""
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
""",
json_schema_extra={"choices": ["avg", "sum", "eop"]},
)
transform: Union[
None, Literal["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
] = Field(
default=None,
description="""
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
""",
json_schema_extra={
"choices": ["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
},
)
class FREDCommercialPaperData(CommercialPaperData):
"""FRED Commercial Paper Data."""
asset_type: Literal["asset_backed", "financial", "nonfinancial", "a2p2"] = Field(
description="The category of asset."
)
class FREDCommercialPaperFetcher(
Fetcher[
FREDCommercialPaperParams,
List[FREDCommercialPaperData],
]
):
"""FRED Commercial Paper Fetcher."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> FREDCommercialPaperParams:
"""Transform query."""
return FREDCommercialPaperParams(**params)
@staticmethod
async def aextract_data(
query: FREDCommercialPaperParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> Dict:
"""Extract data."""
ids: List[str] = []
if query.maturity == "all" and query.category == "all":
ids = ALL_IDS
else:
MAT_DICT = {
"overnight": "01",
"7d": "07",
"15d": "15",
"30d": "30",
"60d": "60",
"90d": "90",
}
CAT_DICT = {
"asset_backed": "AAAD",
"financial": "FAAD",
"nonfinancial": "NAAD",
"a2p2": "NA2P2D",
}
maturities = query.maturity.split(",")
categories = query.category.split(",")
if "all" in categories:
categories = list(CAT_DICT)
if "all" in maturities:
maturities = list(MAT_DICT)
for cat in categories:
for mat in maturities:
ids.append(f"RIFSPP{CAT_DICT.get(cat)}{MAT_DICT.get(mat)}NB")
try:
response = await FredSeriesFetcher.fetch_data(
dict(
symbol=",".join(ids),
start_date=query.start_date if query.start_date else "2019-01-01",
end_date=query.end_date,
frequency=query.frequency,
aggregation_method=query.aggregation_method,
transform=query.transform,
),
credentials,
)
except Exception as e:
raise e from e
return {
"metadata": response.metadata,
"data": [d.model_dump() for d in response.result],
}
@staticmethod
def transform_data(
query: FREDCommercialPaperParams,
data: Dict,
**kwargs: Any,
) -> List[FREDCommercialPaperData]:
"""Transform data."""
if not data:
raise EmptyDataError("The request was returned empty.")
df = DataFrame(data["data"])
metadata = data.get("metadata", {})
# Flatten data
df = df.melt(id_vars="date", var_name="symbol", value_name="value").query(
"value.notnull()"
)
df = df.rename(columns={"value": "rate"}).sort_values(by="date")
# Normalize percent values
df["rate"] = df["rate"].astype(float) / 100
# Add asset type, maturity, and title
df["asset_type"] = df["symbol"].apply(lambda x: CP_SERIES_IDS[x]["asset"])
df["title"] = df["symbol"].apply(lambda x: CP_SERIES_IDS[x]["title"])
df["maturity"] = df["symbol"].apply(lambda x: CP_SERIES_IDS[x]["maturity"])
# Categorize and order.
asset_type_categories = ["asset_backed", "financial", "nonfinancial", "a2p2"]
maturity_categories = [
"overnight",
"day_7",
"day_15",
"day_30",
"day_60",
"day_90",
]
df["asset_type"] = Categorical(
df["asset_type"], categories=asset_type_categories, ordered=True
)
df["maturity"] = Categorical(
df["maturity"], categories=maturity_categories, ordered=True
)
df.sort_values(by=["date", "asset_type", "maturity"], inplace=True)
records = df.to_dict(orient="records")
return AnnotatedResult(
result=[FREDCommercialPaperData.model_validate(d) for d in records],
metadata=metadata,
)

View File

@@ -1,87 +0,0 @@
"""FRED Commercial Paper Model."""
from typing import Any, Dict, List, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.cp import (
CommercialPaperData,
CommercialPaperParams,
)
from openbb_fred.utils.fred_base import Fred
from openbb_fred.utils.fred_helpers import get_cp_series_id
from pydantic import field_validator
class FREDCommercialPaperParams(CommercialPaperParams):
"""FRED Commercial Paper Query."""
class FREDCommercialPaperData(CommercialPaperData):
"""FRED Commercial Paper Data."""
__alias_dict__ = {"rate": "value"}
@field_validator("rate", mode="before", check_fields=False)
@classmethod
def value_validate(cls, v):
"""Validate rate."""
try:
return float(v)
except ValueError:
return None
class FREDCommercialPaperFetcher(
Fetcher[
FREDCommercialPaperParams,
List[FREDCommercialPaperData],
]
):
"""Transform the query, extract and transform the data from the FRED endpoints."""
data_type = FREDCommercialPaperData
@staticmethod
def transform_query(params: Dict[str, Any]) -> FREDCommercialPaperParams:
"""Transform query."""
return FREDCommercialPaperParams(**params)
@staticmethod
def extract_data(
query: FREDCommercialPaperParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any
) -> list:
"""Extract data."""
key = credentials.get("fred_api_key") if credentials else ""
fred = Fred(key)
series = get_cp_series_id(
maturity=query.maturity,
category=query.category,
grade=query.grade,
)
data = []
for s in series:
id_ = s["FRED Series ID"]
title = s["Title"]
d = fred.get_series(
series_id=id_,
start_date=query.start_date,
end_date=query.end_date,
**kwargs,
)
for item in d:
item["title"] = title
data.extend(d)
return data
@staticmethod
def transform_data(
query: FREDCommercialPaperParams, data: list, **kwargs: Any
) -> List[FREDCommercialPaperData]:
"""Transform data."""
return [FREDCommercialPaperData.model_validate(d) for d in data]

View File

@@ -1,81 +0,0 @@
"""FRED ESTR Model."""
from typing import Any, Dict, List, Literal, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.estr_rates import ESTRData, ESTRQueryParams
from openbb_fred.utils.fred_base import Fred
from pydantic import Field, field_validator
ESTR_PARAMETER_TO_ID = {
"volume_weighted_trimmed_mean_rate": "ECBESTRVOLWGTTRMDMNRT",
"number_of_transactions": "ECBESTRNUMTRANS",
"number_of_active_banks": "ECBESTRNUMACTBANKS",
"total_volume": "ECBESTRTOTVOL",
"share_of_volume_of_the_5_largest_active_banks": "ECBESTRSHRVOL5LRGACTBNK",
"rate_at_75th_percentile_of_volume": "ECBESTRRT75THPCTVOL",
"rate_at_25th_percentile_of_volume": "ECBESTRRT25THPCTVOL",
}
class FREDESTRQueryParams(ESTRQueryParams):
"""FRED ESTR Query."""
parameter: Literal[
"volume_weighted_trimmed_mean_rate",
"number_of_transactions",
"number_of_active_banks",
"total_volume",
"share_of_volume_of_the_5_largest_active_banks",
"rate_at_75th_percentile_of_volume",
"rate_at_25th_percentile_of_volume",
] = Field(
default="volume_weighted_trimmed_mean_rate", description="Period of ESTR rate."
)
class FREDESTRData(ESTRData):
"""FRED ESTR Data."""
__alias_dict__ = {"rate": "value"}
@field_validator("rate", mode="before", check_fields=False)
@classmethod
def value_validate(cls, v):
"""Validate rate."""
try:
return float(v)
except ValueError:
return None
class FREDESTRFetcher(
Fetcher[FREDESTRQueryParams, List[Dict[str, List[FREDESTRData]]]]
):
"""Transform the query, extract and transform the data from the FRED endpoints."""
data_type = FREDESTRData
@staticmethod
def transform_query(params: Dict[str, Any]) -> FREDESTRQueryParams:
"""Transform query"""
return FREDESTRQueryParams(**params)
@staticmethod
def extract_data(
query: FREDESTRQueryParams, credentials: Optional[Dict[str, str]], **kwargs: Any
) -> dict:
"""Extract data"""
key = credentials.get("fred_api_key") if credentials else ""
fred_series = ESTR_PARAMETER_TO_ID[query.parameter]
fred = Fred(key)
data = fred.get_series(fred_series, query.start_date, query.end_date, **kwargs)
return data
@staticmethod
def transform_data(
query: FREDESTRQueryParams, data: dict, **kwargs: Any
) -> List[Dict[str, List[FREDESTRData]]]:
"""Transform data"""
keys = ["date", "value"]
return [FREDESTRData(**{k: x[k] for k in keys}) for x in data]

View File

@@ -0,0 +1,194 @@
"""FRED Euro Short Term Rate Standard Model."""
from typing import Any, Dict, List, Literal, Optional, Union
from openbb_core.provider.abstract.annotated_result import AnnotatedResult
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.euro_short_term_rate import (
EuroShortTermRateData,
EuroShortTermRateQueryParams,
)
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_fred.models.series import FredSeriesFetcher
from pydantic import Field, field_validator
class FredEuroShortTermRateQueryParams(EuroShortTermRateQueryParams):
"""FRED Euro Short Term Rate Query."""
frequency: Union[
None,
Literal[
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
],
] = Field(
default=None,
description="""
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
""",
json_schema_extra={
"choices": [
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
]
},
)
aggregation_method: Union[None, Literal["avg", "sum", "eop"]] = Field(
default=None,
description="""
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
""",
json_schema_extra={"choices": ["avg", "sum", "eop"]},
)
transform: Union[
None, Literal["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
] = Field(
default=None,
description="""
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
""",
json_schema_extra={
"choices": ["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
},
)
class FredEuroShortTermRateData(EuroShortTermRateData):
"""FRED Euro Short Term Rate Data."""
__alias_dict__ = {
"rate": "ECBESTRVOLWGTTRMDMNRT",
"transactions": "ECBESTRNUMTRANS",
"number_of_banks": "ECBESTRNUMACTBANKS",
"volume": "ECBESTRTOTVOL",
"large_bank_share_of_volume": "ECBESTRSHRVOL5LRGACTBNK",
"percentile_75": "ECBESTRRT75THPCTVOL",
"percentile_25": "ECBESTRRT25THPCTVOL",
}
@field_validator(
"rate",
"percentile_25",
"percentile_75",
"large_bank_share_of_volume",
mode="before",
check_fields=False,
)
@classmethod
def normalize_percent(cls, v):
"""Normalize percent."""
return float(v) / 100 if v else None
class FredEuroShortTermRateFetcher(
Fetcher[FredEuroShortTermRateQueryParams, List[FredEuroShortTermRateData]]
):
"""FRED Euro Short Term Rate Fetcher."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> FredEuroShortTermRateQueryParams:
"""Transform query"""
return FredEuroShortTermRateQueryParams(**params)
@staticmethod
async def aextract_data(
query: FredEuroShortTermRateQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> Dict:
"""Extract data"""
ids = [
"ECBESTRVOLWGTTRMDMNRT",
"ECBESTRNUMTRANS",
"ECBESTRNUMACTBANKS",
"ECBESTRTOTVOL",
"ECBESTRSHRVOL5LRGACTBNK",
"ECBESTRRT75THPCTVOL",
"ECBESTRRT25THPCTVOL",
]
try:
response = await FredSeriesFetcher.fetch_data(
dict(
symbol=",".join(ids),
start_date=query.start_date if query.start_date else "2019-10-02",
end_date=query.end_date,
frequency=query.frequency,
aggregation_method=query.aggregation_method,
transform=query.transform,
),
credentials,
)
except Exception as e:
raise e from e
return {
"metadata": response.metadata,
"data": [d.model_dump() for d in response.result],
}
@staticmethod
def transform_data(
query: FredEuroShortTermRateQueryParams,
data: Dict,
**kwargs: Any,
) -> List[List[FredEuroShortTermRateData]]:
"""Transform data"""
if not data:
raise EmptyDataError("The request was returned empty.")
return AnnotatedResult(
result=[
FredEuroShortTermRateData.model_validate(d)
for d in data.get("data", [])
if d.get("ECBESTRVOLWGTTRMDMNRT")
],
metadata=data.get("metadata", {}),
)

View File

@@ -1,80 +0,0 @@
"""FRED FED Model."""
from typing import Any, Dict, List, Literal, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.fed_rates import (
FEDData,
FEDQueryParams,
)
from openbb_fred.utils.fred_base import Fred
from pydantic import Field, field_validator
FED_PARAMETER_TO_FRED_ID = {
"monthly": "FEDFUNDS",
"daily": "DFF",
"weekly": "FF",
"daily_excl_weekend": "RIFSPFFNB",
"annual": "RIFSPFFNA",
"biweekly": "RIFSPFFNBWAW",
"volume": "EFFRVOL",
}
class FREDFEDQueryParams(FEDQueryParams):
"""FRED FED Query."""
parameter: Literal[
"monthly",
"daily",
"weekly",
"daily_excl_weekend",
"annual",
"biweekly",
"volume",
] = Field(default="weekly", description="Period of FED rate.")
class FREDFEDData(FEDData):
"""FRED FED Data."""
__alias_dict__ = {"rate": "value"}
@field_validator("rate", mode="before", check_fields=False)
@classmethod
def value_validate(cls, v):
"""Validate rate."""
try:
return float(v)
except ValueError:
return None
class FREDFEDFetcher(Fetcher[FREDFEDQueryParams, List[Dict[str, List[FREDFEDData]]]]):
"""FRED FED Model."""
data_type = FREDFEDData
@staticmethod
def transform_query(params: Dict[str, Any]) -> FREDFEDQueryParams:
"""Transform query."""
return FREDFEDQueryParams(**params)
@staticmethod
def extract_data(
query: FREDFEDQueryParams, credentials: Optional[Dict[str, str]], **kwargs: Any
) -> dict:
"""Extract data."""
key = credentials.get("fred_api_key") if credentials else ""
fred_series = FED_PARAMETER_TO_FRED_ID[query.parameter]
fred = Fred(key)
data = fred.get_series(fred_series, query.start_date, query.end_date, **kwargs)
return data
@staticmethod
def transform_data(
query: FREDFEDQueryParams, data: dict, **kwargs: Any
) -> List[Dict[str, List[FREDFEDData]]]:
"""Transform data."""
keys = ["date", "value"]
return [FREDFEDData(**{k: x[k] for k in keys}) for x in data]

View File

@@ -0,0 +1,203 @@
"""FRED Federal Funds Rate Model."""
from datetime import datetime
from typing import Any, Dict, List, Literal, Optional, Union
from openbb_core.provider.abstract.annotated_result import AnnotatedResult
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.federal_funds_rate import (
FederalFundsRateData,
FederalFundsRateQueryParams,
)
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_fred.models.series import FredSeriesFetcher
from pandas import DataFrame, to_datetime
from pydantic import Field
EFFR_SERIES_IDS = {
"rate": "DFF",
"target_range_upper": "DFEDTARU",
"target_range_lower": "DFEDTARL",
"percentile_1": "EFFR1",
"percentile_25": "EFFR25",
"percentile_75": "EFFR75",
"percentile_99": "EFFR99",
"volume": "EFFRVOL",
}
class FredFederalFundsRateQueryParams(FederalFundsRateQueryParams):
"""FRED Federal Funds Rate Query."""
frequency: Union[
None,
Literal[
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
],
] = Field(
default=None,
description="""
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
""",
json_schema_extra={
"choices": [
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
]
},
)
aggregation_method: Union[None, Literal["avg", "sum", "eop"]] = Field(
default=None,
description="""
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
""",
json_schema_extra={"choices": ["avg", "sum", "eop"]},
)
transform: Union[
None, Literal["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
] = Field(
default=None,
description="""
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
""",
json_schema_extra={
"choices": ["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
},
)
effr_only: bool = Field(
default=False,
description="Return data without quantiles, target ranges, and volume.",
)
class FredFederalFundsRateData(FederalFundsRateData):
"""FRED Federal Funds Rate Data."""
class FredFederalFundsRateFetcher(
Fetcher[FredFederalFundsRateQueryParams, List[FredFederalFundsRateData]]
):
"""FRED Federal Funds Rate Fetcher."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> FredFederalFundsRateQueryParams:
"""Transform query."""
transformed_params = params.copy()
now = datetime.now().date()
if params.get("start_date") is None:
transformed_params["start_date"] = (
datetime(2016, 1, 1).date()
if params.get("effr_only") is False
else None
)
if params.get("end_date") is None:
transformed_params["end_date"] = now
return FredFederalFundsRateQueryParams(**transformed_params)
@staticmethod
async def aextract_data(
query: FredFederalFundsRateQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> Dict:
"""Extract the raw data."""
ids = (
"DFF"
if query.effr_only is True
else ",".join(list(EFFR_SERIES_IDS.values()))
)
try:
response = await FredSeriesFetcher.fetch_data(
dict(
symbol=ids,
start_date=query.start_date,
end_date=query.end_date,
frequency=query.frequency,
aggregation_method=query.aggregation_method,
transform=query.transform,
),
credentials,
)
except Exception as e:
raise e from e
return {
"metadata": response.metadata,
"data": [d.model_dump() for d in response.result],
}
@staticmethod
def transform_data(
query: FredFederalFundsRateQueryParams, data: dict, **kwargs: Any
) -> AnnotatedResult[List[FredFederalFundsRateData]]:
"""Transform and validate the data."""
metadata = data.get("metadata", {})
df = DataFrame(data.get("data", [])).dropna()
if df.empty:
raise EmptyDataError(
"There was an error with the request and it was returned empty."
)
col_map = {v: k for k, v in EFFR_SERIES_IDS.items()}
df.date = df.date.apply(to_datetime)
df = df.set_index("date")
df = df.rename(columns=col_map)
for col in df.columns:
df[col] = (
df[col].astype(float) / 100
if col != "volume"
else df[col].astype(float)
)
records = df.reset_index().to_dict(orient="records")
return AnnotatedResult(
result=[FredFederalFundsRateData.model_validate(d) for d in records],
metadata={col_map[k]: v for k, v in metadata.items()},
)

View File

@@ -0,0 +1,143 @@
"""FRED High Quality Market Corporate Bond Model."""
import asyncio
from datetime import date as dateType
from typing import Any, Dict, List, Literal, Optional
from dateutil import parser
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.high_quality_market import (
HighQualityMarketCorporateBondData,
HighQualityMarketCorporateBondQueryParams,
)
from openbb_core.provider.utils.helpers import amake_request
from pandas import Categorical, DataFrame
from pydantic import Field, field_validator
class FredHighQualityMarketCorporateBondQueryParams(
HighQualityMarketCorporateBondQueryParams
):
"""FRED High Quality Market Corporate Bond Query."""
__json_schema_extra__ = {"date": {"multiple_items_allowed": True}}
yield_curve: Literal["spot", "par"] = Field(
default="spot",
description="The yield curve type.",
json_schema_extra={"choices": ["spot", "par"]},
)
@field_validator("date", mode="before", check_fields=False)
@classmethod
def validate_date(cls, v):
"""Validate the dates entered."""
if v is None:
return None
if isinstance(v, (list, dateType)):
return v
new_dates: List = []
date_param = v
if isinstance(date_param, str):
new_dates = date_param.split(",")
elif isinstance(date_param, dateType):
new_dates.append(date_param.strftime("%Y-%m-%d"))
elif isinstance(date_param, list) and isinstance(date_param[0], dateType):
new_dates = [d.strftime("%Y-%m-%d") for d in new_dates]
else:
new_dates = date_param
return ",".join(new_dates) if len(new_dates) > 1 else new_dates[0]
class FredHighQualityMarketCorporateBondData(HighQualityMarketCorporateBondData):
"""FRED High Quality Market Corporate Bond Data."""
class FredHighQualityMarketCorporateBondFetcher(
Fetcher[
FredHighQualityMarketCorporateBondQueryParams,
List[FredHighQualityMarketCorporateBondData],
]
):
"""FRED High Quality Market Corporate Bond Fetcher."""
@staticmethod
def transform_query(
params: Dict[str, Any]
) -> FredHighQualityMarketCorporateBondQueryParams:
"""Transform query."""
return FredHighQualityMarketCorporateBondQueryParams(**params)
@staticmethod
async def aextract_data(
query: FredHighQualityMarketCorporateBondQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> List[Dict]:
"""Extract data."""
api_key = credentials.get("fred_api_key") if credentials else ""
element_id = "219299" if query.yield_curve == "spot" else "219294"
dates: List = [""]
if query.date:
if query.date and isinstance(query.date, dateType):
query.date = query.date.strftime("%Y-%m-%d")
dates = query.date.split(",")
dates = [d.replace(d[-2:], "01") if len(d) == 10 else d for d in dates]
dates = list(set(dates))
dates = (
[f"&observation_date={date}" for date in dates if date] if dates else ""
)
URLS = [
f"https://api.stlouisfed.org/fred/release/tables?release_id=402&element_id={element_id}"
+ f"{date}&include_observation_values=true&api_key={api_key}"
+ "&file_type=json"
for date in dates
]
results = []
async def get_one(URL):
"""Get the observations for a single date."""
data = await amake_request(URL)
if data:
elements = {k: v for k, v in data["elements"].items()}
for k, v in elements.items():
value = v.get("observation_value")
if not value:
continue
maturity = v.get("name").lower().split("-")
results.append(
{
"date": parser.parse(
v.get("observation_date"),
).date(),
"rate": float(value) / 100,
"maturity": (maturity[1] + "_" + maturity[0]).replace(
" ", ""
),
}
)
await asyncio.gather(*[get_one(URL) for URL in URLS])
return results
@staticmethod
def transform_data(
query: FredHighQualityMarketCorporateBondQueryParams,
data: List[Dict],
**kwargs: Any,
) -> List[FredHighQualityMarketCorporateBondData]:
"""Transform data."""
df = DataFrame(data)
df["maturity_int"] = df["maturity"].str.replace("year_", "").astype(float)
maturity_categories = sorted(df.maturity_int.unique().tolist())
df["maturity_int"] = Categorical(
df["maturity_int"], categories=maturity_categories, ordered=True
)
df = df.sort_values(by=["date", "maturity_int"]).reset_index(drop=True)
df = df.drop(columns=["maturity_int"])
records = df.to_dict("records")
return [
FredHighQualityMarketCorporateBondData.model_validate(d) for d in records
]

View File

@@ -1,110 +0,0 @@
"""FRED High Quality Market Corporate Bond Model."""
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
from openbb_core.app.model.abstract.error import OpenBBError
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.hqm import (
HighQualityMarketCorporateBondData,
HighQualityMarketCorporateBondQueryParams,
)
from openbb_fred.utils.fred_base import Fred
from openbb_fred.utils.fred_helpers import (
YIELD_CURVE_SERIES_CORPORATE_PAR,
YIELD_CURVE_SERIES_CORPORATE_SPOT,
)
from pydantic import Field, field_validator
class FREDHighQualityMarketCorporateBondQueryParams(
HighQualityMarketCorporateBondQueryParams
):
"""FRED High Quality Market Corporate Bond Query."""
class FREDHighQualityMarketCorporateBondData(HighQualityMarketCorporateBondData):
"""FRED High Quality Market Corporate Bond Data."""
__alias_dict__ = {"rate": "value"}
series_id: str = Field(description="FRED series id.")
@field_validator("rate", mode="before", check_fields=False)
@classmethod
def value_validate(cls, v):
"""Validate rate."""
try:
return float(v)
except ValueError:
return None
class FREDHighQualityMarketCorporateBondFetcher(
Fetcher[
FREDHighQualityMarketCorporateBondQueryParams,
List[FREDHighQualityMarketCorporateBondData],
]
):
"""Transform the query, extract and transform the data from the FRED endpoints."""
@staticmethod
def transform_query(
params: Dict[str, Any]
) -> FREDHighQualityMarketCorporateBondQueryParams:
"""Transform query."""
return FREDHighQualityMarketCorporateBondQueryParams(**params)
@staticmethod
def extract_data(
query: FREDHighQualityMarketCorporateBondQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any
) -> list:
"""Extract data."""
key = credentials.get("fred_api_key") if credentials else ""
fred = Fred(key)
data = []
today = datetime.today().date()
if query.date and query.date >= today:
raise OpenBBError("Date must be in the past.")
start_date = (
query.date - timedelta(days=50)
if query.date
else today - timedelta(days=50)
)
if query.yield_curve == "spot":
fred_series = YIELD_CURVE_SERIES_CORPORATE_SPOT
elif query.yield_curve == "par":
fred_series = YIELD_CURVE_SERIES_CORPORATE_PAR
else:
raise OpenBBError("Invalid yield curve type.")
for maturity, id_ in fred_series.items():
d = fred.get_series(
series_id=id_,
start_date=start_date,
**kwargs,
)
for observation in d:
series_data = {
"series_id": id_,
"maturity": maturity,
"yield_curve": query.yield_curve,
"date": observation["date"],
"value": observation["value"],
}
data.append(series_data)
return data
@staticmethod
def transform_data(
query: FREDHighQualityMarketCorporateBondQueryParams, data: list, **kwargs: Any
) -> List[FREDHighQualityMarketCorporateBondData]:
"""Transform data."""
return [FREDHighQualityMarketCorporateBondData.model_validate(d) for d in data]

View File

@@ -0,0 +1,196 @@
"""FRED Overnight Bank Funding Rate Model."""
from typing import Any, Dict, List, Literal, Optional, Union
from openbb_core.provider.abstract.annotated_result import AnnotatedResult
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.overnight_bank_funding_rate import (
OvernightBankFundingRateData,
OvernightBankFundingRateQueryParams,
)
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_fred.models.series import FredSeriesFetcher
from pydantic import Field, field_validator
OBFR_ID_TO_FIELD = {
"OBFR": "rate",
"OBFR1": "percentile_1",
"OBFR25": "percentile_25",
"OBFR75": "percentile_75",
"OBFR99": "percentile_99",
"OBFRVOL": "volume",
}
ALL_IDS = list(OBFR_ID_TO_FIELD)
class FredOvernightBankFundingRateQueryParams(OvernightBankFundingRateQueryParams):
"""FRED Overnight Bank Funding Rate Query Params."""
frequency: Union[
None,
Literal[
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
],
] = Field(
default=None,
description="""
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
""",
json_schema_extra={
"choices": [
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
]
},
)
aggregation_method: Union[None, Literal["avg", "sum", "eop"]] = Field(
default=None,
description="""
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
""",
json_schema_extra={"choices": ["avg", "sum", "eop"]},
)
transform: Union[
None, Literal["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
] = Field(
default=None,
description="""
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
""",
json_schema_extra={
"choices": ["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
},
)
class FredOvernightBankFundingRateData(OvernightBankFundingRateData):
"""Fred Overnight Bank Funding Rate Data."""
__alias_dict__ = {
"rate": "OBFR",
"percentile_1": "OBFR1",
"percentile_25": "OBFR25",
"percentile_75": "OBFR75",
"percentile_99": "OBFR99",
"volume": "OBFRVOL",
}
@field_validator(
"rate",
"percentile_1",
"percentile_25",
"percentile_75",
"percentile_99",
mode="before",
check_fields=False,
)
@classmethod
def normalize_percent(cls, v):
"""Normalize percent."""
return float(v) / 100 if v else None
class FredOvernightBankFundingRateFetcher(
Fetcher[
FredOvernightBankFundingRateQueryParams, List[FredOvernightBankFundingRateData]
]
):
"""Fred Overnight Bank Funding Rate Fetcher."""
@staticmethod
def transform_query(
params: Dict[str, Any]
) -> FredOvernightBankFundingRateQueryParams:
"""Transform query."""
return FredOvernightBankFundingRateQueryParams(**params)
@staticmethod
async def aextract_data(
query: FredOvernightBankFundingRateQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any
) -> Dict:
"""Extract data."""
try:
response = await FredSeriesFetcher.fetch_data(
dict(
symbol=",".join(ALL_IDS),
start_date=query.start_date,
end_date=query.end_date,
frequency=query.frequency,
aggregation_method=query.aggregation_method,
transform=query.transform,
),
credentials,
)
except Exception as e:
raise e from e
return {
"metadata": response.metadata,
"data": [d.model_dump() for d in response.result],
}
@staticmethod
def transform_data(
query: FredOvernightBankFundingRateQueryParams, data: dict, **kwargs: Any
) -> AnnotatedResult[List[FredOvernightBankFundingRateData]]:
"""Transform data"""
if not data:
raise EmptyDataError("The request was returned empty.")
return AnnotatedResult(
result=[
FredOvernightBankFundingRateData.model_validate(d)
for d in data.get("data", [])
if d.get("OBFR")
],
metadata=data.get("metadata", {}),
)

View File

@@ -0,0 +1,216 @@
"""FRED SOFR Model."""
from typing import Any, Dict, List, Literal, Optional, Union
from openbb_core.provider.abstract.annotated_result import AnnotatedResult
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.sofr import SOFRData, SOFRQueryParams
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_fred.models.series import FredSeriesFetcher
from pydantic import Field, field_validator
SOFR_ID_TO_FIELD = {
"SOFR": "rate",
"SOFR1": "percentile_1",
"SOFR25": "percentile_25",
"SOFR75": "percentile_75",
"SOFR99": "percentile_99",
"SOFRVOL": "volume",
"SOFR30DAYAVG": "average_30d",
"SOFR90DAYAVG": "average_90d",
"SOFR180DAYAVG": "average_180d",
"SOFRINDEX": "index",
}
class FREDSOFRQueryParams(SOFRQueryParams):
"""FRED SOFR Query."""
frequency: Union[
None,
Literal[
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
],
] = Field(
default=None,
description="""
Frequency aggregation to convert daily data to lower frequency.
a = Annual
q = Quarterly
m = Monthly
w = Weekly
wef = Weekly, Ending Friday
weth = Weekly, Ending Thursday
wew = Weekly, Ending Wednesday
wetu = Weekly, Ending Tuesday
wem = Weekly, Ending Monday
wesu = Weekly, Ending Sunday
wesa = Weekly, Ending Saturday
bwew = Biweekly, Ending Wednesday
bwem = Biweekly, Ending Monday
""",
json_schema_extra={
"choices": [
"a",
"q",
"m",
"w",
"wef",
"weth",
"wew",
"wetu",
"wem",
"wesu",
"wesa",
"bwew",
"bwem",
]
},
)
aggregation_method: Union[None, Literal["avg", "sum", "eop"]] = Field(
default=None,
description="""
A key that indicates the aggregation method used for frequency aggregation.
avg = Average
sum = Sum
eop = End of Period
""",
json_schema_extra={"choices": ["avg", "sum", "eop"]},
)
transform: Union[
None, Literal["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
] = Field(
default=None,
description="""
Transformation type
None = No transformation
chg = Change
ch1 = Change from Year Ago
pch = Percent Change
pc1 = Percent Change from Year Ago
pca = Compounded Annual Rate of Change
cch = Continuously Compounded Rate of Change
cca = Continuously Compounded Annual Rate of Change
log = Natural Log
""",
json_schema_extra={
"choices": ["chg", "ch1", "pch", "pc1", "pca", "cch", "cca", "log"]
},
)
class FREDSOFRData(SOFRData):
"""FRED SOFR Data."""
__alias_dict__ = {
"rate": "SOFR",
"percentile_1": "SOFR1",
"percentile_25": "SOFR25",
"percentile_75": "SOFR75",
"percentile_99": "SOFR99",
"volume": "SOFRVOL",
"average_30d": "SOFR30DAYAVG",
"average_90d": "SOFR90DAYAVG",
"average_180d": "SOFR180DAYAVG",
"index": "SOFRINDEX",
}
average_30d: Optional[float] = Field(
default=None,
description="30-Day Average SOFR",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
average_90d: Optional[float] = Field(
default=None,
description="90-Day Average SOFR",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
average_180d: Optional[float] = Field(
default=None,
description="180-Day Average SOFR",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
index: Optional[float] = Field(
default=None,
description="SOFR index as 2018-04-02 = 1",
)
@field_validator(
"rate",
"percentile_1",
"percentile_25",
"percentile_75",
"percentile_99",
"average_30d",
"average_90d",
"average_180d",
mode="before",
check_fields=False,
)
@classmethod
def normalize_percent(cls, v):
"""Normalize percent."""
return float(v) / 100 if v else None
class FREDSOFRFetcher(Fetcher[FREDSOFRQueryParams, List[FREDSOFRData]]):
"""FRED SOFR Fetcher."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> FREDSOFRQueryParams:
"""Transform query."""
return FREDSOFRQueryParams(**params)
@staticmethod
async def aextract_data(
query: FREDSOFRQueryParams, credentials: Optional[Dict[str, str]], **kwargs: Any
) -> Dict:
"""Extract data."""
ids = list(SOFR_ID_TO_FIELD)
try:
response = await FredSeriesFetcher.fetch_data(
dict(
symbol=",".join(ids),
start_date=query.start_date if query.start_date else "2018-04-02",
end_date=query.end_date,
frequency=query.frequency,
aggregation_method=query.aggregation_method,
transform=query.transform,
),
credentials,
)
except Exception as e:
raise e from e
return {
"metadata": response.metadata,
"data": [d.model_dump() for d in response.result],
}
@staticmethod
def transform_data(
query: FREDSOFRQueryParams, data: dict, **kwargs: Any
) -> AnnotatedResult[List[FREDSOFRData]]:
"""Transform data"""
if not data:
raise EmptyDataError("The request was returned empty.")
return AnnotatedResult(
result=[
FREDSOFRData.model_validate(d)
for d in data.get("data", [])
if d.get("SOFR")
],
metadata=data.get("metadata", {}),
)

View File

@@ -1,71 +0,0 @@
"""FRED SOFR Model."""
from typing import Any, Dict, List, Literal, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.sofr_rates import SOFRData, SOFRQueryParams
from openbb_fred.utils.fred_base import Fred
from pydantic import Field, field_validator
SOFR_PARAMETER_TO_FRED_ID = {
"overnight": "SOFR",
"30_day": "SOFR30DAYAVG",
"90_day": "SOFR90DAYAVG",
"180_day": "SOFR180DAYAVG",
"index": "SOFRINDEX",
}
class FREDSOFRQueryParams(SOFRQueryParams):
"""FRED SOFR Query."""
period: Literal["overnight", "30_day", "90_day", "180_day", "index"] = Field(
default="overnight", description="Period of SOFR rate."
)
class FREDSOFRData(SOFRData):
"""FRED SOFR Data."""
__alias_dict__ = {"rate": "value"}
@field_validator("rate", mode="before", check_fields=False)
@classmethod
def value_validate(cls, v):
"""Validate rate."""
try:
return float(v)
except ValueError:
return None
class FREDSOFRFetcher(
Fetcher[FREDSOFRQueryParams, List[Dict[str, List[FREDSOFRData]]]]
):
"""Transform the query, extract and transform the data from the FRED endpoints."""
data_type = FREDSOFRData
@staticmethod
def transform_query(params: Dict[str, Any]) -> FREDSOFRQueryParams:
"""Transform query."""
return FREDSOFRQueryParams(**params)
@staticmethod
def extract_data(
query: FREDSOFRQueryParams, credentials: Optional[Dict[str, str]], **kwargs: Any
) -> dict:
"""Extract data."""
key = credentials.get("fred_api_key") if credentials else ""
fred_series = SOFR_PARAMETER_TO_FRED_ID[query.period]
fred = Fred(key)
data = fred.get_series(fred_series, query.start_date, query.end_date, **kwargs)
return data
@staticmethod
def transform_data(
query: FREDSOFRQueryParams, data: dict, **kwargs: Any
) -> List[Dict[str, List[FREDSOFRData]]]:
"""Transform data"""
keys = ["date", "value"]
return [FREDSOFRData(**{k: x[k] for k in keys}) for x in data]

View File

@@ -22,12 +22,27 @@ class FREDYieldCurveQueryParams(YieldCurveQueryParams):
__json_schema_extra__ = {"date": {"multiple_items_allowed": True}}
yield_curve_type: Literal[
"nominal", "real", "breakeven", "corporate_spot", "corporate_par"
"nominal",
"real",
"breakeven",
"treasury_minus_fed_funds",
"corporate_spot",
"corporate_par",
] = Field(
default="nominal",
description="Yield curve type."
+ " Nominal and Real Rates are available daily, others are monthly."
+ " The closest date to the requested date will be returned.",
json_schema_extra={
"choices": [
"nominal",
"real",
"breakeven",
"treasury_minus_fed_funds",
"corporate_spot",
"corporate_par",
]
},
)

View File

@@ -1,241 +0,0 @@
Maturity,Category,Grade,Title,Description,FRED Series ID
overnight,asset_backed,aa,Overnight AA Asset-Backed Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPAAAD01NB
7d,asset_backed,aa,7-Day AA Asset-Backed Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPAAAD07NB
15d,asset_backed,aa,15-Day AA Asset-Backed Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPAAAD15NB
30d,asset_backed,aa,30-Day AA Asset-Backed Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPAAAD30NB
60d,asset_backed,aa,60-Day AA Asset-Backed Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPAAAD60NB
90d,asset_backed,aa,90-Day AA Asset-Backed Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPAAAD90NB
overnight,financial,aa,Overnight AA Financial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPFAAD01NB
7d,financial,aa,7-Day AA Financial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPFAAD07NB
15d,financial,aa,15-Day AA Financial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPFAAD15NB
30d,financial,aa,30-Day AA Financial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPFAAD30NB
60d,financial,aa,60-Day AA Financial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPFAAD60NB
90d,financial,aa,90-Day AA Financial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPFAAD90NB
overnight,non_financial,aa,Overnight AA Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNAAD01NB
7d,non_financial,aa,7-Day AA Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNAAD07NB
15d,non_financial,aa,15-Day AA Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNAAD15NB
30d,non_financial,aa,30-Day AA Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNAAD30NB
60d,non_financial,aa,60-Day AA Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNAAD60NB
90d,non_financial,aa,90-Day AA Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNAAD90NB
overnight,non_financial,a2_p2,Overnight A2/P2 Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNA2P2D01NB
7d,non_financial,a2_p2,7-Day A2/P2 Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNA2P2D07NB
15d,non_financial,a2_p2,15-Day A2/P2 Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNA2P2D15NB
30d,non_financial,a2_p2,30-Day A2/P2 Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNA2P2D30NB
60d,non_financial,a2_p2,60-Day A2/P2 Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNA2P2D60NB
90d,non_financial,a2_p2,90-Day A2/P2 Nonfinancial Commercial Paper Interest Rate,"To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities.
Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates.
CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement.
For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, ""Robust Locally Weighted Regression and Smoothing Scatterplots,"" Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, ""Regression by Local Fitting,"" Journal of Econometrics, 37, 87-114.
Source: https://www.federalreserve.gov/releases/cp/about.htm
",RIFSPPNA2P2D90NB
1 Maturity Category Grade Title Description FRED Series ID
2 overnight asset_backed aa Overnight AA Asset-Backed Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPAAAD01NB
3 7d asset_backed aa 7-Day AA Asset-Backed Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPAAAD07NB
4 15d asset_backed aa 15-Day AA Asset-Backed Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPAAAD15NB
5 30d asset_backed aa 30-Day AA Asset-Backed Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPAAAD30NB
6 60d asset_backed aa 60-Day AA Asset-Backed Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPAAAD60NB
7 90d asset_backed aa 90-Day AA Asset-Backed Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPAAAD90NB
8 overnight financial aa Overnight AA Financial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPFAAD01NB
9 7d financial aa 7-Day AA Financial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPFAAD07NB
10 15d financial aa 15-Day AA Financial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPFAAD15NB
11 30d financial aa 30-Day AA Financial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPFAAD30NB
12 60d financial aa 60-Day AA Financial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPFAAD60NB
13 90d financial aa 90-Day AA Financial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPFAAD90NB
14 overnight non_financial aa Overnight AA Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNAAD01NB
15 7d non_financial aa 7-Day AA Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNAAD07NB
16 15d non_financial aa 15-Day AA Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNAAD15NB
17 30d non_financial aa 30-Day AA Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNAAD30NB
18 60d non_financial aa 60-Day AA Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNAAD60NB
19 90d non_financial aa 90-Day AA Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNAAD90NB
20 overnight non_financial a2_p2 Overnight A2/P2 Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNA2P2D01NB
21 7d non_financial a2_p2 7-Day A2/P2 Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNA2P2D07NB
22 15d non_financial a2_p2 15-Day A2/P2 Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNA2P2D15NB
23 30d non_financial a2_p2 30-Day A2/P2 Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNA2P2D30NB
24 60d non_financial a2_p2 60-Day A2/P2 Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNA2P2D60NB
25 90d non_financial a2_p2 90-Day A2/P2 Nonfinancial Commercial Paper Interest Rate To calculate CP interest rate indexes, the Federal Reserve Board uses DTCC's data for certain trades to estimate a relation between interest rates on the traded securities and their maturities. In this calculation, the trades represent sales of CP by dealers or direct issuers to investors (that is, the offer side) and are weighted according to the face value of the CP so that larger trades have a greater effect on the resulting index. With the relation between interest rates and maturities established, the reported interest rates represent the estimated interest rates for the specified maturities. Interest rates calculated through the process described above are a statistical aggregation of numerous data reflecting many trades for different issuers, maturities, and so forth. Accordingly, the reported interest rates purport to reflect activity in certain segments of the market, but they may not equal interest rates for any specific trade. As with other statistical processes, this one is designed to minimize the difference between the interest rates at which actual trades occur and the estimated interest rates. CP trades included in the calculation are chosen according to the specifications listed in the table below. Data to assess CP trades relative to these criteria are updated daily from numerous publicly available sources. Standard Industrial Classification (SIC) code classifications are taken from the Securities and Exchange Commission (SEC) Directory of Companies Required to File Annual Reports with the SEC. When an issuer's primary SIC code is not reported in the SEC directory, the primary SIC code reported in the issuer's financial reports is used; otherwise, SIC codes are determined upon consultation with the Office of Management and Budget's Standard Industrial Classification Manual or its Supplement. For a discussion of econometric techniques for fitting the term structure of interest rates, including bibliographic information, see, for example, William S. Cleveland, 1979, "Robust Locally Weighted Regression and Smoothing Scatterplots," Journal of the American Statistical Association, 74, 829-36, or William S. Cleveland, Susan J. Devlin, and Eric Grosse, 1988, "Regression by Local Fitting," Journal of Econometrics, 37, 87-114. Source: https://www.federalreserve.gov/releases/cp/about.htm RIFSPPNA2P2D90NB

View File

@@ -79,6 +79,13 @@ YIELD_CURVES = {
"T20YIEM": "year_20",
"T30YIEM": "year_30",
},
"treasury_minus_fed_funds": {
"T3MFF": "month_3",
"T6MFF": "month_6",
"T1YFF": "year_1",
"T5YFF": "year_5",
"T10YFF": "year_10",
},
"corporate_spot": {
"HQMCB6MT": "month_6",
"HQMCB1YR": "year_1",

View File

@@ -0,0 +1,130 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2023-06-06&observation_start=2023-01-01&series_id=AMERIBOR
response:
body:
string: !!binary |
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
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1644'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 16:56:10 GMT
Expires:
- Mon, 10 Jun 2024 16:56:10 GMT
Last-Modified:
- Mon, 10 Jun 2024 12:03:03 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=AMERIBOR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDLFacWZaYWFytZ
RVcrZYJkHX1dgzyd/IOQ9ZFsaklmSU6qkpWSf1lqUV5mekaJQmhecWpyaVFqigLMAgWn1LzkjNzE
omwFz7yS1KLU4hKFoMSSVCUdpfyk4tSissSSzPw8JB8ZmuoaGukaGqIpQPWUgaWSjlJaUWphaWpe
cqWSlZJLYmZOpY6Cua5LYiWyVHxxRj44qFyUdJRK8zJLipWslAJSi5JT80pgInA1qko6SsWpicX5
eYk58YkpWaXFJbkgdVZKfvklCsFQmZxKBUewXGoKdvVw8/yCHZV0lHISi0viSwtSEktSQSGPiDMF
A3MrA2MrA2NdA1MlHaWC/ILSnMSizJJKJStTYx2lvPySVJBrXRJLEhUKijLzixRK8hW8SvNSFQzN
dRSMDAwtFTKLFfLzcioVEssSM3MSk3JSFdKK8nMVfPPzUhIrQcrdijJBLI3UiuSc0pTMvHSFkqJE
MJ2RnwOSKtbUi8mLyYNFV0ypgUFiqoKGY25qUWZyYh4k0pIS87IV/NPSUkExC4o9TZDNiQpJ8LjN
hMVtUWJJqkJSYnFqikJ+nkI+PGWUwlNGTn5iXjHIGXnFicklEHUlGakKcCvdMvMS85IzE3MUXCuS
MxLz0kHucYvQ1IMnKqgrM4sVkhNzkktzQEGrkFisADKmpCgRbHBmfp5CWX5OaW6qQnkqKHGmpigk
lqUWJaanKqC6Nj8NrDEFlITg7srMzytWyMwDy6AFDi5PKYBSeWoJyN8ghzi6Regp+OYXpSqkpJYk
ZuYUKyQm5ZeWoHsiN7UkIz8lPyc/vVIBFOBJqQpp+aV54OADGVOcX1qUnKperFCemlScWZKqoJFR
UlJQbBWjH6OfCIqlpPwivbzUEk0dhdK8lNQisIuDUiHaihWKU5NBGQxbJGcWKyQqFKWmZxaD8mUK
yOspqSA/KEBDhIgYAceEpYJzfkFlESiQdYiKxpwchSCQ6mKFoFRQGQBYaoqeUm1sLQBJPKmi4gQA
AA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '799'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 16:56:10 GMT
Expires:
- Mon, 10 Jun 2024 16:56:10 GMT
Last-Modified:
- Mon, 10 Jun 2024 12:03:03 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

View File

@@ -3,57 +3,106 @@ interactions:
body: null
headers:
Accept:
- '*/*'
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_end=2023-06-06&observation_start=2023-01-01&series_id=RIFSPPFAAD30NB
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-02-01&observation_start=2024-01-01&series_id=RIFSPPAAAD30NB
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uehajYw1DUwVNJRQlaApN/ATNfATElHqTQvs6RYyUopJzMPpLi0pKC0JL6ksiBVycpQRyktMycV
ylPKKs4HKylKSS2KT6pUskIxOiWxJFVJR6k4v6gkPh+kRMlKKbE4WUlHKTm/NK9EycrQ0EhHKT8t
rTi1RMnKQEcpJzM3EyRsAAIozixWsoqmJEjAToEGISgUQEFYlphTmqpkpaSnVKtDTbONlXSUYGab
6BmbU9l4E1TjzahsvCmq8YZUNh6UvhCBY2JMZeMtkVxP5Xg1NEAy20TPhMoBbwjKmEghQ+VkY0jD
FG+ImuJNqO105DRD7Ug1R4pUapttQUOzaZjQjZATOpXDxAg5qVDbbOSSkdpmoxaLpibULbeMaJjE
jZCTuImeKXVdbkzDxGKMWiSaUbUuMoI0hRAlLtWNp1mJa6RrgJyNTPRMqVriGkFagUghQ80kY6Rr
gJwgqZpPjXQNkMtcEz1TSyo7nWbFrpEuWvuCqs0LI120OpraptOs6DXSNUQueqmcXAyRy10TPVOq
Fo5GuoY0TOm0q6WNdI3QCl6q1nZGukY0LBlp18Aw0jWiYSpHqaWpnMqNUAtFM6pmfmOMepTaxiOn
FhM96lbTxuhVqZkFNWsMY9SqlKrxakzDitQYtSKltrtpVosao9aiVHY3Sh1KbbNpVrYY07AGNdY1
RK5BqR0mNKs+jXVpV30ao1afVA4T2tWdxroodaeJngVV+1vGNKw+jXVpV30a66JVnxZG1K0hjGhY
GqL0zk30LKhcuaF00Kma0E3Q62ULqjbNTXQNaFbemuga0KzHYoLanjDRs6RqHjWhYZPChIZVs4ku
2ug5tVMLyui5iR7VjUcezqFyPjKkYUKnXf/WRNcQudNC7TBBLnJN9CyoOnxmQsO2hQlq28JEz4Kq
A1wmNKyjTXSNaFgs0m4A3YSGbQsT1LYFVVO5KWq/3FTPgKrtFlPIMgTYILGpniFVM5Epav1vqmdA
1VEFU9T631TPgKr5yBS1CWCqZ0DV1ospau/cRM+Squ06U10D5PLRVM+AquN/pjRsCJiiNgRM9Qyp
7XTkwSjqxyvKWLepniFVW3emqJ116ucp2jUHTFGbA6Z6BlQubQxRUzyVwx2l026qZ0jVVS+mqP12
Uz1DKhf0KMPeNHA9crOA+lkKpWVA/QKBdr13U12U3juVGwe067qboTY8qOpuM9RWB7XNRk6J1DYb
bZwUsNhaAK2Pz5/iKQAA
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zUwU9JByKbmpaDL5ScVpxaVJZZk
5uehaTbUNTBU0lFCVoCs3wgiXZqXWVKsZKWUk5kHUlxaUlBaEl9SWZCqZGWoo5SWmZMK5SllFeeD
lRSlpBbFJ1UqWaEYnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVkoqOUn5ZWnFqiZGWg
o5STmZtZomRlaAACKK4sVrKKpiREwC6BhSA0EMoSc0pTlayU9JRqdahptpGSjhLMbFM9Y3MqG2+M
arwZlY03QTXelMrGm6IaT+3AsUA1ntqut0Q1nsphb2iAajyVA8cQlPOREiaVA8cQLd1T23jklEPl
LGsIKlCRQobaAW+OGq/UTjZoid6EulnWkLaJ3gg12ZgYUtf1RmjFJZVTpRFacUnlqDVCTvTUr0uM
0NI9lVOOEVrKoXLYG6MVl9Q2Hq24pGrgQBtaSGUOYKZKtbG1AItJ1uf1CQAA
headers:
Accept-Ranges:
- bytes
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '984'
- '387'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:30 GMT
- Fri, 07 Jun 2024 04:58:35 GMT
Expires:
- Thu, 02 Nov 2023 13:46:30 GMT
- Fri, 07 Jun 2024 04:58:35 GMT
Last-Modified:
- Tue, 31 Oct 2023 17:04:03 GMT
- Thu, 06 Jun 2024 17:04:29 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=47D9BE5E15556CE0609ECA6AD74283A3~000000000000000000000000000000~YAAQlJUeuHw1aPCPAQAANRkQ8Rghc0UgHMPiZAV62XWGKnY4klZo+GLY7mp8DOtQLxVzPLZKOdbmnT/SNjRrHp5LEjacvILwy6/tqk5Hnmxt2TXwnIp3M5TLPWmJjZizAKOZEuuID4NUGMaSspmgMWmDg5do9WZ9v4QdcEU78hQCwi/7JyNzGBmKa39hrkGQgB8zh7sXQ98g1hTVuxjLcgBl3OrGa5ORZH5ERNdNq7vE06smayO0TtDdvEDdffILB9KtEsYfcKqgFG6wbeLRTH8UZo//S2ZeQne6AJ++iGiO+pA+7sGloMwcM2a+EkazH/XumwZhxWP8GHk0XnGy4Ky9T+FK8wgz0NLcSKPMX/XG1ef0mUrcIzpZp2zZE41Z;
Domain=.stlouisfed.org; Path=/; Expires=Fri, 07 Jun 2024 06:58:35 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=47D9BE5E15556CE0609ECA6AD74283A3~000000000000000000000000000000~YAAQlJUeuHw1aPCPAQAANRkQ8Rghc0UgHMPiZAV62XWGKnY4klZo+GLY7mp8DOtQLxVzPLZKOdbmnT/SNjRrHp5LEjacvILwy6/tqk5Hnmxt2TXwnIp3M5TLPWmJjZizAKOZEuuID4NUGMaSspmgMWmDg5do9WZ9v4QdcEU78hQCwi/7JyNzGBmKa39hrkGQgB8zh7sXQ98g1hTVuxjLcgBl3OrGa5ORZH5ERNdNq7vE06smayO0TtDdvEDdffILB9KtEsYfcKqgFG6wbeLRTH8UZo//S2ZeQne6AJ++iGiO+pA+7sGloMwcM2a+EkazH/XumwZhxWP8GHk0XnGy4Ky9T+FK8wgz0NLcSKPMX/XG1ef0mUrcIzpZp2zZE41Z
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=RIFSPPAAAD30NB
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zUwU9JByKbmpaDLFacWZaYWFytZ
RVcrZYJkgzzdggMCHB0dXYwN/JyQdZNsdklmSU6qkpWSsYGuS2KlgqOjgmNxcWqJrlNicnZqioJz
fm5ualFyZmKOQkBiQWqRgmdeSWpRanGJQlBiSaqSjlJ+UnFqUVliSWZ+HpLHDAx1QcgITQGa30yV
dJTSilILS1PzkiuVrJRcEjNzKpHF4osz8sFB5aKko1Sal1lSrGSlFJBalJyaVwITgatRVdJRKk5N
LM7PS8yJT0zJKi0uyQWps1Lyyy9RCIbK5FQqOILlUlOwq4eb5xfsqKSjlJNYXBJfWpCSWJIKCnlE
nCkYGlkZmFgZWeoagPxRkF9QmpNYlFlSqWRlaKmjlJdfkgpyrVt+kUJuflGqQmZeWn5RLjigdBQK
clITi1MVilNTFTJKSgqsYvRj9MvLy/XSUlNSixJzilJBgZqql55fFqNflApWDFhxjH5yQYx+YlJ+
aYleRkmunlJtbC0AeMHAjFYCAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '419'
Content-Type:
- application/json; charset=UTF-8
Date:
- Fri, 07 Jun 2024 04:58:35 GMT
Expires:
- Fri, 07 Jun 2024 04:58:35 GMT
Last-Modified:
- Thu, 06 Jun 2024 17:04:29 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=47D9BE5E15556CE0609ECA6AD74283A3~000000000000000000000000000000~YAAQlJUeuJc1aPCPAQAAvhkQ8RjdYrxcLCShD13TKH2G9ACe1fVrusjEUz9KloUqVJYOx6DaZHfDY+cxAK04Qzdm7trNRvjpgwYsaRLMK226qzxdn+Jjv9bt+QEzmEwhMb2Zfqj4drMCP2jUqGpdrSThOeveLbqsN+ZLADrqruI5OA2IIcYHPhu8FPtO/6cIH3cCs1I6SvH2vAbAgLthRGKFkLf+NoOMFDLpBu2n37dPdSbRBhCjlRVf3bivcRDT5TbaRSeMYwgN3z6ruk1JCh3UoaKa9MNoTXNhbHdEZjLDSKU3AGFc7Sqc3HcrzP6ux8gmqKJv+GNcpz4UqgORC6RN03xlsIxN0ap+w5ne9QG/B5kpd/JDS6UWPushJuXHAOhn6gQnhpuhtQ==;
Domain=.stlouisfed.org; Path=/; Expires=Fri, 07 Jun 2024 06:58:35 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '106'
status:
code: 200
message: OK

View File

@@ -0,0 +1,785 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=ECBESTRRT75THPCTVOL
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDL5ScVpxaVJZZk
5udhaDYAaUZWgKrfwExJR6k0L7OkWMlKKSczT0lHKb+0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUslJCNjolsSRVSUepOL+oJD4fpETJSimxOFlJRyk5vzSvRMnKREcpPy2tOLVEycpA
RyknMzezRMnK0AAEdJBNKlayiqYkQMAOQQSggbGSjlJZYk5pqpKVkrGepbFSrQ41jTehrfGmtDUe
lAJQAwew2FoAksAkU44CAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '245'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:30 GMT
Expires:
- Wed, 12 Jun 2024 00:45:30 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:03 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=ECBESTRTOTVOL
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDL5ScVpxaVJZZk
5udhaDYAaUZWgKrfwExJR6k0L7OkWMlKKSczT0lHKb+0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUslJCNjolsSRVSUepOL+oJD4fpETJSimxOFlJRyk5vzSvRMnKREcpPy2tOLVEycpA
RyknMzezRMnK0AAEdJBNKlayiqYkQMAOQQSggbGSjlJZYk5pqpKVkqmBpaGBUq0ONc03QTbf1MDM
kMrmm6KYb2lKbfeDEgE8fAAzMjIwU6qNrQUAVd76d5ICAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '263'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:30 GMT
Expires:
- Wed, 12 Jun 2024 00:45:30 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:02 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=ECBESTRNUMACTBANKS
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDL5ScVpxaVJZZk
5udhaDYAaUZWgKrfwExJR6k0L7OkWMlKKSczT0lHKb+0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUslJCNjolsSRVSUepOL+oJD4fpETJSimxOFlJRyk5vzSvRMnKREcpPy2tOLVEycpA
RyknMzezRMnK0AAEdJBNKlayiqYkQMAOQQSggbGSjlJZYk5pqpKVkrGxUq0ONQ03QTbchMqGm9LS
cFDcw4MFMFOl2thaAL7Xi7+GAgAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '249'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:30 GMT
Expires:
- Wed, 12 Jun 2024 00:45:30 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:03 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=ECBESTRRT75THPCTVOL
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDLFacWZaYWFytZ
RVcrZYJkXZ2dXINDgoJCzE1DPAKcQ8L8fZCNINmCksySnFQlKyXX0qJ8heCM/KIS3ZDUolyFoMSS
VCswqZBYomBuWpKhEJBalJyaV5KZk6qQn6YQlp9TmpuqpKOUn1ScWlSWWJKZn4fkP0NLXUMDXQOQ
/5AVoHnRQElHKa0otbA0NS+5UslKySUxM6cSWSy+GOQkkIySjlJpXmZJsZKVEtQhMBG4GlUlHaXi
1MTi/LzEnPjElKzS4pLc1DxQePvllygEQ2VyKhUcwXKpKdjVw83zC3ZU0lHKSSwuiS8tSEksSQVF
ACLqFAyMrYwNrQyMdQ1MlXSUCvILSnMSizJLKpWszHSU8vJLUkGODclIVUgFBS7YJ7oloMAtSixJ
VdCIKTUySEwODgnSVChKTctJTS4pVijJSFUoz8jPSS1OzIHqK80rTk0uLUpNUcgvSy3Ky0zPKFFI
yi8qyi/PzEtXSM4vLikGxUdSYl52sUJOfjLInQqZeWCjwBYnFqUm6imA3OHq7KRQUJqUk1mckVqs
kJ+nkFlSrFCemlScWZIKVg93EijSDSysDAwUnF1DQCpTE5MzFEIcg9xdQ4wUkkqLM/NSi4sVQIEC
MRqhE5TQFSDpViGzWAEaciAzQJ5zdXYCKTW0LFYILkksySwuyUxOzFFwSSxJVAhPLErNyC8tTlXQ
CHYJ11QAh1hOpUJiWklqEZr7wN5IBqc6vZi8mDyQ91JAqUcBZDw4WEG2JyUWgwIOEholRYl5xYnJ
oJRarFCeWZKBFKK5iSWloLhTKMlILFEoTy1KVSgpSkxJTVFIzEtRKE4tKclBGFRQlFqWmV9aDA8Q
SDh45ikEu4TroLkUGhSJRakKmXkpqRWpKQpJlQqgUNJRKM8AW5SRCuZD5FETA9gR4HAGRTIoBEvz
UlKLcipBkY/sIT0Ft/wihdSKxNyCnFSIG5AyHji2QbpBSU9HoQyceaE+1FFILUnWgwQIyFlQZxgq
+CeX5CelFikYGRhawlwF1gOyGxSOZZkllZCITSxRSEms1AEHVnJ+UVFqcUF+XopCST5aYICjrTgD
EpRGKDaAoxHkh7TSopKM1CKFzLy0/KJccBSDbAclAYhxNokKGUWpabbqGSUlBcVWMfox+uXl5Xqp
yUl6oARfkKiXWhqjX1ySWFIco5+WmZeYl5yZmBOfm1iUnVpSHJ+YlxKfmVeSWpRaXBIPCo/iGH2Q
Pki+B+dQsHCMfkZJbg5ErrikKB6U/coyU8v1UvP0QDLqdv5lqUUgEVDUxMByM2AKNjH6dnpKtbG1
APGLPo75BQAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1035'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:30 GMT
Expires:
- Wed, 12 Jun 2024 00:45:30 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:03 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=ECBESTRRT25THPCTVOL
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDL5ScVpxaVJZZk
5udhaDYAaUZWgKrfwExJR6k0L7OkWMlKKSczT0lHKb+0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUslJCNjolsSRVSUepOL+oJD4fpETJSimxOFlJRyk5vzSvRMnKREcpPy2tOLVEycpA
RyknMzezRMnK0AAEdJBNKlayiqYkQMAOQQSggbGSjlJZYk5pqpKVkrGehYVSrQ41jTehrfGmtDUe
lAJQAwew2FoAwv7SiI4CAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '245'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:30 GMT
Expires:
- Wed, 12 Jun 2024 00:45:30 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:03 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- cookiesession1=678A3E1F2CB758BB06C0DEE0931D25DD;Expires=Thu, 12 Jun 2025 00:45:30
GMT;Path=/;Secure;HttpOnly
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=ECBESTRTOTVOL
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDLFacWZaYWFytZ
RVcrZYJkXZ2dXINDgkL8Q8L8fZA1k2x0SWZJTqqSlZJraVG+QnBGflGJbkhqUa5CUGJJqpVCSH5J
Yo5CWH5OaW6qko5SflJxalFZYklmfh6SJwwtdQ0NdA1AnkBWgOYPAyUdpbSi1MLS1LzkSiUrJZfE
zJxKZLH4YpDtIBklHaXSvMySYiUrJd/MnJzM/Lxihfw0BZATYVJwxapKOkrFqYnF+XmJOfGJKVml
xSW5qXmg0PXLL1EIhsrkVCo4guVSU7Crh5vnF+yopKOUk1hcEl9akJJYkgoKbkREKRgYWxkbWhkY
6RqYKukoFeQXlOYkFmWWVCpZGRnpKOXll6SCnB2SkaqQCgpRsJ90S0AhWpRYkqqgEVNqZJCYHBwS
pKlQlJqWk5pcUqxQkpGqUJ6Rn5NanJgD1VeaV5yaXFqUmqKQX5ZalJeZnlGikJRfVJRfnpmXrpCc
X1wCDpKkxLzsYoWc/GSQQxUy88BGgS1OLEpN1FMAucPV2UmhoDQpJ7M4I7VYIT9PIbOkWKE8Nak4
syQVrB7uJIXEEgUDCysDAwVn1xCQytTE5AyFEMcgd9cQI4Wk0uLMvNTiYgVQqECMRugEpWsFSDJV
yCxWgAYdyAyQ51ydnUBKDS2LFYJLEksyi0sykxNzFFwSSxIVwhOLUjPyS4tTFTSCXcI1FcAhllOp
kJhWklqE5j6wN5LB6U8vJi8mD+S9FFA6UgAZDw5WkO1JicWggIOERklRYl5xYjIozRYrlGeWZCCF
aG5iSSko8hRKMhJLFMpTi1IVSooSU1JTFBLzUhSKU0tKchAGFRSllmXmlxbDAwQSDp55CsEu4Tpo
LoUGRWJRqkJmXkpqRWqKQlKlAiiUdBTKM8AWZaSC+RB51MQAdgQ4nEHpHhSCpXkpqUU5laDIR/aQ
noJbfpFCakVibkFOKsQNSFkQHNsg3aCkp6NQBs7GUB/qKKSWJOtBAgTkLKgzDBX8k0vyk1KLFIwM
DC1hrgLrAdkNCseyzJJKSMQmliikJFbqgAMrOb+oKLW4ID8vRaEkHy0wwNFWnAEJSiMUG8DRCPJD
WmlRSUZqkUJmXlp+US44ikG2g5IAxDibRIWMotQ0W/WMkpKCYqsY/Rj98vJyvdTkJD1Qgi9I1Est
jdEvLkksKY7RT8vMS8xLzkzMic9NLMpOLSmOT8xLic/MK0ktSi0uiQeFR3GMPkgfJOODcyhYOEY/
oyQ3ByJXXFIUD8p+ZZmp5XqpeXogGXU7/7LUIpAIKGpiYLkZMAWbGH07PaXa2FoAJD9WsOgFAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1025'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:30 GMT
Expires:
- Wed, 12 Jun 2024 00:45:30 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:02 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=ECBESTRNUMACTBANKS
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDLFacWZaYWFytZ
RVcrZYJkXZ2dXINDgvxCfR2dQ5wc/byDkU0g2fySzJKcVCUrJdfSonyF4Iz8ohLdkNSiXIWgxJJU
KwW/0tyk1CKF/DQFx+SSzLJUBafEvOxiJR2l/KTi1KKyxJLM/DwkPxla6hoa6BqA/ISsAM1bBko6
SmlFqYWlqXnJlUpWSi6JmTmVyGLxxSB3gGSUdJRK8zJLipWslCBOgQnAlfhm5uiB3Adyv5KOUnFq
YnF+XmJOfGJKVmlxSW5qHii0/fJLFIKhMjmVCo5gudQU7OrhRvsFOyrpKOUkFpfElxakJJakgoIf
EXEKBsZWxoZWBsa6BqZKOkoF+QWlOYlFmSWVSlamOkp5+SWpIGeHZKQqpILCFuwn3RJQ2BYllqQq
aMSUGhkkJgeHBGkqFKWm5aQmlxQrlGSkKpRn5OekFifmQPWV5hWnJpcWpaYo5JelFuVlpmeUKCTl
FxXll2fmpSsk5xeXFIP8nwSKGIWc/GSQOxUy88BGgS1OLEpN1FMAucPV2UmhoDQpJ7M4I7VYIT9P
IbOkWKE8Nak4syQVrB7uJIXEEgUDCysDAwVn1xCQytTE5AyFEMcgd9cQI4Wk0uLMvNTiYgVQoECM
RugEJXMFSKpVyCxWgIYcyAyQ51ydnUBKDS2LFYJLEksyi0sykxNzFFwSSxIVwhOLUjPyS4tTFTSC
XcI1FcAhllOpkJhWklqE5j6wN5LB6U8vJi8mD+S9FFA6UgAZDw5WkO1JicWggIOERklRYl5xYjIo
zRYrlGeWZCCFaG5iSSko7hRKMhJLFMpTi1IVSooSU1JTFBLzUhSKU0tKchAGFRSllmXmlxbDAwQS
Dp55CsEu4TpoLoUGRWJRqkJmXkpqRWqKQlKlAiiUdBTKM8AWZaSC+RB51MQAdgQ4nEGRDArB0ryU
1KKcSlDkI3tIT8Etv0ghtSIxtyAnFeIGpCwIjm2QblDS01Eoy88pzYX5UEchtSRZDxIgIGdBnWGo
4J9ckg/K/UYGhpYwV4FDBWQ3KBzLMksqIRGbWKKQklipAw6s5PyiotTigvy8FIWSfLTAAEdbcQYk
KI1QbABHI8gPaaVFJRmpRQqZeWn5RbngKAbZDkoCEONsEhUyilLTbNUzSkoKiq1i9GP0y8vL9VKT
k/RACb4gUS+1NEa/uCSxpDhGPy0zLzEvOTMxJz43sSg7taQ4PjEvJT4zryS1KLW4JB4UHsUx+iB9
kHwPzqFg4Rj9jJLcHIhccUlRPCj7lWWmluul5umBZNTt/MtSi0AioKiJgeVmwBRsYvTt9JRqY2sB
w+VlTPcFAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1034'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:30 GMT
Expires:
- Wed, 12 Jun 2024 00:45:30 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:03 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- cookiesession1=678A3E1F2CB758BB06C0DEE0931D25DD
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=ECBESTRRT25THPCTVOL
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDLFacWZaYWFytZ
RVcrZYJkXZ2dXINDgoJCjExDPAKcQ8L8fZCNINmCksySnFQlKyXX0qJ8heCM/KIS3ZDUolyFoMSS
VCswqZBYomBkWpKhEJBalJyaV5KZk6qQn6YQlp9TmpuqpKOUn1ScWlSWWJKZn4fkP0NLXUMDXQOQ
/5AVoHnRQElHKa0otbA0NS+5UslKySUxM6cSWSy+GOQkkIySjlJpXmZJsZKVEtQhMBG4Gr/S3KTU
IiUdpeLUxOL8vMSc+MSUrNLiktzUPFCg++WXKARDZXIqFRzBcqkp2NUjDA12VNJRykksLokvLUhJ
LEkFxQIi/hQMjK2MDa0MjHUNTJV0lAryC0pzEosySyqVrEx1lPLyS1JBLg7JSFVIBYUw2Du6JaAQ
LkosSVXQiCk1MkhMDg4J0lQoSk3LSU0uKVYoyUhVKM/Iz0ktTsyB6ivNK05NLi1KTVHIL0stystM
zyhRSMovKsovz8xLV0jOLy4pBkVKUmJedrFCTn4yyJ0KmXlgo8AWJxalJuopgNzh6uykUFCalJNZ
nJFarJCfp5BZUqxQnppUnFmSClYPdxIo5g0srAwMFJxdQ0AqUxOTMxRCHIPcXUOMFJJKizPzUouL
FUCBAjEaoROU2hUgiVchs1gBGnIgM0Cec3V2Aik1tCxWCC5JLMksLslMTsxRcEksSVQITyxKzcgv
LU5V0Ah2CddUAIdYTqVCYlpJahGa+8DeSAYnPb2YvJg8kPdSQElIAWQ8OFhBticlFoMCDhIaJUWJ
ecWJyaDkWqxQnlmSgRSiuYklpaC4UyjJSCxRKE8tSlUoKUpMSU1RSMxLUShOLSnJQRhUUJRalplf
WgwPEEg4eOYpBLuE66C5FBoUiUWpCpl5KakVqSkKSZUKoFDSUSjPAFuUkQrmQ+RREwPYEeBwBkUy
KARL81JSi3IqQZGP7CE9Bbf8IoXUisTcgpxUiBuQch84tkG6QUlPR6EMnIOhPtRRSC1J1oMECMhZ
UGcYKvgnl+QnpRYpGBkYWsJcBdYDshsUjmWZJZWQiE0sUUhJrNQBB1ZyflFRanFBfl6KQkk+WmCA
o604AxKURig2gKMR5Ie00qKSjNQihcy8tPyiXHAUg2wHJQGIcTaJChlFqWm26hklJQXFVjH6Mfrl
5eV6qclJeqAEX5Col1oao19cklhSHKOflpmXmJecmZgTn5tYlJ1aUhyfmJcSn5lXklqUWlwSDwqP
4hh9kD5IvgfnULBwjH5GSW4ORK64pCgelP3KMlPL9VLz9EAy6nb+ZalFIBFQ1MTAcjNgCjYx+nZ6
SrWxtQB4WEb5/gUAAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1039'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:30 GMT
Expires:
- Wed, 12 Jun 2024 00:45:30 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:03 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=ECBESTRVOLWGTTRMDMNRT
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDL5ScVpxaVJZZk
5udhaDYAaUZWgKrfwExJR6k0L7OkWMlKKSczT0lHKb+0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUslJCNjolsSRVSUepOL+oJD4fpETJSimxOFlJRyk5vzSvRMnKREcpPy2tOLVEycpA
RyknMzezRMnK0AAEdJBNKlayiqYkQMAOQQSggbGSjlJZYk5pqpKVkrGepaExyEYYNlaq1aGmZSZo
lhlS2XxTNPNp6hlQ8kAOOcAMlWpjawEvUhJYrAIAAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '259'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:31 GMT
Expires:
- Wed, 12 Jun 2024 00:45:31 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:01 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=ECBESTRSHRVOL5LRGACTBNK
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDL5ScVpxaVJZZk
5udhaDYAaUZWgKrfwExJR6k0L7OkWMlKKSczT0lHKb+0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUslJCNjolsSRVSUepOL+oJD4fpETJSimxOFlJRyk5vzSvRMnKREcpPy2tOLVEycpA
RyknMzezRMnK0AAEdJBNKlayiqYkQMAOQQSggbGSjlJZYk5pqpKVkqmRUq0ONQ03QTLcxILKhpsi
G25JZcNBcQ8PFsAMlGpjawGSSg7rhgIAAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '253'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:31 GMT
Expires:
- Wed, 12 Jun 2024 00:45:31 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:02 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=B1ED63987E645FBC544D109EBF062C1E~000000000000000000000000000000~YAAQb/TVF3Ifks2PAQAAdDfoCRjJWLtikVPFr8sA5LA6vk7t9WKk0I+2aFtrBG0z06ujHQ04hlrRs23LSYDS9cLtbcYVKuHR2s0ZMgLqbKWmr1jylEDR3S9/691Ork3uIjTbX3CRP5lCRmPa+L9QeuIvPsBHvo3GRKixwVECRYOvE8RrMfWfS7Xpja8NW62MvIb7KOfCpgIeXXWlk1i6U7dnJdsAbdXEfwLX6SlkU44G8B2Hm25gEzVZONV32PIPsGM0yYKlA3SH6jiDO+I1XFHbH2KCWVpHr9uKGgWa/mbeixv0y0ZWgF324gkTZF64tRsCdo8/x/J0NW3Wyz4W0EOg+CwOTWlA07m0HE1C8tC8v/zbltSlVFgJlv+UVBeE;
Domain=.stlouisfed.org; Path=/; Expires=Wed, 12 Jun 2024 02:45:29 GMT; Max-Age=7198
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=ECBESTRNUMTRANS
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDL5ScVpxaVJZZk
5udhaDYAaUZWgKrfwExJR6k0L7OkWMlKKSczT0lHKb+0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUslJCNjolsSRVSUepOL+oJD4fpETJSimxOFlJRyk5vzSvRMnKREcpPy2tOLVEycpA
RyknMzezRMnK0AAEdJBNKlayiqYkQMAOQQSggbGSjlJZYk5pqpKVkrmBhVKtDjVNN0E23diIyqab
IptuRG3TQdEPCxnAzCyNlWpjawFzwxEMigIAAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '256'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:31 GMT
Expires:
- Wed, 12 Jun 2024 00:45:31 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:03 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- cookiesession1=678A3E1F63E6E6EB614EDBC8D77ADECD;Expires=Thu, 12 Jun 2025 00:45:31
GMT;Path=/;Secure;HttpOnly
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- cookiesession1=678A3E1F2CB758BB06C0DEE0931D25DD
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=ECBESTRVOLWGTTRMDMNRT
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDLFacWZaYWFytZ
RVcrZYJkXZ2dXINDgsL8fcLdQ0KCfF18/YJCkA0h2YqSzJKcVCUrJdfSonyF4Iz8ohLdkNSiXIWg
xJJUK4Ww/JzS3FTd8NTM9IyS1BSFkKLM3NzUFAXf1MQ8sBIlHaX8pOLUorLEksz8PCQfGlrqGhro
GoB8iKwAzZMGSjpKaUWphaWpecmVSlZKLomZOZXIYvHFICeBZJR0lErzMkuKlayUAlKLklPzSmAi
cDWqSjpKxamJxfl5iTnxiSlZpcUluSB1Vkp++SUKwVCZnEoFR7Bcagp29XDz/IIdlXSUchKLS+JL
C1ISS1JBUYCIPAUDYytjQysDQ10DUyUdpYL8gtKcxKLMkkolK1NDHaW8/JJUkGtDMlIVUkGhC/aK
bgkodIsSS1IVNGJKjQwSk4NDgjQVilLTclKTS4oVSjJSFcoz8nNSixNzoPpK84pTk0uLUlMU8stS
i/JAUaGQlF9UlF+emZeukJxfXFKskJ+mkJSYl12skJOfDHKoQmYe2CiwxYlFqYl6CiB3uDo7KRSU
JuVkFmekFivk5ylklhQrlKcmFWeWpILVw52kkFiiYGBhZWCg4OwaAlKZmpicoRDiGOTuGmKkkFRa
nJmXWlysAAoViNEInaC0rgBJugqZxQrQoAOZAfKcq7MTSKmhZbFCcEliSWZxSWZyYo6CS2JJokJ4
YlFqRn5pcaqCRrBLuKYCOMRyKhUS00pSi9DcB/ZGMjjZ6cXkxeSBvJcCSj4KIOPBwQqyPSmxGBRw
kNAoKUrMK05MBiXVYoXyzJIMpBDNTSwpBUWeQklGYolCeWpRqkJJUWJKaopCYl6KQnFqSUkOwqCC
otSyzPzSYniAQMLBM08h2CVcB82l0KBILEpVyMxLSa1ITVFIqlQAhZKOQnkG2KKMVDAfIo+aGMCO
AIczKJJBIVial5JalFMJinxkD+kpuOUXKaRWJOYW5KRC3ICU88CxDdINSno6CmXgjA31oY5Cakmy
HiRAQM6COsNQwT+5JD8ptUjByMDQEuYqsB6Q3aBwLMssqYREbGKJQkpipQ44sJLzi4pSiwvy81IU
SvLRAgMcbcUZkKA0QrEBHI0gP6SVFpVkpBYpZOal5RflgqMYZDsoCUCMs0lUyChKTbNVzygpKSi2
itGP0S8vL9dLTU7SAyX4gkS91NIY/eKSxJLiGP20zLzEvOTMxJz43MSi7NSS4vjEvJT4zLyS1KLU
4pJ4UHgUx+iD9EEyPjiHgoVj9DNKcnMgcsUlRfGg7FeWmVqul5qnB5JRt/MvSy0CiYCiJgaWmwFT
sInRt9NTqo2tBQBvXqJv/AUAAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1045'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:32 GMT
Expires:
- Wed, 12 Jun 2024 00:45:32 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:01 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=B1ED63987E645FBC544D109EBF062C1E~000000000000000000000000000000~YAAQb/TVF3Ifks2PAQAAdDfoCRjJWLtikVPFr8sA5LA6vk7t9WKk0I+2aFtrBG0z06ujHQ04hlrRs23LSYDS9cLtbcYVKuHR2s0ZMgLqbKWmr1jylEDR3S9/691Ork3uIjTbX3CRP5lCRmPa+L9QeuIvPsBHvo3GRKixwVECRYOvE8RrMfWfS7Xpja8NW62MvIb7KOfCpgIeXXWlk1i6U7dnJdsAbdXEfwLX6SlkU44G8B2Hm25gEzVZONV32PIPsGM0yYKlA3SH6jiDO+I1XFHbH2KCWVpHr9uKGgWa/mbeixv0y0ZWgF324gkTZF64tRsCdo8/x/J0NW3Wyz4W0EOg+CwOTWlA07m0HE1C8tC8v/zbltSlVFgJlv+UVBeE;
cookiesession1=678A3E1F63E6E6EB614EDBC8D77ADECD
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=ECBESTRNUMTRANS
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDLFacWZaYWFytZ
RVcrZYJkXZ2dXINDgvxCfUOCHP2CkbWTbHhJZklOqpKVkmtpUb5CcEZ+UYluSGpRrkJQYkmqlYJf
aW5SapFCfppCSFFiXnFicklmfl6xko5SflJxalFZIoiL5CFDS11DA10DkIeQFaD5yUBJRymtKLWw
NDUvuVLJSsklMTOnElksvhjkDpCMko5SaV5mSbGSlRLEKTABuBK4cHFqYnF+XmJOfGJKVmlxSW5q
HiiQ/fJLFIKhMjmVCo5gudQUJR0lLOoRhgY7Kuko5SQWl8SXFqQklqSCQh0RXwoGxlbGhlYGxroG
pko6SgX5BaU5iUWZJZVKVmY6Snn5JakgB4dkpCqkgkIV7BvdElCoFiWWpCpoxJQaGSQmB4cEaSoU
pablpCaXFCuUZKQqlGfk56QWJ+ZA9ZXmFacmlxalpijkl6UW5WWmZ5QoJOUXFeWXZ+alKyTnF5cU
g2ImKTEvu1ghJz8Z5E6FzDywUWCLE4tSE/UUQO5wdXZSKChNyskszkgtVsjPU8gsKVYoT00qzixJ
BauHO0khsUTBwMLKwEDB2TUEpDI1MTlDIcQxyN01xEghqbQ4My+1uFgBFCgQoxE6QalbAZJYFTKL
FaAhBzID5DlXZyeQUkPLYoXgksSSzOKSzOTEHAWXxJJEhfDEotSM/NLiVAWNYJdwTQVwiOVUKiSm
laQWobkP7I1kcMrTi8mLyQN5LwWUghRAxoODFWR7UmIxKOAgoVGClHgVyjNLMpBCNDexpBQUdwol
GYklCuWpRakKJUWJKakpCol5KQrFqSUlOQiDCopSyzLzS4vhAQIJB888hWCXcB00l0KDIrEoVSEz
LyW1IjVFIalSARRKOgrlGWCLMlLBfIg8amIAOwIczqBIBoVgaV5KalFOJSjykT2kp+CWX6SQWpGY
W5CTCnEDUuYDxzZINyjp6SiU5eeU5sJ8qKOQWpKsBwkQkLOgzjBU8E8uyQfleyMDQ0uYq8ChArIb
VAiUZZZUQiI2sUQhJbFSBxxYyflFRanFBfl5KQol+WiBAY624gxIUBqh2ACORpAf0kqLSjJSixQy
89Lyi3LBUQyyHZQEIMbZJCpkFKWm2apnlJQUFFvF6Mfol5eX66UmJ+mBEnxBol5qaYx+cUliSXGM
flpmXmJecmZiTnxuYlF2aklxfGJeSnxmXklqUWpxSTwoPIpj9EH6IPkenEPBwjH6GSW5ORC54pKi
eFD2K8tMLddLzdMDyajb+ZelFoFEQFETA8vNgCnYxOjb6SnVxtYCAKOf0NHuBQAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1017'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:32 GMT
Expires:
- Wed, 12 Jun 2024 00:45:32 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:03 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- bm_sv=91F0A72F7D156D3A652156DC7B92A4EA~YAAQb/TVF3kfks2PAQAAIjnoCRhx2kckIuIMda4fQ5nGlVPANgBEeZ13Xil9TebC0aW40wdbAc8SCIv7T7uUmRhPN+MMy2mtkyt95XPYlDpCBFCmopVsOlHnT3fNF64esgLWWMhmdMZBQa0YETWB/U5DzL0DUNagax2iSfwhbqN9HGmXkZ8bP2BT0Q2v3/S+gJPDQeUq7F6nrO+PiUhZmRzQdaoOAkqZBjpOEg2R9fqwrvyG8KKK9nB8cllP8ziqrMf7NA==~1;
Domain=.stlouisfed.org; Path=/; Expires=Wed, 12 Jun 2024 02:45:32 GMT; Max-Age=7200;
Secure
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=B1ED63987E645FBC544D109EBF062C1E~000000000000000000000000000000~YAAQb/TVF3Ifks2PAQAAdDfoCRjJWLtikVPFr8sA5LA6vk7t9WKk0I+2aFtrBG0z06ujHQ04hlrRs23LSYDS9cLtbcYVKuHR2s0ZMgLqbKWmr1jylEDR3S9/691Ork3uIjTbX3CRP5lCRmPa+L9QeuIvPsBHvo3GRKixwVECRYOvE8RrMfWfS7Xpja8NW62MvIb7KOfCpgIeXXWlk1i6U7dnJdsAbdXEfwLX6SlkU44G8B2Hm25gEzVZONV32PIPsGM0yYKlA3SH6jiDO+I1XFHbH2KCWVpHr9uKGgWa/mbeixv0y0ZWgF324gkTZF64tRsCdo8/x/J0NW3Wyz4W0EOg+CwOTWlA07m0HE1C8tC8v/zbltSlVFgJlv+UVBeE;
cookiesession1=678A3E1F2CB758BB06C0DEE0931D25DD
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=ECBESTRSHRVOL5LRGACTBNK
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0VNJByKbmpaDLFacWZaYWFytZ
RVcrZYJkXZ2dXINDgoI9gsL8fUx9gtwdnUOc/LyRjSHZkpLMkpxUJSsl19KifIXgjPyiEt2Q1KJc
haDEklQrheCMxKJUhfw0hbD8nNJcMKskI1XBVMEnsSg9tbhEwTG5JLMsVcEpMS+7WElHKT+pOLWo
LLEkMz8Pyb+GlrqGBroGIP8iK0DzsoGSjlJaUWphaWpecqWSlZJLYmZOJbJYfDHIeSAZJR2l0rzM
kmIlK6WA1KLk1LwSmAhcjaqSjlJxamJxfl5iTnxiSlZpcUkuSJ2Vkl9+iUIwVCanUsERLJeagl09
3Dy/YEclHaWcxOKS+NKClMSSVFCEIKJSwcDYytjQysBI18BUSUepIL+gNCexKLOkUsnKVEcpL78k
FeTYkIxUhVRQQIN9olsCCuiixJJUBY2YUiODxOTgkCBNhaLUtJzU5JJiBVBIl2fk56QWJ+ZA9ZXm
Facmlxalpijkl6UW5WWmZ5QoJOUXFeWXZ+alKyTnF5cUg2IrCRQdCjn5ySB3KmTmgY0CW5xYlJqo
pwByh6uzk0JBaVJOZnFGarFCfp5CZkmxQnlqUnFmSSpYPdxJCoklCgYWVgYGCs6uISCVqYnJGQoh
jkHuriFGCkmlxZl5qcXFCqBAgRiN0AlK+AqQdKyQWawADTmQGSDPuTo7gZQaWhYrBJcklmQWl2Qm
J+YouCSWJCqEJxalZuSXFqcqaAS7hGsqgEMsp1IhMa0ktQjNfWBvJINTnV5MXkweyHspoNSjADIe
HKwg25MSi0EBBwmNkqLEvOLEZFBKLVYozyzJQArR3MSSUlDcKZRkJJYolKcWpSqUFCWmpKYoJOal
KBSnlpTkIAwqKEoty8wvLYYHCCQcPPMUgl3CddBcCg0KUKbKzEtJrUhNUUiqVACFko5CeQbYooxU
MF8BLI+aGMCOAIczKJJBIVial5JalFMJinxkD+kpuOUXKaRWJOYW5KRC3ICU8cCxDdINSno6CmWQ
rA02PEVHIbUkWQ8SICBnQZ1hqOCfXJKflFqkYGRgaAlzFThUQHaDwrEss6QSErGJJQopiZU64MBK
zi8qSi0uyM9LUSjJRwsMcLQVZ0CC0gjFBnA0gvyQVlpUkpFapJCZl5ZflAuOYpDtoCQAMc4mUSGj
KDXNVj2jpKSg2CpGP0a/vLxcLzU5SQ+U4AsS9VJLY/SLSxJLimP00zLzEvOSMxNz4nMTi7JTS4rj
E/NS4jPzSlKLUotL4kHhURyjD9IHyffgHAoWjtHPKMnNgcgVlxTFg7JfWWZquV5qnh5IRt3Ovyy1
CCQCipoYWG4GTMEmRt9OT6k2thYAv8w/ZQkGAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1055'
Content-Type:
- application/json; charset=UTF-8
Date:
- Wed, 12 Jun 2024 00:45:32 GMT
Expires:
- Wed, 12 Jun 2024 00:45:32 GMT
Last-Modified:
- Tue, 11 Jun 2024 08:31:02 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=B1ED63987E645FBC544D109EBF062C1E~000000000000000000000000000000~YAAQb/TVF3ofks2PAQAALjnoCRiuxQ9zeqe8SGJnJ/g64/VTn4BJg2QpCnbeJnkxqtdpd3YPrWTuSWkIjGAKiXEfzqQq8M1mX1ndeF/t1ZldL5XE9MgGrY7i35Y3cC38Y/XdVrE027A+fBQyrK9wNrt5dQ419+9IkEiyLN00dDJbBnWsxaQLZxXnenCUJzi9XI2AUpsPDOIPAyRycyhrm41IIRBAqdAv0NQ6Y5FH8IJyI2S1i4Q5xGrSZGo3fkJEwdWVtlLi67uA/Y9kWuGj6mivxMutHZCIcsTzgUjhpamTF8KcsD3I/mlifZWj4SX7ewQtaFwQDYvYFUXtX6h0f0vnhxyL+pSkhXEO6hmQMHiK9Ora5wqkHaCoc0OPLLo0n1/cfAXvs5iuYLttC7Emnw==;
Domain=.stlouisfed.org; Path=/; Expires=Wed, 12 Jun 2024 02:45:29 GMT; Max-Age=7197
- bm_sv=F2E4C843CEC69299AF558F1FD752888D~YAAQb/TVF3sfks2PAQAALjnoCRjgjrmVUPUgELzMM5DKAL9U+ryt4QH3Oh9nZjeYzxDNFU6NAZAtonUJFWC3MwvalRNeIn4taplp4y2WkoePjXj6WEBBEbEeqgVr2HMlab5aMEUcmdd8efs71FQL0fXTCNxJlu5Z4t5xG70DPQtrByMfpZUXu41abKuxgCrCOGWLK1e9GkPSJJos3TeTtfv7oGuTc+Nx0mPU67zFuk3Xtun/WsoKM07jBJpeO+LsGiS/ng==~1;
Domain=.stlouisfed.org; Path=/; Expires=Wed, 12 Jun 2024 02:45:32 GMT; Max-Age=7200;
Secure
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,146 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2023-06-06&observation_start=2023-01-01&series_id=DFF
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zUwU9JByKbmpaDL5ScVpxaVJZZk
5uchazbWNTDUNTBU0lFCVgDXbww3uzQvs6RYyUopJzMPpLi0pKC0JL6ksiBVycpQRyktMycVylPK
Ks4HKylKSS2KT6pUskIxOiWxJFVJR6k4v6gkPh+kRMlKKbE4WUlHKTm/NK9EycrQ1FxHKT8trTi1
RMnKQEcpJzM3EyRsAAIozixWsoqmJEjATgEHISIUyhJzSlOVrJRM9IyNlWp1qGm8kZKOEg2NN6at
8Sa0Nd6UtsaDcgcNw96ctq63oK3xljQ13tCAtsaDyi7aRa0hbXOtIW1zrSFtc60hbXOtIW1zrSFt
c60hbXOtIW1zrRFtc60RbXOtEW1zrRFtc60RbXOtEW1zrRFtc60RbXOtEW1zrRFtc60xbXOtMS1z
rRGkG0KrqtxI1wC1UDC1oGb73kjXALVQoLrxqIUC1Y1HLRSobjxqoUB141ELBaobj1ooUN141ELB
1Jy6CROtAU5t1xuiFgpUN562uRatAU5119M216I1wKnuetrmWrQGONVdT9tci9YAp7br0RrgVDee
trkWrQFOddfTtq5Fa4BT3fW0rWvRGuBUdz1aXUvl2gqtAU7dyhA0zosyGkXdwDHGaGNSNXCMMdqY
1DYerbaitvFo6Z7axqPVVtQ2npbp3ljXAK22orbradnGNNZFb2NS2fXobUxqG4/WxqS28bSsrYx1
0QZ5qV2k0bSNaayLNshLddej5VqqdvqNddEGeanuerRcS2XX07SNaayLNshL7cChaRvTWBdtkNeC
qtPBxrpobUyqG49a11LdeNS6lurGo+ZaqhuPWtdS3XjUXEtt49EGealuPGrPkLrGm6AP8lLdeNSq
nOrGo1blVDcetQFOdeNpWSiYQNYgIcbvqe56WhYKJugNcKq7npaFggl6A5zarkdrgFPdeNrmWrRB
Xqq7nra5Fq0BTnXX07IqN9FFG+SluutpWZWb6KIN8lLb9WgNcKobT9uqHK0BTnXX07aupWkD3EQX
bZUF1QOHtrkWbZUF1V1P21yLtsqC2q6naQPclLYtZFP0IWrqBo4p+hA11Y1HrmtN9QyoOiJiqmuA
3EKmgfHIuZYGxiO3kGlgPHKupYHxyC1k6huPMkRNA+OR61oaGI/cQqaB8ch1LQ2Mp22uRWkh08D1
tM21KC1kGrietrkWpYVMfdejtJBpYDxtcy1KC5kGrqdtrkVpIdPA9bSta1GWQdDA9bSta1GWQdDA
9bSta1FayNR3Pco6ZGobb4baAKeB8bSsys1QG+A0cD0tq3Iz2jbAodtkYUPUkMABLLYWAKC4bi9X
OwAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1029'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 06 Jun 2024 22:09:16 GMT
Expires:
- Thu, 06 Jun 2024 22:09:16 GMT
Last-Modified:
- Thu, 06 Jun 2024 20:17:46 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=DFF
response:
body:
string: !!binary |
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
XOmQJQ4AAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '2116'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 06 Jun 2024 22:09:16 GMT
Expires:
- Thu, 06 Jun 2024 22:09:16 GMT
Last-Modified:
- Thu, 06 Jun 2024 20:17:46 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=03D5EFA8F4BE5D33B0F594EB88A9E7C9~000000000000000000000000000000~YAAQZWIsF3GwKOePAQAA4F2Z7xhJfhKN4PXQvLYy/jri7QIbL9HRccp6zs1uHVvGac9hpUqaoyMWuEaX9vrGjggJ3Vpci5MurtvqaZufPVzRPDBXMLRHN6WKu6bPo8fd7cUdkcj5wa55llMHeREFrUVb/QWrXk2Am8lxyvSEZbCcKuLMbDHWK5X2dqnuH13y/wA7+TjjRiOxVv0SXaxt2HFvHjmM1FYwl8yPbvSAu/qf90/Vy8vz/RYc3HyiQczjEXWmismjJ2cqSGjqwapRxLpspoXUZHHxJKz7KHoJz9a5y755i8up/cujOYeo4JeKyfSOVH69T64nTb1TZ3scTvZADoMa1hO0/Gx9fU6JlXZfqaNfk+Zz7GuWJC6LsBMQ;
Domain=.stlouisfed.org; Path=/; Expires=Fri, 07 Jun 2024 00:09:16 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

View File

@@ -3,551 +3,112 @@ interactions:
body: null
headers:
Accept:
- '*/*'
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB6MT
uri: https://api.stlouisfed.org/fred/release/tables?api_key=MOCK_API_KEY&element_id=219299&file_type=json&include_observation_values=true&observation_date=2023-01-01&release_id=402
response:
body:
string: !!binary |
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
EHfSraEBJUMshgakjbGQ6D3AamsBU668ljOuAAA=
headers:
Accept-Ranges:
- bytes
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '325'
- '4019'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:31 GMT
- Tue, 11 Jun 2024 20:43:18 GMT
Expires:
- Thu, 02 Nov 2023 13:46:31 GMT
- Tue, 11 Jun 2024 20:43:18 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:03:04 GMT
- Tue, 11 Jun 2024 20:43:15 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '104'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB1YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9QxMlGp1
qGa8kS6K8SZ6ltQz3ljXwBDdeAtLqrneWNcAzfWmeoam1DQe5AElHSVE2BuaUdN4E9TAMdUzoGrg
mKIbb0RV15uhG09V080xTLegZtBboBtvbkhN4y0xjAfMUqk2thYA0w3BlicFAAA=
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '332'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:31 GMT
Expires:
- Thu, 02 Nov 2023 13:46:31 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:04:03 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '103'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB2YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9QxNlGp1
qGa8kS6K8SZ6FpZUM95Y18AQw3hDahqP5npTPQNzahoP8oCSjhIi7A1MqWm8CXrgmFPV9aboxlsa
U9P1ZqjGm+oZUzVwzNGNNzGjpust0I03pV62MtY1sEQ3HjAzc6Xa2FoAgopyRigFAAA=
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '335'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:31 GMT
Expires:
- Thu, 02 Nov 2023 13:46:31 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:04:05 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '102'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB3YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9QyNlWp1
qGa8kS6K8SZ6FoZUM95Y18AQ3XhzapqO4XhLU2oaD3K/ko4SLOhN9KhrvAl62JgZUdP1pujGm5tR
03gzVONN9QypGvbm6MYbUdX1FujGG1M1YVqiGw+YqbFSbWwtAMVmGZAnBQAA
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '330'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:31 GMT
Expires:
- Thu, 02 Nov 2023 13:46:31 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:03:03 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '101'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB5YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9QyVanWo
ZrqRLorpJnrmplQz3ljXwBDdeDNqmo7heAsjahoPcr+SjhIs5E30LMypabwJetiYWlLTeFN046nq
eDN00y2pGrPmqMab6hlQNVlaoBtvRL1MZaxrYIluPGDGFkq1sbUAlUEwUSUFAAA=
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '332'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:32 GMT
Expires:
- Thu, 02 Nov 2023 13:46:32 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:03:02 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '100'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB7YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9YwslGp1
qGa8kS6K8SZ6llQz3VjXwBDddHMjahqP6XhDahoP8oCSjhIs6E30LM2pabwJRuBQ1fWm6MZbGFPT
9WaoxpvqGVDV9eboxlPVdAt006mYqYx1DSzRjQfMxFSpNrYWAKaOQr0mBQAA
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '330'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:32 GMT
Expires:
- Thu, 02 Nov 2023 13:46:32 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:03:04 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '99'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB10YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9cyUanWo
ZrqRLprphuZUM95Y18AQ1XgTPUsLahqP6XpjahoP8oCSjhIi6A2p6noTjMAxoqbrTVGNN9UzsKSm
8WboxhtR1fXmGMZTNewt0I03pWbYWKKbDpiZqVJtbC0AfHlcKCYFAAA=
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '326'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:33 GMT
Expires:
- Thu, 02 Nov 2023 13:46:32 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:04:02 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '98'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB20YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9cxMlWp1
qGa8kS6a8YbGVDPeWNfAEN14AyNqGo/pehNqGg/ygJKOEiLsjcyoabwJeuAYUjVwTNGNN6Zq1Jqh
G29kSc3AMccw3oKaxlugG29qTk3jLdGNB8xcqTa2FgDjW2ZaJwUAAA==
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '325'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:33 GMT
Expires:
- Thu, 02 Nov 2023 13:46:33 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:04:03 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '97'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB30YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9UzMlGp1
qGa8kS6K8SZ6lkZUM95Y18AQ3XgLC2oaj+Z6Uz0DapoOcr+SjhIi6A3NqWm8CWrYmOoZUjXoTdGN
NzahpuvN0I03tKSm8eYYxlPV9RboxlMxVxnrGliiGw+YqaVSbWwtAAaPtjInBQAA
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '333'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:33 GMT
Expires:
- Thu, 02 Nov 2023 13:46:33 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:04:03 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '96'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB50YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9YxNlGp1
qGa8kS6K8SZ65uZUM95Y18AQw3hLahqP4XpLQ2oaD/KAko4SIuwNqWq8CWrgmOoZGlPT9aboxhub
UtN4M3TjDY2oabw5uvEGVHW9BbrxxlRNmJboxgNmaqRUG1sLALHRryooBQAA
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '330'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:34 GMT
Expires:
- Thu, 02 Nov 2023 13:46:34 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:03:03 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '95'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB75YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9YwslGp1
qGa8kS6K8SZ65lQz3VjXwBDDdFNqGo/heAszahoP8oCSjhIi6A0sqWm8CWrgmOoZmlDTeFN0442p
Gjhm6MZTN3DMMYynZthYoJtO3bCxRDceMBMLpdrYWgCStsiQJgUAAA==
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '325'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:34 GMT
Expires:
- Thu, 02 Nov 2023 13:46:34 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:03:06 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '94'
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&observation_start=2022-11-12&series_id=HQMCB100YR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jU01DUwUtJByKbmpaDL5ScVpxaVJZZk
5uchazYCaTYEaUZWANFvaWlpqWtopGtsqKSjVJqXWVKsZKWUk5mnpKOUX1pSUFoSX1JZkKpkZaij
lJaZkwrlKWUV54OVFKWkFsUnVSpZKSEbnZJYkqqko1ScX1QSnw9SomSllFicrKSjlJxfmleiZGVo
qKOUn5ZWnFqiZGWgo5STmZsJEjUAAR1ko4qVrKIpCRGwS8AhCA4EA5AvyxJzSlOVrJRM9YxMlWp1
qGa8kS6K8SZ6ZuZUM95Y18AQ3XhzI2oaj+F6C2NqGg/ygJKOEiLsDagaOCaogWOqZ2hCTdebohtv
bEZN483QjTewoKbx5qjGm+hZUtV4C1TjTfWMqRr2lujGA2ZirlQbWwsAhzw7LCgFAAA=
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '335'
Content-Type:
- application/json; charset=UTF-8
Date:
- Thu, 02 Nov 2023 13:45:34 GMT
Expires:
- Thu, 02 Nov 2023 13:46:34 GMT
Last-Modified:
- Tue, 10 Oct 2023 20:04:04 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '93'
status:
code: 200
message: OK

View File

@@ -0,0 +1,684 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=OBFRVOL
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDL5ScVpxaVJZZk
5udhaDYwVNJRQlaAqt/ATElHqTQvs6RYyUopJzMPpLi0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUskIxOiWxJFVJR6k4v6gkPh+kRMlKKbE4WUlHKTm/NK9EycpERyk/La04tUTJykBH
KSczN7NEycrQAARQHFmsZBVNSYCAHYIIQANjJR2lssSc0lRQyJmb6hko1epQ03wTZPMtDKhuvimy
+eYWVDcflAjg4WMBDh/AYmsBhOg3xZICAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '254'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:15 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=AAB461B1AF2A7904FB64045131A155DF~000000000000000000000000000000~YAAQlJUeuBLxN/WPAQAAXrRgAxhRzNDCys8rutwk12gmxwwCXs24YhilPRfzyrhKTlFsIPkONLzhV/c7521WkWGKCBT/L9cR/BUveeYX+hqZuc8BzRv+xwSlpwNPG15hhmjmVYhdoG5LRQnlk1qOTtRVBiiEHc3iszn0ohx9AkFtbUQUdsA6PUNgC6xSnVNlXYRltXEGhHKDl3KhMnq6nELXLXA6yRuX+CySIvCd3JXxOakZXR4dfvY0LOc2/smS1/jj/uQBr0zpTwyKTmw6BNED2HwaL/zJmYehyo28UMuJNckQLPP0ORhntV+36KKgGWFsd5wUwTesODiKAwqP1KCZp4GsLrpQFTvh5VUwahH9ZSjAwkPWkLqfoQhr+7U1;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=OBFR99
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDL5ScVpxaVJZZk
5udhaDYwVNJRQlaAqt/ATElHqTQvs6RYyUopJzMPpLi0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUskIxOiWxJFVJR6k4v6gkPh+kRMlKKbE4WUlHKTm/NK9EycpERyk/La04tUTJykBH
KSczN7NEycrQAARQHFmsZBVNSYCAHYIIQANjJR2lssSc0lQlKyVTPWMLpVodahpvQlvjTWlrPCgF
IAUOYJZKtbG1AH16TpKOAgAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '246'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:14 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuBXxN/WPAQAAYLRgAxhDw7CCLMCG3ZQVi/WYhq/NuL+dx0wUUYFz3AOQuv2Bf4QcHQaNlhKv4dIDSVo5GqTUuc3k5qi1azrbNhlnVDCLvkoPtKLAvnw4TIyHoC941MqJZgrZ0rNmK8aAuScTeQUPsf0Oh/lkoxeVKmODDsZMyu601YkQyxm0P5/Lt0gOUzFKOAp35wPGyZzX0cqD4UaDIJaJiqTxUh6huFnim+3MCO/sB6TMTxIrHqGHmNIlLZ4csX8/sWXKkxhd+XWNMG4qeQFHKeToiaS0+7A58IdADdW6bK3fAC1Yp12qe+zuEa8vDhbgtEey7zC2nTjZosCkv4z9u2/AhC/gBu7ZGdKa1zn2yQI0RefrfHRL;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=OBFR1
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDL5ScVpxaVJZZk
5udhaDYwVNJRQlaAqt/ATElHqTQvs6RYyUopJzMPpLi0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUskIxOiWxJFVJR6k4v6gkPh+kRMlKKbE4WUlHKTm/NK9EycpERyk/La04tUTJykBH
KSczN7NEycrQAARQHFmsZBVNSYCAHYIIQANjJR2lssSc0lQlKyVTPSNTpVodahpvQlvjTWlrPCgF
oAYOYLG1AGCGr96OAgAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '243'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:13 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=OBFR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDL5ScVpxaVJZZk
5udhaDYwVNJRQlaAqt/ATElHqTQvs6RYyUopJzMPpLi0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUskIxOiWxJFVJR6k4v6gkPh+kRMlKKbE4WUlHKTm/NK9EycpERyk/La04tUTJykBH
KSczN7NEycrQAARQHFmsZBVNSYCAHYIIQANjJR2lssSc0lQlKyVTPWMjpVodahpvQlvjTWlrPCgF
oAYOYLG1AItpx4qOAgAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '243'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:13 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- cookiesession1=678A3E1F0CA6C8A55474606044EDFF5F;Expires=Tue, 10 Jun 2025 18:19:47
GMT;Path=/;Secure;HttpOnly
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=OBFR25
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDL5ScVpxaVJZZk
5udhaDYwVNJRQlaAqt/ATElHqTQvs6RYyUopJzMPpLi0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUskIxOiWxJFVJR6k4v6gkPh+kRMlKKbE4WUlHKTm/NK9EycpERyk/La04tUTJykBH
KSczN7NEycrQAARQHFmsZBVNSYCAHYIIQANjJR2lssSc0lQlKyVTPWNDpVodahpvQlvjTWlrPCgF
oAYOYLG1AFUfRDKOAgAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '243'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:14 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- cookiesession1=678A3E1F28617F081F9D927A2400B314;Expires=Tue, 10 Jun 2025 18:19:47
GMT;Path=/;Secure;HttpOnly
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuBXxN/WPAQAAYLRgAxhDw7CCLMCG3ZQVi/WYhq/NuL+dx0wUUYFz3AOQuv2Bf4QcHQaNlhKv4dIDSVo5GqTUuc3k5qi1azrbNhlnVDCLvkoPtKLAvnw4TIyHoC941MqJZgrZ0rNmK8aAuScTeQUPsf0Oh/lkoxeVKmODDsZMyu601YkQyxm0P5/Lt0gOUzFKOAp35wPGyZzX0cqD4UaDIJaJiqTxUh6huFnim+3MCO/sB6TMTxIrHqGHmNIlLZ4csX8/sWXKkxhd+XWNMG4qeQFHKeToiaS0+7A58IdADdW6bK3fAC1Yp12qe+zuEa8vDhbgtEey7zC2nTjZosCkv4z9u2/AhC/gBu7ZGdKa1zn2yQI0RefrfHRL
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=OBFR99
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDLFacWZaYWFytZ
RVcrZYJk/Z3cgiwtkXWRbGZJZklOqpKVkn9ZalFeZnpGiYJTYl62gltpXkpmXrpCUGJJqpWCpWVJ
hkJAalFyal5JZk6qko5SflJxalFZYklmfh6SPwzNdA2MdQ0M0RSgesXAXElHKa0otbA0NS+5UslK
ySUxM6cSWSy+OCMfHDIuSjpKpXmZJcVKVkpQ62EicDWqSjpKxamJxfl5iTnxiSlZpcUlual5oHD1
yy9RCIbK5FQqOILlUlOwq4eb5xfsqKSjlJNYXBJfWpCSWJIKCmhEFCkYWFgZGFoZmugamCrpKBXk
F5TmJBZlllQqWRka6Cjl5ZekglwbkpGqkA8P0iRQkKZBg7QosSRVIbNYITkxJ7k0B2SBQmkxKKzT
UlNSixJzFEAKixVKihLzihOTQSFcrJCYl6KQnFpUkpiZp+BaWpSfkp+Tk1iEokZPAWQnqhm5iUXZ
qSUKyfl5xZnFJcUK+WkKKfm5qcUlmckKpXnFqcmlRakpCkn5RUX55Zl56cUKmXkKoXrBegoQ84sV
kioVUlIL8oszS/KLKhUy84pLMktKIU5KK8rPVcgvyUgtwqkE2dUQlaD0U5KZWqyjUFCUmZtYlJlT
qZAODidQnOkWF+TnFeeD3JSaV5JaVFCUWQxSW56RmZOqUJKRiux3LH4rhXsJyRMw1xUrZKTmpCgk
liiAYqNYIb8IzFBIKkrMS85ILVbILy0pzkxJBQUSyKrQvMyS1BSF4JLEktRiPXCw6CYlFoPCKzEv
GxR9eQqJOcX5CiWJ2SgOgwZYMTyoE3NyKhVKMoryS9MzFDJBHstLBIVhYg7YBeCoT0zOzMkEhYyC
hqeTW7EmJDbBIQPOlCA3gxMGSDU4BWmAMr8mWkJKLFZIVCjLzynNTdUtTwXpTE1RyE1NyUzMA/kL
YR5qOsFIazjSmEJRakF+EShYMvPA8eEWpGBkYmSgEAQWB1kRnJqTmgxS4Zufl1qp4AtJgaBipFhP
wS2/SCE3vyhVITMvLb8oFxwKOgrFqakKGSUlBcVWMfox+uXl5Xp5qeWV+UXZaakpevlF6TH6kLgu
jtHPT0orAukFTKk2thYATHKpf0oFAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '878'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:14 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuC/xN/WPAQAA5rRgAxjOtnszbWwtck9+pTsnGMNjInRc5xsWd2QHmwEszVMcbMMcDCGUFwI15fZW6uBRLDndA3VIU3fNqOIDASslyHK++LDsRTU4xT5Rb45uj/pDdjGji3GlDWspaOLSxMBSSqhR6Ge81gi4t6L6p4cgpPGXbdXMEzDqKlz/LRbeNPkleuOW7VyBKDgUnjaap14MzB/cEFvKaDeXhpVe2F3p+ClhIqJrrAfLY7VFRNVmqlonLay0Ku2iZiqg6w5AKLTRYZzBdIeXTSa+vt94OgKHzP+uUYeO+VIYluiwo2FbYYTJdeVakLPD2yPY74sLoepExOnxUBF1CSecMLNwbowaCCbQGhNAJxn+66wRPzpbHWl1ccaW0Kuo7Go=;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=AAB461B1AF2A7904FB64045131A155DF~000000000000000000000000000000~YAAQlJUeuBLxN/WPAQAAXrRgAxhRzNDCys8rutwk12gmxwwCXs24YhilPRfzyrhKTlFsIPkONLzhV/c7521WkWGKCBT/L9cR/BUveeYX+hqZuc8BzRv+xwSlpwNPG15hhmjmVYhdoG5LRQnlk1qOTtRVBiiEHc3iszn0ohx9AkFtbUQUdsA6PUNgC6xSnVNlXYRltXEGhHKDl3KhMnq6nELXLXA6yRuX+CySIvCd3JXxOakZXR4dfvY0LOc2/smS1/jj/uQBr0zpTwyKTmw6BNED2HwaL/zJmYehyo28UMuJNckQLPP0ORhntV+36KKgGWFsd5wUwTesODiKAwqP1KCZp4GsLrpQFTvh5VUwahH9ZSjAwkPWkLqfoQhr+7U1
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=OBFRVOL
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDLFacWZaYWFytZ
RVcrZYJk/Z3cgsL8fZC1kWxoSWZJTqqSlZJ/WWpRXmZ6RomCU2JetoJbaV5KZl66Qlh+TmluqpKO
Un5ScWpRWWJJZn4ekssNzXQNjHUNDNEUoDrewFxJRymtKLWwNDUvuVLJSsklMTOnElksvjgjHxwW
Lko6SqV5mSXFSlZKTpk5OZn5ecUK+WkKoXrBegou+Tk5iUXFMCVwTU6ZOXpwRSpKOkrFqYnF+XmJ
OfGJKVmlxSW5qXmgcPbLL1EIhsrkVCo4guVSU7CrhxvuF+yopKOUk1hcEl9akJJYkgoKeESUKRhY
WBkYWhma6hqYKukoFeQXlOYkFmWWVCpZGZvoKOXll6SC/BKSkaqQDw/hJFAIp0FDOLNYITkxJ7k0
B2S2QmkxKNTTUlNSixJzFEBqihVKihLzihOTQUFfrJCYl6KQnFpUkpiZp+BaWpSfAg4UFDV6CiDr
UM3ITSzKTi1RSM7PK84sLgGHaUp+bmpxSWayQmlecWpyaVFqikJSflFRfnlmXnqxQmYeJNAh5hcr
JFUqpKQW5BdnluQXVSpk5hWXZJaUQpyUVpSfq5BfkpFahFMJsqshKlPzSjJLMlOLdRQKijJzE4sy
cyoV0sFBBIou3eKC/LzifJCbUvNKUosKijKLQWrLMzJzUhVKMlKR/Y7FbwgvgVMOxBMw1xUrZKTm
pCgkliiAIqJYIb8IzFBIKkrMS85ILVbILy0pzkxJBaUpkFWheZklqSkKwSWJJanFeuBg0U1KLAaF
V2JeNij68hQSc4rzFUoSs1EcBg2wYgVYUCfm5FQqlGQU5ZemZyhkgjyWlwgKw8QcsAvAUZ+YnJkD
DhkFDU8nt2JNSGyCQwacPUFuBicMkOqixJJUBQ1QOaCpgJqQEosVEhXKwLlXtzwVpDM1RSE3NSUz
MQ/kL4R5qOkEI63hSGMKRakF+UWgYMnMA8eHW5CCkYmRgUIQWBxkRXBqTmoySIVvfl5qpYIvJAUG
QQLRLb9IITe/KFUhMy8tvygXHAo6CsWpqQoZJSUFxVYx+jH65eXlenmp5ZX5RdlpqSl6+UXpMfqQ
uC6O0c9PSisC6QVMqTa2FgCeyedZVQUAAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '880'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:15 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=AAB461B1AF2A7904FB64045131A155DF~000000000000000000000000000000~YAAQlJUeuDDxN/WPAQAA6LRgAxhgSduyVrWI2nOZlmt3OV+2M24EYtm8IQ1WoylYFTK1pjQPTZbQcSCB2lCbabsXt1uFcm2qMoRX1gscvXJ71RR109YfXJCucD3ejnCJ0hvCkrAcnFD//B4IdXAnAWNy5sdmMP2CYC/7Sx58WfuEC3pzmIV1B3+9Iri75FvqWpPIXRcJrdPZBNp8OU/3yUL2vFXGOEKvm0oImXq5bviReHEnyDb1li2QVL9Jzhq8XWvDpnnFS2+ylGja/FBZ0ZxdjEmLAKAiB+qUuUsRxtHjzUsCm+0YCsTDFkdsXXtvuxGJmOg3TxVQYRf04LTBMuri1yeUPx+Zcea9Ns1H/MzQAsj9lMHRxFHbHMz5fCRFjCgzpQtQQ/43xsU=;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&limit=100000&observation_end=2024-06-06&observation_start=2024-06-01&series_id=OBFR75
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDL5ScVpxaVJZZk
5udhaDYwVNJRQlaAqt/ATElHqTQvs6RYyUopJzMPpLi0pKC0JL6ksiBVycpQRyktMycVylPKKs4H
KylKSS2KT6pUskIxOiWxJFVJR6k4v6gkPh+kRMlKKbE4WUlHKTm/NK9EycpERyk/La04tUTJykBH
KSczN7NEycrQAARQHFmsZBVNSYCAHYIIQANjJR2lssSc0lQlKyVTPWNjpVodahpvQlvjTWlrPCgF
oAYOYLG1AMG7ueKOAgAA
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '243'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:14 GMT
Pragma:
- no-cache
Server:
- Apache
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuBXxN/WPAQAAYLRgAxhDw7CCLMCG3ZQVi/WYhq/NuL+dx0wUUYFz3AOQuv2Bf4QcHQaNlhKv4dIDSVo5GqTUuc3k5qi1azrbNhlnVDCLvkoPtKLAvnw4TIyHoC941MqJZgrZ0rNmK8aAuScTeQUPsf0Oh/lkoxeVKmODDsZMyu601YkQyxm0P5/Lt0gOUzFKOAp35wPGyZzX0cqD4UaDIJaJiqTxUh6huFnim+3MCO/sB6TMTxIrHqGHmNIlLZ4csX8/sWXKkxhd+XWNMG4qeQFHKeToiaS0+7A58IdADdW6bK3fAC1Yp12qe+zuEa8vDhbgtEey7zC2nTjZosCkv4z9u2/AhC/gBu7ZGdKa1zn2yQI0RefrfHRL
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=OBFR1
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDLFacWZaYWFytZ
RVcrZYJk/Z3cggyRNZFsZElmSU6qkpWSf1lqUV5mekaJglNiXraCW2leSmZeukJQYkmqlYJhcYlC
QGpRcmpeSWZOqpKOUn5ScWpRWWJJZn4eki8MzXQNjHUNQA5CVoDqEQNzJR2ltKLUwtLUvORKJSsl
l8TMnEpksfjijHxwuLgo6SiV5mWWFCtZKUGth4nA1agq6SgVpyYW5+cl5sQnpmSVFpfkpuaBQtUv
v0QhGCqTU6ngCJZLTcGuHm6eX7Cjko5STmJxSXxpQUpiSSoomBERpGBgYWVgaGVorGtgqqSjVJBf
UJqTWJRZUqlkZWSoo5SXX5IKcm1IRqpCPjxEk0AhmgYN0aLEklSFzGKF5MSc5NIckAUKpcWgoE5L
TUktSsxRACksVigpSswrTkwGhXCxQmJeikJyalFJYmaegmtpUX5Kfk5OYhGKGj0FkJ2oZuQmFmWn
ligk5+cVZxaXFCvkpymk5OemFpdkJiuU5hWnJpcWpaYoJOUXFeWXZ+alFytk5imE6gXrKUDML1ZI
qlRISS3IL84syS+qVMjMKy7JLCmFOCmtKD9XIb8kI7UIpxJkV0NUgtJPSWZqsY5CQVFmbmJRZk6l
Qjo4nEBxpltckJ9XnA9yU2peSWpRQVFmMUhteUZmTqpCSUYqst+x+K0U7iUkT8BcV6yQkZqTopBY
ogCKjWKF/CIwQyGpKDEvOSO1WCG/tKQ4MyUVFEggq0LzMktSUxSCSxJLUov1wMGim5RYDAqvxLxs
UPTlKSTmFOcrlCRmozgMGmDF8KBOzMmpVCjJKMovTc9QyAR5LC8RFIaJOWAXgKM+MTkzJxMUMgoa
nk5uxZqQ2ASHDDhPgtwMThgg1eAUpAHK+ppoCSmxWCFRoSw/pzQ3Vbc8FaQzNUUhNzUlMzEP5C+E
eajpBCOt4UhjCkWpBflFoGDJzAPHh1uQgpGJkYFCEFgcZEVwak5qMkiFb35eaqWCLyQFgkqRYj0F
t/wihdz8olSFzLy0/KJccCjoKBSnpipklJQUFFvF6Mfol5eX6+WlllfmF2Wnpabo5Relx+hD4ro4
Rj8/Ka0IpBcwpdrYWgBw9UPdSAUAAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '877'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:13 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuDTxN/WPAQAAE7VgAxjh6dMptSkflG37KK/TGq2gr00nJFwNPLoaYxVSKGxVwnXO5v8WO7rjpBKJxGFfg82y4Z7RIOvFdnDVR0oj8ZgWZzE/m+tTGotj+uyNDqtcWxoBxoq+1E1fW7hl56xQ5vijeoc3P9MQDW87qFXyiTp8mEChJtM+eBzyrnulkn3NNSqbRnG+W+TBQ6y+2XeWkG0DA5rSz6a+dmCUHwT27cGt3PtCaS15mKjcUa/2FN7OubrzO0od4HM5amM/jwkr2djwT1fB79WGv6fHd9hPL29ztw+75XObTV4y2kWuuE70Ce16aD5cAuClSDbEcRfhKLLh4YEekdZEe3CF3Z1dudiLPIrNC/bMWaREiF8MzQ6K+BvDXm9ZBtk=;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuBXxN/WPAQAAYLRgAxhDw7CCLMCG3ZQVi/WYhq/NuL+dx0wUUYFz3AOQuv2Bf4QcHQaNlhKv4dIDSVo5GqTUuc3k5qi1azrbNhlnVDCLvkoPtKLAvnw4TIyHoC941MqJZgrZ0rNmK8aAuScTeQUPsf0Oh/lkoxeVKmODDsZMyu601YkQyxm0P5/Lt0gOUzFKOAp35wPGyZzX0cqD4UaDIJaJiqTxUh6huFnim+3MCO/sB6TMTxIrHqGHmNIlLZ4csX8/sWXKkxhd+XWNMG4qeQFHKeToiaS0+7A58IdADdW6bK3fAC1Yp12qe+zuEa8vDhbgtEey7zC2nTjZosCkv4z9u2/AhC/gBu7ZGdKa1zn2yQI0RefrfHRL;
cookiesession1=678A3E1F0CA6C8A55474606044EDFF5F
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=OBFR
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDLFacWZaYWFytZ
RVcrZYJk/Z3cgpD1kGxiSWZJTqqSlZJ/WWpRXmZ6RomCU2JetoJbaV5KZl66QlBiSaqSjlJ+UnFq
UVliSWZ+HpKjDc10DYx1DQzRFKC628BcSUcprSi1sDQ1L7lSyUrJJTEzpxJZLL44Ix8cDC5KOkql
eZklxUpWSgGpRcmpeSUwEbgaVSUdpeLUxOL8vMSc+MSUrNLiklyQOislv/wShWCoTE6lgiNYLjUF
u3q4eX7Bjko6SjmJxSXxpQUpiSWpoFBFxIeCgYWVgaGVobGugamSjlJBfkFpTmJRZkmlkpWZgY5S
Xn5JKsi1IRmpCvnwEEwChWAaNASLEktSFTKLFZITc5JLc0AWKJQWg4I2LTUltSgxRwGksFihpCgx
rzgxGRTCxQqJeSkKyalFJYmZeQqupUX5Kfk5OYlFKGr0FEB2opqRm1iUnVqikJyfV5xZXFKskJ+m
kJKfm1pckpmsUJpXnJpcWpSaopCUX1SUX56Zl16skJmnEKoXrKcAMb9YIalSISW1IL84syS/qFIh
M6+4JLOkFOKktKL8XIX8kozUIpxKkF0NUZmaV5JZkplarKNQUJSZm1iUmVOpkA4OJ1Cc6RYX5OcV
54PclJpXklpUUJRZDFJbnpGZk6pQkpGK7HcsfiuFewnJEzDXFStkpOakKCSWKIBio1ghvwjMUEgq
SsxLzkgtVsgvLSnOTEkFBRLIqtC8zJLUFIXgksSS1GI9cLDoJiUWg8IrMS8bFH15Cok5xfkKJYnZ
KA6DBlgxPKgTc3IqFUoyivJL0zMUMkEey0sEhWFiDtgF4KhPTM7MAYeMgoank1uxJiQ2wSEDzoMg
N4MTBkg1OAVpgHK6JlpCSixWSFQoy88pzU3VLU8F6UxNUchNTclMzAP5C2EeajrBSGs40phCUWpB
fhEoWDLzwPHhFqRgZGJkoBAEFgdZEZyak5oMUuGbn5daqeALSYGgUqNYLyYvDLvTMovBpoH9lVhc
nJ+cCc4W5ZklGShpHBR7oLgxNSjJUCiAFAigpJGfhqwMGgB6CsEFqcmZaZnJoAjQAduAI2jAFqNm
yaRKhfyilNQiUHiDrEQJInDaz8kvTy0uUSjJV8jITM8AMUHG6CiUJGbDNCWX5oJyeGZZqkJxaS4o
eCAOAOfEkozU4lRkdxfrgPN5Zgool6RVwgwBmaqAESoZYK0pqcV4wgSSi+HBASofCkqTcjKLM1JT
FEDGFiskFkEyFsRdGGkG5muoeh2FovzSvJTUFJCvQaGSl5pYBPJ5UmJxZrFCQX5mXoleTJ5bfpFC
bn5RqkJmXlp+UW4iKLHrKBSnpipklJQUFFvF6Mfol5eX6+WlllfmF2Wnpabo5Relx+hDsnRxjH5+
UloRSC9gSrWxtQDdJyygHgcAAA==
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1102'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:13 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuEPxN/WPAQAASrVgAxgrJbYAK3JO+4sNISl1Z0G8LktiOYFjcR6LRLJA6Lub+KFkOhAKK/ETa9AL6CGyKI1X4MYTYZxZOETwmzDH6zMt3o3PSYPPD+NpG7OMws5UVAuTl+X6RMcgkUn2cOCShcgop6eKAYdb+mAkQ4UERaoHkek2xXRUpBxxZGjOn7/89I8lw6CCdAQHOxhWyCvUc9wR+CK/D++Ju2gw0oMSE/gUshKQQRBMILq8NBMslujhaq+iOrkDBWnC5rp7ZMw9ekiQL4tX1KZP26fObnQMny+R5Q/2/OzIjw/Il7SMo0WJ7GcMsn1HzGflAWMF3clrcPFlXWKCdJwS7z5ize6wt67aBEUzdGqcZ06Gdxqk70D2A8JtIyWrd8w=;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7200
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuBXxN/WPAQAAYLRgAxhDw7CCLMCG3ZQVi/WYhq/NuL+dx0wUUYFz3AOQuv2Bf4QcHQaNlhKv4dIDSVo5GqTUuc3k5qi1azrbNhlnVDCLvkoPtKLAvnw4TIyHoC941MqJZgrZ0rNmK8aAuScTeQUPsf0Oh/lkoxeVKmODDsZMyu601YkQyxm0P5/Lt0gOUzFKOAp35wPGyZzX0cqD4UaDIJaJiqTxUh6huFnim+3MCO/sB6TMTxIrHqGHmNIlLZ4csX8/sWXKkxhd+XWNMG4qeQFHKeToiaS0+7A58IdADdW6bK3fAC1Yp12qe+zuEa8vDhbgtEey7zC2nTjZosCkv4z9u2/AhC/gBu7ZGdKa1zn2yQI0RefrfHRL;
cookiesession1=678A3E1F28617F081F9D927A2400B314
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=OBFR25
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDLFacWZaYWFytZ
RVcrZYJk/Z3cgoxMkXWRbGZJZklOqpKVkn9ZalFeZnpGiYJTYl62gltpXkpmXrpCUGJJqpWCkWlJ
hkJAalFyal5JZk6qko5SflJxalFZYklmfh6SPwzNdA2MdQ0M0RSgesXAXElHKa0otbA0NS+5UslK
ySUxM6cSWSy+OCMfHDIuSjpKpXmZJcVKVkpQ62EicDWqSjpKxamJxfl5iTnxiSlZpcUlual5oHD1
yy9RCIbK5FQqOILlUlOwq4eb5xfsqKSjlJNYXBJfWpCSWJIKCmhEFCkYWFgZGFoZmugagAK+IL+g
NCexKLOkUsnKQkcpL78kFeTYkIxUhXx4iCaBQjQNGqJFiSWpCpnFCsmJOcmlOSDzFUqLQUGdlpqS
WpSYowBSWKxQUpSYV5yYDArgYoXEvBSF5NSiksTMPAXX0qL8lPycnMQiFDV6CiA7Uc3ITSzKTi1R
SM7PK84sLilWyE9TSMnPTS0uyUxWKM0rTk0uLUpNUUjKLyrKL8/MSy9WyMxTCNUL1lOAmF+skFSp
kJJakF+cWZJfVKmQmVdckllSCnFSWlF+rkJ+SUZqEU4lyK6GqAQln5LM1GIdhYKizNzEosycSoV0
cDiBoky3uCA/rzgf5KbUvJLUooKizGKQ2vKMzJxUhZKMVGS/Y/FbKdxLSJ6Aua5YISM1J0UhsUQB
FBvFCvlFYIZCUlFiXnJGarFCfmlJcWZKKiiQQFaF5mWWpKYoBJcklqQW64GDRTcpsRgUXol52aDo
y1NIzCnOVyhJzEZxGDTAiuFBnZiTU6lQklGUX5qeoZAJ8lheIigME3PALgBHfWJyZk4mKGQUNDyd
3Io1IbEJDhlwngS5GZwwQKrBKUgDlPc10RJSYrFCokJZfk5pbqpueSpIZ2qKQm5qSmZiHshfCPNQ
0wlGWsORxhSKUgvyi0DBkpkHjg+3IAUjEyMDhSCwOMiK4NSc1GSQCt/8vNRKBV9ICgSVIsV6Cm75
RQq5+UWpCpl5aflFueBQ0FEoTk1VyCgpKSi2itGP0S8vL9fLSy2vzC/KTktN0csvSo/Rh8R1cYx+
flJaEUgvYEq1sbUALuz0ZUkFAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '875'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:47 GMT
Expires:
- Mon, 10 Jun 2024 18:19:47 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:14 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=E9163914DA8EF717A905B89E7988EFA1~000000000000000000000000000000~YAAQlJUeuEnxN/WPAQAAZbVgAxiY3sLkbh8bRJM++9EYNJW/5I7pXpsdBoH6kV5Mh/fhdTFPLZV5H4mrWsR+wdFaWQlaqMgu+f7ik6MvHUSjZDMCXE1Ux1BkSHbVU1dvAvA1RvMsk6QlSvfnR+sgoQ+33S+s+MpjFfIbUlpNUiAczNPoChOcJtqtlATno+wHh4EhGE//f9B7P7NBieArVPGwj1H7M4FdiZBpiTl2WOOq8gaFDQgOrtAPsC+hs9XuTWgxxjEvgfdNUoGh7gAR8m4ADxmqrvAtAhsycoFkXT/Py55JDiPDTmbL44EvftG66D5MW+n8fsdi47qMPayxyCW76fZdB1Yu2AL6m/MvnF8nUqUX5JW2c0QPEBgxhjz4OuqFB5mKwphTpzuxZwqn4A==;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7200
- bm_sv=63F21E791AEBECCCD85CA154B53AADFF~YAAQlJUeuErxN/WPAQAAZbVgAxgqeZNXkb5VIHsfmPAAf5i1EoxAeB3rLnl+ErMa5kZZs5uM1bX+yH5OCF3Afdo+heuZ+LPqT1djCpdtuAim927tP0v5A8zdxIZfXiHwqdvK6V/KPUiQwU0ucYkVw/kYvWL49NWHz/rbnYSJSk2xlUBLi+uhcCTwfMQxH8R9eYInwYgOFYuBLBYj7nYd9MUx8RLV/ee/QeNx+kRQ/3InzRg4jjiHomGwVPkrnSZ5cQoPNw==~1;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7200;
Secure
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Cookie:
- ak_bmsc=AAB461B1AF2A7904FB64045131A155DF~000000000000000000000000000000~YAAQlJUeuDDxN/WPAQAA6LRgAxhgSduyVrWI2nOZlmt3OV+2M24EYtm8IQ1WoylYFTK1pjQPTZbQcSCB2lCbabsXt1uFcm2qMoRX1gscvXJ71RR109YfXJCucD3ejnCJ0hvCkrAcnFD//B4IdXAnAWNy5sdmMP2CYC/7Sx58WfuEC3pzmIV1B3+9Iri75FvqWpPIXRcJrdPZBNp8OU/3yUL2vFXGOEKvm0oImXq5bviReHEnyDb1li2QVL9Jzhq8XWvDpnnFS2+ylGja/FBZ0ZxdjEmLAKAiB+qUuUsRxtHjzUsCm+0YCsTDFkdsXXtvuxGJmOg3TxVQYRf04LTBMuri1yeUPx+Zcea9Ns1H/MzQAsj9lMHRxFHbHMz5fCRFjCgzpQtQQ/43xsU=;
cookiesession1=678A3E1F28617F081F9D927A2400B314
method: GET
uri: https://api.stlouisfed.org/fred/series?api_key=MOCK_API_KEY&file_type=json&series_id=OBFR75
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy0TUw0zU0UNJByKbmpaDLFacWZaYWFytZ
RVcrZYJk/Z3cgsxNkXWRbGZJZklOqpKVkn9ZalFeZnpGiYJTYl62gltpXkpmXrpCUGJJqpWCuWlJ
hkJAalFyal5JZk6qko5SflJxalFZYklmfh6SPwzNdA2MdQ0M0RSgesXAXElHKa0otbA0NS+5UslK
ySUxM6cSWSy+OCMfHDIuSjpKpXmZJcVKVkpQ62EicDWqSjpKxamJxfl5iTnxiSlZpcUlual5oHD1
yy9RCIbK5FQqOILlUlOwq4eb5xfsqKSjlJNYXBJfWpCSWJIKCmhEFCkYWFgZGFoZmugagAK+IL+g
NCexKLOkUsnKQkcpL78kFeTYkIxUhXx4iCaBQjQNGqJFiSWpCpnFCsmJOcmlOSDzFUqLQUGdlpqS
WpSYowBSWKxQUpSYV5yYDArgYoXEvBSF5NSiksTMPAXX0qL8lPycnMQiFDV6CiA7Uc3ITSzKTi1R
SM7PK84sLilWyE9TSMnPTS0uyUxWKM0rTk0uLUpNUUjKLyrKL8/MSy9WyMxTCNUL1lOAmF+skFSp
kJJakF+cWZJfVKmQmVdckllSCnFSWlF+rkJ+SUZqEU4lyK6GqAQln5LM1GIdhYKizNzEosycSoV0
cDiBoky3uCA/rzgf5KbUvJLUooKizGKQ2vKMzJxUhZKMVGS/Y/FbKdxLSJ6Aua5YISM1J0UhsUQB
FBvFCvlFYIZCUlFiXnJGarFCfmlJcWZKKiiQQFaF5mWWpKYoBJcklqQW64GDRTcpsRgUXol52aDo
y1NIzCnOVyhJzEZxGDTAiuFBnZiTU6lQklGUX5qeoZAJ8lheIigME3PALgBHfWJyZk4mKGQUNDyd
3Io1IbEJDhlwngS5GZwwQKrBKUgDlPc10RJSYrFCokJZfk5pbqpueSpIZ2qKQm5qSmZiHshfCPNQ
0wlGWsORxhSKUgvyi0DBkpkHjg+3IAUjEyMDhSCwOMiK4NSc1GSQCt/8vNRKBV9ICgSVIsV6Cm75
RQq5+UWpCpl5aflFueBQ0FEoTk1VyCgpKSi2itGP0S8vL9fLSy2vzC/KTktN0csvSo/Rh8R1cYx+
flJaEUgvYEq1sbUAKfZB0UkFAAA=
headers:
Cache-Control:
- max-age=0, no-cache
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '875'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 10 Jun 2024 18:19:48 GMT
Expires:
- Mon, 10 Jun 2024 18:19:48 GMT
Last-Modified:
- Mon, 10 Jun 2024 13:01:14 GMT
Pragma:
- no-cache
Server:
- Apache
Set-Cookie:
- ak_bmsc=AAB461B1AF2A7904FB64045131A155DF~000000000000000000000000000000~YAAQlJUeuGnxN/WPAQAAD7ZgAxhbU3GyRPyEidOPJVcdXTub9wRVSDQRz4K4LoqQdhU5qkU1gyINziNgBpp+3TT7VdDq4Ce74wsfsCGgc5R2Ya77EDVJEOOS9lYwMDyhtIPrgv9ZqMYRYL+C2K+60PQThCLGyP3p1jo9m+gA13z4dSzOMToeClQsjr2Y2JPsezEUinlAZJDitkV8z2RUhM9gUYDrO+9uenV3vHG1yQY3+87m4uypkb7cGcvZlXSkNX1yFGKpmP3HHG9quHQQy6AKrkbV3ZvapeqW6a9G+omoRxWf6kYUr1yMStqTmiq3FufnnRmbo5MfNodYavLaryJlWENL0tGOJE4nnQ7u5frZ1UIaWyWEJj/oaSfm5+Z9N1QqrNXWSQO3T+m88oZtaFcV4+Ma;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 10 Jun 2024 20:19:47 GMT; Max-Age=7199
Strict-Transport-Security:
- max-age=86400
Vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1

View File

@@ -1,538 +0,0 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, br
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&series_id=AMERIBOR
response:
body:
string: !!binary |
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
AUAtA1RAVAQA
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '28224'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 18 Sep 2023 09:59:52 GMT
Expires:
- Mon, 18 Sep 2023 10:00:51 GMT
Last-Modified:
- Fri, 15 Sep 2023 12:03:10 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '104'
status:
code: 200
message: OK
version: 1

View File

@@ -1,179 +0,0 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, br
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&series_id=ECBESTRVOLWGTTRMDMNRT
response:
body:
string: !!binary |
H4sIAAAAAAAEA6pWKkpNzCnJzE2NLy5JLCpRslIyMjAy1jWw1DW0UNJByKbmpaDL5ScVpxaVJZZk
5ufBNRuaGRjoGhjqGhgq6SghK4Dot7S0tNQ1NNI1BkmX5mWWFCtZKeVk5oEUl5YUlJbEl1QWpCpZ
GeoopWXmpEJ5SlnF+WAlRSmpRfFJlUpWKEanJJakKukoFecXlcTng5QoWSklFicr6Sgl55fmlShZ
GRoYm+go5aelFaeWKFkZ6CjlZOZmgsUNDAwMUNxZrGQVTUmYgN0CCkNDS11DUEgo6SiVJeaUpipZ
Keka6JmaWICCAI6VanWoaZsRmm2mhlS2wBjdAlMqW2CCboERPKxADCrbZo5umzHIEjimsm2g/ISc
FkyNqGyBJbp3qGyBoQGtLQAVCyhBRN0QMkRPXjTNjoam6MFF5exoaIZmgYk5PO2CGFQOPPTcQlvb
0HOLiTl1vWOEntZomhaM0ItmmgaeEXo5TfXAw8hItEx5RugZibaBh5nyQJkJjqmcDNELbRMqV6nG
6IU21S3AyEi0q7OhDUvkKoKG2dZQ1wA9nRubUTP6DXUNMJI2VesIQ10D9DrC2JLKPkCvFoypWlAb
6hpg5EfqesAQI/1SOQoM0ct+aoeQIXpxb0xtH9A6G2A0lUyo7QOMRERtCzDKcao2vg11jdDLcUMq
+wCzQURtH2DkAyoXphjtBGNa1kRGGCUrTW3DKGZpaht6dqF2iWKEnl2MqZrYjHQN0BMbdUsUI10D
jEKXqhWrEWbbw4Sa9Z4RlqYHlc1Hzx9UjwH0NERtCzDGO0yoHAWYTQ9qW4CRC6htAXouMKFdsWSk
izngQVPbMIpcqtZXRpARdpS+DHVzoCFGBqGu+RhNEionLsxhDKr2jY10jdDbtTTsTBrpojRP9Kgc
FciFLbXNRs8HJlSuqzGHKKjatIVONyFnNOo1Z4xAkzyQ6S6YBVQLfqjZ6GU49XrwUAvQy3Dq9U+h
FiAnTtAsGNV9gJFCqZW7oB7AaA5TrSaAWoBeUlM7hDCaMsa0GbCFeAdzQIJqY0JQC9ALbtp6B32Q
jra2YeQWKic2Q/TcQu38jtEuoGl4YYxbGFOtlQBJbBhzN9QbBIZaQOsCGKOdQ/UYx0xS8PkSEIO6
xbERrYtjjNEJqjVsIRGO0eChdnEPXl8Da49Qv8bFNvpB1RIey+gHdTMdluEPqluAUY5TtVwy0jXA
zHTUzGdGulgaDVS2gHZTL6CMZqSLMfVCvSEiqAXoRTdVSwojXYwVKzSsSo10MVoGVA8u2pbcRroY
Qx40DS96NnSMdDEbOlQbcYYkZoxmApUTM8oACC1qJcwpGWqHEGaRC2rewDF1i0eMdg5V48MYyxwJ
1QZ2QAnKGHOOhHojR1AL0PuB1C2wjGk4SQL1AHojgeoeoO3IgjFmI4HaPsCcJKHNoD8kQjBbDNTM
08a6GEMjVA8u9BRF3XatMWYjgbqDqcaY0yJGVC3FjTEbCUZUHWExxlyrYUTlkhtjZsSIqn0LY8yZ
ESOq9u+MUSdDQG0BqluAng+onYqMMNoC1C0pMAYJjCyobAF678uIqtW/CeqsCPXj2ASzAWNM1Xxm
gtmAoe5AjQmW5Zm0q9xMsIwY0NQ2jM4eVQspE10DjLYNVctxE9S2DVWn9UxQGwLUNhu9WUztfIGx
XpO6Y+4mmCs9qO4DjNKbdhNiJpgNAuq2+kwwxwaobgFtZ6FNdDGaNNQuajFGN6huAUaSomq71UQX
czyAauskQJ0fE13MeQ9a1g8YDRzqdiRMUdsfVC1iTbGszqRdUJliDkNQN+2aYrZDqDtSY4rZ9KBu
AWWKZZsIVTOHqS7mOARVG5umWCYraJmkMAciqNr6N8WcuqB2jGM0Qmi09hRUNppijkpQO4dgTF1Q
2wKM2Qrq7QSEBBHGBAXVLaBtI8QUc1SCylkcY4KC2nkCY1CC6hagd+qobgF6p46qUWCG2igADUqY
ULXTaIY5KEHdfGyGOShBw3LPDEtDh6q9eDPMtg31dlmAiiUzLC0Dqo5lmmGOQ1A7xjEWYtBoAzwk
vDAbOlQOL8w5FipnQcyWAbV9gD64TO1CBHMlBpWLQfDpTsgrxKid6zCbM1SOZIxlmdRtbZhhjkhQ
O4gwRiSonYowFlxQ7xwQSFGB2Z6hckbDHJGgcu2DMQhhSlULzLG0N2g30GiOpfFBU9swVr/R5ngz
UGIzxxyjoHZMoY/fUdt8jKYzTUMLox1NS9swWyg0tQ093VHvKDVIUsNYdkm9k/SgFqBvKaG6BRgt
FKoOh5ljLgOhtg8whiuobgH6/DeNdn9CYhyjuULl0gVj/oTa5qPPKVI9OjCKX6oOSJpjTp9Q3Qfo
Ra4p7QZwzXUxWy5UDi+MTSRUTVEWmOMY1C3FLTCHLqgb4RaYQxdU9wF6KU7DFGWBOUdDU9swmgym
tDl9FVT8WmDO3lA7qjAGNahuAW0bPRZYJmxo14azwNJ+oF1haYE5e0PbxEbHisACc3EJTbMtxiQP
TUMSY4iE2rkKY4iEtoGHUZ7TsszDmAyieuCh92ipbQFmE4Sq40uWmKMzNEzNlpijM9QdbLLE0qSi
aq/PEkuTiqqNTkssbRBq+wAzzcK3b4EY1FxjbYk5NUTT9EXPJpUltiYVKADhmLohiTkkQ9XuiKUu
xqQRdXsLlphrWk2pOiNiSdcmFfR+EOQZJOoW/paYa1qpbgH6chKqW4DRZKdyYYaleQTPfiAGdbMg
ZluJdq0XSyzDNVTO8BhzS9TOjxgjNNRsvGC7XcaUZpM9INswcgs14wNkAcaYOLUtwGh9U7MABvkA
YwiT2j6gX+MF5B36dWMNDTCXv1I1O4IswCiNqRw7mE0UKqcvzCYKtS3AyCE0G5QBRQhd0xfmfBIt
/YY5TELNjpKhgS7mfBLNKmOQbRh5h6aBh5kMqdiSAXkHo6CmaeBhlNpULngwWzJUTmwYLRlTqjZl
DGk8MmJoiGVkhHYJGMu9MTRsmWG5RIa6NSeWS2Ro6x2MaoF2zVpD1D2+ugZ6ptRO2hjLaWkaeBjT
ULRbKmxoiLqJGRx4VG2QGGIZM6FpWsCoFqhczGGsuqV6YsPMO9SsObFcQ0NtH2CuY6FyHGCOmVA5
zdJxmMTQUBdjCS61C3/MWSQqRwhG44Kq8WGEZY6Hqh7ActcMdaMAy2mrVLcAY3EXVVuoWM4qperM
l6ER5iYfU5otXgDZhlHMUjnNYs7kUNsC9MWP1C3HsZxcSsNmjxGNJ28MsVw9Q/Xwwmh7UDvGMXqh
tGtKYTmslNrhhTn+QVPvYIx/0LJ4wWyiULk4RmmiUPNkDEMjLPM2tOtpG2EeWULtdIbROqF2zYWx
xsXCmGpNdkNdAxBCuiacepENMhhzPYiZmQESoN50J8Q29BkiM2oHFfrAI229g17km1Evm0PCC73I
N6PeuCDYAoyxDTPqbVOFWIA+6UjtGMc4BoXqQYTetKZ6EGFkClpmQYwRDGqnWYx9w9QOL4x5IKpb
gN60pnaSwmj6mFG5nEVpHoCG9ageROjlLK06B+BCBGMEg9qFCMbBbFSPEPT+JnUjBMsYCQ0rPiwD
JlT3DkZznUadA9DMFZZGEFVrQSx31VC30MUyekLdHGKEuQ6W2jGOMWBCdQswSnWqNtaw3FVDdR9g
NBSo2nrGMkZCdR9gNJip7QPaNpix3E9D7YyG2TagclmEMT9D7bIIY/CD2qmIxq0bI8wpGRpWpsaY
0xvUTVJYromhboxjuSaG6hZg9MGoWnZjuSaGuk1+YyzTG7Rr0Bhjqa2pOSKF5c4YagcX5rgEVXtI
xpiLVanuA4zKmqrluDHmygqq+wCjsqZ2HGBU1rQb+MByaQy1CynMmpuW3sGsxqnalMJygwx1q3Es
N8hQ3QL0QQoz6l3AYqhrYIw5d0G9dQlg8zGmLqhtPnqXyJyqZRSWC2Ro2JBCu02GqvMkJqgnhVDb
bIx0ao40BWNA1VIXyx0yZjS1Db2Mp2oSxnKFDHXzuAmWhgItgwtzNoOqpboJ5hkh1FukYKhrYIK5
joOmOd4QI+dQtV9ggnnTHE0zC+bMBi3TGsYOF+o2iEwwd7hQ3QL0UWKqW4CRvmgaIRgNbmr22rBc
P0PTvImxp4WmtmE0lcyod3ePoa6BKeb+ExqWBFhup6Fu2xjLhTQ0jB0st9NQN6NiuZ2GumNoppi7
TGga/ZjDH1RtmGO5qoba6QuzIUNtH2AMCVLbAozSmKptCywX0tBwDt0US0uGyuGF2XihatPVFPM4
EWqnWcyJC9oN4GC5qobaZSLGxhKqW4CRQ6idpNA7jzStpDDWcZob0qwbjuUaG+qmZizX2FC3SsRy
jQ3VLcAo4qlaophhnlVG9TjASMDU9gFt1xWZYWn3UHU4ygzzEDIa5nEzLMMfVK3UzbCMf1A7vDC6
pFRdEmyGeQgZtbM15gpUKmcKzIENqtZLZlgGNqhtAcbABrWDCKNopXI+wFyjQW0LMIpW2jXWzDBn
eqg7zGyGeRi8BVXLDSzX2FC3NYjl5hqqW4Axo067GMdyWQ3VvYPReqZqDjHHXHJCw5rVHMuSE1rG
DsYpGdTNj+aYB2PQNPAwDh6jrW10zUiYczS0G0M3xzLMQctkiDnmQUu/YbZrqLqewRxLu4aqzQ5z
zBv5aDiKao5lGSdNYwejPKd24GG0eGjqHYyeJS1tw5i+oeHYiwXmYWXUrdux3IxD1VUPWC7Gobb5
dKwhLDDvBaTu3J0FlrYJVQtOCyyjJLTLLFiuwqFhKWqBZQEMtQMPo7NL1albCywrZaltAUbRT+0g
omPRb4GlDUXL1EzPNpQFlhYIlaMKcxKJpoGHUVBTdSTKArMNReWaBmNrL5XNx2hYULejaKGLOWtE
zUU7llh2B1G18MJypw11a19LLCtnqJrlLGndfsBypw3VgwijfKd2JKO35qmazSwxG0DUNh+9jUDD
/oElllkiKqdYjHPgzanaV7TE0uShXS2E5d4amsYOZoOBdkM8WC6xoa3fMI7LoanfMHIVdesuzLYQ
lYs1zNYD7ZZsYLnQhtq5FmPJrLkRzVagWGKZcqJi7BsaYLZcaJdzQLZhzGhSM62BLMBoalPbAoyZ
fWpbQNNuKiiIMJox1Kw3DQ0wF4tQs5kBMh+j+KXm4gqQBeglLlVbkiAL0LMBtUMIPRfQrogC+QY9
QVF1gyLIAox2MTUbYoYGmHf70rQQxJghomoNBfIORgahchmFsW6EtuGFXuRSObdgtk+onbwwMgi1
LcDIIFQt0g2xtBKomqIMsUz2UNsC9DKduoWUIebxZNTN1Yaom5t1DfRMaVioG2KuSzGn5sIXQ0PM
6R5qW4BxVpk5zXpphoZYGj1UDi+MxTQ0jX6MsQ/qNoEMMcc+aFiFGGIul6WtbRjlPc06vKCUh1H4
U7V2McRccELtkg3jlBRql80YQxxUbUEY6mK2h6gdBRhNIGpbQOtEhDHFQ93iHsvZqtRNRFiOU6W6
DzCaKFRtxRlhTsGYU9sC9LELc5oNaBtiOU6VtrZh5BAqBx5me4WWgYex9decqg1uLDfT0DR2MNor
tLUNozimaVRh5CraNWSNsIyF0NQ2jMOtaNdUMsLSkqHmQgxDI8yFKzTscxjpYjRrqFwiYQ6M0DQp
YLSaqdqDwnKJDbWrP4w2DpXjA2MVC/WKbFD7CXMNCBUDCGIBxrg39UIIYgHGwDe1LcAo+altAXph
T2XzMVsZVE5EGKeiULFhAY5jzIEQagcRDdvhEB/QOhsYoiciamdkjN3BVI9kGra2wXGAsT6F2j7A
nOWhckbDqP2p7gNaF6YYZ5/QqrUEiXGMTEG9MRSIBRgNGCpbgFH/UzfGQZ5AusMOPMVA1aIV2xgK
tS3AKLtp1DMD+QXLnA+1vYORZqltAUaapV6PCBJEtC3IjbAsaqXRciywdzBbN1SOEIxNxtSturHc
4UvDQhfLZTW0tQ0ju9CowwpJCxh5h5a2YbYnaGob+hISKg52gwMPc86Hpt7BaHHT1DaMhhP1RjIg
gYee8qhaCGG57IZWo6lGugZYbr6hbpGH5eYb6rabjLG0A2jX6jDGPBCN6t5BT15UtwC9UUDl9Is5
yEG77G6MZekHLWMfs4FAU9swijKq9mmwXJBD06KGxgMjxrqYAyNUTtqYzQBqW4BR81PbAowuGrUt
wKjsqTryguVOHCoeAwauETFuuqV2CKGXv9Qu4DFmQqhuAfq8oSVVyyUsl+JY0K5baYLZgLCgaosR
7WYc0MiOBfWuFDHSNTDBXFtiQdWBBCw34tA2QtCbQBZUTl8YAwnUDi+MaRKq+wC9HKd2msVo6VA7
zaIsGqHedVHg/IDSEKC22ejFN1WrBxPMJSDUTjoYjRhqJx2MW/6o7gP0djHVfYA+0UzT4g5jpQfV
w4vW5SnGrlzqFhammDtUqBtEWO6uoW6bCct1NdRNs1iuq6G6BRiZgqrNJFPMTSnUTkUYIxPUrfZN
MQcjqG4BRv+QduMPppgnvFI9QmidpDCGHKidKVBaGuCmPZUzhSFGc4PKFmCsxaB2EGFMNlA7FWGs
xbCgZabA2G5CW9vQcwhVR1NMdTHbHlROXhiDEdSOfYx1GRZUDSIs19DQsDGI5U4a6mZHLHfS0DD9
mmGOTFA7ctAnnanbMDTD3IpL29jHKO1pN/CF5eYa6g6lmmFpQFDt/BwjXQMsd9VQd/ISy101VO3s
m2FuxKVp6sJsDdEydWE2LKh3Xwc49jEHMmjqHYymN5WLMox2ErUTM2Y7ibq5EaMtQd0+tJku5swM
tVMUevFL7SjAaA1ZUtUHWO6woWqBZY5lroSaacgc85wNarsfvT1NbfPR2yPUzQNYrqyhtgWYcyPU
jWHMqREqm48xM0LlLIY5M0K7ascc87Y8GrYQzDFXUNDWNvTilrqNd3Mscym0jCrM9ghVZ2GxXD5D
09jBHOig6iwslstnqNv9MMcY3DCgbl/aHKNBYmBBvbNNjHQNzDEu1TOgbnvBAuNsMQMLC+TzVA2o
WnZiXitD5QDDvFaG+hagrW8yoO4QvwVGC4jKidYCY0SD+hagFetUtwB9HseAumOKmNfHUN8HaJ1J
Gmc7lLUWugZ6tLYOrZFN9UyIPpBBfQvQZsypnsvRp3WobgH6IgwDC0NLFEDNVjfmpTEGVO1XWWCc
tkFr76CtMKG6dzByCJWjA6MIpnJFjj6QQfX0iz6tQ+WWjyWWlg9VW+uYt8YYULd3Y4mlpUDV1qcl
xuQNlatBS4zNNAbmVF0Ya4mlrUNtCzAyGlXnTy0x7pajclvHEmOOhurJFGW8xEDPzIx6B8Yb6RpY
oo6QgMynZlGKdk8MDYxHTkAGemamVM7DKLMwIPOpOmuBdvkLKHgMaNbKsEQ9QozmliEPJIIso3K6
RTmAA2w+LUMOeVwabBl1cwnK1AwtzEfLJma0TGYojRsDPTMTasa8oQHqUV+gPGlKq5gHWYY8YAGy
jJoFDMh85KYyyHxqBxZyUxlkPjUrWJD70XKGKS0jA2XkggaeQZm8AZlP5chGmbwBm0/DlItySirN
LaNxNkEZsqC5Z5CHL8CWUbG0R78TBmQ+LfMMRguGppYhb20E+YzKGQhlDQbYfBpmIJQZHJBlNA05
jHKalj5DL7SpHU3oGYiWIYcy1AFqblBz7MwQ7f4YUDKgZhcAZD7yYLahnokBNecJQeYjN8RpYT5y
0Q8yn5pjZSD3IydWQz1qDjOBTEdOqtQ3HbndTXXTUZpDoJCnatvREHU/Dsh8E+TJTSpHM8o4B8gy
apuP3NCmflQgF9+0cD1aJjCgdlSjZQNqF0IoiztA4UPlQg5lvgZkPi2TKspSU5BlVO1TGaLO1tDC
fLSsQPXIpnViQitVqZ0ZUAYwDPWMqbpqxBDtqFIqF0VGqJt9qW86atoxtkRZ8ELVMtsIdQYFlBGo
Of0AigjUUtXYkqpNO7RbXqgfFWjZgJqdVCPUmROqux1lcIL6pqM3SalaW6KdQwpKl1StzdBOHgWZ
T233o6Uc6lYAaPewgNxP5fBBa01YUrcCQLtrxVDP0oB2rQm0e1dAlpkh9/yp2pk10kWZNaHm0S6G
RqjrRcEeoW6JhDJJQgvzUXOFpQFVm3VGqNfhG+pRcaOtsa4B2jW01A0eiPmo4wg0yxQQy1BLcBpb
htqmoV4jAOIV1K6hBa1aTBDL0NIw1XIg2HS0AQcqBxTK7IuhHrVNRx1mo7bp6JmDei1hSMijJiJq
1ngQ81FbwpZUXLkOMR+1S0h996Oleyq2aMDuR5lFARWu1GvRQMxHTz/Ua/FBzKdneYoycQIKLBo1
nyA+Q88ZNLUMPZtQr0MK9gzayANtqz2UiRNQe4R2IYcx5kHlAgZj1IPKBYwR6qITUGDRaNzDWNcA
Y9yD+oGFnoypWtqgjXsY6ZlQtzYxQj3qjAbmo7RzaGE+cmlvRMUpLXDqQZlJob7pyI1lUNhQr5cE
cT1yeU591yOnfCM9Y0vq9a/BrkdpJ1Dd9SjjHrRwPXIbGWQ+VVvJaEMdtDAfuZUDMp/asUvr1IPc
SjbSM7agqvtBLQykO9KoHj6gDIBmPlXTD9plKFTOXcaosw2g0KG262maeoxRd2vQwv3IfSxQyU/V
Pq4x6m1oIPOp2scyRt2qATKf2u5HLX2o3OoxRt2pQfXUb4ha71JzLgyUcXVRVnCCQx95mJt6C9DA
lqFVw1Su5o11MSpiKhcVKMsZjPQsqNtMMUa96x1sPnJkULVTa4y6nIHmlqEWstQPOdQq2sLSGDnk
qJ2MUUtc2lqGMvYAiiaUe6eot+wOnEFRxh6M9CyoeAyEMfhKD9QeFpWTAdqlJ6DAompLDe3OEyM9
SwOU7edUTWZo95+ALKNqxYt2/Qn1Jh3BEY3SVae22cir2UGRTOVwR9kOAjKfyokIZZEF2Hzksoqq
pbyJLtqog4Ul7YoPE/TGhIUltWMGtZS3NDBEXvlK1dEyE12UwyxA2Y+WeR2tZWRpQNWC3QS9ZUTb
ggtlOwgo5Kg6FmWiizKRATKflskAZWmGEXWnP01QF2dQ33TU/ELLhoop6tETVC3y0W5KARWZtCvF
0G5NobllqL1TKheZaBeogDxD1crMFH10w8KSqqUw2vUpIPfTrmFvijrUYaxnaELVggvtJhVamI88
UAwyn8qRjXLiFsh8aocP8mAHyHyqth9MUdsnxnqGprSrOExRTx0FWUbV5rspavsEZD4tPYMy8gGy
jJormExRBz5AxlM54lFaJKCEReWMgdIioYX5aBnDlHZtUVPU4zlBnqFyZKCMaIDMp3JkoAxigMyn
XZWBdo8KyDKqBhbazSkg86kaWGaox23Rwny0lEvdKtUM9bAtkPtpGtnI7WmQZbRrhpqhrqYAWUbl
lIUyzEEL85HH+mhhPnLLGVRnULNKQrskhRbOR88YtEy4KGMZIM/Q0jKUsQyaW4Y8GGisZ2xJ1Sap
GerhXCDzqZwLUTatGlN3zZEZ6r4S6puOPKlDi7BBLW6pOiRmht7MobLpaI0cqppujrrsERTyFjQb
Qka7HcVYz4SGo65oV6WALKN2yKEWuyYGVB1vN0dvj1DdfJSJFVD40K4nYI560gTIMipHBloTxIS6
o97mqEtLQO6nXRfZHHWmBWwZcp6karVhjj6SQe14QS14jS1pWbygtU2o7BW0xgg1j/ExBt9lgdr+
oHoSRhu5MKHi7keI+5HXDYNSLVXbT2jXoYDMp2V5hXJXG8gyqg65od2MAjKfyokVbeTCmLqD6Wj3
olDd/WgXoRjrmZlSNTGh3YMCMp+q8Wuha4DapTQzpbb5qA1m6puPWm6b0XCY0AJ9fMLMhHaVhAX6
zAxtfYay45UGyQxlTQbIfKq2QS1QV6SCzKdq48MC9X5XkPlULQYt0Bs3ZqbUNh89m1C5mEJZhkqD
8EGbjKF6MYs2JkHbzIbWwKFtMYI2T0Njn6EnM9r1PizQRzNo6zO0wQ0aW4bawjYzod2guyXqIhZQ
1qVdc9USs7lBU8tQG/pmNJz7RrtjhebBiN6qomkwomdqqjYRLdGHXGiZtdCuYQFFE1UrWrRbWEDm
0zJmMFpV1I4Z9AwEmFJtbC0AfauOfIeVAQA=
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '7550'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 18 Sep 2023 09:59:51 GMT
Expires:
- Mon, 18 Sep 2023 10:00:51 GMT
Last-Modified:
- Mon, 18 Sep 2023 08:31:03 GMT
Set-Cookie:
- ak_bmsc=6BB4D3D3A59B20D3818DD1E14A5E85C7~000000000000000000000000000000~YAAQFk4SAk8HZJOKAQAAUGa7pxUGEDWHb3oa/qFWKkiodi7FWgH58ieCCMVauAQl7DOYb3FAAEmFJtMW0Dh2ZjXVTjeDrQo2tUowbJwSuN1srdvQ0GqlozvQjows4fxAvMkJZ5wnXGbPE/9O3JFjGGt4UbSa8ru5z4nrFuO+6uusFQs9yJkCwUZL+5wfqG2YI9PEoIW3LbsMAinEFfT5Rwsp/qedwPskTOX2iuMrdksKnl8d9uUoNF1gxEyl9ywh/Kn6+ufh7PwgO8chH0KXZVWfxCIHMo0cj8lNzWW4WkB1NtFepZyEC1uSOHF7sHJGPVRy7mbdaRtg4GOr8QrH0P6uxqAxTEDJ1E9+/zA02N2E/210A1e+TWFDtkzczU53;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 18 Sep 2023 11:59:50 GMT; Max-Age=7199;
HttpOnly
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '106'
status:
code: 200
message: OK
version: 1

View File

@@ -1,597 +0,0 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, br
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&series_id=FF
response:
body:
string: !!binary |
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
HaKmvvEoQ9QQ4wGLrQUA3ab+KsY7BQA=
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '31601'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 18 Sep 2023 09:59:52 GMT
Expires:
- Mon, 18 Sep 2023 10:00:52 GMT
Last-Modified:
- Thu, 14 Sep 2023 20:19:06 GMT
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '103'
status:
code: 200
message: OK
version: 1

View File

@@ -1,212 +0,0 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, br
Connection:
- keep-alive
method: GET
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&file_type=json&series_id=SOFR
response:
body:
string: !!binary |
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
headers:
Accept-Ranges:
- bytes
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '9457'
Content-Type:
- application/json; charset=UTF-8
Date:
- Mon, 18 Sep 2023 09:59:50 GMT
Expires:
- Mon, 18 Sep 2023 10:00:50 GMT
Last-Modified:
- Fri, 15 Sep 2023 12:01:03 GMT
Set-Cookie:
- ak_bmsc=3717B9CDF3F78B0F7113C27E36096262~000000000000000000000000000000~YAAQFk4SAscGZJOKAQAAXWO7pxVe9bV2HlkCKt3BUW7oB4jPnA73V+BVxba3AFaBWIPkkT78l8H3w72OoCXZNV0RccLajhniT1Vzk93Cdhk7PuHmgkMdjVG1wWOvSqzT5MmNOr/Hplz0oYhpD6HyXQHuoQWmiCRXOhuB5QFKGUTJVGYH1gREW5RjKtRnVCQsRGup4PnVFwfnlp61wU1EFN1LUmC4xji6RiaKaVipJkgk1mUnJQrSwpS5sLAGr3BSXGEBkp9RHg1yyvOitz0VQDRvCvPYJHKDlMXlFplEjWbF3m4XAJmsUX++mv9snBCH4BWVEGOYLXhMdtua9ug4SCFJyS/AK4NpsCFTd2025NFPvszvsC58F4JqqKAioZ7B;
Domain=.stlouisfed.org; Path=/; Expires=Mon, 18 Sep 2023 11:59:50 GMT; Max-Age=7200;
HttpOnly
Vary:
- Accept-Encoding
x-rate-limit-limit:
- '120'
x-rate-limit-remaining:
- '107'
status:
code: 200
message: OK
version: 1

View File

@@ -4,20 +4,22 @@ import datetime
import pytest
from openbb_core.app.service.user_service import UserService
from openbb_fred.models.ameribor_rates import FREDAMERIBORFetcher
from openbb_fred.models.ameribor import FredAmeriborFetcher
from openbb_fred.models.balance_of_payments import FredBalanceOfPaymentsFetcher
from openbb_fred.models.bond_indices import FredBondIndicesFetcher
from openbb_fred.models.commercial_paper import FREDCommercialPaperFetcher
from openbb_fred.models.consumer_price_index import FREDConsumerPriceIndexFetcher
from openbb_fred.models.cp import FREDCommercialPaperFetcher
from openbb_fred.models.dwpcr_rates import FREDDiscountWindowPrimaryCreditRateFetcher
from openbb_fred.models.ecb_interest_rates import (
FREDEuropeanCentralBankInterestRatesFetcher,
)
from openbb_fred.models.estr_rates import FREDESTRFetcher
from openbb_fred.models.euro_short_term_rate import FredEuroShortTermRateFetcher
from openbb_fred.models.fed_projections import FREDPROJECTIONFetcher
from openbb_fred.models.fed_rates import FREDFEDFetcher
from openbb_fred.models.federal_funds_rate import FredFederalFundsRateFetcher
from openbb_fred.models.ffrmc import FREDSelectedTreasuryConstantMaturityFetcher
from openbb_fred.models.hqm import FREDHighQualityMarketCorporateBondFetcher
from openbb_fred.models.high_quality_market import (
FredHighQualityMarketCorporateBondFetcher,
)
from openbb_fred.models.ice_bofa import FREDICEBofAFetcher
from openbb_fred.models.iorb_rates import FREDIORBFetcher
from openbb_fred.models.manufacturing_outlook_texas import (
@@ -25,6 +27,9 @@ from openbb_fred.models.manufacturing_outlook_texas import (
)
from openbb_fred.models.moody import FREDMoodyCorporateBondIndexFetcher
from openbb_fred.models.mortgage_indices import FredMortgageIndicesFetcher
from openbb_fred.models.overnight_bank_funding_rate import (
FredOvernightBankFundingRateFetcher,
)
from openbb_fred.models.regional import FredRegionalDataFetcher
from openbb_fred.models.retail_prices import FredRetailPricesFetcher
from openbb_fred.models.search import (
@@ -34,7 +39,7 @@ from openbb_fred.models.senior_loan_officer_survey import (
FredSeniorLoanOfficerSurveyFetcher,
)
from openbb_fred.models.series import FredSeriesFetcher
from openbb_fred.models.sofr_rates import FREDSOFRFetcher
from openbb_fred.models.sofr import FREDSOFRFetcher
from openbb_fred.models.sonia_rates import FREDSONIAFetcher
from openbb_fred.models.spot import FREDSpotRateFetcher
from openbb_fred.models.survey_of_economic_conditions_chicago import (
@@ -85,9 +90,12 @@ def test_fred_us_yield_curve_fetcher(credentials=test_credentials):
@pytest.mark.record_http
def test_fredsofr_fetcher(credentials=test_credentials):
def test_fred_sofr_fetcher(credentials=test_credentials):
"""Test FREDSOFRFetcher."""
params = {}
params = {
"start_date": datetime.date(2024, 6, 1),
"end_date": datetime.date(2024, 6, 6),
}
fetcher = FREDSOFRFetcher()
result = fetcher.test(params, credentials)
@@ -95,11 +103,14 @@ def test_fredsofr_fetcher(credentials=test_credentials):
@pytest.mark.record_http
def test_fredestr_fetcher(credentials=test_credentials):
"""Test FREDESTRFetcher."""
params = {}
def test_fred_euro_short_term_rate_fetcher(credentials=test_credentials):
"""Test FREDEuroShortTermRateFetcher."""
params = {
"start_date": datetime.date(2024, 6, 1),
"end_date": datetime.date(2024, 6, 6),
}
fetcher = FREDESTRFetcher()
fetcher = FredEuroShortTermRateFetcher()
result = fetcher.test(params, credentials)
assert result is None
@@ -115,21 +126,29 @@ def test_fredsonia_fetcher(credentials=test_credentials):
@pytest.mark.record_http
def test_fredameribor_fetcher(credentials=test_credentials):
"""Test FREDAMERIBORFetcher."""
params = {}
def test_fred_ameribor_fetcher(credentials=test_credentials):
"""Test FredAmeriborFetcher."""
params = {
"start_date": datetime.date(2023, 1, 1),
"end_date": datetime.date(2023, 6, 6),
"maturity": "overnight",
}
fetcher = FREDAMERIBORFetcher()
fetcher = FredAmeriborFetcher()
result = fetcher.test(params, credentials)
assert result is None
@pytest.mark.record_http
def test_fredfed_fetcher(credentials=test_credentials):
"""Test FREDFEDFetcher."""
params = {}
def test_fred_federal_funds_rate_fetcher(credentials=test_credentials):
"""Test FRED Federal Funds Rate Fetcher."""
params = {
"start_date": datetime.date(2023, 1, 1),
"end_date": datetime.date(2023, 6, 6),
"effr_only": True,
}
fetcher = FREDFEDFetcher()
fetcher = FredFederalFundsRateFetcher()
result = fetcher.test(params, credentials)
assert result is None
@@ -212,8 +231,10 @@ def test_fred_moody_corporate_bond_index_fetcher(credentials=test_credentials):
def test_fred_commercial_paper_fetcher(credentials=test_credentials):
"""Test FREDCommercialPaperFetcher."""
params = {
"start_date": datetime.date(2023, 1, 1),
"end_date": datetime.date(2023, 6, 6),
"start_date": datetime.date(2024, 1, 1),
"end_date": datetime.date(2024, 2, 1),
"category": "asset_backed",
"maturity": "30d",
}
fetcher = FREDCommercialPaperFetcher()
@@ -236,10 +257,10 @@ def test_fred_spot_rate_fetcher(credentials=test_credentials):
@pytest.mark.record_http
def test_fred_high_quality_market_corporate_bond_fetcher(credentials=test_credentials):
"""Test FREDHighQualityMarketCorporateBondFetcher."""
params = {"date": datetime.date(2023, 1, 1)}
"""Test FredHighQualityMarketCorporateBondFetcher."""
params = {"date": "2023-01-01"}
fetcher = FREDHighQualityMarketCorporateBondFetcher()
fetcher = FredHighQualityMarketCorporateBondFetcher()
result = fetcher.test(params, credentials)
assert result is None
@@ -439,3 +460,16 @@ def test_fred_manufacturing_outlook_texas_fetcher(
fetcher = FredManufacturingOutlookTexasFetcher()
result = fetcher.test(params, credentials)
assert result is None
@pytest.mark.record_http
def test_fred_overnight_bank_funding_rate_fetcher(credentials=test_credentials):
"""Test FRED Overnight Bank Funding Rate Fetcher."""
params = {
"start_date": datetime.date(2024, 6, 1),
"end_date": datetime.date(2024, 6, 6),
}
fetcher = FredOvernightBankFundingRateFetcher()
result = fetcher.test(params, credentials)
assert result is None