XOOMAR

Free Structured Products API

Structured note issuance parsed from SEC 424B2 and FWP filings. Issuer, underlyings, note type, coupon, and barrier per filing, refreshed every 30 minutes. This feed doesn't exist anywhere else for free.

Endpoints

GET
/api/markets/structured-products?issuer=&underlying=&days=

Recent filings, newest first, up to 200 rows. Filter by issuer substring, underlying symbol (SPX, NVDA...), and lookback days (max 365).

GET
/api/markets/structured-products/csv

Full dataset as CSV, up to 50,000 rows.

Rate Limit

30/min · 120 keyed

CORS

Open (*)

Auth

None

Examples

curl

curl "https://xoomar.com/api/markets/structured-products?underlying=NVDA&days=30"

Python

import requests

r = requests.get("https://xoomar.com/api/markets/structured-products",
                 params={"underlying": "SPX", "days": 30})
for f in r.json()["data"][:10]:
    print(f["filedAt"], f["issuer"], f["noteType"], f["coupon"])

Honest Limits

  • Term extraction is best-effort. Preliminary filings often show no principal amount; coupon and barrier parse for most but not all filings.
  • The doc_url field always links the primary SEC document. Trust that over any parsed field.
  • History goes back 5 years (index metadata); parsed terms build forward from launch.
  • Updates track the EDGAR daily index, so weekends and market holidays are quiet.

Response Shape

Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs }. The data field is an array of records with these fields:

FieldTypeDescription
accessionNostringEDGAR accession number, unique per filing
issuerstringFiling entity (BofA Finance, Morgan Stanley Finance...)
formTypestring424B2 or FWP
filedAtstring (date)Filing date, YYYY-MM-DD
pricingDatestring | nullPricing/trade date when stated
underlyingsstring[] | nullParsed underlying symbols (SPX, NDX, NVDA...)
noteTypestring | nullautocallable, buffered, barrier, or income
couponstring | nullAnnual coupon %, when stated
barrierPctstring | nullBarrier/threshold as % of initial level
principalUsdstring | nullAggregate principal when stated (final filings)
docUrlstringLink to the primary SEC document

Rows are newest-first. All parsed term fields are nullable by design; the SEC document link is the source of truth.

Numeric values arrive as strings where precision matters (prices, rates); parse with your language's decimal type for accounting-grade math. Rate limiting is fair-use per IP; a 429 response includes a Retry-After header. No authentication or API key needed. Attribution is appreciated: xoomar.com/markets.

Need more headroom? A free account raises your limit to 120 requests a minute with an X-API-Key header.

Frequently Asked Questions

Where does this data come from?
SEC EDGAR daily indexes, polled every 30 minutes. We fetch each 424B2 and FWP primary document and parse terms from the text.
Is it really free?
Yes. 30 requests per minute without a key. A free account raises that to 120.
Which issuers appear?
Everyone filing 424B2 or FWP forms: BofA Finance, Morgan Stanley, JPMorgan, Citigroup, Barclays, Bank of Montreal, and dozens more.
Can I get the full history as a file?
Yes, the /csv endpoint streams up to 50,000 rows as CSV.

Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.