1. The value is in the schema
If a field has a fixed, short vocabulary, the values are on the schema itself and a generated client types them as a union. Sending anything else is a clean422.
channel, entityType, searchPeriod, eventType, sortOrder and about 150 other fields work this way.
2. An endpoint serves the vocabulary
Large or changing vocabularies live behind a lookup. The field description names the exact call, including which key of the response to read.
Resolve first, then send the exact string you got back:
A lookup serves specific fields, not everything that looks similar.
field=region returns geographies including sub-national areas such as "California, United States" — useful for a regions filter, wrong for a country filter that only accepts "United States".3. The values are listed in the description
Where a vocabulary is fixed but too long for an enum, or is defined by an upstream provider, the field description lists it outright. Headcount bands, funding round types, departments and timeframes all work this way:"51 to 200" is parsed with parseInt and narrows to companies with exactly 51 employees rather than being ignored.
4. It is free text
Some fields have no vocabulary at all — a web monitorprompt, post keywords, a smart column prompt. The description says so explicitly. Send whatever you like; the wording is what drives the match.
How several values combine
Every array field states how its values combine and any cap. Most are OR-joined — a row matches when any one value matches — but not all, and the caps differ:- Some arrays reject duplicates outright. Agent
keywordsand watcherlistIdscarry a uniqueness rule, so sending the same value twice is a422, not a silently collapsed list. - A filter whose values all fail to parse does not become inert. On list rows it matches nothing and you get zero rows — which looks like “no results” rather than “bad filter”.