Sign up

Products

Status

Credit & Fixed-Income

Institutional corporate-credit data assembled from licensed multi-decade institutional archives: FINRA TRACE corporate-bond trade prints, single-name CDS spreads, credit-rating actions, and syndicated-loan facilities. This is the credit-desk stack (realised bond spreads, market-implied default probabilities, the full rating-action ledger, and the private bank-loan book) for any US public issuer, keyed off the equity ticker. This is data that usually requires a terminal contract. Coverage is deep (2005 onward) but the source archives are disseminated with an academic lag, so the API serves the latest available print rather than pretending to be realtime.

What's inside

The credit pillar draws on four licensed archives, each registered as a bronze warehouse table and queried at scale:

  • TRACE corporate-bond prints: individual over-the-counter bond trades (price, yield, volume, buy/sell side) from FINRA TRACE, from 2005 forward, now current to roughly an 8-week lag. See where a company's bonds actually trade, realised credit spreads, not quotes. Matched by the FINRA bond-symbol prefix of the equity ticker.
  • Single-name CDS: daily 5-year composite par spreads (raw and in bps), the market-implied default probability, and average / implied agency rating. 21.8M rows, 2005-01-03 → 2025-12-31, 5Y tenor, the cleanest market-price read on how an issuer's default risk has evolved. tickers match the equity symbol for liquid US names.
  • Credit-rating actions: every rating action (new rating, upgrade, downgrade, outlook / creditwatch change) on an issuer's rated instruments, newest first, with from/to symbols and action words. 15.8M rows of rating history. The equity ticker is resolved to the issuer CUSIP-6 via the security master.
  • Syndicated loans: the borrower's bank-loan book: each facility's size, type (revolver / term loan), maturity, security / seniority, spread-over-base pricing (all-in drawn / undrawn bps), financial covenants, and optionally the syndicate lender allocations. The private-credit complement to the TRACE bond tape.

All four are licensed archives, not scraped feeds. Because the source archives are disseminated with a publication lag, the most recent months are always missing. The API's default (dateless) mode anchors to each issuer's own latest available print rather than to today, so a query never silently returns empty just because the archive stops before the calendar date.

Access

Note:

4 credits/call. Pro plan ($499/mo) or higher. The credit pillar is licensed institutional data (bond prints, CDS, rating actions and loans). It is not available on Free or Starter.

Endpoints

MethodPathMCP toolDescription
GET/api/v3/credit/{ticker}credit_snapshotOne-call credit snapshot: CDS + rating + bonds + loans in a single response. Latest 5Y CDS spread with its ~90-quote trend, the current S&P long-term rating of the issuer's outstanding rated issues (rating_basis says how it was derived) + the last rating action, a recent TRACE bond yield/volume summary, and the syndicated-loan facility count (all-time, plus the facilities still active, summed per currency). Blocks degrade independently (a missing dataset returns an error field in its block, never a failed call). Returns {ticker, cds, rating, bonds, loans}.
GET/api/v3/credit/bonds/{ticker}credit_bondsFINRA TRACE corporate-bond trade prints for one issuer. ?start= / ?end= (ISO dates; together span at most 90 days), ?limit= (1–5000, default 1000). Omit both dates for the latest available prints. Returns {ticker, start, end, mode, n, rows[], note, source}.
GET/api/v3/credit/indicescredit_indicesCredit-index composites: CDX and iTraxx index spreads/prices by series, version and tenor. ?family= (CDX, ITRAXX-EUROPE, ITRAXX-ASIA, ITRAXX-SOVX), ?index_ticker= (e.g. CDXNAIG, CDXNAHY), ?days= (history depth, 1–90, default 7), ?limit= (1–5000, default 2000). Index-keyed, 2018 → T-2. Returns {available, as_of, freshness, latest[], history_days, history[], source}.
GET/api/v3/credit/cds/{ticker}/historycredit_cds_history5-year single-name CDS spread history. ?start= / ?end= (ISO dates), ?limit= (1–5000, default 1000). Coverage 2005 → end-2025, 5Y tenor. Omit both dates for the latest available quotes: the last two years of the archive are read first, and a name with no quote in them (one that stopped quoting) is answered from its newest quotes anywhere in the archive, with window.widened_to_whole_archive: true, so check the dates. Returns {ticker, tenor, start, end, mode, n, rows[], source, window}.
GET/api/v3/credit/ratings/{ticker}credit_ratingsFull rating-action history for one issuer's debt (15.8M-row archive), newest first. ?limit= (1–5000, default 200). Returns {ticker, issuer_cusip6, n, rows[], note, source}.
GET/api/v3/credit/loans/{ticker}credit_loansSyndicated bank-loan facilities + pricing + covenants for one borrower. ?limit= (1–1000, default 100), ?include_lenders= (bool, default false) to also return syndicate lender allocations. Returns {ticker, n_facilities, total_facility_amt, facilities[], pricing[], covenants[], lenders[], source}. total_facility_amt sums the face amount of every facility on record, matured ones included and across currencies, so it is not outstanding debt; n_active_facilities and active_facility_amt_by_currency count and sum, per currency, the facilities not yet at their end date (or with none recorded), and total_facility_amt_note says so. The snapshot's loans block carries the same three fields.

Credit-index timestamps. Each /api/v3/credit/indices composite is stamped at 00:00 UTC on its trade date, before that day's end-of-day composite exists. Values match the vendor exactly; do not use the timestamps to decide what was known intraday. New rows are stamped correctly from the next run, and history will be restated.

Coverage caveats (read these). The bond tape now runs to roughly an 8-week lag (latest prints in early June as of 2026-08-01); single-name CDS ends 2025-12-31, and the credit-index composites run to T-2. Per-issuer CDS coverage varies. A name whose CDS stopped trading ends well before 2025. In the default dateless mode every route returns the most recent available data for that issuer, and the response reports the actual window the returned rows span (start/end) plus mode: "latest_available". When a bond query is empty the response includes a latest_available date to page backwards from. CDS and ratings are keyed by identifiers that match the equity symbol only for liquid US issuers; a ticker with no CUSIP link in the security master returns error: "ticker_not_linked" for ratings.

Examples

Example 1: One-call credit snapshot (bash + curl)

The composite is the fastest way to answer "how does the market price this company's credit?" in one call for 4 credits.

Shell
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/credit/AAPL" # Illustrative response structure; values are placeholders, not live data:# {#   "ok": true,#   "timestamp": "2026-07-12T14:22:00Z",#   "ticker": "AAPL",#   "cds": {#     "as_of": "2025-12-31",#     "spread_5y_bps": 41.7,          # latest 5Y composite par spread#     "default_prob": 0.0069,         # market-implied default probability#     "avrating": "AA",#     "impliedrating": "AA-",#     "trend_bps": -3.4,              # change over the last ~90 quotes#     "trend_from": "2025-08-14"#   },#   "rating": {#     "as_of": "2025-11-02",#     "rating": "AA+",#     "outlook": "Stable",#     "rating_basis": {#       "grain": "issue",#       "method": "latest S&P long-term rating on each outstanding issue of the issuer ...",#       "rating_types": ["STDLONG", "FCLONG", "LCLONG"],#       "status": "current",#       "n_live_issues": 40,#       "issue_ratings": {"AA+": 40},#       "dispersed": false,#       "n_withdrawn_issues": 52,#       "n_matured_issues": 27,#       "complete": true#     },#     "newest_action_date": "2026-02-24",#     "last_action": {#       "date": "2025-11-02",#       "action": "Outlook Revised",#       "to": "AA+",#       "from": "AA+"#     },#     "issuer_cusip6": "037833",#     ...#   },#   "bonds": {#     "n_trades": 1842,#     "avg_yield_pct": 4.61,#     "median_yield_pct": 4.58,#     "avg_price": 96.32,#     "total_volume": 218450000,#     "window_start": "2025-02-28",   # anchored to the issuer's own latest print#     "window_end": "2025-03-31",#     "window_days": 30#   },#   "loans": {#     "n_facilities": 14,#     "total_facility_amt": 34500000000,   # every facility ever, at face: not outstanding debt#     "n_active_facilities": ...,#     "active_facility_amt_by_currency": { "USD": ... },#     "total_facility_amt_note": "...",#     "latest_facility": { "facilityid": 218... , "loantype": "Revolver", "facilityamt": 12000000000 }#   }# }

Any block that is missing or slow returns an error / skipped_budget field inside that block instead of failing the whole call. Always check per-block before reading it.

Which rating rating is. S&P's issuer credit rating is not reachable by ticker, so rating comes from the issuer's rated issues: the latest long-term rating (STDLONG, FCLONG or LCLONG scale) on each issue still outstanding, leaving out issues S&P has withdrawn (NR) and issues past maturity. When the live issues disagree (notching by seniority), rating is the most common one, rating_basis.dispersed is true and issue_ratings counts each. as_of and outlook come from the newest action on a live issue with that rating. rating is null when no outstanding issue has a long-term rating; rating_basis.status is then no_outstanding_rated_issue, or no_long_term_issue_ratings when the history holds no long-term issue rating at all. rating_basis.complete is false when the issuer's history filled the 2,000-row read, so issues may be missing. newest_action_date is the issuer's newest rating action of any kind, which is often the withdrawal of a matured note; it is what as_of reported before 2026-09-25, when rating could read NR for an issuer whose live issues are all rated.

Example 2: TRACE bond prints and CDS history (Python requests)

Pull realised bond prints and the CDS spread series. With no dates you get the most recent available data (the archives lag by months); pass start/end to page specific history.

Python
import os, requests BASE = "https://firm.wealthnow.io"H = {"Authorization": f"Bearer {os.environ['WEALTHNOW_API_KEY']}"} # 1. Latest available TRACE bond prints for Microsoft (4 credits).#    Omit start/end -> the most recent prints; TRACE lags realtime by months.r = requests.get(f"{BASE}/api/v3/credit/bonds/MSFT",                 params={"limit": 100}, headers=H, timeout=30)r.raise_for_status()bonds = r.json()print(f"{bonds['ticker']}: {bonds['n']} prints, {bonds['start']}..{bonds['end']} "      f"(mode={bonds['mode']})")for p in bonds["rows"][:5]:    print(f"  {p['trd_exctn_dt']} {p['bond_sym_id']}: "          f"px={p['rptd_pr']} yld={p['yld_pt']}% vol={p['entrd_vol_qt']}") # 2. 5Y CDS history for a specific window (4 credits).#    Coverage 2005-01-03 -> 2025-12-31.r = requests.get(f"{BASE}/api/v3/credit/cds/MSFT/history",                 params={"start": "2024-01-01", "end": "2024-12-31", "limit": 250},                 headers=H, timeout=30)r.raise_for_status()cds = r.json()print(f"\n{cds['ticker']} 5Y CDS: {cds['n']} quotes {cds['start']}..{cds['end']}")for q in cds["rows"][:5]:    print(f"  {q['date']}: {q['spread_5y_bps']} bps  "          f"dp={q['default_prob']}  avrating={q['avrating']}")
Shell
# Response envelope for /api/v3/credit/bonds/MSFT:# {#   "ok": true,#   "timestamp": "2026-07-12T14:23:10Z",#   "ticker": "MSFT",#   "start": "2025-03-18",            # actual window the returned prints span#   "end": "2025-03-31",#   "mode": "latest_available",#   "n": 100,#   "rows": [#     {#       "cusip_id": "594918BW3",#       "bond_sym_id": "MSFT4102842",#       "trd_exctn_dt": "2025-03-31",#       "trd_exctn_tm": "15:42:07",#       "rptd_pr": 98.125,            # reported price#       "entrd_vol_qt": 2000000,      # entered volume (par)#       "yld_pt": 4.512,             # yield to maturity, %#       "rpt_side_cd": "B"           # reported side (B/S)#     }#   ],#   "note": "bond trades matched by FINRA bond-symbol prefix of the equity ticker ...",#   "source": "warehouse:bond-tape-archive"# }## When the default window is empty (issuer inactive lately), the envelope adds:#   "warning": "no_rows:[internal] for MSFT in 2026-07-01..2026-07-15",#   "latest_available": "2025-03-31"   # page start/end at or before this date

Example 3: Rating actions and the loan book (bash + curl)

Shell
# Full S&P rating-action history for Tesla (4 credits).curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/credit/ratings/TSLA?limit=50" # Response envelope:# {#   "ok": true,#   "timestamp": "2026-07-12T14:24:00Z",#   "ticker": "TSLA",#   "issuer_cusip6": "88160R",#   "n": 23,#   "rows": [#     {#       "ratingdate": "2025-10-06",#       "ratingsymbol": "BBB",#       "priorratingsymbol": "BBB-",#       "ratingactionword": "Upgrade",#       "outlook": "Stable",#       "creditwatch": null,#       "ratingtypecode": "...",#       "orgdebttypecode": "...",#       "cusip": "88160RAF0"          # instrument-level; rows can share a date#     }#   ],#   "note": "instrument-level S&P rating actions matched by issuer CUSIP-6 ...",#   "source": "warehouse:ratings-archive"# }# (A ticker with no CUSIP in the security master returns#  {"error": "ticker_not_linked", ...} instead of rows.) # Syndicated-loan book for Tesla, including syndicate lenders (4 credits).curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/credit/loans/TSLA?include_lenders=true&limit=25" # Response envelope:# {#   "ok": true,#   "timestamp": "2026-07-12T14:24:30Z",#   "ticker": "TSLA",#   "n_facilities": 9,#   "total_facility_amt": 8250000000,#   "facilities": [#     {#       "facilityid": 218844,#       "packageid": 154021,#       "ticker": "TSLA",#       "company": "Tesla, Inc.",#       "facilitystartdate": "2023-01-20",#       "facilityenddate": "2028-01-20",#       "loantype": "Revolver/Line >= 1 Yr.",#       "primarypurpose": "Corp. purposes",#       "facilityamt": 5000000000,#       "currency": "USD",#       "maturity": 60,#       "secured": "No",#       "seniority": "Senior",#       "distributionmethod": "..."#     }#   ],#   "pricing": [#     { "facilityid": 218844, "baserate": "SOFR", "minbps": 100, "maxbps": 175,#       "allindrawn": 137.5, "allinundrawn": 17.5, "fee": "..." }#   ],#   "covenants": [#     { "packageid": 154021, "covenanttype": "Max. Debt to EBITDA",#       "initialratio": 3.5, "initialamt": null, "trend": "...", "final": null }#   ],#   "lenders": [#     { "facilityid": 218844, "lender": "...", "lenderrole": "Lead arranger",#       "bankallocation": "..." }#   ],#   "source": "warehouse:loan-archive"# }