Latest version:
2026-10-09. Send API-Version: 2026-10-09 or omit the header to use it. On this environment, a latest version that is not yet listed in the production docs is a preview: it may still change, and pinning it gives the same shape as sending no header. Pin a released version for a stable contract.October 12, 2026
Applies to all API versions.
Aggregate group_by is capped at 4 dimensions
Behavior change
group_by on /analytics/aggregate/{source} and /analytics/aggregate/{source}/multi-metric now accepts at most 4 comma-separated dimensions. More returns 400 VALIDATION_ERROR stating the limit, instead of running a query that could hit the statement timeout. Applies to all API versions.
Affected endpoints
GET /analytics/aggregate/{source}GET /analytics/aggregate/{source}/multi-metric
October 9, 2026
Calendar-day fields are plain dates
Breakingdeal_date on news articles and notes, and announced_date on funds (fund_date before this version), are calendar days, and are now returned as YYYY-MM-DD ("2024-06-14") with format: date, instead of a midnight-UTC timestamp ("2024-06-14T00:00:00.000Z") that implied a time of day the source never recorded. Clients pinned to an earlier API-Version keep receiving the timestamp form until that version is sunset.
Affected endpoints
GET /data/newsGET /data/news/{id}GET /data/notesGET /data/notes/{id}GET /data/fundsGET /data/funds/{id}GET /data/investors/{id}/funds
Transactions and valuations drop year / month; transactions drop created_at
Breaking
A transaction’s year and month are replaced by announced_date, and a valuation’s by valued_date: one partial date (2024, 2024-03) at the precision the source has, on the collections and on a company’s funding rounds and valuations. Transactions no longer carry created_at, which was the time Dealroom last loaded the row, not a fact about the round. The valuations sort keys year and month are replaced by date, which is also the new default order (newest first). Clients pinned to an earlier API-Version keep receiving year and month, read from the new date field (so a stored month or year that was not a valid date is null), and created_at as null on transactions; their year / month sorts are rewritten to date.
Affected endpoints
GET /data/transactionsGET /data/transactions/{id}GET /data/companies/{id}/funding-roundsGET /data/valuationsGET /data/valuations/{id}GET /data/companies/{id}/valuations
created_at sort replaced by added_at
Breaking
created_at sorted entities by the time Dealroom last loaded them, so it is no longer a sort key. Sort by added_at instead, the time the entity was added to Dealroom; added_at is now also a sort key on investors, founders and people. On 2026-10-09 created_at returns 400 naming added_at. Requests from clients pinned to an earlier API-Version are rewritten to added_at.
Affected endpoints
GET /data/companiesGET /data/investorsGET /data/universitiesGET /data/gov-ngoGET /data/entitiesGET /data/foundersGET /data/people
Date sort and filter keys renamed
Breaking The sort keysdate_posted, publish_date and fund_date are now posted_at (jobs), published_at (news, notes) and announced_date (funds, an investor’s funds), and the filter keys date_posted and publish_date are now posted_at and published_at, matching the renamed fields. On 2026-10-09 the old keys return 400 naming their replacement. Requests from clients pinned to an earlier API-Version are rewritten, and ecosystem filters stored with the old keys were migrated.
Affected endpoints
GET /data/jobsGET /data/newsGET /data/notesGET /data/fundsGET /data/investors/{id}/funds
Job date_posted renamed to posted_at
Breaking
A job opening’s date_posted is now posted_at: it is an instant, so it takes the *_at form. Clients pinned to an earlier API-Version keep receiving date_posted until that version is sunset.
Affected endpoints
GET /data/jobs
publish_date renamed to published_at
Breaking
A news article’s or note’s publish_date is now published_at: it is the instant the note was published, so it takes the *_at form. Clients pinned to an earlier API-Version keep receiving publish_date until that version is sunset.
Affected endpoints
GET /data/newsGET /data/notes
Fund fund_date renamed to announced_date
Breaking
A fund’s fund_date is now announced_date, on funds and on an investor’s funds: it is the day the fund was announced, and a field is named after its event, not its resource. Clients pinned to an earlier API-Version keep receiving fund_date until that version is sunset.
Affected endpoints
GET /data/fundsGET /data/funds/{id}GET /data/investors/{id}/funds
Web-traffic visits is gated per point
Breaking
GET /data/companies/{id}/web-traffic now returns every month with its year and month, and visits as null for callers without premium access, with a locked[] entry naming visits ("ACCOUNT_REQUIRED" when signed out, "PREMIUM_REQUIRED" on a free account). visits is therefore nullable. Premium callers and API keys receive every value as before. Clients pinned to an earlier API-Version, whose schema has a non-null visits, receive an empty data array instead when the series is gated, until that version is sunset.
Affected endpoints
GET /data/companies/{id}/web-traffic
Validation errors are always 400
Behavior change
A request the API cannot accept now returns 400 for every validation failure. Request-parameter and body schema errors, and rejected values on /platform writes such as list categories or ecosystem limits, used to return 422 VALIDATION_ERROR; filter expressions rejected while creating a list or saving an ecosystem scope used to return 422 FILTER_PARSE_ERROR. The error codes and the error body are unchanged, so branch on error.code. Clients pinned to an earlier API-Version keep 422 for those cases until that version is sunset.
Affected endpoints
/data/*/analytics/*/reference/*/platform/*
October 9, 2026
Applies to all API versions.
Company financials and headcount breakdown are tier-gated
Behavior change/data/companies/{id}/financials now returns revenue, ebitda, profit, rnd and valuation as null for callers without premium access, and employees as null when signed out. /data/companies/{id}/headcount-breakdown returns each row’s percentage as null without premium access. Years, months and breakdown items stay visible, and each withheld field is named in locked[]. Premium callers and API keys are unaffected. Applies to all API versions.
Affected endpoints
GET /data/companies/{id}/financialsGET /data/companies/{id}/headcount-breakdown
October 8, 2026
Applies to all API versions.
universities and gov-ngo aggregate sources
Addition
/analytics/aggregate/universities and /analytics/aggregate/gov-ngo aggregate those organizations directly, each scoped to its own collection on an ecosystem host, instead of the entities source narrowed by organization_subtype. Both group by location, launch year, taxonomy and map_area; gov-ngo also offers sum:total_funding and signal-rating metrics. entities keeps working for mixed-type aggregates. Applies to all API versions.
Affected endpoints
GET /analytics/aggregate/gov-ngoGET /analytics/aggregate/gov-ngo/multi-metricGET /analytics/aggregate/universitiesGET /analytics/aggregate/universities/multi-metric
October 8, 2026
Applies to all API versions.
Timeseries money filters follow ?currency=
Behavior change
Money thresholds in the filter of /analytics/timeseries (total_funding[gte]:1000000, investor.total_invested[gte]:…) are now read in the request currency — ?currency=, or the ecosystem’s default currency when it is absent — and converted to USD, as on the other aggregate endpoints. Before, they were always compared as USD. Applies to all API versions.
Affected endpoints
GET /analytics/timeseries
October 7, 2026
in_any / nin_any replace the in / nin operators
Breaking
The in and nin operators were older spellings of in_any and nin_any, accepted on every version. On 2026-10-07 they return 400 naming the replacement. Requests from clients pinned to an earlier API-Version are rewritten.
Affected endpoints
GET /data/companiesGET /data/investorsGET /data/universitiesGET /data/gov-ngoGET /data/peopleGET /data/foundersGET /data/entitiesGET /analytics/aggregate/{source}GET /analytics/aggregate/{source}/multi-metricGET /analytics/timeseriesGET /data/transactionsGET /data/valuationsGET /data/fundsGET /data/jobsGET /data/newsGET /data/notes
ref.key replaces the ref__key filter spelling
Breaking
A filter on a related record is written with a dot: investor.total_invested, not investor__total_invested. On 2026-10-07 the double-underscore form returns 400 naming its replacement; requests from clients pinned to an earlier API-Version are rewritten to the same results. A condition inside and(...)/or(...) is wrapped in its own and(...), so it still matches any related record on its own, as before. People have no launch date, so founder__launch_date / founder__launch_year and their dot forms no longer exist and return 400 on every version, as do launch_date / launch_year on people, founders, team and alumni lists; founder__deleted becomes founder.deleted and filters the founders (true/false on organization lists). The founders aggregate source no longer offers launch_year. Nested relationship hops keep their __ (founder__university, founder__employer.taxonomy_id).
Affected endpoints
GET /data/companiesGET /data/investorsGET /data/universitiesGET /data/gov-ngoGET /data/peopleGET /data/foundersGET /data/entitiesGET /data/transactionsGET /data/valuationsGET /data/fundsGET /data/jobsGET /data/newsGET /data/notes
News sector filter replaced by taxonomy_id
Breaking
The news sector filter was a sector-only copy of taxonomy_id. On 2026-10-07 it returns 400 naming taxonomy_id; pass the same sector tag ids to taxonomy_id; an id that is not a sector tag, which sector never matched, now matches its tag. This covers bare sector on /data/news (and the values picker with scope=news) and the explicit news.sector wherever it is accepted, /data/notes included. Requests from clients pinned to an earlier API-Version are rewritten.
Affected endpoints
GET /data/newsGET /data/notes
Heatmap stage and standardized_sector dimensions removed
Breaking
stage and standardized_sector were duplicates of the round_type and sector heatmap dimensions. On 2026-10-07 they are rejected for x and y. Requests from clients pinned to an earlier API-Version are rewritten, and query_info reports the dimension that was used.
Affected endpoints
GET /analytics/funding-analytics/heatmap
People lists no longer sort by launch_date
Breaking
People have no launch date, so launch_date is no longer a sort key on the founders, people and team lists, and their default order is -signal_rating (the founders glance is -is_strong_founder,-signal_rating). On 2026-10-07 the key returns 400; requests from clients pinned to an earlier API-Version have it dropped from sort, so a request that sorted only by it gets the new default order. Organization lists and a person’s career items still sort by launch_date.
Affected endpoints
GET /data/foundersGET /data/peopleGET /data/companies/{id}/teamGET /data/investors/{id}/teamGET /data/universities/{id}/teamGET /data/gov-ngo/{id}/team
/data lists page by cursor only
Behavior change
Every /data list — collections, nested lists (team, investors, portfolio, funds, LP funds, patents, alumni, career, education, founded companies, funding rounds, valuations), ranked lists and /geo map points — pages with cursor (page.next_cursor / page.prev_cursor) and limit. ?offset= now returns 400 VALIDATION_ERROR naming cursor as its replacement. Send the first request without a cursor, then pass each response’s page.next_cursor back as ?cursor= with the same filter and sort. page.offset is still returned as the page’s position. /companies/{id}/funding-rounds and /companies/{id}/valuations default to limit=25 like every list (was 100). Clients pinned to an earlier API-Version keep limit/offset until that version is sunset, and a response to a request that still sends offset carries a param_retired entry in meta.deprecations[] naming cursor and the sunset date.
Affected endpoints
GET /data/*
October 7, 2026
Applies to all API versions.
The fundings aggregate source is now funding-rounds
Path change
/analytics/aggregate/fundings was a duplicate of /analytics/aggregate/funding-rounds, which serves the same rows with more metrics and dimensions (and now launch_year too). Old URLs are redirected (308, with Deprecation and Sunset headers) until the sunset date, then return a structured 404 naming the new path. query_info.source reports funding-rounds.
Affected endpoints
GET /analytics/aggregate/fundingsGET /analytics/aggregate/fundings/multi-metric
October 7, 2026
Applies to all API versions.
Some list cursors need a restart
Behavior change A cursor minted before this change on a nested list ordered by a computed key (team, investors, portfolio, alumni, career), on/investors sorted by portfolio_match_count or portfolio_match_invested, or on a ranked list (semantic_keyword, /similar, news q) returns 400 VALIDATION_ERROR; send the request again without a cursor. The offset + limit cap on a ranked list now names its filter (semantic_keyword, similar_to or q) in the error message. Applies to all API versions.
Affected endpoints
GET /data/companiesGET /data/companies/{id}/investorsGET /data/companies/{id}/similarGET /data/companies/{id}/teamGET /data/entitiesGET /data/founders/{id}/founded-companiesGET /data/gov-ngo/{id}/teamGET /data/investorsGET /data/investors/{id}/portfolioGET /data/investors/{id}/similarGET /data/investors/{id}/teamGET /data/newsGET /data/people/{id}/careerGET /data/universities/{id}/alumniGET /data/universities/{id}/team
October 7, 2026
Applies to all API versions.
Offset pages with sort= break ties by id
Behavior change
On API versions before 2026-10-07, a collection’s offset pages with a sort= now order rows with equal sort values by id, as cursor pages do, so the same rows no longer shuffle between requests.
Affected endpoints
GET /data/companiesGET /data/entitiesGET /data/foundersGET /data/fundsGET /data/gov-ngoGET /data/investorsGET /data/jobsGET /data/newsGET /data/notesGET /data/peopleGET /data/transactionsGET /data/universitiesGET /data/valuations
October 6, 2026
Applies to all API versions.
Cursor pagination on every list
Behavior change Nested lists (team, funding rounds, valuations, investors, portfolio, funds, LP funds, career, education, founded companies, alumni, patents) and ranked lists (semantic_keyword, /similar, news q) and the collection /geo map points now accept cursor and return page.next_cursor / page.prev_cursor, like the top-level collections (limit/offset keep working on API versions before 2026-10-07). Ranked lists page within their first 1,000 results. A nested-list cursor is bound to its parent record. /companies/{id}/funding-rounds no longer returns soft-deleted rounds. Applies to all API versions.
Affected endpoints
GET /data/companies/{id}/funding-roundsGET /data/companies/{id}/investorsGET /data/companies/{id}/patentsGET /data/companies/{id}/similarGET /data/companies/{id}/teamGET /data/companies/{id}/valuationsGET /data/companies/geoGET /data/founders/{id}/founded-companiesGET /data/gov-ngo/geoGET /data/investors/{id}/fundsGET /data/investors/{id}/lp-fundsGET /data/investors/{id}/portfolioGET /data/investors/{id}/similarGET /data/investors/{id}/teamGET /data/investors/geoGET /data/newsGET /data/people/{id}/careerGET /data/people/{id}/educationGET /data/universities/{id}/alumniGET /data/universities/geo
October 3, 2026
Applies to all API versions.
API-key requests report page.tier: premium
Behavior change
Requests made with an API key now report page.tier as premium instead of free. The data served is unchanged: API-key requests already received every field and no page-size cap, which is what premium names. The old value suggested the response was redacted when it was not. Applies to all API versions.
October 2, 2026
Patents rebuilt on PatSnap-only data
Breaking Patents are rebuilt on PatSnap’s own data, dropping the Google-Patents-derived family model that conflicted with PatSnap’s own numbers.has_patent_categories is removed from entity responses (no replacement — the underlying technology-topic signal is gone). The GET .../patents list is now one row per high-value publication instead of one row per patent family: family_id and status have no real successor and are best-effort placeholders (each row’s own publication_number, and the constant "granted", respectively) for clients pinned to an earlier API-Version; representative_pn and publication_count map exactly (a family of one publication IS that publication); countries and filing_date are reasonable proxies from the row’s own authority and application_date. Clients pinned to an earlier API-Version keep the old field names until the sunset date; the API reference has the current shape.
Affected endpoints
GET /data/entitiesGET /data/entities/{id}GET /data/companiesGET /data/companies/{id}GET /data/companies/{id}/patentsGET /data/universitiesGET /data/universities/{id}GET /data/universities/{id}/patentsGET /data/gov-ngoGET /data/gov-ngo/{id}GET /data/gov-ngo/{id}/patents
Related entities take one shape
Breaking A row that relates to another entity now carries the relation’s own fields plus the entity under a role-named key. On sub-resources (/career, /founded-companies, /team, /alumni, /portfolio, /investors, /lp-funds) and on a transaction’s company, that entity is its type’s summary row — the row /data/{collection} returns, without the full-only blocks — so these rows gain the entity’s funding, taxonomy, locations and investor profile, tier-gated and currency-converted (these sub-resources now report currency). Tenure is start_date / end_date (was year_start / year_end) and last_round_date (was last_round_year). A round’s investors[], a valuation’s and a job’s entity, a fund’s manager, a landscape’s entities[] and each mentioned entity in a news or note item’s entities[] (next to mention_role and is_primary) are EntityRefs ({uuid, type, subtype, name, image, dealroom_url}). A news or note item gains category, its display label. The duplicated entity_uuid on transactions and valuations is removed. New: GET /data/people/{id}/education. Clients pinned to an earlier API-Version keep the previous shapes until the sunset date.
Affected endpoints
GET /data/people/{id}/careerGET /data/founders/{id}/founded-companiesGET /data/companies/{id}/teamGET /data/investors/{id}/teamGET /data/universities/{id}/teamGET /data/gov-ngo/{id}/teamGET /data/universities/{id}/alumniGET /data/investors/{id}/portfolioGET /data/companies/{id}/investorsGET /data/investors/{id}/lp-fundsGET /data/entities/{id}/lp-fundsGET /data/companies/{id}/funding-roundsGET /data/transactionsGET /data/valuationsGET /data/jobsGET /data/fundsGET /data/newsGET /data/notes
Entity rows reshaped
Breaking Every entity row now carries only the fields its type can hold, with each related dataset in a named block, and is the same object on every collection that serves it.organization_subtype is now subtype; the company, university, person and funding_summary facets become funding, valuation, revenue, jobs, traffic, patents, alumni and founded_companies; the is_* labels become classifications[] and roles[]; hq_* / founding_* / lat / lon become locations[] with ids per level; tags becomes taxonomy; website fields move into links with website_domain as domain; year/month pairs become partial dates (launch_date, closing_date, became_unicorn_date, became_thoroughbred_date, exit_date, investments.last_round_date); employee_count is employees_count and a university’s spinout_count is spinouts_count; available[] lists the full-profile blocks that hold data. Embedded relations are capped glances, { total, sort, items }, each the first page of its sub-resource in that sub-resource’s sort: founders (5), career (5, was companies), education (5, merging education and universities) and portfolio.companies (10, was top_companies, whose count companies_count is now companies.total); an item is the relation’s fields plus the entity as an EntityRef. An investor firm carries its investor profile flat — rank, types, stages, deal_size, investments, portfolio, exits and match (was investor_rank, investor_types, investor_stages, deal_sizes, the exit_* fields, portfolio_total_valuation and portfolio.match_*); any other entity that invests carries the same profile in its investor block. /data/investors returns investor firms and persons who invest, each in its own shape. created_at and deleted_at are removed, patents keeps only the valued-patent count, and person rows drop launch_year. Clients pinned to an earlier API-Version keep the previous shape until the sunset date, except that the patent portfolio aggregates, created_at, deleted_at, person launch dates, the website fields outside a person’s links and an investor firm’s founders come back null or empty, and label flags the source left unset read false. The glances that rebuild the previous embedded arrays never compute some of their fields, so no API-Version restores them: in a person’s companies[], hq_city, hq_country, total_funding and signal_rating are null, sector_tags and industries are empty, and latest_valuation is an object whose value, year and month are all null; in universities[], id and the university’s hq_city / hq_country are null; portfolio.top_companies[].tagline is null; and founders[].is_investor reads false. On the current version the company and university fields are on the summary rows returned by /people/{id}/career and /people/{id}/education, and tagline and the investor role are on the entity’s own row. The education record id has no replacement: relation items carry no record id.
Affected endpoints
GET /data/entitiesGET /data/entities/{id}GET /data/companiesGET /data/companies/{id}GET /data/companies/{id}/similarGET /data/universitiesGET /data/universities/{id}GET /data/gov-ngoGET /data/gov-ngo/{id}GET /data/investorsGET /data/investors/{id}GET /data/investors/{id}/similarGET /data/peopleGET /data/people/{id}GET /data/foundersGET /data/founders/{id}
classification and roles filters replace the is_* label filters
Breaking
Filters use the vocabulary the response reads: classification over the classifications[] values and roles over the roles[] values, with in_any, in_all, nin_any and nin_all. They replace is_startup, is_colt, is_titan, is_rising_star, is_spinout, is_thoroughbred, is_unicorn, is_vc_backed, is_funded, is_exited, is_pe_owned, is_serial_founder, is_super_founder, is_promising_founder, is_strong_founder, is_founder, is_executive, is_partner and is_investor, bare and on relationship paths (founder.is_serial_founder → founder.classification[in_any]:serial_founder). roles also covers limited_partner and fund_manager, which had no filter. Requests from clients pinned to an earlier API-Version are rewritten: is_x[eq]:true → [in_any]:x, is_x[eq]:false → [nin_any]:x. nin_any counts an unset label as absent, so [eq]:false on is_unicorn, is_vc_backed and the four founder labels now also matches rows where the label is unknown. On round and valuation aggregates, is_funded reads the company’s funded label (company.classification[in_any]:funded), and is_funded[eq]:false there no longer matches the same rows as true. is_hiring, has_founder, has_patents and employer.is_founder / is_executive / is_partner are unchanged.
Affected endpoints
GET /data/companiesGET /data/investorsGET /data/universitiesGET /data/gov-ngoGET /data/peopleGET /data/foundersGET /data/entitiesGET /analytics/aggregate/{source}GET /analytics/aggregate/{source}/multi-metricGET /analytics/timeseries
taxonomy_id replaces the tag_id filter
Breaking
The tag filter is named after the taxonomy[] block it filters: tag_id is now taxonomy_id and exclude_tag_id is exclude_taxonomy_id, bare and on relationship paths (founder.taxonomy_id, founder__employer.taxonomy_id, invested_in.taxonomy_id, company.taxonomy_id). Operators and values are unchanged, and so is the split picker row (taxonomy_id:industry). On 2026-10-02 the old keys return 400 naming their replacement. Requests from clients pinned to an earlier API-Version are rewritten, and /reference/filters/tag_id/values still answers for them.
Affected endpoints
GET /data/companiesGET /data/investorsGET /data/universitiesGET /data/gov-ngoGET /data/peopleGET /data/foundersGET /data/entitiesGET /analytics/aggregate/{source}GET /analytics/aggregate/{source}/multi-metricGET /analytics/timeseriesGET /data/transactionsGET /data/valuationsGET /data/fundsGET /data/jobsGET /data/newsGET /data/notesGET /reference/filters/{key}/values
/reference/filters/{key}/values stops resolving tag_id / exclude_tag_id to their taxonomy_id replacements.
Behavior change
/reference/filters/{key}/values stops resolving tag_id / exclude_tag_id to their taxonomy_id replacements.
October 2, 2026
Applies to all API versions.
Renamed filter and sort keys are reported back
Addition When a request from a client pinned to an earlierAPI-Version uses a filter or sort key a later version renamed, the request is still rewritten and the JSON response now carries meta.deprecations[]: one entry per rewritten key with type (filter_key_retired or sort_key_retired), key, replacement, since, sunset and a message showing the new form. On the current version, a renamed key’s 400 names the replacement in the message, and for a filter key also in details.replaced_by. Applies to all API versions.
Affected endpoints
GET /analyticsGET /dataGET /platform/listsGET /reference/filters
October 2, 2026
Applies to all API versions.
The patent filing heatmap endpoint was removed
Path changeGET /data/{companies,universities,gov-ngo}/{id}/patents/heatmap has been removed with the PatSnap-only patents rebuild, with no replacement. Old requests get a structured 410 Gone naming GET .../patents as the closest remaining resource.
Affected endpoints
GET /data/companies/{id}/patents/heatmapGET /data/gov-ngo/{id}/patents/heatmapGET /data/universities/{id}/patents/heatmap
October 1, 2026
Static response schemas — every declared field is always present
Breaking Response objects now have a fixed shape: every documented field is always present, with absence expressed asnull (objects/scalars) or [] (arrays) rather than an omitted key. This covers the investor/founder/person/transaction produce-if-present facets, the paginated page object (total always present; row-capped endpoints always carry capped/tier/ecosystem), and error.details. /data/companies, /data/universities and /data/gov-ngo now publish their own Company, University and GovNgo schemas: each declares only the facets that apply to its entity type (a university row has no founders, funding_summary or latest_valuation; no organization row has person) and always emits every facet it declares. /data/entities becomes a union of one static shape per entity class, nested so that type selects EntityPerson or EntityOrganization and organization_subtype then selects EntityCompany, EntityUniversity, EntityGovNgo or EntityInvestor. Both levels declare an OpenAPI discriminator, so generated clients can narrow on those two fields instead of presence-checking every facet. People and founders lose backgrounds[]: a background is now a tag (type: "background") in tags[], filterable through tag_id. A row now carries the facets its entity class owns rather than whichever facets its columns happened to fill. People and founders gain a nullable investor facet. Clients pinned to an earlier API-Version keep the previous produce-if-present facet shape until the sunset date, with one exception that no version restores: a row typed as one class but carrying another’s data (a person with a funding round, a university with a valuation) no longer receives that foreign facet on /data/entities, because the facet is selected by entity class rather than by which columns happen to be filled. Those rows remain reachable through the typed collection that owns the data.
Affected endpoints
GET /data/companiesGET /data/entitiesGET /data/foundersGET /data/gov-ngoGET /data/investorsGET /data/peopleGET /data/transactionsGET /data/universitiesGET /data/valuationsEvery paginated list endpoint (page.total)Every error response (error.details)
founder__background filter removed — use founder.tag_id
Breaking
Backgrounds are tags now, so the founder__background relationship filter is removed in favour of founder.tag_id (company_founders.tag_id on transactions), which takes background tag ids. Clients pinned to an earlier API-Version keep sending founder__background: eq and in_any clauses are rewritten to the tag filter with the matching tag ids until the sunset date. Other operators have no equivalent on the tag filter and are rejected like any removed filter.
Affected endpoints
GET /data/companiesGET /data/entitiesGET /data/transactionsGET /analytics/aggregate/*GET /analytics/timeseries/*
Count filter, sort, map-size and metric keys renamed
Breaking Count keys take the plural noun before_count, and a count never carries the total_ prefix. Filters: employee_count → employees_count, alumni_founder_count → alumni_founders_count, total_investments_count → investments_count. Sort keys: the same three, plus spinout_count → spinouts_count and exit_count → exits_count. The geo size_by values and the investor aggregate metrics sum|avg|max:total_investments_count (result keys sum|avg|max_total_investments_count) are renamed the same way. Requests from clients pinned to an earlier API-Version are rewritten to the new keys, and single-metric aggregate results keep their old keys, until the sunset date.
Affected endpoints
GET /data/companiesGET /data/investorsGET /data/universitiesGET /data/gov-ngoGET /data/entitiesGET /data/{companies,investors,universities,gov-ngo}/geoGET /analytics/aggregate/{source}GET /analytics/aggregate/{source}/multi-metric
entity_count renamed to entities_count on filter lookups
Breaking
Filter-value lookups and filter-search value matches return the per-value count as entities_count (a count of related things takes the plural noun). Clients pinned to an earlier API-Version keep receiving entity_count until the sunset date.
Affected endpoints
GET /reference/filters/{key}/valuesGET /reference/filters/search
total_groups renamed to groups_count on aggregates
Breaking
query_info.total_groups is now query_info.groups_count: it counts the groups in this response, and the total_ prefix is reserved for sums. Clients pinned to an earlier API-Version keep receiving total_groups until the sunset date.
Affected endpoints
GET /analytics/aggregate/{source}GET /analytics/aggregate/{source}/multi-metric
total_years renamed to years_count on timeseries
Breaking
query_info.total_years is now query_info.years_count, following the same count grammar as aggregates. Clients pinned to an earlier API-Version keep receiving total_years until the sunset date.
Affected endpoints
GET /analytics/timeseries
October 1, 2026
Applies to all API versions.
What each call costs is published
Addition The Credits page now states how a call is priced: four groups (free, summary at 1 credit per record, full profile at 2, analytics per query), a request charged at the highest group of any field it returns, andview=summary for the summary shape. It lists the pricing group of every metered endpoint, the credits per group under each schedule with its start date, and the fields that make a row full profile, generated from the same pricing the API charges with. No API behavior changes. Applies to all API versions.
Affected endpoints
GET /analyticsGET /dataGET /reference
September 30, 2026
Applies to all API versions.
API keys are capped by their team’s credits
Behavior change During open beta an API key draws on its team’s credits, granted by Dealroom when you get API access. Once they are used up, or if none were granted, requests under/data and /analytics return 402 CREDITS_EXHAUSTED until more are added; /reference lookups are free and stay available. The balance trails usage by up to about two minutes; if a team’s credits cannot be checked, the request returns 503 SERVICE_UNAVAILABLE to retry. Your team’s credits are shown on the API keys settings page. Applies to all API versions.
Affected endpoints
GET /analyticsGET /data
September 16, 2026
Applies to all API versions.
Per-response credit consumption header
Addition Every response to an API-key request under/data, /analytics and /reference now carries X-Credits-Used: the credits that request consumed under the current schedule. Error responses report 0; unmetered endpoints (/platform, /system, health, docs) carry no header. During open beta the figure is reported, not charged. Retry-After and X-Credits-Used are listed in Access-Control-Expose-Headers, so browser clients can read both. The CREDITS_EXHAUSTED error code (402) is reserved and not yet returned. Applies to all API versions.
Affected endpoints
GET /analyticsGET /dataGET /reference
September 1, 2026
funding_year filter renamed to year on /data/transactions
Breaking
The funding-round year filter on GET /data/transactions is now the bare year key — consistent with the row’s date filter and the aggregate year dimension — and it supports in_any/nin_any. The old funding_year key is removed. Requests from clients pinned to an earlier API-Version that still send funding_year[…] are automatically rewritten to year[…] until the sunset date.
Affected endpoints
GET /data/transactions
/data/search response flattened to a data array
Breaking
GET /data/search now returns { data: [...] } — a flat array of result rows, consistent with /data/companies, /analytics/aggregate/*, and /analytics/timeseries. It previously nested the rows under { data: { results: [...] } }. Clients pinned to an earlier API-Version keep the nested shape until the sunset date.
Affected endpoints
GET /data/search
entity_count is opt-in on GET /reference/filters/{key}/values
Breaking
Filter-value lookups no longer compute the entity_count badge by default — every value returns entity_count: null unless the request passes include_counts=true. Counting matching entities per value is a separate scan per page and was the dominant cost of the endpoint (and a source of timeouts on broad location lookups). Requests from clients pinned to an earlier API-Version have include_counts=true applied automatically until the sunset date.
Affected endpoints
GET /reference/filters/{key}/values
August 20, 2026
latest_valuation unified to an object in nested company summaries
Breaking
The nested company.latest_valuation (on /data/transactions and /data/investors/{id}/portfolio) and companies[].latest_valuation (on /data/people and /data/founders) are now the same { value, year, month } object used at the entity top level, instead of a bare number (transactions/portfolio) or a number plus flat latest_valuation_year/latest_valuation_month siblings (people/founders). Clients pinned to an earlier API-Version keep the previous shapes until the sunset date.
Affected endpoints
GET /data/foundersGET /data/investorsGET /data/peopleGET /data/transactions
August 19, 2026
Applies to all API versions.
Stricter enum filter values
Behavior change Theround_type, preferred_round, investor_type, and article_type filters now match case-insensitively and reject values outside their known set with 400 FILTER_VALIDATION_ERROR instead of silently returning no results. Either form the values endpoint advertises is accepted — the display name (SERIES A) or its code (series_a). Discover valid values via GET /reference/filters/{key}/values. Applies to all API versions.
Affected endpoints
GET /data/investorsGET /data/newsGET /data/transactions
August 19, 2026
Applies to all API versions.
The /api prefix was removed
Path change
The API host no longer uses an /api prefix. Every namespace is served at the root — /data/*, /analytics/*, /reference/*, /platform/*, and /system/* (e.g. /api/data/entities is now /data/entities). Old /api/* URLs are permanently redirected (308, no sunset), so existing integrations keep working — but update your base URL to drop /api. Applies to all API versions.
Affected endpoints
GET /analyticsGET /dataGET /platformGET /referenceGET /system
July 6, 2026
investment-funds endpoints renamed to funds
Path change
With the settled taxonomy (investor is the firm), the fund-vehicle endpoints dropped the investment- prefix: the top-level collection /api/data/investment-funds → /api/data/funds, and the investor sub-resource /api/data/investors/{id}/investment-funds → /api/data/investors/{id}/funds. The old paths have been removed — update client paths accordingly. The response shape is unchanged.
Affected endpoints
GET /api/data/fundsGET /api/data/investors/*/funds
July 2, 2026
Removed is_top_story from news articles
Breaking The legacyis_top_story field has been removed from news article responses, along with the is_top_story filter. In the notes-only news model every article is a curated note, so the flag was true for all rows and carried no signal — use importance_score (ranking, sort=-importance_score) and is_pinned (the single hero story) instead. Clients on the previous version keep receiving is_top_story: true until the sunset date, and is_top_story clauses in their filter parameter are ignored (eq:true never narrowed results; eq:false always returned an empty set).
Affected endpoints
GET /api/data/news
June 30, 2026
Investor monetary fields dropped the _usd suffix
Breaking
On investor responses, exit_total_value_usd and portfolio_total_valuation_usd were renamed to exit_total_value and portfolio_total_valuation; their values are now in the response’s active currency (default USD) rather than always USD. Clients pinned to an earlier API-Version keep receiving the _usd field names until the sunset date.
Affected endpoints
GET /api/data/investors
Investment-fund amount now in the active currency; native value moved to amount_source
Breaking
Investment-fund responses now return amount in the response’s active currency and expose the original stored value under amount_source ({ amount, currency }); the top-level native currency field was removed. Clients pinned to an earlier API-Version keep the previous shape — amount in the fund’s native currency plus a top-level currency — until the sunset date.
Affected endpoints
GET /api/data/investment-fundsGET /api/data/investors
Nested company summary total_funding/latest_valuation dropped the _usd suffix
Breaking
On funding-round (/api/data/transactions) and portfolio (/api/data/investors/{id}/portfolio) responses, the nested company.total_funding_usd / company.latest_valuation_usd fields were renamed to company.total_funding / company.latest_valuation and are now in the response’s active currency. Clients pinned to an earlier API-Version keep the _usd field names until the sunset date.
Affected endpoints
GET /api/data/investorsGET /api/data/transactions
June 23, 2026
Entity changelog endpoint removed
Path change TheGET /api/data/entities/{id}/changelog endpoint and its ChangelogResponse schema have been removed, along with the updated, added, change_type, and changed_categories delta filters. Per-entity change history is no longer exposed via the API; delta detection is now an internal data-loader concern. Use the deleted filter for soft-delete tracking.
Affected endpoints
GET /api/data/entities/{id}/changelog
June 21, 2026
/entities/{id} relationship sub-resources moved to typed collections
Path change
The relationship sub-resources transactions, valuations, financials, investors, investments, investment-funds, and team have been removed from /api/data/entities/{id}. /entities/{id} now carries only the detail record and changelog. Each relationship lives on the typed collection whose facet owns it: company funding rounds at /api/data/companies/{id}/funding-rounds (plus valuations, financials, investors, team); investor portfolio and raised funds at /api/data/investors/{id}/portfolio and /investment-funds; and team additionally on /api/data/investors/{id}/team, /api/data/universities/{id}/team, and /api/data/gov-ngo/{id}/team. Read the entity’s type / organization_subtype / is_investor / is_founder flags from the detail payload and call the matching typed endpoint — the paths are static and knowable. New relationship sub-resources were also added: /api/data/people/{id}/career, /api/data/founders/{id}/founded-companies, and /api/data/universities/{id}/alumni. /api/data/entities/{id}/lp-funds is unchanged. Response shapes are unchanged; only the URL paths moved.
Affected endpoints
GET /api/data/entities/*/financialsGET /api/data/entities/*/investment-fundsGET /api/data/entities/*/investmentsGET /api/data/entities/*/investorsGET /api/data/entities/*/teamGET /api/data/entities/*/transactionsGET /api/data/entities/*/valuations
June 19, 2026
Investor subtype renamed from fund to investor
Behavior change
The organization_subtype value for investment firms is now investor (previously fund). The fund term now refers only to the investment vehicle, not the firm. Clients pinned to a version before 2026-06-19 keep receiving fund in responses. The organization_subtype filter now accepts only investor; fund is no longer a valid filter value.
Affected endpoints
GET /api/data/entitiesGET /api/data/investors
/entities/{id}/funds renamed to /entities/{id}/investment-funds
Path change
The entity sub-resource listing the investment vehicles a firm has raised moved from /api/data/entities/{id}/funds to /api/data/entities/{id}/investment-funds, matching the settled taxonomy where investment_fund is the vehicle. The old path has been removed — update client paths accordingly. The response shape is unchanged.
Affected endpoints
GET /api/data/entities/*/investment-funds
June 18, 2026
API key created_by may be null for orphaned keys
Breaking
The created_by field on API key responses is now null when the user who created the key has been deleted (keys remain active but are no longer associated with a user). Clients on the previous version continue to receive an empty string for orphaned keys.
Affected endpoints
GET /api/platform/api-keys
June 17, 2026
API endpoints reorganized under functional namespaces
Path change Every endpoint now lives under a functional namespace —/api/data/* (entities, transactions, valuations, investors, founders, people, news, jobs, search), /api/analytics/* (aggregate, funding-analytics, timeseries, matching), /api/reference/* (filters, landscapes), /api/platform/* (account, api-keys, teams, usage, ecosystems), and /api/system/* (health, metrics). The previous flat /api/<resource> paths have been removed — update client base paths accordingly. Request and response shapes are unchanged; only the URL prefix moved.
Affected endpoints
GET /api/analytics/GET /api/data/GET /api/platform/GET /api/reference/GET /api/system/
June 2, 2026
Removed legacy classification flags from entities
Breaking The deprecatedis_company, is_university, is_crowdfunding, is_government, and is_non_profit flags have been removed from entity responses. Use organization_subtype (company / university / gov_ngo / fund) instead. Clients on the previous version keep receiving the flags, reconstructed from organization_subtype until the sunset date: is_company ⇐ company, is_university ⇐ university, is_government ⇐ gov_ngo. is_crowdfunding (now part of company) and is_non_profit (now part of gov_ngo) can no longer be distinguished and downgrade to false.
Affected endpoints
GET /api/data/companiesGET /api/data/entitiesGET /api/data/gov-ngoGET /api/data/peopleGET /api/data/universities
May 29, 2026
Removed is_ai_summarised from news articles
Breaking Theis_ai_summarised field has been removed from news article responses. The upstream data source no longer provides this signal. Clients on the previous version will continue to receive is_ai_summarised: false until the sunset date.
Affected endpoints
GET /api/data/news
May 25, 2026
Cursor (keyset) pagination
Addition List endpoints now support cursor (keyset) pagination alongside the existing?limit= / ?offset= mode — both are first-class and no migration is required. Responses gain two new fields in the page envelope: next_cursor and prev_cursor, opaque tokens that can be round-tripped via ?cursor= to step through pages without paying the deep-offset scan cost. Every request — cursor-mode or offset-mode — gets minted cursor tokens back, so callers can switch to keyset at any point in a walk. When both ?cursor= and ?offset= are sent on the same request, the cursor wins and the offset is ignored. Existing ?limit=/?offset= requests continue to work unchanged and run classic SQL LIMIT/OFFSET. Clients pinned to an earlier API-Version see the previous { limit, offset, total } envelope unchanged — the new fields are stripped on the way out.
Affected endpoints
GET /api/data/companiesGET /api/data/entitiesGET /api/data/foundersGET /api/data/gov-ngoGET /api/data/investorsGET /api/data/newsGET /api/data/peopleGET /api/data/transactionsGET /api/data/universitiesGET /api/data/valuations
Funding sort keys renamed to date
Breaking
The funding-round sort keys year and month have been replaced by a single date key (backed by the funding_date_ym column). Affects GET /api/data/transactions. Clients pinned to an earlier API-Version will continue to work — requests with sort=-year, sort=-month, or sort=-year,-month are rewritten to sort=-date until the sunset date.
Affected endpoints
GET /api/data/transactions
May 22, 2026
Monetary fields are integers, not strings
Breaking Monetary fields in responses (amount, valuation, total_funding, total_invested, latest_valuation.value, latest_revenue.value, founded_companies_total_funding, revenue, ebitda, etc.) are now JS numbers in whole units of the active currency. Previously they were strings like "85000000.00". Filter inputs for these fields now also reject fractional values — pass integers only.
Affected endpoints
GET /api/data/companiesGET /api/data/entitiesGET /api/data/foundersGET /api/data/gov-ngoGET /api/data/investorsGET /api/data/newsGET /api/data/peopleGET /api/data/transactionsGET /api/data/universitiesGET /api/data/valuations
May 13, 2026
Removed null placeholder fields from entities and news articles
Breaking Thefund object (containing fund_size_usd, vintage_year, is_raising, fund_status) has been removed from entity responses. The language, relevance_score, and hub_score fields have been removed from news article responses. These fields were placeholder columns that were always null in production and have been dropped from the database.
Affected endpoints
GET /api/data/companiesGET /api/data/entitiesGET /api/data/foundersGET /api/data/gov-ngoGET /api/data/investorsGET /api/data/newsGET /api/data/peopleGET /api/data/universities
April 10, 2026
Reverted short_description back to tagline
Breaking Theshort_description field has been renamed back to tagline on entity, investor, and founder responses. Clients on version 2026-04-02 will continue to receive short_description until the sunset date.
Affected endpoints
GET /api/data/entitiesGET /api/data/foundersGET /api/data/investors
April 2, 2026
Renamed tagline to short_description
Breaking Thetagline field has been renamed to short_description on entity, investor, and founder responses. Clients on version 2026-03-16 will continue to receive tagline until the sunset date.
Affected endpoints
GET /api/data/entitiesGET /api/data/foundersGET /api/data/investors