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=&noteType=&minCoupon=&maxCoupon=&days=

Recent filings, newest first, up to 200 rows. Filter by issuer substring, underlying symbol (SPX, NVDA...), note type (autocallable, buffered, barrier, income), coupon range in % (minCoupon/maxCoupon), and lookback days (max 365). Coupon filters match priced notes only. Preliminary filings carry null coupons and are excluded.

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"
curl "https://xoomar.com/api/markets/structured-products?noteType=autocallable&minCoupon=10"

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
idnumberRow id; with filedAt it forms the cursor for paging
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...). Populated for priced notes; preliminary filings carry nulls
noteTypestring | nullautocallable, buffered, barrier, or income. Populated for priced notes; preliminary filings carry nulls
couponstring | nullAnnual coupon %. Populated for priced notes; preliminary filings legitimately carry nulls (rate is blank before pricing, never 0)
capPctstring | nullMaximum return as % of initial level when the note is capped
barrierPctstring | nullBarrier/threshold as % of initial level. Populated for priced notes; preliminary filings carry nulls
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: they populate for priced notes, while preliminary filings carry nulls until pricing. 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.