## Get Screener Catalog

`ScreenerGetScreenerCatalogResponse v1().screener().getScreenerCatalog(ScreenerGetScreenerCatalogParamsparams = ScreenerGetScreenerCatalogParams.none(), RequestOptionsrequestOptions = RequestOptions.none())`

**get** `/v1/screener/catalog`

Returns the complete screener field catalog: the field `kinds`, the
per-field data, the enum universes, the request-side `rules`, the built-in
variables and modifiers, and the `POST /screener` default response fields.

`POST /screener` field references are validated against this catalog; its
`rules` object documents how to compose a valid request.

### Parameters

- `ScreenerGetScreenerCatalogParams params`

### Returns

- `class ScreenerGetScreenerCatalogResponse:`

  - `Catalog data`

    The complete screener field catalog, serialized as the `data` payload of
    `GET /screener/catalog`.

    - `List<String> defaultResponseFields`

      The `api_name`s that resolve to the POST default column set when
      `columns` is omitted.

    - `Enums enums`

      The enum universes every other section's values are drawn from.

      - `List<String> builtinVariable`

        The built-in variable names, e.g. `"today"`, `"start_of_year"`.

      - `List<String> category`

        `FieldCategory` variants, e.g. `"PROFILE"`, `"VALUATION"`.

      - `List<String> dateUnit`

        The modifier date units, e.g. `"DAY"`, `"YEAR"`.

      - `List<String> format`

        `FieldFormat` variants, e.g. `"CURRENCY"`, `"PERCENT"`.

      - `List<String> lookback`

        `FieldLookback` variants, e.g. `"ONE_WEEK"`, `"YEAR_TO_DATE"`.

      - `List<String> modifierOp`

        The modifier operation names, `"ADD"` and `"SUBTRACT"`.

      - `List<String> operator`

        `FilterOperator` variants, e.g. `"BETWEEN"`, `"ONE_OF"`.

      - `List<String> operatorArg`

        The modifier arg forms, e.g. `"LEFT_INCLUSIVE"`.

      - `List<String> period`

        `FieldPeriod` variants, e.g. `"QUARTER"`, `"ANNUAL"`.

      - `List<String> valueType`

        `FieldValueType` variants, e.g. `"DECIMAL"`, `"DATE"`.

    - `FieldColumns fields`

      Struct-of-arrays of the remaining per-field scalars.

      - `List<String> description`

        A human-readable description of the field.

      - `List<String> displayName`

        The display name of the column when no `period` / `lookback` is set.

      - `List<long> kind`

        Index into `Catalog::kinds`.

      - `List<String> name`

        The base field name, as accepted in a request's `left.name` /
        `right[].variable` field reference.

    - `List<FieldKind> kinds`

      The deduplicated `(category, format, value_type, combinations, default combination)` tuples; `fields.kind[i]` indexes into this.

      - `String category`

        The field's category, a member of `enums.category`.

      - `List<Combination> combinations`

        Ordered, in declaration order. The empty combination is the current
        or most recent value.

        - `Optional<String> lookback`

          The lookback, a member of `enums.lookback`.

        - `Optional<String> period`

          The period, a member of `enums.period`.

      - `Combination defaultCombination`

        The combination a bare field reference resolves to: the field's
        current or most recent value when the kind offers it, otherwise the
        kind's default `period` / `lookback`.

        - `Optional<String> lookback`

          The lookback, a member of `enums.lookback`.

        - `Optional<String> period`

          The period, a member of `enums.period`.

      - `String format`

        The field's format, a member of `enums.format`.

      - `String valueType`

        The field's value type, a member of `enums.value_type`.

    - `List<ModifierDef> modifiers`

      The modifier operations and their legal `args` forms.

      - `List<ModifierArg> args`

        The positional `args` slots, in order.

        - `String kind`

          `"NUMBER"` or `"ENUM"`.

        - `String note`

          The arg's meaning and constraints.

        - `long position`

          Zero-based position in the `args` array.

        - `boolean required`

          Whether the arg must be present in every modifier use.

        - `Optional<String> default_`

          For optional args: the value used when the arg is omitted.

        - `Optional<String> ref`

          For `"ENUM"` args: the `enums` list the value must be a member of.

      - `String name`

        The modifier operation name: one of `"ADD"` or `"SUBTRACT"`.

    - `OperatorsByValueType operatorsByValueType`

      `value_type` -> canonically-ordered valid operators.

    - `Rules rules`

      Request-side semantics for turning the data into a valid call.

      - `String apiNameComposition`

        Requests and response `field` objects use the same reference shape:
        base name plus at most one of `period` / `lookback`;
        `default_response_fields` (the POST default column set when `columns`
        is omitted) carries api_names, each decoding via `suffixes`.

      - `String axes`

        At most one of `period` / `lookback`; the empty combination selects
        the field's current or most recent value.

      - `String defaults`

        Omitting both is always valid; it resolves to the field's current or
        most recent value when the kind offers it, otherwise to
        `default_combination`.

      - `String modifiers`

        Where `modifier` is legal, its `args` forms, and unit semantics.

      - `String operators`

        Filter operator value counts for the `right` array.

      - `String variables`

        Built-in variables and field references in `right[].variable`.

    - `Suffixes suffixes`

      Axis token -> abbreviation, for every token in use in `kinds`.

    - `List<VariableDef> variables`

      The built-in variables accepted in `filters[].right[].variable`.

      - `String description`

        A human-readable description of what the variable resolves to.

      - `String name`

        The variable name as accepted in `filters[].right[].variable`.

      - `String resolvesTo`

        What the variable resolves to at call time (`DATE` for all built-ins).

### Example

```java
package com.clearstreet.api.example;

import com.clearstreet.api.client.ClearStreetClient;
import com.clearstreet.api.client.okhttp.ClearStreetOkHttpClient;
import com.clearstreet.api.models.v1.screener.ScreenerGetScreenerCatalogParams;
import com.clearstreet.api.models.v1.screener.ScreenerGetScreenerCatalogResponse;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        ClearStreetClient client = ClearStreetOkHttpClient.builder()
            .fromEnv()
            .apiKey("My API Key")
            .build();

        ScreenerGetScreenerCatalogResponse response = client.v1().screener().getScreenerCatalog();
    }
}
```

#### Response

```json
{
  "data": {
    "default_response_fields": [
      "market_cap",
      "earnings_per_share_ttm"
    ],
    "enums": {
      "category": [
        "PROFILE",
        "MARKET_DATA"
      ],
      "operator": [
        "LESS_THAN",
        "LESS_OR_EQUAL",
        "GREATER_THAN",
        "GREATER_OR_EQUAL",
        "EQUAL",
        "BETWEEN"
      ],
      "period": [
        "QUARTER",
        "TRAILING_TWELVE_MONTHS",
        "ANNUAL"
      ],
      "value_type": [
        "DECIMAL",
        "INTEGER",
        "STRING",
        "ANALYST_RATING",
        "DATE"
      ]
    },
    "fields": {
      "description": [
        "Trading symbol",
        "Market Identifier Code (MIC) for primary exchange"
      ],
      "display_name": [
        "Symbol",
        "Security Exchange"
      ],
      "kind": [
        0,
        0
      ],
      "name": [
        "symbol",
        "security_exchange"
      ]
    },
    "kinds": [
      {
        "category": "PROFILE",
        "combinations": [
          {}
        ],
        "default_combination": {},
        "format": "NONE",
        "value_type": "STRING"
      },
      {
        "category": "PROFILE",
        "combinations": [
          {}
        ],
        "default_combination": {},
        "format": "COUNT",
        "value_type": "INTEGER"
      }
    ],
    "modifiers": [
      {
        "args": [
          {
            "kind": "NUMBER",
            "note": "Positive integer for date built-ins; any number for numeric BETWEEN field-ref bounds.",
            "position": 0,
            "required": true
          },
          {
            "default": "DAY",
            "kind": "ENUM",
            "note": "Date built-ins only; ignored on numeric BETWEEN bounds.",
            "position": 1,
            "ref": "date_unit",
            "required": false
          }
        ],
        "name": "ADD"
      }
    ],
    "operators_by_value_type": {
      "ANALYST_RATING": [
        "EQUAL",
        "ONE_OF",
        "IS_NULL",
        "IS_NOT_NULL"
      ]
    },
    "rules": {
      "axes": "A combination carries at most one of `period` / `lookback`; the API rejects both together. The empty combination selects the field's current or most recent value and is present only when the kind offers it.",
      "operators": "`BETWEEN` and `NOT_BETWEEN` take exactly two `right` values; `ONE_OF` takes one or more; all other operators take exactly one; `IS_NULL` and `IS_NOT_NULL` take none (omit `right`)."
    },
    "suffixes": {
      "ANNUAL": "a",
      "QUARTER": "q",
      "TRAILING_TWELVE_MONTHS": "ttm"
    },
    "variables": [
      {
        "description": "The current date in the server's local timezone.",
        "name": "today",
        "resolves_to": "DATE"
      }
    ]
  },
  "error": null,
  "metadata": {
    "request_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef"
  }
}
```
