Credit & Fixed-Income
Institutional corporate-credit data assembled from licensed multi-decade WRDS and S&P Capital IQ archives: FINRA TRACE corporate-bond trade prints, Markit single-name CDS spreads, S&P credit-rating actions, and DealScan 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. It is Bloomberg / ICE institutional territory: no cheap self-serve vendor licenses and republishes these archives. 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, 124.6M rows spanning 2005 → ~2025-03-31. See where a company's bonds actually trade — realised credit spreads, not quotes. Matched by the FINRA bond-symbol prefix of the equity ticker.
- Markit 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. Markit tickers match the equity symbol for liquid US names.
- S&P Capital IQ 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 Compustat security master.
- DealScan 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 WRDS / S&P archives, not scraped feeds. Because WRDS disseminates these datasets with an academic 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#
4 credits/call. Pro plan ($499/mo) or higher. The credit pillar is licensed institutional data (WRDS TRACE / Markit CDS / S&P Capital IQ / DealScan) — it is not available on Free or Starter.
Endpoints#
| Method | Path | Description |
|---|---|---|
GET | /api/v3/credit/{ticker} | One-call credit snapshot — CDS + rating + bonds + loans in a single response. Latest Markit 5Y CDS spread with its ~90-quote trend, current S&P rating + last action, a recent TRACE bond yield/volume summary, and the DealScan facility count. 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} | FINRA 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/cds/{ticker}/history | Markit 5-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. Returns {ticker, tenor, start, end, mode, n, rows[], source}. |
GET | /api/v3/credit/ratings/{ticker} | Full S&P Capital IQ 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} | DealScan syndicated 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}. |
Coverage caveats (read these). TRACE prints end ~2025-03-31 and Markit CDS ends 2025-12-31 — WRDS lags realtime by months. 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 Compustat 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?" — one call, 4 credits.
1curl -H "Authorization: Bearer $TENGU_API_KEY" \2 "https://firm.tengu.co/api/v3/credit/AAPL"3 4# Response envelope:5# {6# "ok": true,7# "timestamp": "2026-07-12T14:22:00Z",8# "ticker": "AAPL",9# "cds": {10# "as_of": "2025-12-31",11# "spread_5y_bps": 41.7, # latest Markit 5Y composite par spread12# "default_prob": 0.0069, # market-implied default probability13# "avrating": "AA",14# "impliedrating": "AA-",15# "trend_bps": -3.4, # change over the last ~90 quotes16# "trend_from": "2025-08-14"17# },18# "rating": {19# "as_of": "2025-11-02",20# "rating": "AA+",21# "outlook": "Stable",22# "last_action": {23# "date": "2025-11-02",24# "action": "Outlook Revised",25# "to": "AA+",26# "from": "AA+"27# },28# "issuer_cusip6": "037833"29# },30# "bonds": {31# "n_trades": 1842,32# "avg_yield_pct": 4.61,33# "median_yield_pct": 4.58,34# "avg_price": 96.32,35# "total_volume": 218450000,36# "window_start": "2025-02-28", # anchored to the issuer's own latest print37# "window_end": "2025-03-31",38# "window_days": 3039# },40# "loans": {41# "n_facilities": 14,42# "total_facility_amt": 34500000000,43# "latest_facility": { "facilityid": 218... , "loantype": "Revolver", "facilityamt": 12000000000 }44# }45# }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.
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.
1import os, requests2 3BASE = "https://firm.tengu.co"4H = {"Authorization": f"Bearer {os.environ['TENGU_API_KEY']}"}5 6# 1. Latest available TRACE bond prints for Microsoft (4 credits).7# Omit start/end -> the most recent prints; TRACE lags realtime by months.8r = requests.get(f"{BASE}/api/v3/credit/bonds/MSFT",9 params={"limit": 100}, headers=H, timeout=30)10r.raise_for_status()11bonds = r.json()12print(f"{bonds['ticker']}: {bonds['n']} prints, {bonds['start']}..{bonds['end']} "13 f"(mode={bonds['mode']})")14for p in bonds["rows"][:5]:15 print(f" {p['trd_exctn_dt']} {p['bond_sym_id']}: "16 f"px={p['rptd_pr']} yld={p['yld_pt']}% vol={p['entrd_vol_qt']}")17 18# 2. Markit 5Y CDS history for a specific window (4 credits).19# Coverage 2005-01-03 -> 2025-12-31.20r = requests.get(f"{BASE}/api/v3/credit/cds/MSFT/history",21 params={"start": "2024-01-01", "end": "2024-12-31", "limit": 250},22 headers=H, timeout=30)23r.raise_for_status()24cds = r.json()25print(f"\n{cds['ticker']} 5Y CDS: {cds['n']} quotes {cds['start']}..{cds['end']}")26for q in cds["rows"][:5]:27 print(f" {q['date']}: {q['spread_5y_bps']} bps "28 f"dp={q['default_prob']} avrating={q['avrating']}")1# Response envelope for /api/v3/credit/bonds/MSFT:2# {3# "ok": true,4# "timestamp": "2026-07-12T14:23:10Z",5# "ticker": "MSFT",6# "start": "2025-03-18", # actual window the returned prints span7# "end": "2025-03-31",8# "mode": "latest_available",9# "n": 100,10# "rows": [11# {12# "cusip_id": "594918BW3",13# "bond_sym_id": "MSFT4102842",14# "trd_exctn_dt": "2025-03-31",15# "trd_exctn_tm": "15:42:07",16# "rptd_pr": 98.125, # reported price17# "entrd_vol_qt": 2000000, # entered volume (par)18# "yld_pt": 4.512, # yield to maturity, %19# "rpt_side_cd": "B" # reported side (B/S)20# }21# ],22# "note": "bond trades matched by FINRA bond-symbol prefix of the equity ticker ...",23# "source": "warehouse:bronze.trace_bond_trades"24# }25#26# When the default window is empty (issuer inactive lately), the envelope adds:27# "warning": "no_rows:bronze.trace_bond_trades for MSFT in the latest 1500 days",28# "latest_available": "2025-03-31" # page start/end at or before this dateExample 3: Rating actions and the loan book (bash + curl)#
1# Full S&P rating-action history for Tesla (4 credits).2curl -H "Authorization: Bearer $TENGU_API_KEY" \3 "https://firm.tengu.co/api/v3/credit/ratings/TSLA?limit=50"4 5# Response envelope:6# {7# "ok": true,8# "timestamp": "2026-07-12T14:24:00Z",9# "ticker": "TSLA",10# "issuer_cusip6": "88160R",11# "n": 23,12# "rows": [13# {14# "ratingdate": "2025-10-06",15# "ratingsymbol": "BBB",16# "priorratingsymbol": "BBB-",17# "ratingactionword": "Upgrade",18# "outlook": "Stable",19# "creditwatch": null,20# "ratingtypecode": "...",21# "orgdebttypecode": "...",22# "cusip": "88160RAF0" # instrument-level; rows can share a date23# }24# ],25# "note": "instrument-level S&P rating actions matched by issuer CUSIP-6 ...",26# "source": "warehouse:bronze.ciq_sp_ratings"27# }28# (A ticker with no CUSIP in the Compustat security master returns29# {"error": "ticker_not_linked", ...} instead of rows.)30 31# DealScan syndicated-loan book for Tesla, including syndicate lenders (4 credits).32curl -H "Authorization: Bearer $TENGU_API_KEY" \33 "https://firm.tengu.co/api/v3/credit/loans/TSLA?include_lenders=true&limit=25"34 35# Response envelope:36# {37# "ok": true,38# "timestamp": "2026-07-12T14:24:30Z",39# "ticker": "TSLA",40# "n_facilities": 9,41# "total_facility_amt": 8250000000,42# "facilities": [43# {44# "facilityid": 218844,45# "packageid": 154021,46# "ticker": "TSLA",47# "company": "Tesla, Inc.",48# "facilitystartdate": "2023-01-20",49# "facilityenddate": "2028-01-20",50# "loantype": "Revolver/Line >= 1 Yr.",51# "primarypurpose": "Corp. purposes",52# "facilityamt": 5000000000,53# "currency": "USD",54# "maturity": 60,55# "secured": "No",56# "seniority": "Senior",57# "distributionmethod": "..."58# }59# ],60# "pricing": [61# { "facilityid": 218844, "baserate": "SOFR", "minbps": 100, "maxbps": 175,62# "allindrawn": 137.5, "allinundrawn": 17.5, "fee": "..." }63# ],64# "covenants": [65# { "packageid": 154021, "covenanttype": "Max. Debt to EBITDA",66# "initialratio": 3.5, "initialamt": null, "trend": "...", "final": null }67# ],68# "lenders": [69# { "facilityid": 218844, "lender": "...", "lenderrole": "Lead arranger",70# "bankallocation": "..." }71# ],72# "source": "warehouse:bronze.dealscan_*"73# }Related#
- API reference — complete endpoint listing and per-plan access
- Pricing & credits — all products, plan tiers, and credit costs
- Funds & institutional — 13F holdings, Form-4 insider activity, and smart-money clusters