Reading the graph
Reading the graph
Two endpoints, read-only, no key needed to start. Every entity id is stable (dfx:<graph>:<id>) and resolves to a page at /data-factory/entity/<graph>/<id>. The same graph is available to AI agents through the DFX MCP, which accepts the same keys.
No key is needed to read this API. Both endpoints answer anonymous callers at the public allowance in the table below, and a signed-in session is metered against that account’s plan.
An X-API-Key is a different thing: a machine reading at volume, which is what the examples below show and what an Institutional agreement covers, along with the scope, the permitted use and the redistribution terms. Keys issued on other plans are refused with api_not_in_plan.
Universal name search across every graph, aliases and former names included.
curl "https://dfxintel.com/api/data-factory/v1/search?q=blackstone&limit=10"
q name, at least 2 characters (80 max)
limit 1 to 40 (default 10)
graphs comma list of pe, vc, fo, isi, ria, ref, pc, al, re
types comma list of entity types (organization, fund, person, company, office, sponsor, firm,
allocator, consultant, manager, credit_provider, bdc, credit_fund, borrower, vehicle, ...)The Explore table: the same parameters as the Explore page URL, 50 rows a page, exact totals and facets.
curl -H "X-API-Key: dfx_live_..." \
"https://dfxintel.com/api/data-factory/v1/explore?graph=pe&type=organization&state=NY&sort=money&page=2"
graph pe, vc, fo, isi, ria, ref, pc, al, or re
type entity types (comma list); for ria: firm, person or fund; for al: allocator, plan, pool,
investment_office, consultant, manager, fund or person; for pc: credit_provider, bdc,
credit_fund, borrower, sponsor or bank; for ref: manager or vehicle; for re: property or loan
state two-letter state
class, confidence, size (money minimum), deals, from (year) private capital filters
ptype, within (days to maturity) real estate filters
sort, dir see the Explore page; page 1 and upThe registered investment adviser graph (every adviser with its Form ADV filings since 2011, the IAPD-registered advisors with their registration history, the private funds they report, advisor moves and teams) is a sixth domain on the DFX Intelligence MCP and in universal search. On the MCP, start with search_ria (a name, a CRD, an SEC file number) and get_ria_firm or get_ria_advisor for the full card; resolve_ria_advisor takes a person’s name plus a firm and never resolves a name alone. Moves, teams and RIA acquisitions are search_ria_advisor_moves, search_ria_teams and search_ria_ma; search_ria_changes is the tape by observation time with a next_since poll token; get_ria_trends gives state statistics, advisor flows and firm growth; get_ria_capital_links lists an adviser’s links to the private equity and venture graphs by shared SEC fund id.
Every answer names the class of each fact: reported (filed on Form ADV), fact from registration (IAPD dates) or derived (a rule over filed inputs). Three things are always true: RAUM is as reported and double counts affiliates; no advisor book size is public and none is estimated; a move is two registration dates and nothing here predicts one. Disclosure detail, outside business text, street addresses, phones and signatories are withheld. The domain is in preview on the MCP: its event families are measured by the same harness as every other and none is sold. Free discovery, the same anonymous limits as every other domain; a dfx_live_ key is an Institutional matter, as everywhere else on this page. The canonical pages are under /ria; the Data Factory view is /data-factory/ria.
Three domains joined the graph on 2026-09-15 and complete the capital chain: who owns the capital, who manages it, and how the companies underneath are financed. Their entity ids are the same shape as every other (dfx:al:<uuid>, dfx:pc:<uuid>, dfx:ref:<uuid>) and resolve at /data-factory/entity/<graph>/<id>.
Allocators (graph al, types allocator, plan, pool, investment_office, consultant, manager, fund, person). Public and corporate pensions, Taft-Hartley plans, endowments, foundations, insurers and pools, their consultants and OCIOs, the commitments they disclose and the allocation targets their boards approve. On the MCP: search_allocators, get_allocator, search_allocator_commitments, plus search_entities, search_events and search_people with domain=allocators. A commitment amount is the plan’s own and never the fund’s size; a value-only holding is never counted as a commitment; a target is never an actual. The canonical pages are under /allocators.
Private credit (graph pc, types credit_provider, bdc, credit_fund, borrower, sponsor, bank). Every business development company’s schedule of investments read from Inline XBRL since 2020, grouped into borrowers and facilities, with the sponsor behind a borrower where one is attributed. On the MCP: search_private_credit, get_credit_provider, get_bdc_portfolio, get_borrower_capital_structure, get_credit_facility, search_credit_maturities, search_sponsor_lender and search_private_credit_changes. Every size is a sum of the pieces the tape can see, a lower bound, never a commitment; a maturity exists only where the filer tagged it; a sponsor attribution carries its basis, and a portfolio stem or a Form D signer is an inference. The Data Factory pages are canonical for a private credit entity until the product pages merge.
Real estate funds (graph ref, types manager and vehicle). Every adviser that has sworn a Real Estate Fund on Form ADV Schedule D 7.B(1) since 2011 and the vehicles it reported, with gross asset value by year, master and feeder structure and the public pension commitments that name them. On the MCP: search_re_fund_managers, get_re_fund_manager, search_re_fund_vehicles, get_re_fund_vehicle and get_re_fund_trends (registered in the server; live on the next exchange deploy, and every answer says the domain is in preview). GAV is gross asset value as filed, never fund size, and a manager whose summed GAV exceeds three times its own regulatory assets is quarantined and enters no total; the sworn tape runs 2011 to 2024, so a first report is a first sighting and nothing here is a 2025 fact.
Across the graphs. Five tools walk a chain that starts on one graph and ends on another: get_capital_paths (which allocators back this manager, which lenders finance this sponsor’s borrowers, which properties sit under this real estate manager), get_commitments (who committed to this manager or fund, or what this allocator committed to), get_borrower_facilities, get_sponsor_lenders and search_capital_changes (the change tape for the three graphs by first sight, with a next_since poll token). Every hop is a published row with its basis; no hop is a name match, and a chain the tape cannot prove answers not covered rather than an empty ok. resolve_name answers a name across all nine graphs at once.
Universes of kind al and pc. A free account can keep an allocator universe (class, state, assets, bucket, watched managers and consultants, re-ups or first-time managers) or a private credit universe (lenders, BDCs, sponsors, industry, lien, visible principal, a maturity window) and receive the weekly digest on it, labelled by family verdict; /v1/universes lists them by kind.
The forward layer: the entities a measured pattern points to, the same rows What comes next prints and the MCP’s search_forward_opportunities serves. Read-only. It answers to an API key or a signed-in session, never anonymously (401), and serves only the markets whose names your plan shows on the site; the others are listed in meta.excluded.locked_verticals.
curl -H "X-API-Key: dfx_live_..." \
"https://dfxintel.com/api/data-factory/v1/forward?vertical=healthcare&status=VALIDATED&limit=50"
vertical private_credit, ria, real_estate, family_office, private_equity, venture_capital,
independent_sponsor, allocator, real_estate_funds or healthcare
persona one persona key (acquire_rias, snf_buyer, ...); matches any applicable persona
status comma list of VALIDATED, TESTING, PROSPECTIVE_ONLY (WEAK and REJECTED are never served)
horizon_days the pattern's window in days (365, 730)
within_days the window ends within N days of today
ends_before the window ends on or before YYYY-MM-DD
min_magnitude USD; the high end of the economic range, or its low end when there is no high
signal_key one pattern
limit, offset 1 to 100 (default 50); offset up to 5,000; page with meta.next_offsetEach opportunity carries its id, the entity (entity.id is the id get_entity resolves on the MCP; a nursing home has none yet and carries its CMS number under entity.identifiers.ccn), vertical, personas, signal key, event, status, band, horizon start and end, as-of date, the entity’s own rank (rank.score, rank.family_percentile, rank.components), magnitude with its economic_label, confidence, why now, evidence, contact flags and when it was generated. Rows are ordered by family percentile, then rank score.
Status is the ledger’s, read at call time. A row’s status is the signal ledger’s current verdict at the row’s own horizon, never what the row said when it was written: a pattern since ruled WEAK or REJECTED returns nothing, only a validated row carries a band, and a row the ledger never measured is not served. If the ledger cannot be read the answer is 503 ledger_unavailable, not the stored status. A pattern whose newest rows are older than the forward monitor’s ten-day threshold is left out and named in meta.excluded.stale_families. Validated means: Measured on data the pattern was not built or tuned on (held-out dates or held-out subjects) and passed its declared gate. A rate for the group, never a probability for one entity. A pattern that was only replayed against history is TESTING, not validated. Contact fields are flags (a decision maker is identified, a professional email or phone is on file), never the values.
Search and Explore are open knowledge. These three reach what a Debt Intelligence subscription actually buys: the universes you watch, the changes inside them and the lists you are entitled to export. They answer to an API key, so a monitoring subscription can sit inside your own workflow rather than only in an inbox. Identity is the key first, then a signed-in browser session; the response says which, so a call that believes it sent a key and is answered as an anonymous browser can see that at once.
curl -H "X-API-Key: dfx_live_..." "https://dfxintel.com/api/data-factory/v1/universes"
-> {"version":"v1","identity":"api_key","plan":"intelligence","universes":[
{"id":"...","name":"Boston CRE Debt","kind":"debt_intelligence","members":16,
"cadence":"weekly","changes":"https://.../v1/changes?universe=...",
"export":"https://.../export?source=universe&id=..."}]}
curl -H "X-API-Key: dfx_live_..." \
"https://dfxintel.com/api/data-factory/v1/changes?since=2026-09-08T00:00:00Z&limit=200"
since ISO 8601, exclusive; default 7 days ago, floor 120 days ago
until always now; poll with the next_since the last response returned
universe one of your universe ids; omitted, every universe of yours is unioned
limit 1 to 500 (default 200)
curl -H "X-API-Key: dfx_live_..." \
"https://dfxintel.com/api/data-factory/export?source=universe&id=<universe id>" > members.csvThe change stream applies the same verdict gate the email digest applies, and it says what it left out rather than leaving you to wonder. A family track D withheld is never delivered on any plan. A family whose measured precision passed the gate is delivered to everyone. A family below the gate (public only) is delivered to free accounts, labelled, and withheld from a paid caller, because a paying subscriber must never be handed an unmeasured family as though it were part of what they bought: the counts withheld_excluded and public_only_excluded make each absence visible. Every change carries its loan_url and property_url, so a row is one hop from the note it is about.
The stream is two tapes, not one. Beside the debt tape it carries the market events of every graph your universes are on: private equity, venture, family office, sponsor, adviser and, since 2026-09-15, allocators, private credit and real estate funds. A universe of kind al, pc or ria is on that graph; any universe is on the graphs its members sit on, and on a graph where it names members only those members’ rows are delivered. Those rows carry graph and entity_url where a debt row carries a loan and a property, and event_graphs on the response says which graphs were read. The lane filters an al or pc universe carries (class, state, assets, bucket, industry, lien, facility size) narrow the weekly email and are not applied here, so the stream is the wider view of the same universe, under the identical verdict gate.
Exports spend the same monthly quota and obey the same row cap whether the caller is a key or a person clicking the button. These routes count one API request each against the plan's daily allowance.
Without a key, requests are counted per address at the public allowance. Signed-in browser sessions and API keys count against the account's plan. Create keys on your account page and send one as X-API-Key or Authorization: Bearer.
| Plan | Requests a day | Explore pages deep |
|---|---|---|
| No key | 300 | 20 |
| Free account | 400 | 30 |
| Trial | 400 | 60 |
| Desk | 600 | 60 |
| Professional | 600 | 60 |
| Pro | 1,200 | 120 |
| Intelligence | 1,200 | 120 |
| Data Factory | 2,000 | 200 |
| Team | 10,000 | 400 |
| Data Factory Team | 10,000 | 400 |
| Enterprise | unlimited | unlimited |
A burst ceiling of a fiftieth of the daily allowance a minute (at least 30) applies to every caller. Days reset at midnight UTC. Every response carries X-RateLimit-Limit and X-RateLimit-Remaining. A refusal is JSON with a reason and when to retry:
429 {"error":"rate_limited","reason":"daily_limit","limit_day":500,"used_day":500,"retry_after_seconds":21600,...}
429 {"error":"rate_limited","reason":"burst","retry_after_seconds":14,...}
403 {"error":"page_depth","page_depth":20,"message":"Anonymous access pages up to 20 pages deep. ..."}
401 {"error":"api_key_invalid","reason":"key_revoked",...}Web pages are never rate limited and every public page stays open to search engines and AI crawlers. Bulk lists are exports (CSV, by plan), not API paging.
Who to call is not in the API. It is the organisation, the role and the published line (a business phone, office address, website or profile link, with the filing or website that published it named), revealed on entity pages to signed-in accounts and in contact exports, counted by plan. Entity pages show how many lines of each kind a reveal returns before the click; personal emails are rarely published, so most lines are the firm's.