Introduction

Connect an agent or an app to BDC Schedules of Investments: the fund tape, the credit, and every holder mark that was filed.

Data is taken from SEC 10-Q and 10-K filings, plus opt-in N-CSR / N-CSRS interval funds. Each line traces to the filing it came from.

What you can access

Your key only opens the surfaces on your plan. A Tape key cannot open issuer cards. A Trial key cannot open the SOI tape. Those calls return HTTP 402 with an upgrade line. See plans.

  • Trial - issuer cards (one credit, holder marks, history since 2020). 100 requests. No SOI tape, no coverage, no fund cards.
  • Tape - coverage, fund cards, SOI positions. Last four quarters. No issuer cards, no sector, no non-accrual.
  • Matched - Tape plus issuer cards, sector, non-accrual, history since 2020.
  • Terminal - all of that, plus disagreement, interval, CLO, loan CEF, and the /app screen. By invitation.
  • Find a credit - search a borrower the way you do in the terminal. Trial and Matched.
  • Holder marks - every fund that printed that name, and the mark they filed. Trial and Matched.
  • Fund profile - Ares, Blackstone, Blue Owl, and the rest, by CIK or ticker. Tape and up.
  • SOI tape - the fund's Schedule of Investments, line by line (company, investment, cost, fair value, mark). Tape and up.
  • Non-accrual - lines the fund footnoted as non-accrual. Matched and up.
  • Coverage - how many funds and credits are in the latest snapshot. Tape and up.

Coverage

FundsCreditsFair valueSource
Live counts: filers, credits, and fair value on GET /v1/coverage. BDCs file 10-Q / 10-K. Interval funds on the roster file N-CSR / N-CSRS.

Live counts: GET /v1/coverage.

Data notes

  • Structured JSON - the same field names on every endpoint.
  • As-reported names - company_raw and investment_raw are the cells as printed on the SOI.
  • Marks - fair value / cost from the filed schedule. 1.00 is par.
  • Money - $ millions.
  • Funds - identified by CIK. Ticker is extra when the fund is listed.

Built for

  • Credit agents and LLM pipelines
  • Private-credit research
  • Portfolio and risk systems
  • Internal data layers

Start with the Quick start.

Quick start

Authenticate and make your first request.

1. Get an API key

Get a key at API plans. Trial on a work email, or subscribe to Tape or Matched. You see the secret once. Copy it. Terminal seats are by invitation.

2. Make your first request

Every request needs your key in the X-API-KEY header. Use the call that matches the plan you just bought. The other one returns 402.

Trial (issuer card):

curl "https://dirigon.com/v1/issuers?q=Denali" \
  -H "X-API-KEY: YOUR_KEY"

Tape (fund card):

curl "https://dirigon.com/v1/filers?q=ARCC" \
  -H "X-API-KEY: YOUR_KEY"

3. Open a tape, or find a credit

curl "https://dirigon.com/v1/filers/1287750/positions?limit=5" \
  -H "X-API-KEY: YOUR_KEY"

curl "https://dirigon.com/v1/issuers?q=Denali" \
  -H "X-API-KEY: YOUR_KEY"

What's next

Find a credit

Search a borrower. Same idea as Find credit in the terminal.

Look up a name, get an issuer_id, then open it. Use that id for holder marks.

GET/v1/issuers?q=Denali

GET/v1/issuers/ISS-002537

Query

ParamWhereMeaning
qqueryName search.
issuer_idpathCredit id (ISS-######).
limitqueryHow many rows to return. Default 100, max 500.
cursorqueryFrom next_page_url.

Example

curl "https://dirigon.com/v1/issuers?q=Denali" \
  -H "X-API-KEY: YOUR_KEY"

Response

{
  "issuers": [
    {
      "issuer_id": "ISS-002537",
      "display_name": "Denali Midco 2",
      "blocked": false,
      "n_holders": 32,
      "total_fv_m": 2785.9
    }
  ]
}

Fields

FieldMeaning
issuer_idCredit id. Use this in later calls.
display_nameCredit name.
n_holdersHow many funds print it.
total_fv_mFair value across those holders, $ millions.
blockedTrue if the name is disputed. Skip it for comparisons.

Holder marks

Every fund that printed the credit, and the mark they filed.

This is the disagreement view. One row per holder. Mark is fair value / cost.

GET/v1/issuers/ISS-002537/marks

If blocked is true on the credit, this endpoint returns 404. Skip disputed names for comparisons.

Example

curl "https://dirigon.com/v1/issuers/ISS-002537/marks" \
  -H "X-API-KEY: YOUR_KEY"

Response

{
  "marks": [
    {
      "issuer_id": "ISS-002537",
      "cik": 1287750,
      "filer": "ARES CAPITAL CORP",
      "mark": 0.9524,
      "fv_m": 365.8,
      "cost_m": 384.1,
      "period_end": "2026-06-30"
    }
  ]
}

Fields

FieldMeaning
filerFund name.
cikFund CIK.
markFair value / cost (1.00 = par).
fv_mFair value, $ millions.
cost_mAmortized cost, $ millions.
period_endSOI period.

Fund profile

Same idea as Fund profile in the terminal. Search by ticker, name, or CIK.

GET/v1/filers?q=ARCC

GET/v1/filers/1287750

Query

ParamWhereMeaning
qqueryName, ticker, or CIK.
cikpathSEC CIK of the fund.
limitqueryHow many rows to return. Default 100, max 500.

Example

curl "https://dirigon.com/v1/filers?q=ARCC" \
  -H "X-API-KEY: YOUR_KEY"

Response

{
  "filers": [
    {
      "cik": 1287750,
      "name": "ARES CAPITAL CORP",
      "ticker": "ARCC",
      "manager": "Ares Management",
      "period_end": "2026-06-30",
      "n_positions": 1239,
      "total_fv_m": 28338.3,
      "form": "10-Q",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/1287750/000162828026050307/arcc-20260630.htm"
    }
  ]
}

Fields

FieldMeaning
cikSEC id for the fund.
nameFund name.
tickerListed ticker when there is one.
managerAdviser.
period_endLatest SOI period.
n_positionsLines on the tape.
total_fv_mFair value of that tape, $ millions.
filing_urlLink to the SEC filing.

SOI tape

The Schedule of Investments for one fund, line by line: company, investment, cost, fair value, mark.

GET/v1/filers/1287750/positions?limit=25

limit is how many rows you want in total. Follow next_page_url when it is present.

Query

ParamWhereMeaning
cikpathFund CIK (required).
limitqueryTotal rows to return. Default 100, max 500.
cursorqueryFrom next_page_url.

Example

curl "https://dirigon.com/v1/filers/1287750/positions?limit=5" \
  -H "X-API-KEY: YOUR_KEY"

Response

{
  "positions": [
    {
      "company_raw": "ACP Avenu Midco LLC",
      "investment_raw": "First lien senior secured revolving loan",
      "lien": "first_lien",
      "mark": 1.0,
      "fv_m": 0.9,
      "cost_m": 0.9,
      "non_accrual": false,
      "filing_url": "https://www.sec.gov/Archives/edgar/data/1287750/000162828026050307/arcc-20260630.htm"
    }
  ]
}

Fields

FieldMeaning
company_rawCompany as printed on the SOI.
investment_rawInvestment line as printed.
lienfirst_lien, second_lien, and so on.
cost_mAmortized cost, $ millions.
fv_mFair value, $ millions.
markFair value / cost.
non_accrualTrue if the fund footnoted it as non-accrual.
filing_urlThe filing this line came from.

Non-accrual

What the fund footnoted. Not inferred from a low mark.

GET/v1/non-accrual

Example

curl "https://dirigon.com/v1/non-accrual?limit=10" \
  -H "X-API-KEY: YOUR_KEY"

Response

{
  "non_accrual": [
    {
      "filer": "Blackstone Private Credit Fund",
      "company": "Medallia, Inc.",
      "cost_m": 1084.03,
      "fv_m": 553.6,
      "mark": 0.5107,
      "period": "2026-06-30"
    }
  ]
}

Coverage

How many funds and credits are in the latest snapshot.

GET/v1/coverage

No query parameters. Call this when you want the current universe size.

curl "https://dirigon.com/v1/coverage" \
  -H "X-API-KEY: YOUR_KEY"

MCP

Same data, for agents. Do not paste an API key into a chat. Put it on the connector.

Remote MCP URL: https://dirigon.com/v1/mcp. Header: X-API-KEY (or Authorization: Bearer YOUR_KEY).

Claude app

  1. Customize → Connectors → Add custom connector.
  2. Name: dirigon. URL: https://dirigon.com/v1/mcp
  3. Leave OAuth Client ID and Secret empty. Click Add.
  4. Sign in with the email on your Trial, Tape, or Matched plan and click Allow. You do not wait for us to approve.
  5. New chat → + → enable Dirigon.

Do not paste an API key into that dialog or into a chat. The app signs you in. Keys are for curl, Claude Code, Codex, Cursor, and ChatGPT connectors.

Claude Code

claude mcp add --transport http dirigon https://dirigon.com/v1/mcp \
  --header "X-API-KEY: YOUR_KEY"

Codex

Put the key in DIRIGON_API_KEY, then:

codex mcp add dirigon --url https://dirigon.com/v1/mcp --bearer-token-env-var DIRIGON_API_KEY

Or ~/.codex/config.toml:

[mcp_servers.dirigon]
url = "https://dirigon.com/v1/mcp"
http_headers = { "X-API-KEY" = "YOUR_KEY" }

ChatGPT

Add a custom connector. URL https://dirigon.com/v1/mcp. Header X-API-KEY with your key, or Bearer with the same key. Do not paste the key into the chat.

Cursor

{
  "mcpServers": {
    "dirigon": {
      "url": "https://dirigon.com/v1/mcp",
      "headers": { "X-API-KEY": "YOUR_KEY" }
    }
  }
}

Tools

tools/list returns only the tools on your plan. Tape does not see get_issuer. Trial does not see get_filer or get_positions.

  • get_issuer - Peeled credit. One hit includes marks, family exposure, and history. family_fv_m is total borrower exposure across holdco/OpCo ids. sort=holders|fv|spread. preset=disagreement is the widest-marks screen.
  • get_disagreement - Holder marks, or the disagreement screen if you pass no id
  • get_filer - Fund card: book, top credits, software membership vs printed mix
  • get_positions - SOI tape (needs cik; n is the full tape)
  • get_non_accrual - Non-accrual lines (optional cik or q)
  • get_coverage - Snapshot size and filing periods
  • get_sector - Sectors page (software, healthcare, industrials)
  • get_software - Same as get_sector for software

Example

curl https://dirigon.com/v1/mcp \
  -H "X-API-KEY: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Example prompts

  • Who holds Coupa, and at what mark?
  • Open BCRED. What is the book mark vs as-filed?
  • Four largest funds, equal-weight: book mark, PIK, non-accrual.
  • Which fund has the most software?
  • Show the widest holder-mark disagreements in software.
  • Show Ares Capital's Kellermeyer line.
  • Which funds flagged Medallia as non-accrual?

OpenAPI

Generate a client, import into Postman, or let an agent discover the endpoints.

https://dirigon.com/v1/openapi.yaml

Full field list: /v1/fields.json. Agent index: /llms.txt. Markdown pages: /docs/introduction.md.