Skip to main content
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.
This page records changes to the date-based API contract. Current is the latest contract. Deprecated versions continue to work until their stated sunset date. Entries marked Applies to all API versions are operational or validation changes outside the version transform chain.

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

Version 2026-10-09 — Current

Calendar-day fields are plain dates

Breaking deal_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/news
  • GET /data/news/{id}
  • GET /data/notes
  • GET /data/notes/{id}
  • GET /data/funds
  • GET /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/transactions
  • GET /data/transactions/{id}
  • GET /data/companies/{id}/funding-rounds
  • GET /data/valuations
  • GET /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/companies
  • GET /data/investors
  • GET /data/universities
  • GET /data/gov-ngo
  • GET /data/entities
  • GET /data/founders
  • GET /data/people

Date sort and filter keys renamed

Breaking The sort keys date_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/jobs
  • GET /data/news
  • GET /data/notes
  • GET /data/funds
  • GET /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/news
  • GET /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/funds
  • GET /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}/financials
  • GET /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-ngo
  • GET /analytics/aggregate/gov-ngo/multi-metric
  • GET /analytics/aggregate/universities
  • GET /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

Version 2026-10-07 — Deprecated. Sunset: 2026-11-08. Migrate to the latest version before this date.

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/companies
  • GET /data/investors
  • GET /data/universities
  • GET /data/gov-ngo
  • GET /data/people
  • GET /data/founders
  • GET /data/entities
  • GET /analytics/aggregate/{source}
  • GET /analytics/aggregate/{source}/multi-metric
  • GET /analytics/timeseries
  • GET /data/transactions
  • GET /data/valuations
  • GET /data/funds
  • GET /data/jobs
  • GET /data/news
  • GET /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/companies
  • GET /data/investors
  • GET /data/universities
  • GET /data/gov-ngo
  • GET /data/people
  • GET /data/founders
  • GET /data/entities
  • GET /data/transactions
  • GET /data/valuations
  • GET /data/funds
  • GET /data/jobs
  • GET /data/news
  • GET /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/news
  • GET /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/founders
  • GET /data/people
  • GET /data/companies/{id}/team
  • GET /data/investors/{id}/team
  • GET /data/universities/{id}/team
  • GET /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/fundings
  • GET /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/companies
  • GET /data/companies/{id}/investors
  • GET /data/companies/{id}/similar
  • GET /data/companies/{id}/team
  • GET /data/entities
  • GET /data/founders/{id}/founded-companies
  • GET /data/gov-ngo/{id}/team
  • GET /data/investors
  • GET /data/investors/{id}/portfolio
  • GET /data/investors/{id}/similar
  • GET /data/investors/{id}/team
  • GET /data/news
  • GET /data/people/{id}/career
  • GET /data/universities/{id}/alumni
  • GET /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/companies
  • GET /data/entities
  • GET /data/founders
  • GET /data/funds
  • GET /data/gov-ngo
  • GET /data/investors
  • GET /data/jobs
  • GET /data/news
  • GET /data/notes
  • GET /data/people
  • GET /data/transactions
  • GET /data/universities
  • GET /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-rounds
  • GET /data/companies/{id}/investors
  • GET /data/companies/{id}/patents
  • GET /data/companies/{id}/similar
  • GET /data/companies/{id}/team
  • GET /data/companies/{id}/valuations
  • GET /data/companies/geo
  • GET /data/founders/{id}/founded-companies
  • GET /data/gov-ngo/geo
  • GET /data/investors/{id}/funds
  • GET /data/investors/{id}/lp-funds
  • GET /data/investors/{id}/portfolio
  • GET /data/investors/{id}/similar
  • GET /data/investors/{id}/team
  • GET /data/investors/geo
  • GET /data/news
  • GET /data/people/{id}/career
  • GET /data/people/{id}/education
  • GET /data/universities/{id}/alumni
  • GET /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

Version 2026-10-02 — Deprecated. Sunset: 2026-11-06. Migrate to the latest version before this date.

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/entities
  • GET /data/entities/{id}
  • GET /data/companies
  • GET /data/companies/{id}
  • GET /data/companies/{id}/patents
  • GET /data/universities
  • GET /data/universities/{id}
  • GET /data/universities/{id}/patents
  • GET /data/gov-ngo
  • GET /data/gov-ngo/{id}
  • GET /data/gov-ngo/{id}/patents
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}/career
  • GET /data/founders/{id}/founded-companies
  • GET /data/companies/{id}/team
  • GET /data/investors/{id}/team
  • GET /data/universities/{id}/team
  • GET /data/gov-ngo/{id}/team
  • GET /data/universities/{id}/alumni
  • GET /data/investors/{id}/portfolio
  • GET /data/companies/{id}/investors
  • GET /data/investors/{id}/lp-funds
  • GET /data/entities/{id}/lp-funds
  • GET /data/companies/{id}/funding-rounds
  • GET /data/transactions
  • GET /data/valuations
  • GET /data/jobs
  • GET /data/funds
  • GET /data/news
  • GET /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/entities
  • GET /data/entities/{id}
  • GET /data/companies
  • GET /data/companies/{id}
  • GET /data/companies/{id}/similar
  • GET /data/universities
  • GET /data/universities/{id}
  • GET /data/gov-ngo
  • GET /data/gov-ngo/{id}
  • GET /data/investors
  • GET /data/investors/{id}
  • GET /data/investors/{id}/similar
  • GET /data/people
  • GET /data/people/{id}
  • GET /data/founders
  • GET /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/companies
  • GET /data/investors
  • GET /data/universities
  • GET /data/gov-ngo
  • GET /data/people
  • GET /data/founders
  • GET /data/entities
  • GET /analytics/aggregate/{source}
  • GET /analytics/aggregate/{source}/multi-metric
  • GET /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/companies
  • GET /data/investors
  • GET /data/universities
  • GET /data/gov-ngo
  • GET /data/people
  • GET /data/founders
  • GET /data/entities
  • GET /analytics/aggregate/{source}
  • GET /analytics/aggregate/{source}/multi-metric
  • GET /analytics/timeseries
  • GET /data/transactions
  • GET /data/valuations
  • GET /data/funds
  • GET /data/jobs
  • GET /data/news
  • GET /data/notes
  • GET /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 earlier API-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 /analytics
  • GET /data
  • GET /platform/lists
  • GET /reference/filters

October 2, 2026

Applies to all API versions.

The patent filing heatmap endpoint was removed

Path change GET /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/heatmap
  • GET /data/gov-ngo/{id}/patents/heatmap
  • GET /data/universities/{id}/patents/heatmap

October 1, 2026

Version 2026-10-01 — Deprecated. Sunset: 2026-11-01. Migrate to the latest version before this date.

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 as null (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/companies
  • GET /data/entities
  • GET /data/founders
  • GET /data/gov-ngo
  • GET /data/investors
  • GET /data/people
  • GET /data/transactions
  • GET /data/universities
  • GET /data/valuations
  • Every 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/companies
  • GET /data/entities
  • GET /data/transactions
  • GET /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/companies
  • GET /data/investors
  • GET /data/universities
  • GET /data/gov-ngo
  • GET /data/entities
  • GET /data/{companies,investors,universities,gov-ngo}/geo
  • GET /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}/values
  • GET /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, and view=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 /analytics
  • GET /data
  • GET /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 /analytics
  • GET /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 /analytics
  • GET /data
  • GET /reference

September 1, 2026

Version 2026-09-01 — Deprecated. Sunset: 2026-10-31. Migrate to the latest version before this date.

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

Version 2026-08-20 — Deprecated. Sunset: 2026-10-01. Migrate to the latest version before this date.

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/founders
  • GET /data/investors
  • GET /data/people
  • GET /data/transactions

August 19, 2026

Applies to all API versions.

Stricter enum filter values

Behavior change The round_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/investors
  • GET /data/news
  • GET /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 /analytics
  • GET /data
  • GET /platform
  • GET /reference
  • GET /system

July 6, 2026

Version 2026-07-06 — Deprecated. Sunset: 2026-09-19. Migrate to the latest version before this date.

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/funds
  • GET /api/data/investors/*/funds

July 2, 2026

Version 2026-07-02 — Deprecated. Sunset: 2026-08-05. Migrate to the latest version before this date.

Removed is_top_story from news articles

Breaking The legacy is_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

Version 2026-06-30 — Deprecated. Sunset: 2026-08-01. Migrate to the latest version before this date.

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-funds
  • GET /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/investors
  • GET /api/data/transactions

June 23, 2026

Version 2026-06-23 — Deprecated. Sunset: 2026-07-30. Migrate to the latest version before this date.

Entity changelog endpoint removed

Path change The GET /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

Version 2026-06-21 — Deprecated. Sunset: 2026-07-23. Migrate to the latest version before this date.

/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/*/financials
  • GET /api/data/entities/*/investment-funds
  • GET /api/data/entities/*/investments
  • GET /api/data/entities/*/investors
  • GET /api/data/entities/*/team
  • GET /api/data/entities/*/transactions
  • GET /api/data/entities/*/valuations

June 19, 2026

Version 2026-06-19 — Deprecated. Sunset: 2026-07-21. Migrate to the latest version before this date.

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/entities
  • GET /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

Version 2026-06-18 — Deprecated. Sunset: 2026-07-19. Migrate to the latest version before this date.

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

Version 2026-06-17 — Deprecated. Sunset: 2026-07-18. Migrate to the latest version before this date.

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

Version 2026-06-02 — Deprecated. Sunset: 2026-07-17. Migrate to the latest version before this date.

Removed legacy classification flags from entities

Breaking The deprecated is_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/companies
  • GET /api/data/entities
  • GET /api/data/gov-ngo
  • GET /api/data/people
  • GET /api/data/universities

May 29, 2026

Version 2026-05-29 — Deprecated. Sunset: 2026-07-02. Migrate to the latest version before this date.

Removed is_ai_summarised from news articles

Breaking The is_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

Version 2026-05-25 — Deprecated. Sunset: 2026-06-28. Migrate to the latest version before this date.

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/companies
  • GET /api/data/entities
  • GET /api/data/founders
  • GET /api/data/gov-ngo
  • GET /api/data/investors
  • GET /api/data/news
  • GET /api/data/people
  • GET /api/data/transactions
  • GET /api/data/universities
  • GET /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

Version 2026-05-22 — Deprecated. Sunset: 2026-06-24. Migrate to the latest version before this date.

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/companies
  • GET /api/data/entities
  • GET /api/data/founders
  • GET /api/data/gov-ngo
  • GET /api/data/investors
  • GET /api/data/news
  • GET /api/data/people
  • GET /api/data/transactions
  • GET /api/data/universities
  • GET /api/data/valuations

May 13, 2026

Version 2026-05-13 — Deprecated. Sunset: 2026-06-21. Migrate to the latest version before this date.

Removed null placeholder fields from entities and news articles

Breaking The fund 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/companies
  • GET /api/data/entities
  • GET /api/data/founders
  • GET /api/data/gov-ngo
  • GET /api/data/investors
  • GET /api/data/news
  • GET /api/data/people
  • GET /api/data/universities

April 10, 2026

Version 2026-04-10 — Deprecated. Sunset: 2026-06-12. Migrate to the latest version before this date.

Reverted short_description back to tagline

Breaking The short_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/entities
  • GET /api/data/founders
  • GET /api/data/investors

April 2, 2026

Version 2026-04-02 — Deprecated. Sunset: 2026-05-10. Migrate to the latest version before this date.

Renamed tagline to short_description

Breaking The tagline 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/entities
  • GET /api/data/founders
  • GET /api/data/investors

March 16, 2026

Version 2026-03-16 — Deprecated. Sunset: 2026-05-02. Migrate to the latest version before this date.
Initial launch version. No breaking changes.