Quickwit Indexes API

Create, update, retrieve, and manage search indexes

OpenAPI Specification

quickwit-indexes-api-openapi.yml Raw ↑
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