This is a MuniPro demonstration of a redesigned Texas Bond Review Board website. It is not the official BRB site: nothing filed here reaches BRB, and the email addresses shown are BRB's own. The official site is brb.texas.gov.

Data Center · Open data

Open data API

Use the same published rows as our downloads in your own tools. No account or API key is needed.

Download CSV or Excel files · Read the data dictionary · Check releases and revisions

Datasets and endpoints

The base address is https://txbrb.munipro.com/api/v1/. It lists every dataset, its row count, as-of date and download links. Read a dataset's metadata for its fields, definitions and the meaning of each blank.

Version 1 datasets
DatasetMetadataRowsYear parameter
Debt Outstanding By Issuance Local By Yearlocal-issuesJSON rowsfy
Debt Outstanding By Issuance State By Yearstate-issuesJSON rowsfy
Local Government Borrowerslocal-issuersJSON rowsfy
Bond Market ParticipantsparticipantsJSON rowsfy
Local Government Cost of Issuancecost-of-issuanceJSON rowsfy
Proposed Bonds and Election Resultsproposed-bondsJSON rowsfy
Final Reports and Debt Servicereported-issuesJSON rowsfy
Private Activity Bond Requestspab-requestsJSON rowsyear
Private Activity Bond Totalspab-totalsJSON rowsyear
Local Issuance Fee By Yearlocal-feesJSON rowsfy
State Issuance Fee By Yearstate-feesJSON rowsfy
Debt explorer: rankingexplore-rankingJSON rowsfy
Debt explorer: typesexplore-typesJSON rowsfy
Debt explorer: pledge typesexplore-pledge-typesJSON rowsfy
Debt explorer: pledgeexplore-pledgeJSON rowsfy
Debt explorer: issuersexplore-issuersJSON rowsfy
Debt explorer: state issuersexplore-state-issuersJSON rowsfy
Debt explorer: state programsexplore-state-programsJSON rowsfy
Debt explorer: state yearsexplore-state-yearsJSON rowsfy
Debt explorer: state issuers historyexplore-state-issuers-historyJSON rowsfy
Debt explorer: state programs historyexplore-state-programs-historyJSON rowsfy
Debt explorer: county issuersexplore-county-issuersJSON rowsfy
Debt explorer: county alsoexplore-county-alsoJSON rowsfy
Debt explorer: county typesexplore-county-typesJSON rowsfy
Debt explorer: county trendexplore-county-trendJSON rowsfy
Changes in BRB issue source dataissue-revisionsJSON rowsNone
Cost of issuance benchmarkscost-benchmarksJSON rowsNone
Fee totals by rolerole-totalsJSON rowsfy
Published firm spelling mergesfirm-aliasesJSON rowsNone
Issues worked on by firmfirm-dealsJSON rowsfy
Issuer debt historyissuer-historyJSON rowsfy
Reported tax rate notesexplore-rate-notesJSON rowsfy
State issuersstate-issuersJSON rowsNone
Local debt by issuer typelocal-by-typeJSON rowsNone
Published market issues and maturitiesemma-maturitiesJSON rowsNone

Every response has public caching for 600 seconds, an ETag and Access-Control-Allow-Origin: *. Send the ETag in If-None-Match to receive HTTP 304 when unchanged. The API accepts GET only; other methods return HTTP 405. Browser access is allowed from any origin.

Paging and filters

A rows response contains dataset, version, as_of, total, start, limit, next and rows. start is a zero-based offset. The default limit is 100; the maximum is 1000. Values above 1000 use 1000.

Follow next until it is null. It retains your year and issuer filters. Rows use a stable order for the same data version. A release can replace rows while you page; check the release calendar and restart your walk after a release if you need one complete snapshot.

Use ?fy=2025 for one fiscal year, or ?year=2026 for a program-year dataset. Texas fiscal years run from September 1 through August 31 and are named for the year they end. Metadata declares the supported year parameter. A dataset with an issuer_field also accepts issuer, the published stable issuer id, rather than an issuer name. Other filters are unsupported.

Unknown or repeated parameters, non-integer page or year values, negative offsets, empty issuer ids and limits below 1 return HTTP 400 with a JSON error. Unknown datasets return HTTP 404. The grids' ?format=json responses serve the user interface and have a separate contract.

Field names are the stable API keys in the dictionary. Money is a decimal string, such as "1250000.00", with no thousands separators; parse it with a decimal type to preserve cents. Dates use YYYY-MM-DD. Missing values are JSON null, never zero; each field's dictionary explains what a blank means.

Copy-paste examples

curl

Get the first page of local issues for fiscal year 2025:

curl --fail 'https://txbrb.munipro.com/api/v1/datasets/local-issues/rows/?fy=2025&start=0&limit=1000'

Python

This uses only Python's standard library and follows every page. Use Decimal when reading money strings.

import json
from decimal import Decimal
from urllib.request import urlopen
from urllib.parse import urljoin

base = "https://txbrb.munipro.com/api/v1/"
url = base + "datasets/local-issues/rows/?fy=2025&limit=1000"
rows = []
while url:
    with urlopen(url) as response:
        page = json.load(response)
    rows.extend(page["rows"])
    url = urljoin(base, page["next"]) if page["next"] else None
principal = sum((Decimal(row["principal"]) for row in rows
                 if row["principal"] is not None), Decimal("0"))
print(len(rows), principal)

Excel Power Query

In Excel, choose Data → Get Data → From Other Sources → Blank Query, open Advanced Editor and paste this query. It follows every page and leaves money as exact text; choose your decimal conversion deliberately.

let
    Base = "https://txbrb.munipro.com/api/v1/",
    GetPage = (url as text) as record => Json.Document(Web.Contents(url)),
    First = Base & "datasets/local-issues/rows/?fy=2025&limit=1000",
    Pages = List.Generate(
        () => GetPage(First),
        each _ <> null,
        each if [next] = null then null
             else GetPage(Uri.Combine(Base, [next])),
        each [rows]
    ),
    Rows = List.Combine(Pages),
    Data = Table.FromRecords(Rows)
in
    Data

Compatibility policy

Inside v1, fields are only added, never renamed or removed. A breaking change becomes v2, and v1 keeps running for at least 12 months after v2 is released. Every field addition is listed below with its date. Applications should accept added fields and check a field's blank meaning before treating missing data.

Change log

2026-10-06 — Version 1 published

The initial version added the dataset index, metadata and paged rows. The field additions are listed individually:

Debt Outstanding By Issuance Local By Year — 38 fields added 2026-10-06
Debt Outstanding By Issuance State By Year — 22 fields added 2026-10-06
Local Government Borrowers — 15 fields added 2026-10-06
Bond Market Participants — 15 fields added 2026-10-06
Local Government Cost of Issuance — 12 fields added 2026-10-06
Proposed Bonds and Election Results — 14 fields added 2026-10-06
Final Reports and Debt Service — 19 fields added 2026-10-06
Private Activity Bond Requests — 17 fields added 2026-10-06
Private Activity Bond Totals — 5 fields added 2026-10-06
Local Issuance Fee By Year — 23 fields added 2026-10-06
State Issuance Fee By Year — 23 fields added 2026-10-06
Debt explorer: ranking — 13 fields added 2026-10-06
Debt explorer: types — 3 fields added 2026-10-06
Debt explorer: pledge types — 7 fields added 2026-10-06
Debt explorer: pledge — 6 fields added 2026-10-06
Debt explorer: issuers — 8 fields added 2026-10-06
Debt explorer: state issuers — 8 fields added 2026-10-06
Debt explorer: state programs — 6 fields added 2026-10-06
Debt explorer: state years — 6 fields added 2026-10-06
Debt explorer: state issuers history — 7 fields added 2026-10-06
Debt explorer: state programs history — 5 fields added 2026-10-06
Debt explorer: county issuers — 10 fields added 2026-10-06
Debt explorer: county also — 9 fields added 2026-10-06
Debt explorer: county types — 6 fields added 2026-10-06
Debt explorer: county trend — 7 fields added 2026-10-06
Changes in BRB issue source data — 7 fields added 2026-10-06
Cost of issuance benchmarks — 12 fields added 2026-10-06
Fee totals by role — 12 fields added 2026-10-06
Published firm spelling merges — 3 fields added 2026-10-06
Issues worked on by firm — 12 fields added 2026-10-06
Issuer debt history — 9 fields added 2026-10-06
Reported tax rate notes — 4 fields added 2026-10-06
State issuers — 6 fields added 2026-10-06
Local debt by issuer type — 5 fields added 2026-10-06
Published market issues and maturities — 26 fields added 2026-10-06