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
/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).
/api/markets/structured-products/csvFull 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:
| 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...) |
| noteType | string | null | autocallable, buffered, barrier, or income |
| coupon | string | null | Annual coupon %, when stated |
| barrierPct | string | null | Barrier/threshold as % of initial level |
| principalUsd | string | null | Aggregate principal when stated (final filings) |
| docUrl | string | Link 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?
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.