---
title: "Enumerate all valid query configurations"
method: POST
path: "/api/v1/compiler/enumerate"
tags: ["compiler"]
---

# Enumerate all valid query configurations

`POST /api/v1/compiler/enumerate`

Enumerate every valid query configuration for a connection.

Generates all valid combinations of optional dimensions, measures,
calculations, filters, and variable values, constrained by widget
category rules.

RLS: Filtered to current client (ClientRLSDB).

## Query parameters

- `source` string, nullable

## Headers

- `X-Kater-CLI-ID` string, nullable

## Request body

- EnumerateRequest — Request model for enumerating all valid query configurations.
  - `connection_id` string, uuid, required — Connection to enumerate against
  - `query_ids` string[], nullable — Optional query UUIDs to limit enumeration. If omitted, enumerates all queries.
  - `tenant_key` string, required — Tenant key for multi-tenant clients. Use 'kater_global_tenant' for no-tenancy clients or when no tenant isolation is needed.

## Response `200`

Successful Response

- EnumerateResponse — Response model for query combination enumeration.
  - `combinations` QueryCombinationResponse[], required — All valid query configurations
    - `combination_id` string, nullable — Deterministic UUID v5 for this combination
    - `query_kater_id` string, nullable — UUID of the query template
    - `query_label` string, nullable — Human-readable label for the query
    - `query_ref` string, required — Query template reference (e.g. 'q:COMPLIANCE_OVERVIEW')
    - `roles` object — Field-to-role mapping (e.g. {'due_month': 'x_axis'})
    - `selected_calculations` string[] — Selected optional calculation names
    - `selected_dimensions` string[] — Selected optional dimension names
    - `selected_filters` string[] — Selected optional filter names
    - `selected_measures` string[] — Selected optional measure names
    - `variable_assignments` object — Variable name to value assignments
    - `widget_category` string, required — Widget category (e.g. 'axis', 'table')
    - `widget_type` string, nullable — Resolved widget type (e.g. 'axis_metric_by_dimensiondate')
  - `total_count` integer, required — Total number of combinations

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Validation Error
- `500` — Internal Server Error

## Changes

- **2026-03-05** `6a140b82e07c` — 2 breaking, 1 warning, 2 info
  - the request property `tenant_key` became required
  - request property `tenant_key` list-of-types was narrowed by removing types `null` from media type `application/json`
  - removed the request property `query_refs`
  - added the new optional request property `query_ids`
  - …1 more
- **2026-02-26** `bef1f3e205dd` — 6 breaking, 4 info
  - response property `errors` list-of-types was widened by adding types `array` to media type `application/json` of response `400`
  - response property `errors` list-of-types was widened by adding types `array` to media type `application/json` of response `401`
  - response property `errors` list-of-types was widened by adding types `array` to media type `application/json` of response `403`
  - response property `errors` list-of-types was widened by adding types `array` to media type `application/json` of response `404`
  - …6 more
- **2026-02-15** `4037d7d3404b` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/kater-ai/apis/kater-api/changes/api/v1/compiler/enumerate/post.md)

---

[API](https://skmtc.dev/kater-ai/apis/kater-api.md) · [All operations](https://skmtc.dev/kater-ai/apis/kater-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/kater-ai/kater-api/revisions/6a140b82e07c/schema)
