Company Filters and Vocabulary
Introduction
This endpoint returns the machine-readable contract for filtering and sorting companies: every filter field accepted by POST /companies, the operator and value type each one expects, the enum vocabulary for enum-backed fields (such as region), the available sort keys, and the company sub-resources you can drill into.
The lookup does not list values for country, verticals, themes, client_focus, revenue_model and company_type. Their full lists are on Filter values. A value must match exactly. An unknown value returns 400. It does not return an empty page. The error suggests a fix where it can: a case mismatch gets the correctly cased value, a country name gets its ISO code ("Germany" suggests "DEU"), a region sent as country (or a country code sent as region) points to the right field, and a misspelt value of 4 or more characters gets the closest matches. An unknown 3-letter country code gets no suggestion. Otherwise the error links to the filter values page.
Read it once when integrating, or poll it to keep client-side validation and dropdowns in sync with the API.
It is a discovery document only and accepts no parameters.
Set up
Endpoint
GET https://multiples.vc/api/private/v1/lookup/companiesRequest
This endpoint takes no path or query parameters. Issue a plain authenticated GET:
GET https://multiples.vc/api/private/v1/lookup/companiesUse the returned filters to build a filters object for POST /companies. Match each filter's operators to its type:
| operator | applies to | meaning |
|---|---|---|
eq | string, boolean | Exact match. |
in | array_string, array_uuid | Value is one of the supplied list. |
ilike | string | Case-insensitive substring match. |
gte | number, date, datetime | Greater than or equal to. |
lte | number, date | Less than or equal to. |
overlaps | array_string | Row's array shares at least one value with the supplied list. A plain array uses this. |
contains | array_string | Row's array carries every supplied value. {"all": ["A", "B"]} uses this. |
Response
{
"data": {
"filters": [
{
"field": "id",
"type": "array_uuid",
"operators": [
"in"
],
"description": "Batch lookup of company UUIDs."
},
{
"field": "name",
"type": "string",
"operators": [
"ilike",
"eq"
],
"description": "Case-insensitive substring match on the company name."
},
{
"field": "country",
"type": "array_string",
"operators": [
"in"
],
"description": "ISO-3 country codes (e.g. USA, GBR, DEU). Unknown values are rejected."
},
{
"field": "region",
"type": "array_string",
"operators": [
"in"
],
"values": [
"Africa",
"Central Asia",
"East Asia",
"Eastern Europe",
"Latin America",
"Middle East",
"North America",
"Northern Europe",
"Oceania",
"South Asia",
"South-East Asia",
"Southern Europe",
"Western Europe"
],
"description": "Unknown values are rejected."
},
{
"field": "verticals",
"type": "array_string",
"operators": [
"overlaps",
"contains"
],
"description": "A plain array matches any listed value. {\"all\": [\"A\", \"B\"]} matches records tagged with every listed value. Unknown values are rejected."
},
{
"field": "themes",
"type": "array_string",
"operators": [
"overlaps",
"contains"
],
"description": "A plain array matches any listed value. {\"all\": [\"A\", \"B\"]} matches records tagged with every listed value. Unknown values are rejected."
},
{
"field": "client_focus",
"type": "array_string",
"operators": [
"overlaps",
"contains"
],
"description": "A plain array matches any listed value. {\"all\": [\"A\", \"B\"]} matches records tagged with every listed value. Unknown values are rejected."
},
{
"field": "revenue_model",
"type": "array_string",
"operators": [
"overlaps",
"contains"
],
"description": "A plain array matches any listed value. {\"all\": [\"A\", \"B\"]} matches records tagged with every listed value. Unknown values are rejected."
},
{
"field": "company_type",
"type": "array_string",
"operators": [
"overlaps",
"contains"
],
"description": "A plain array matches any listed value. {\"all\": [\"A\", \"B\"]} matches records tagged with every listed value. Unknown values are rejected."
},
{
"field": "ownership",
"type": "string",
"operators": [
"eq"
],
"description": "Exact match on ownership label (e.g. 'Publicly listed', 'Privately held')."
},
{
"field": "active",
"type": "boolean",
"operators": [
"eq"
]
},
{
"field": "founded_min",
"type": "number",
"operators": [
"gte"
],
"description": "Founding-year lower bound."
},
{
"field": "founded_max",
"type": "number",
"operators": [
"lte"
]
},
{
"field": "ipoed_from",
"type": "date",
"operators": [
"gte"
]
},
{
"field": "ipoed_to",
"type": "date",
"operators": [
"lte"
]
},
{
"field": "updated_at",
"type": "datetime",
"operators": [
"gte"
],
"description": "Change-feed checkpoint."
},
{
"field": "include_deleted",
"type": "boolean",
"operators": [
"eq"
],
"description": "Default false. Set true on change-feed pulls."
}
],
"sort_fields": [
"name",
"founded",
"ipoed",
"updated_at"
],
"sub_resources": [
"/companies/{id}/fundings",
"/companies/{id}/sellside",
"/companies/{id}/buyside",
"/companies/{id}/investors"
]
}
}Besides data, the response has meta.usage, always { "records_billable": 0, "records_charged": 0 } because this call is free. See Rate Limits.
Fields
Top-level
| field | type | description |
|---|---|---|
filters | array<object> | Every filter field accepted by POST /companies. Each entry describes one field's value type, supported operators, and (when enum-backed) its allowed values. |
sort_fields | array<string> | Field names accepted by the sort parameter on POST /companies. Sort is a string of the form field:asc or field:desc (e.g. founded:desc, name:asc); direction defaults to desc when omitted. |
sub_resources | array<string> | Relative paths of per-company sub-resources. Substitute a company id for {id} to fetch its funding rounds (fundings), M&A as target (sellside), deals as a buyer or investor (buyside), or investors (investors). |
filters[] entry
| field | type | description |
|---|---|---|
field | string | The filter key to use inside the filters object of a POST /companies request. |
type | string | Value type: one of string, number, boolean, date, datetime, uuid, array_string, array_uuid. |
operators | array<string> | Operators this field supports: one or more of eq, in, gte, lte, between, overlaps, contains, ilike. |
values | array<string> | Present only when the field is enum-backed; the complete set of accepted values. |
description | string | Human-readable note on how the filter behaves. Returned only for filters that carry one. |
Filter vocabulary
The filters array is the canonical list of company filters. Notable fields:
| field | type | description |
|---|---|---|
id | array_uuid | Batch lookup of company UUIDs. |
name | string | Case-insensitive substring match on the company name or short name. Always a substring match, although the lookup lists ilike and eq. |
country | array_string | ISO-3 country codes (e.g. USA, GBR, DEU). |
region | array_string | Macro region. Enum-backed; allowed values are listed in values. |
verticals | array_string | Sector verticals. A plain array matches any listed value. {"all": ["A", "B"]} matches companies tagged with every listed value. |
themes | array_string | Investment themes. Same any / all rule as verticals. |
client_focus | array_string | Primary customer segment (e.g. B2B, B2C). Same any / all rule as verticals. |
revenue_model | array_string | Business / revenue model. Same any / all rule as verticals. |
company_type | array_string | Company classification. Same any / all rule as verticals. |
ownership | string | Exact match on ownership label (e.g. 'Publicly listed', 'Privately held'). |
active | boolean | Filters by active vs. inactive status. |
founded_min | number | Founding-year lower bound. |
founded_max | number | Founding-year upper bound. |
ipoed_from | date | IPO date lower bound (inclusive). |
ipoed_to | date | IPO date upper bound (inclusive). |
updated_at | datetime | Change-feed checkpoint: return records changed at or after this timestamp. |
include_deleted | boolean | Default false. Set true on change-feed pulls to include soft-deleted records. |
The country, verticals, themes, client_focus, revenue_model, and company_type fields do not return a values list here, but they are still fixed vocabularies. An unknown value returns 400. The accepted values are listed at Filter values.