Quickwit Indexes API
Create, update, retrieve, and manage search indexes
Create, update, retrieve, and manage search indexes
openapi: 3.1.0
info:
title: Quickwit REST Cluster Indexes API
description: 'The Quickwit REST API provides endpoints for indexing NDJSON documents, executing full-text and aggregation search queries, managing indexes and data sources, streaming field values, deleting documents by query, and monitoring cluster health. Quickwit is a cloud-native search engine for log management and full-text search at petabyte scale.
'
version: 0.8.2
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0
contact:
name: Quickwit, Inc.
email: hello@quickwit.io
x-api-evangelist-rating:
designScore: 70
reliability: 80
documentation: 75
servers:
- url: http://localhost:7280/api/v1
description: Local Quickwit node
tags:
- name: Indexes
description: Create, update, retrieve, and manage search indexes
paths:
/indexes:
get:
operationId: listIndexes
summary: List all indexes
description: Returns metadata for all indexes in the cluster.
tags:
- Indexes
responses:
'200':
description: List of index metadata
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/IndexMetadata'
'500':
$ref: '#/components/responses/InternalError'
post:
operationId: createIndex
summary: Create an index
description: Creates a new search index with the provided configuration.
tags:
- Indexes
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/IndexConfig'
application/yaml:
schema:
$ref: '#/components/schemas/IndexConfig'
responses:
'200':
description: Index created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/IndexMetadata'
'400':
$ref: '#/components/responses/BadRequest'
'409':
description: Index already exists
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'500':
$ref: '#/components/responses/InternalError'
/indexes/{index_id}:
get:
operationId: getIndex
summary: Get index metadata
description: Returns the metadata for a specific index.
tags:
- Indexes
parameters:
- $ref: '#/components/parameters/indexId'
responses:
'200':
description: Index metadata
content:
application/json:
schema:
$ref: '#/components/schemas/IndexMetadata'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
put:
operationId: updateIndex
summary: Update an index
description: Updates an existing index configuration. Optionally creates the index if it does not exist.
tags:
- Indexes
parameters:
- $ref: '#/components/parameters/indexId'
- name: create
in: query
description: Create the index if it does not exist
required: false
schema:
type: boolean
default: false
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/IndexConfig'
application/yaml:
schema:
$ref: '#/components/schemas/IndexConfig'
responses:
'200':
description: Index updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/IndexMetadata'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
delete:
operationId: deleteIndex
summary: Delete an index
description: Deletes an index and returns the metadata of all deleted splits.
tags:
- Indexes
parameters:
- $ref: '#/components/parameters/indexId'
responses:
'200':
description: Index deleted, returns deleted splits
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SplitMetadata'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/indexes/{index_id}/describe:
get:
operationId: describeIndex
summary: Describe an index
description: Returns statistics and metadata about the index including document counts and size.
tags:
- Indexes
parameters:
- $ref: '#/components/parameters/indexId'
responses:
'200':
description: Index description with statistics
content:
application/json:
schema:
$ref: '#/components/schemas/IndexDescription'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/indexes/{index_id}/clear:
put:
operationId: clearIndex
summary: Clear an index
description: Removes all documents from the index while keeping the index configuration.
tags:
- Indexes
parameters:
- $ref: '#/components/parameters/indexId'
responses:
'200':
description: Index cleared successfully
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/indexes/{index_id}/splits:
get:
operationId: listSplits
summary: List splits
description: Returns the list of splits for a given index with optional filtering.
tags:
- Indexes
parameters:
- $ref: '#/components/parameters/indexId'
- name: offset
in: query
description: Number of splits to skip
required: false
schema:
type: integer
minimum: 0
- name: limit
in: query
description: Maximum number of splits to return
required: false
schema:
type: integer
minimum: 1
- name: split_states
in: query
description: Filter by split state (comma-separated)
required: false
schema:
type: string
- name: start_timestamp
in: query
description: Minimum timestamp filter in seconds
required: false
schema:
type: integer
format: int64
- name: end_timestamp
in: query
description: Maximum timestamp filter in seconds
required: false
schema:
type: integer
format: int64
- name: end_create_timestamp
in: query
description: Maximum creation date filter
required: false
schema:
type: integer
format: int64
responses:
'200':
description: List of splits
content:
application/json:
schema:
$ref: '#/components/schemas/SplitList'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
components:
schemas:
IndexMetadata:
type: object
properties:
version:
type: string
index_uid:
type: string
description: Unique index ID including generation
index_config:
$ref: '#/components/schemas/IndexConfig'
checkpoint:
type: object
description: Current indexing checkpoint per source
create_timestamp:
type: integer
format: int64
description: Unix timestamp when the index was created
sources:
type: array
items:
$ref: '#/components/schemas/SourceConfig'
IndexDescription:
type: object
properties:
index_id:
type: string
index_uri:
type: string
num_published_splits:
type: integer
size_published_splits:
type: integer
format: int64
description: Size in bytes of published splits
num_published_docs:
type: integer
format: int64
size_published_docs_uncompressed:
type: integer
format: int64
description: Uncompressed size in bytes of indexed documents
timestamp_field_name:
type: string
min_timestamp:
type: integer
format: int64
max_timestamp:
type: integer
format: int64
IndexConfig:
type: object
required:
- version
- index_id
- doc_mapping
properties:
version:
type: string
description: Configuration format version
example: '0.8'
index_id:
type: string
description: Unique index identifier
example: my-log-index
index_uri:
type: string
description: Storage URI (defaults to configured storage)
example: s3://my-bucket/my-index
doc_mapping:
$ref: '#/components/schemas/DocMapping'
indexing_settings:
$ref: '#/components/schemas/IndexingSettings'
search_settings:
$ref: '#/components/schemas/SearchSettings'
retention:
$ref: '#/components/schemas/RetentionPolicy'
RetentionPolicy:
type: object
properties:
period:
type: string
description: Retention period (e.g. "90 days")
schedule:
type: string
description: Cron schedule for retention enforcement
SplitList:
type: object
properties:
offset:
type: integer
size:
type: integer
splits:
type: array
items:
$ref: '#/components/schemas/SplitMetadata'
SearchSettings:
type: object
properties:
default_search_fields:
type: array
items:
type: string
description: Fields searched when no field is specified in the query
IndexingSettings:
type: object
properties:
commit_timeout_secs:
type: integer
description: Maximum time before committing a split (seconds)
split_num_docs_target:
type: integer
description: Target number of docs per split
merge_policy:
type: object
description: Merge policy configuration
resources:
type: object
description: Resource limits for indexing
SourceConfig:
type: object
required:
- version
- source_id
- source_type
- params
properties:
version:
type: string
description: Configuration format version
source_id:
type: string
description: Unique source identifier
example: my-kafka-source
source_type:
type: string
enum:
- kafka
- kinesis
- pulsar
- file
- vec
- void
- ingest-v2
description: Type of data source
num_pipelines:
type: integer
minimum: 1
default: 1
description: Number of indexing pipelines per node
transform:
type: object
nullable: true
description: VRL transformation applied to documents before indexing
properties:
vrl_script:
type: string
description: VRL script content
timezone:
type: string
default: UTC
params:
type: object
description: Source-specific parameters
additionalProperties: true
ApiError:
type: object
required:
- message
properties:
message:
type: string
description: Human-readable error message
example:
message: Index 'my-index' not found
DocMapping:
type: object
properties:
field_mappings:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
enum:
- text
- u64
- i64
- f64
- bool
- datetime
- json
- bytes
- ip
fast:
type: boolean
indexed:
type: boolean
stored:
type: boolean
timestamp_field:
type: string
description: Field used as the document timestamp
tag_fields:
type: array
items:
type: string
store_source:
type: boolean
description: Whether to store the original source document
dynamic_mapping:
type: object
description: Configuration for dynamic field mapping
SplitMetadata:
type: object
properties:
split_id:
type: string
index_uid:
type: string
split_state:
type: string
enum:
- Staged
- Published
- MarkedForDeletion
num_docs:
type: integer
size_in_bytes:
type: integer
format: int64
create_timestamp:
type: integer
format: int64
time_range:
type: object
properties:
start:
type: integer
format: int64
end:
type: integer
format: int64
responses:
BadRequest:
description: Bad request - invalid parameters or body
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
InternalError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
parameters:
indexId:
name: index_id
in: path
description: The index identifier
required: true
schema:
type: string
example: my-index