Properties
| Name | Type | Description |
|---|---|---|
| original_query | object | |
| search_query | object | |
| original_search_query | object | |
| corrected_query | object | |
| translated_query | object | |
| custom_prompt_begin | object | |
| custom_prompt_end | object | |
| main_field | object | |
| additional_fields | object | |
| task | object | |
| is_question | object | |
| filters | array | |
| sorted_by | array | |
| deep_search | object | |
| calculate_nps | object | |
| calculate_percent_of_total | object | |
| question | object | |
| taxonomy_element_name | object | |
| sentiment | object | |
| description | object | |
| limit | object | |
| offset | object | |
| post_filtering | object | |
| chat_history | array | |
| trend_filters | object | |
| distribution_filters | object | |
| stacking_filters | object | |
| force_refresh | boolean | |
| use_external_urls | object | |
| rows | array | |
| columns | array | |
| values | array | |
| use_analyzers | boolean | |
| do_spellcheck | boolean | |
| do_translate | boolean | |
| do_filters_extraction | boolean | |
| do_intent_analysis | boolean | |
| min_score | number | |
| runtime_fields | array | |
| min_bucket_n | object | Drop buckets thinner than this. Hidden buckets are counted and reported in `warnings` rather than disappearing silently. |
| having | object | Boolean expression over named measures; buckets that fail it are dropped. |
| correlations | array | Pearson correlation between two named metrics, measured across the returned buckets. |
| totals | boolean | Add a grand-total row, computed at total grain. A rate is RECOMPUTED there, never averaged down the column — averaging three sources at 80% (n=10), 20% (n=1000) and 50% (n=20) gives 50%, and the answe |
| order_by | object | Sort buckets by a named measure or expression, and optionally cap them. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/onclarity-com/json-schema/onclarity-com-admin-build-table-request-schema.json",
"title": "AdminBuildTableRequest",
"x-generated": "2026-10-29",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/onclarity-com-openapi.json#/components/schemas/AdminBuildTableRequest",
"properties": {
"original_query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Original Query"
},
"search_query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Search Query"
},
"original_search_query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Original Search Query"
},
"corrected_query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Corrected Query"
},
"translated_query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Translated Query"
},
"custom_prompt_begin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Custom Prompt Begin"
},
"custom_prompt_end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Custom Prompt End"
},
"main_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Main Field",
"default": "message_text"
},
"additional_fields": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Additional Fields",
"default": []
},
"task": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Task",
"default": "summarize"
},
"is_question": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Is Question",
"default": false
},
"filters": {
"items": {
"$ref": "#/$defs/QueryFilter"
},
"type": "array",
"title": "Filters"
},
"sorted_by": {
"items": {
"$ref": "#/$defs/QuerySort"
},
"type": "array",
"title": "Sorted By",
"default": []
},
"deep_search": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Deep Search",
"default": false
},
"calculate_nps": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Calculate Nps",
"default": true
},
"calculate_percent_of_total": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Calculate Percent Of Total",
"default": true
},
"question": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Question"
},
"taxonomy_element_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Taxonomy Element Name"
},
"sentiment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sentiment"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": 9999
},
"offset": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Offset",
"default": 0
},
"post_filtering": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Post Filtering",
"default": true
},
"chat_history": {
"items": {
"$ref": "#/$defs/ChatHistoryItem"
},
"type": "array",
"title": "Chat History",
"default": []
},
"trend_filters": {
"anyOf": [
{
"$ref": "#/$defs/ExtraFilters"
},
{
"type": "null"
}
]
},
"distribution_filters": {
"anyOf": [
{
"$ref": "#/$defs/ExtraFilters"
},
{
"type": "null"
}
]
},
"stacking_filters": {
"anyOf": [
{
"$ref": "#/$defs/ExtraFilters"
},
{
"type": "null"
}
]
},
"force_refresh": {
"type": "boolean",
"title": "Force Refresh",
"default": false
},
"use_external_urls": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Use External Urls",
"default": false
},
"rows": {
"items": {
"$ref": "#/$defs/TableField"
},
"type": "array",
"title": "Rows"
},
"columns": {
"items": {
"$ref": "#/$defs/TableField"
},
"type": "array",
"title": "Columns"
},
"values": {
"items": {
"$ref": "#/$defs/TableField"
},
"type": "array",
"title": "Values"
},
"use_analyzers": {
"type": "boolean",
"title": "Use Analyzers",
"default": true
},
"do_spellcheck": {
"type": "boolean",
"title": "Do Spellcheck",
"default": true
},
"do_translate": {
"type": "boolean",
"title": "Do Translate",
"default": true
},
"do_filters_extraction": {
"type": "boolean",
"title": "Do Filters Extraction",
"default": true
},
"do_intent_analysis": {
"type": "boolean",
"title": "Do Intent Analysis",
"default": true
},
"min_score": {
"type": "number",
"title": "Min Score",
"default": 1.0
},
"runtime_fields": {
"items": {
"$ref": "#/$defs/RuntimeField"
},
"type": "array",
"title": "Runtime Fields"
},
"min_bucket_n": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Min Bucket N",
"description": "Drop buckets thinner than this. Hidden buckets are counted and reported in `warnings` rather than disappearing silently."
},
"having": {
"anyOf": [
{
"$ref": "#/$defs/TablePredicate"
},
{
"type": "null"
}
],
"description": "Boolean expression over named measures; buckets that fail it are dropped."
},
"correlations": {
"items": {
"$ref": "#/$defs/MetricCorrelation"
},
"type": "array",
"title": "Correlations",
"description": "Pearson correlation between two named metrics, measured across the returned buckets."
},
"totals": {
"type": "boolean",
"title": "Totals",
"description": "Add a grand-total row, computed at total grain. A rate is RECOMPUTED there, never averaged down the column — averaging three sources at 80% (n=10), 20% (n=1000) and 50% (n=20) gives 50%, and the answer is 23%.",
"default": false
},
"order_by": {
"anyOf": [
{
"$ref": "#/$defs/TableOrderBy"
},
{
"type": "null"
}
],
"description": "Sort buckets by a named measure or expression, and optionally cap them."
}
},
"type": "object",
"required": [
"filters",
"rows",
"columns",
"values"
],
"$defs": {
"ChatHistoryItem": {
"properties": {
"role": {
"type": "string",
"pattern": "^(assistant|user)$",
"title": "Role"
},
"content": {
"type": "string",
"title": "Content"
}
},
"type": "object",
"required": [
"role",
"content"
],
"title": "ChatHistoryItem"
},
"ExtraFilters": {
"properties": {
"include_filters": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Include Filters"
},
"exclude_filters": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Exclude Filters"
},
"size": {
"type": "integer",
"title": "Size",
"default": 10240
}
},
"type": "object",
"title": "ExtraFilters"
},
"MetricCorrelation": {
"properties": {
"as": {
"type": "string",
"title": "As"
},
"x": {
"type": "string",
"title": "X"
},
"y": {
"type": "string",
"title": "Y"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"as",
"x",
"y"
],
"title": "MetricCorrelation",
"description": "Ask how two named metrics move together across the table's buckets.\n\nA property of the result set, not of a cell — one number for the whole\ntable, which is why it is requested beside `values` rather than inside it."
},
"MetricFormat": {
"properties": {
"unit": {
"type": "string",
"enum": [
"count",
"percent",
"ratio",
"score",
"currency",
"duration"
],
"title": "Unit",
"default": "count"
},
"decimals": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Decimals"
},
"scale": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Scale"
}
},
"additionalProperties": false,
"type": "object",
"title": "MetricFormat",
"description": "How a derived number should be read (RFC P0-7).\n\nCarried through to the response so every surface — table, chart, export —\nrenders the same value the same way, and so a score with a scale can't be\nmistaken for a percentage again (§2.4)."
},
"MetricGuards": {
"properties": {
"min_denominator": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Min Denominator",
"description": "Below this denominator the ratio is undefined rather than small; the value becomes null and renders as '—'."
}
},
"additionalProperties": false,
"type": "object",
"title": "MetricGuards",
"description": "Suppression rules for a single derived value (RFC P0-6)."
},
"MetricScope": {
"properties": {
"narrow": {
"items": {
"$ref": "#/$defs/QueryFilter"
},
"type": "array",
"title": "Narrow"
},
"shift": {
"anyOf": [
{
"$ref": "#/$defs/ShiftTransform"
},
{
"type": "null"
}
]
},
"drop": {
"items": {
"type": "string"
},
"type": "array",
"title": "Drop",
"description": "Ignore the ambient filters on these keys."
},
"keep_only": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Keep Only",
"description": "Reset every ambient filter except these keys. An EMPTY list keeps none of them, which is the whole project — the denominator of a share of the total. Absent means no such transform at all; the two are different populations and the default cannot be `[]` or they collapse into one."
},
"replace": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"title": "Replace",
"description": "Swap a dimension's value — compare against a named peer."
}
},
"additionalProperties": false,
"type": "object",
"title": "MetricScope",
"description": "The Δ applied to the ambient filter set before a measure is aggregated.\n\nFive transforms, in two families.\n\nThe narrowing pair is cheap — they compile to a `filter` sub-agg inside the\nexisting bucket tree, so a comparison costs one round trip and no client-side\nmath:\n\n* `narrow` adds predicates, always *intersecting* the page filters.\n* `shift` replaces the measure's date range with a calendar window.\n\nThe widening three — `drop`, `keep_only`, `replace` — escape the bucket, so\nthey are aggregated in a top-level `global` sibling and composed back onto\neach cell by the axes the widened population is still pinned by. They\ncompile; only two combinations are refused, and `_widening_errors` says which\nand why. Because their operands live in a parallel subtree, nothing that\ndepends on one can be a `bucket_script` — see `MetricPlan.python_expressions`\n— or decide the result set."
},
"QueryFilter": {
"properties": {
"type": {
"anyOf": [
{
"type": "string",
"const": "exists"
},
{
"type": "string",
"const": "list"
},
{
"type": "string",
"const": "nested"
},
{
"type": "string",
"const": "range"
},
{
"type": "string",
"const": "text"
}
],
"title": "Type"
},
"key": {
"type": "string",
"title": "Key"
},
"values": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Values"
},
"min": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Min"
},
"max": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Max"
},
"operator": {
"anyOf": [
{
"type": "string",
"const": "eq"
},
{
"type": "string",
"const": "neq"
},
{
"type": "string",
"const": "contains"
}
],
"title": "Operator",
"default": "eq"
},
"generated": {
"type": "boolean",
"title": "Generated",
"default": false
}
},
"type": "object",
"required": [
"type",
"key"
],
"title": "QueryFilter"
},
"QuerySort": {
"properties": {
"key": {
"type": "string",
"title": "Key"
},
"order": {
"anyOf": [
{
"type": "string",
"const": "asc"
},
{
"type": "string",
"const": "desc"
}
],
"title": "Order",
"default": "asc"
}
},
"type": "object",
"required": [
"key"
],
"title": "QuerySort"
},
"RuntimeField": {
"properties": {
"as": {
"type": "string",
"title": "As"
},
"type": {
"type": "string",
"enum": [
"double",
"long",
"boolean"
],
"title": "Type",
"default": "double"
},
"expr": {
"type": "string",
"title": "Expr"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"as",
"expr"
],
"title": "RuntimeField",
"description": "A per-document derived field (RFC stage 1).\n\nArithmetic and comparisons over fields on the same row — `reach = followers +\nlikes + comments`, `likes < comments`. Evaluated at query time, so it is\nretroactive over all history the moment it is declared: no operator, no\ninference, no reinference backfill.\n\nUsable anywhere a stored field is: as a measure, a group-by, a `weight`, or\na predicate inside `scope.narrow`."
},
"ShiftTransform": {
"properties": {
"key": {
"type": "string",
"title": "Key",
"default": "ds"
},
"unit": {
"type": "string",
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"title": "Unit",
"default": "week"
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
},
"count": {
"type": "integer",
"minimum": 1.0,
"title": "Count",
"description": "Trailing length in units — 4 weeks, 3 months, …",
"default": 1
},
"align": {
"type": "string",
"enum": [
"complete",
"to_date"
],
"title": "Align",
"default": "complete"
},
"week_start": {
"type": "string",
"enum": [
"monday",
"sunday"
],
"title": "Week Start",
"default": "monday"
},
"anchor": {
"type": "string",
"enum": [
"today",
"dashboard_end"
],
"title": "Anchor",
"default": "today"
}
},
"additionalProperties": false,
"type": "object",
"title": "ShiftTransform",
"description": "Move a measure's date range by whole calendar units (RFC §6.13).\n\nThis is what makes week-over-week possible. Today's only comparison shifts\nthe range back by its own length in days, so a 90-day dashboard gets a\n90-day baseline and month-over-month compares 31 days to 30."
},
"TableField": {
"properties": {
"key": {
"type": "string",
"title": "Key",
"default": ""
},
"order": {
"anyOf": [
{
"type": "string",
"const": "asc"
},
{
"type": "string",
"const": "desc"
},
{
"type": "null"
}
],
"title": "Order"
},
"operation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Operation"
},
"n": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "N"
},
"weight": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Weight"
},
"percentile": {
"anyOf": [
{
"type": "number",
"maximum": 100.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Percentile",
"description": "Which percentile to return for operation = 'percentile'. Defaults to 95."
},
"custom_prompt_begin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Custom Prompt Begin"
},
"custom_prompt_end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Custom Prompt End"
},
"kind": {
"anyOf": [
{
"type": "string",
"enum": [
"expression",
"rescope",
"window"
]
},
{
"type": "null"
}
],
"title": "Kind"
},
"as": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "As"
},
"scope": {
"anyOf": [
{
"$ref": "#/$defs/MetricScope"
},
{
"type": "null"
}
]
},
"expr": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expr"
},
"of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Of"
},
"window": {
"anyOf": [
{
"$ref": "#/$defs/WindowTransform"
},
{
"type": "null"
}
]
},
"format": {
"anyOf": [
{
"$ref": "#/$defs/MetricFormat"
},
{
"type": "null"
}
]
},
"guards": {
"anyOf": [
{
"$ref": "#/$defs/MetricGuards"
},
{
"type": "null"
}
]
},
"drill": {
"anyOf": [
{
"type": "string",
"enum": [
"numerator",
"denominator",
"none"
]
},
{
"type": "null"
}
],
"title": "Drill"
},
"include_filters": {
"items": {
"type": "string"
},
"type": "array",
"title": "Include Filters"
},
"exclude_filters": {
"items": {
"type": "string"
},
"type": "array",
"title": "Exclude Filters"
},
"size": {
"anyOf": [
{
"type": "integer",
"maximum": 100000.0
},
{
"type": "null"
}
],
"title": "Size",
"description": "Bucket count for this grouping. Capped at 100000."
},
"interval": {
"anyOf": [
{
"type": "string",
"const": "day"
},
{
"type": "string",
"const": "week"
},
{
"type": "string",
"const": "month"
},
{
"type": "null"
}
],
"title": "Interval"
}
},
"type": "object",
"title": "TableField"
},
"TableOrderBy": {
"properties": {
"value": {
"type": "string",
"title": "Value"
},
"direction": {
"type": "string",
"enum": [
"asc",
"desc"
],
"title": "Direction",
"default": "desc"
},
"limit": {
"anyOf": [
{
"type": "integer",
"maximum": 100000.0,
"minimum": 1.0
},
{
"type": "null"
}
],
"title": "Limit"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"value"
],
"title": "TableOrderBy"
},
"TablePredicate": {
"properties": {
"expr": {
"type": "string",
"title": "Expr"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"expr"
],
"title": "TablePredicate"
},
"WindowTransform": {
"properties": {
"op": {
"type": "string",
"enum": [
"moving_avg",
"cumulative_sum",
"rank"
],
"title": "Op"
},
"periods": {
"type": "integer",
"maximum": 365.0,
"minimum": 2.0,
"title": "Periods",
"description": "Window length in buckets, for moving_avg.",
"default": 4
},
"direction": {
"type": "string",
"enum": [
"asc",
"desc"
],
"title": "Direction",
"default": "desc"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"op"
],
"title": "WindowTransform",
"description": "A derived series over the buckets a metric already produced.\n\nThese are the three result-set operations the RFC lists and the builder could\nnot express: a moving average, a running total, and a rank.\n\nComputed after the response, over the buckets that came back — and that is\nthe definition rather than an approximation. `order_by`'s limit and\n`min_bucket_n` have already decided which buckets there are; a moving average\nis of the series on screen, a rank is among the rows shown. This is the one\nplace where \"the page\" and \"the result set\" are the same thing, which is why\n`having` and `order_by` are still refused a page-level answer (see\n`_plan_result_set_ops`) and these are not."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/onclarity-com-admin-build-table-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.