Programmatic access to US Treasury yield curve data, auction results, term premia, and FOMC decisions via a REST API with JSON responses.
The built-in playground lets you try any endpoint immediately in sandbox mode — no account or API key needed. Sandbox requests are rate-limited to 10 per day and responses are truncated to 5 rows. Toggle "Use my API key" for full authenticated access.
Endpoints cover curves, levels, slopes, forwards, premia, regimes, auctions, and fed decisions. Authentication uses Bearer tokens generated from your Account Dashboard. Rate limits reset daily at midnight UTC across Free, Basic, and Pro tiers.
Fast programmatic access to US Treasury yield curve data, auction results, term premia, and FOMC decisions.
All endpoints (except /health) require a Bearer token:
Authorization: Bearer ycp_abc123def456...
Generate your token from your Account Dashboard. Tokens use the ycp_ prefix followed by 64 hex characters. Store it securely — it is shown only once.
https://www.yieldcurve.pro/api/v1
Limits reset daily at midnight UTC. Every response includes headers:
X-RateLimit-Limit — your daily limit for the endpointX-RateLimit-Remaining — requests remaining today| Endpoint | Free | Basic | Pro |
|---|---|---|---|
| curves | 10 | 100 | 500 |
| levels | 10 | 100 | 500 |
| slopes | 10 | 100 | 500 |
| forwards | 5 | 50 | 250 |
| premia | 5 | 50 | 250 |
| regimes | 5 | 50 | 250 |
| auctions | 10 | 100 | 500 |
| fed | 10 | 100 | 500 |
Try any endpoint without an API key using the playground above. Sandbox requests are rate-limited to 10 per day (by IP) and responses are truncated to 5 rows. Sign up for a free account to get full access.
Sandbox base URL: https://www.yieldcurve.pro/api/v1/sandbox
Sandbox responses include "sandbox": true and a "total" field showing the full result count.
Success:
{
"data": [...],
"count": 42,
"endpoint": "levels"
}
Error:
{"error": "Human-readable message"}
Status codes: 400 (bad params), 401 (auth), 403 (beta access), 429 (rate limit), 503 (disabled).
Health check. No authentication required.
{"status": "ok", "timestamp": "2026-03-01T14:30:00Z"}
Yield curve snapshot for a single date.
| Param | Type | Default | Description |
|---|---|---|---|
| date | YYYY-MM-DD | latest | Curve date |
{"data": [{"tenor": "3 Mo", "value": 0.0435}, ...], "count": 13, "endpoint": "curves"}
Yield levels time series.
| Param | Type | Default | Description |
|---|---|---|---|
| start_date | YYYY-MM-DD | 1 year ago | Start of range |
| end_date | YYYY-MM-DD | today | End of range |
| tenors | string (multi) | all | Filter to specific tenors |
Tenors: 1 Mo, 2 Mo, 3 Mo, 4 Mo, 6 Mo, 1 Yr, 2 Yr, 3 Yr, 5 Yr, 7 Yr, 10 Yr, 20 Yr, 30 Yr
Pass multiple tenors as repeated query params: ?tenors=2+Yr&tenors=10+Yr
Yield curve spread between two tenors.
| Param | Type | Default | Description |
|---|---|---|---|
| start_date | YYYY-MM-DD | 1 year ago | Start of range |
| end_date | YYYY-MM-DD | today | End of range |
| tenor_long | string | 10 Yr | Long-end tenor |
| tenor_short | string | 3 Mo | Short-end tenor |
Par, spot, and forward curves.
| Param | Type | Default | Description |
|---|---|---|---|
| date | YYYY-MM-DD | latest | Curve date |
| horizon | int | 12 | Forward horizon in months |
ACM term premium decomposition.
| Param | Type | Default | Description |
|---|---|---|---|
| start_date | YYYY-MM-DD | 1 year ago | Start of range |
| end_date | YYYY-MM-DD | today | End of range |
| tenors | string (multi) | all | Filter to specific maturities |
| component | string | both | tp (term premium), rny (risk-neutral yield), or omit for both |
Tenors: 1 Yr, 2 Yr, 3 Yr, 5 Yr, 7 Yr, 10 Yr, 20 Yr, 30 Yr
Yield curve regime classification (Bull/Bear Steep/Flat) with level-slope-twist components.
| Param | Type | Default | Description |
|---|---|---|---|
| start_date | YYYY-MM-DD | 1 year ago | Start of range |
| end_date | YYYY-MM-DD | today | End of range |
| tenor_long | string | 10 Yr | Long-end tenor |
| tenor_short | string | 3 Mo | Short-end tenor |
| lookback | int | 251 | Rolling window in trading days |
Graded Treasury auction results.
| Param | Type | Default | Description |
|---|---|---|---|
| start_date | YYYY-MM-DD | 1 year ago | Start of range |
| end_date | YYYY-MM-DD | today | End of range |
| tenor | string | 10-Year | Auction tenor |
Tenors: 4-Week, 8-Week, 13-Week, 17-Week, 26-Week, 52-Week, 2-Year, 3-Year, 5-Year, 7-Year, 10-Year, 20-Year, 30-Year
FOMC rate decisions.
| Param | Type | Default | Description |
|---|---|---|---|
| start_date | YYYY-MM-DD | 1 year ago | Start of range |
| end_date | YYYY-MM-DD | today | End of range |
| changes_only | bool | true | Only show meetings with rate changes |
Your current daily usage and limits. No additional parameters.
{
"tier": "free",
"data": [
{"endpoint": "curves", "used": 3, "limit": 10, "remaining": 7},
...
],
"endpoint": "usage"
}
| Tier | Description |
|---|---|
| Free | Included with any account |
| Basic | Higher limits for regular use |
| Pro | Full access for applications |
See current pricing and upgrade from your Account Dashboard.
import requests
TOKEN = "ycp_..."
BASE = "https://www.yieldcurve.pro/api/v1"
# Get latest yield curve
r = requests.get(f"{BASE}/curves", headers={"Authorization": f"Bearer {TOKEN}"})
print(r.json())
# Get 10Y-2Y spread for 2024
r = requests.get(
f"{BASE}/slopes",
params={"start_date": "2024-01-01", "end_date": "2024-12-31",
"tenor_long": "10 Yr", "tenor_short": "2 Yr"},
headers={"Authorization": f"Bearer {TOKEN}"},
)
print(r.json())
curl -H "Authorization: Bearer ycp_..." https://www.yieldcurve.pro/api/v1/curves
curl -H "Authorization: Bearer ycp_..." \
"https://www.yieldcurve.pro/api/v1/levels?start_date=2024-01-01&tenors=2+Yr&tenors=10+Yr"
Select an endpoint and click Send.