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.
Endpoints
/api/markets/structured-products?issuer=&underlying=¬eType=&minCoupon=&maxCoupon=&days=&cursor=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. For the next page, send the response's nextCursor back as cursor.
/api/markets/structured-products/csvFull dataset as CSV, up to 50,000 rows.
Rate Limit
10 requests a minute without a key, 30 with a free key
CORS
Open (*)
Auth
Optional X-API-Key header
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"])Limits
- Term extraction is best-effort. Preliminary filings often show no principal amount; coupon and barrier parse for most but not all filings.
- docUrl always links the primary SEC document. Trust it over any parsed field.
- Filings go back five years; older rows carry the filing details, and the parsed terms fill in for newer filings.
- Updated every 30 minutes on business days, so weekends and market holidays are quiet.
Response shape
Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs, license, attribution, meta }. In meta, source names who publishes the data and sourceAttribution is the credit line to show with it. The data field is an array of records with these fields:
| Field | Type | Description |
|---|---|---|
| accessionNo | string | EDGAR accession number, unique per filing |
| issuer | string | Filing entity (BofA Finance, Morgan Stanley Finance...) |
| formType | string | 424B2 or FWP |
| filedAt | string (date) | Filing date, YYYY-MM-DD |
| pricingDate | string | null | Pricing/trade date when stated |
| underlyings | string[] | null | Parsed underlying symbols (SPX, NDX, NVDA...). Populated for priced notes; preliminary filings carry nulls |
| noteType | string | null | autocallable, buffered, barrier, or income. Populated for priced notes; preliminary filings carry nulls |
| coupon | string | null | Annual coupon %; null on preliminary filings, which are filed before the rate is set |
| capPct | string | null | Maximum return as % of initial level when the note is capped |
| barrierPct | string | null | Barrier/threshold as % of initial level. Populated for priced notes; preliminary filings carry nulls |
| principalUsd | string | null | Aggregate principal when stated (final filings) |
| docUrl | string | Link to the primary SEC document |
| canonicalUrl | string (optional) | The page on xoomar.com for this record, present only when a matching page exists; otherwise omitted |
Next to data, this endpoint's envelope also carries:
| Field | Type | Description |
|---|---|---|
| nextCursor | string | null | Send it back as cursor for the next 200 rows; null on the last page |
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 fields typed string in the table carry exact decimals; parse them with your language's decimal type. No key needed to start: 10 requests a minute per IP without a key and 30 a minute with a free account key, with at least six months of history. A 429 response carries a Retry-After header in seconds. Credit XOOMAR with a link to the dataset page when you republish the data; the data terms are on the terms page.
A free account key raises the limit; send it in an X-API-Key header.
Frequently Asked Questions
Where does this data come from?
Is it really free?
Which issuers appear?
Can I get the full history as a file?
Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.