SuperAPI AI Directory

alterlab-usfiscaldata

Data & analytics

View repository

Updated 10-15 19:56

About this skill

U.S. Treasury Fiscal Data API

Free, open REST API from the U.S. Department of the Treasury for federal financial data. No API key or registration required.

Base URL: https://api.fiscaldata.treasury.gov/services/api/fiscal_service

The catalog held 56 datasets / 183 data tables when checked on 2026-09-23; browse https://fiscaldata.treasury.gov/datasets/ for the current list and each table's endpoint version (v1 or v2).

When to Use This Skill

  • Federal debt (Debt to the Penny, historical debt outstanding, schedules of federal debt)
  • Daily and Monthly Treasury Statements: operating cash balance, deposits/withdrawals, receipts, outlays, deficit
  • Treasury securities auctions (results and upcoming), average interest rates, interest expense
  • Treasury Reporting Rates of Exchange, savings bonds, I bond rates

Does NOT Trigger

Scenario Use Instead
Market yields (DGS10), Fed funds, or macro series by FRED ID with transformations alterlab-fred
Market quotes or daily FX/crypto prices from a commercial feed alterlab-alpha-vantage
Hedge-fund leverage or repo-market aggregates (Form PF, FICC) alterlab-hedgefund-monitor
Company filings and financial statements from SEC EDGAR alterlab-edgartools

Quick Start

import requests
import pandas as pd

BASE_URL = "https://api.fiscaldata.treasury.gov/services/api/fiscal_service"

# Get the current national debt (Debt to the Penny)
resp = requests.get(f"{BASE_URL}/v2/accounting/od/debt_to_penny", params={
    "sort": "-record_date",
    "page[size]": 1
})
data = resp.json()["data"][0]
print(f"Total public debt as of {data['record_date']}: ${float(data['tot_pub_debt_out_amt']):,.0f}")
# Get Treasury exchange rates for recent quarters
resp = requests.get(f"{BASE_URL}/v1/accounting/od/rates_of_exchange", params={
    "fields": "country_currency_desc,exchange_rate,record_date",
    "filter": "record_date:gte:2024-01-01",
    "sort": "-record_date",
    "page[size]": 100
})
df = pd.DataFrame(resp.json()["data"])

Authentication

None required. The API is fully open and free.

Core Parameters

Parameter Example Description
fields= fields=record_date,tot_pub_debt_out_amt Select specific columns
filter= filter=record_date:gte:2024-01-01 Filter records
sort= sort=-record_date Sort (prefix - for descending)
format= format=json Output format: json, csv, xml
page[size]= page[size]=100 Records per page (default 100, max 10000)
page[number]= page[number]=2 Page index (starts at 1)

Filter operators: lt, lte, gt, gte, eq, in

# Multiple filters separated by comma
"filter=country_currency_desc:in:(Canada-Dollar,Mexico-Peso),record_date:gte:2024-01-01"

Key Datasets & Endpoints

Debt

Dataset Endpoint Frequency
Debt to the Penny /v2/accounting/od/debt_to_penny Daily
Historical Debt Outstanding /v2/accounting/od/debt_outstanding Annual
Schedules of Federal Debt /v1/accounting/od/schedules_fed_debt Monthly

Daily & Monthly Statements

Dataset Endpoint Frequency
DTS Operating Cash Balance /v1/accounting/dts/operating_cash_balance Daily
DTS Deposits & Withdrawals /v1/accounting/dts/deposits_withdrawals_operating_cash Daily
Monthly Treasury Statement (MTS) /v1/accounting/mts/mts_table_1 (16 tables) Monthly

Interest Rates & Exchange

Dataset Endpoint Frequency
Average Interest Rates on Treasury Securities /v2/accounting/od/avg_interest_rates Monthly
Treasury Reporting Rates of Exchange /v1/accounting/od/rates_of_exchange Quarterly
Interest Expense on Public Debt /v2/accounting/od/interest_expense Monthly

Securities & Auctions

Dataset Endpoint Frequency
Treasury Securities Auctions Data /v1/accounting/od/auctions_query As Needed
Treasury Securities Upcoming Auctions /v1/accounting/od/upcoming_auctions As Needed
Average Interest Rates /v2/accounting/od/avg_interest_rates Monthly

Savings Bonds

Dataset Endpoint Frequency
I Bonds Interest Rates /v1/accounting/od/i_bonds_interest_rates Semi-Annual
U.S. Treasury Savings Bonds: Issues, Redemptions & Maturities /v1/accounting/od/savings_bonds_report Monthly

Response Structure

{
  "data": [...],
  "meta": {
    "count": 100,
    "total-count": 3790,
    "total-pages": 38,
    "labels": {"field_name": "Human Readable Label"},
    "dataTypes": {"field_name": "STRING|NUMBER|DATE|CURRENCY"},
    "dataFormats": {"field_name": "String|10.2|YYYY-MM-DD"}
  },
  "links": {"self": "...", "first": "...", "prev": null, "next": "...", "last": "..."}
}

Note: All values are returned as strings. Convert as needed (e.g., float(), pd.to_datetime()). Null values appear as the string "null".

Common Patterns

Load all pages into a DataFrame

def fetch_all_pages(endpoint, params=None):
    params = dict(params or {})
    params["page[size]"] = 10000  # the API maximum; larger values return HTTP 400
    params["page[number]"] = 1
    rows = []
    while True:
        resp = requests.get(f"{BASE_URL}{endpoint}", params=params, timeout=60)
        resp.raise_for_status()
        result = resp.json()
        rows.extend(result["data"])
        if params["page[number]"] >= result["meta"]["total-pages"]:
            break
        params["page[number]"] += 1
    return pd.DataFrame(rows)

Aggregation (automatic sum)

Omitting grouping fields triggers automatic aggregation:

# Sum all deposits/withdrawals by record_date and transaction type
resp = requests.get(f"{BASE_URL}/v1/accounting/dts/deposits_withdrawals_operating_cash", params={
    "fields": "record_date,transaction_type,transaction_today_amt"
})

Reference Files

Cite the dataset name, table, and retrieval date (Fiscal Data values are revised; keep the record_date you used).

Part of the AlterLab Academic Skills suite.