Get Screener Catalog
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.
Get Screener Catalog
curl https://api.clearstreet.com/v1/screener/catalog \
-H "Authorization: Bearer $API_KEY"{
"data": {
"default_response_fields": [
"market_cap",
"earnings_per_share_ttm"
],
"enums": {
"builtin_variable": [
"today",
"start_of_week",
"start_of_month",
"start_of_quarter",
"start_of_year"
],
"category": [
"PROFILE",
"MARKET_DATA"
],
"date_unit": [
"DAY",
"WEEK",
"MONTH",
"YEAR"
],
"format": [
"CURRENCY",
"PERCENT",
"RATIO",
"COUNT",
"NONE"
],
"lookback": [
"ONE_DAY",
"ONE_WEEK",
"ONE_MONTH",
"THREE_MONTHS",
"SIX_MONTHS",
"YEAR_TO_DATE",
"ONE_YEAR"
],
"modifier_op": [
"ADD",
"SUBTRACT"
],
"operator": [
"LESS_THAN",
"LESS_OR_EQUAL",
"GREATER_THAN",
"GREATER_OR_EQUAL",
"EQUAL",
"BETWEEN"
],
"operator_arg": [
"LEFT_INCLUSIVE",
"RIGHT_INCLUSIVE",
"LEFT_EXCLUSIVE",
"RIGHT_EXCLUSIVE",
"CASE_INSENSITIVE"
],
"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": {
"api_name_composition": "A POST /screener request and the response `field` objects use the same reference shape: base `name` plus at most one of `period` / `lookback`. The suffixed api_name (`{base}_{suffix}`) is never accepted in a request and never returned in a response. Each response column is `{\"name\": <display name>, \"field\": <field reference>, \"type\": <format hint when applicable>, \"value\": <value>}`; the display name of a parameterized column is `{display_name} ({suffix})` (e.g. `Earnings Per Share (ttm)`), and a column showing the field's current or most recent value is the bare `display_name`. The suffixed api_name appears only in `default_response_fields`, where each entry decodes via `suffixes` to a column's `(base name, period or lookback)`.",
"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.",
"defaults": "Omitting both `period` and `lookback` from a field reference is always valid. It resolves to the field's current or most recent value when the kind offers it, otherwise to the kind's `default_combination`; the bare base `name` is therefore a valid field reference for every field.",
"modifiers": "A `modifier` is `{\"name\": \"ADD\" | \"SUBTRACT\", \"args\": [...]}` and shifts a variable's value. On a date built-in it is valid under comparisons, `BETWEEN` / `NOT_BETWEEN` bounds, and `ONE_OF`: `args` is `[amount]` or `[amount, unit]`, `amount` is a positive integer, `unit` is one of `DAY`, `WEEK`, `MONTH`, `YEAR` and defaults to `DAY`, and `ADD` shifts forward while `SUBTRACT` shifts backward. On a numeric `BETWEEN` bound that is a field reference, `args` is `[amount]` where `amount` is any number, `ADD` adds and `SUBTRACT` subtracts, and any `unit` arg is ignored. A modifier is rejected on a field reference outside a numeric `BETWEEN` bound and in `NOT_BETWEEN`.",
"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`).",
"variables": "A `right` entry is either a literal `value` or a `variable` reference, never both. The built-in variables are `today`, `start_of_week`, `start_of_month`, `start_of_quarter`, and `start_of_year`; each resolves to a date in the server's local timezone, cannot carry `period` or `lookback`, and is valid on `DATE` fields (comparisons, `BETWEEN` / `NOT_BETWEEN` bounds, and `ONE_OF`). Any other variable name is a field reference and must resolve as a field in `fields`, carrying at most one of `period` / `lookback`; field references are valid as comparison values and as `BETWEEN` bounds when the two fields' `value_type`s are comparable, and are rejected in `NOT_BETWEEN`."
},
"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"
}
}Returns Examples
{
"data": {
"default_response_fields": [
"market_cap",
"earnings_per_share_ttm"
],
"enums": {
"builtin_variable": [
"today",
"start_of_week",
"start_of_month",
"start_of_quarter",
"start_of_year"
],
"category": [
"PROFILE",
"MARKET_DATA"
],
"date_unit": [
"DAY",
"WEEK",
"MONTH",
"YEAR"
],
"format": [
"CURRENCY",
"PERCENT",
"RATIO",
"COUNT",
"NONE"
],
"lookback": [
"ONE_DAY",
"ONE_WEEK",
"ONE_MONTH",
"THREE_MONTHS",
"SIX_MONTHS",
"YEAR_TO_DATE",
"ONE_YEAR"
],
"modifier_op": [
"ADD",
"SUBTRACT"
],
"operator": [
"LESS_THAN",
"LESS_OR_EQUAL",
"GREATER_THAN",
"GREATER_OR_EQUAL",
"EQUAL",
"BETWEEN"
],
"operator_arg": [
"LEFT_INCLUSIVE",
"RIGHT_INCLUSIVE",
"LEFT_EXCLUSIVE",
"RIGHT_EXCLUSIVE",
"CASE_INSENSITIVE"
],
"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": {
"api_name_composition": "A POST /screener request and the response `field` objects use the same reference shape: base `name` plus at most one of `period` / `lookback`. The suffixed api_name (`{base}_{suffix}`) is never accepted in a request and never returned in a response. Each response column is `{\"name\": <display name>, \"field\": <field reference>, \"type\": <format hint when applicable>, \"value\": <value>}`; the display name of a parameterized column is `{display_name} ({suffix})` (e.g. `Earnings Per Share (ttm)`), and a column showing the field's current or most recent value is the bare `display_name`. The suffixed api_name appears only in `default_response_fields`, where each entry decodes via `suffixes` to a column's `(base name, period or lookback)`.",
"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.",
"defaults": "Omitting both `period` and `lookback` from a field reference is always valid. It resolves to the field's current or most recent value when the kind offers it, otherwise to the kind's `default_combination`; the bare base `name` is therefore a valid field reference for every field.",
"modifiers": "A `modifier` is `{\"name\": \"ADD\" | \"SUBTRACT\", \"args\": [...]}` and shifts a variable's value. On a date built-in it is valid under comparisons, `BETWEEN` / `NOT_BETWEEN` bounds, and `ONE_OF`: `args` is `[amount]` or `[amount, unit]`, `amount` is a positive integer, `unit` is one of `DAY`, `WEEK`, `MONTH`, `YEAR` and defaults to `DAY`, and `ADD` shifts forward while `SUBTRACT` shifts backward. On a numeric `BETWEEN` bound that is a field reference, `args` is `[amount]` where `amount` is any number, `ADD` adds and `SUBTRACT` subtracts, and any `unit` arg is ignored. A modifier is rejected on a field reference outside a numeric `BETWEEN` bound and in `NOT_BETWEEN`.",
"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`).",
"variables": "A `right` entry is either a literal `value` or a `variable` reference, never both. The built-in variables are `today`, `start_of_week`, `start_of_month`, `start_of_quarter`, and `start_of_year`; each resolves to a date in the server's local timezone, cannot carry `period` or `lookback`, and is valid on `DATE` fields (comparisons, `BETWEEN` / `NOT_BETWEEN` bounds, and `ONE_OF`). Any other variable name is a field reference and must resolve as a field in `fields`, carrying at most one of `period` / `lookback`; field references are valid as comparison values and as `BETWEEN` bounds when the two fields' `value_type`s are comparable, and are rejected in `NOT_BETWEEN`."
},
"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"
}
}