---
title: "GET /api/index"
method: GET
path: "/api/index"
tags: ["/api/index"]
---

# GET /api/index

`GET /api/index`

## Request

- Base URL: `` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/api/index`
- Auth: API key in header `X-API-Key`

A transform's indexes: those physically in the warehouse, merged with its managed requests. Each entry is flagged
  `:metabase_managed`; managed ones also carry `:request` (status + definition). If the warehouse can't be read, the
  managed requests are still listed (as absent) and `:warehouse_error` carries the reason.

## Query parameters

- `transform-id` integer, required

## Response `2XX`

Successful response

- object
  - `data` object[], required
    - `access_method` string, nullable, required
    - `include_columns` string[], required
    - `is_primary` boolean, required
    - `is_unique` boolean, required
    - `is_valid` boolean, required
    - `key_columns` string[], required
    - `kind` string, required
    - `metabase_managed` boolean, required
    - `name` string, nullable, required
    - `partial_predicate` string, nullable, required
    - `present_in_warehouse` boolean, required
    - `request` object
      - `created_at` unknown, required
      - `created_by` integer, nullable, required: value must be an integer greater than zero.
      - `error_message` string, nullable, required
      - `id` integer, required: value must be an integer greater than zero.
      - `index_name` string, required: value must be a non-blank string.
      - `last_executed_at` unknown, required
      - `status` 'create-pending' | 'update-pending' | 'delete-pending' | 'running' | 'succeeded' | 'failed', required
      - `structured` union, required: A single structured index definition, dispatched on `:kind`. The shape stored in `metabase_table_indexes.structured` and handed to the driver index multimethods.
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaClassicalIndex: Postgres / MySQL / SQL Server secondary index.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `include` MetabaseIndexesSchemaColumnName[]
          - `kind` 'btree' | 'hash' | 'gin' | 'gist' | 'brin' | 'spgist' | 'fulltext' | 'spatial' | 'clustered' | 'nonclustered' | 'columnstore', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `unique` boolean
        - MetabaseIndexesSchemaSortkey: Redshift sort key, inline.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `kind` 'sortkey', required
          - `style` 'compound' | 'interleaved', required
        - MetabaseIndexesSchemaDistkey: Redshift distribution, inline. Only `:key` uses a column (the one DISTKEY column); `:all`/`:even` take none.
          - `columns` MetabaseIndexesSchemaColumn[]
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `kind` 'distkey', required
          - `style` 'key' | 'all' | 'even', required
        - MetabaseIndexesSchemaClustering: Snowflake (standalone) / BigQuery (inline) clustering. `:name` is required for the standalone form.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `kind` 'clustering', required
          - `name` string: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
        - MetabaseIndexesSchemaOrderBy: ClickHouse ORDER BY, inline.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `kind` 'order-by', required
        - MetabaseIndexesSchemaSkipIndex: ClickHouse data-skipping index, standalone. Only arg-free types; the parameterized ones need type-args the form can't supply yet.
          - `columns` MetabaseIndexesSchemaColumn[], required
            - `direction` 'asc' | 'desc'
            - `name` string, required
          - `granularity` integer
          - `kind` 'skip-index', required
          - `name` string, required: Free-form user input, inlined (quoted and escaped) into DDL. 63 is the Postgres identifier limit, the tightest engine we support.
          - `type` 'minmax' | 'bloom_filter', required
      - `transform_id` integer, required: value must be an integer greater than zero.
      - `updated_at` unknown, required
  - `warehouse_error` string, nullable

## Other responses

- `4XX`: Client error response
- `5XX`: Server error response

## Changes

- **2026-11-04** `2e178f5a7934`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/metabase/apis/metabase-api/changes/api/index/get.md)

---

[API](https://skmtc.dev/metabase/apis/metabase-api.md) - [All operations](https://skmtc.dev/metabase/apis/metabase-api/llms.txt) - [OpenAPI document](https://skmtc.dev/metabase/apis/metabase-api/revisions/2e178f5a7934?raw)
