Kurrent Projections API

Create, manage and query projections

OpenAPI Specification

kurrent-projections-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: KurrentDB HTTP Admin Projections API
  version: v26.1
  summary: AtomPub-over-HTTP interface to KurrentDB streams, subscriptions, projections, users and node administration.
  description: KurrentDB (formerly EventStoreDB) exposes a native AtomPub-over-HTTP interface alongside its primary gRPC protocol. This OpenAPI description is an API Evangelist transcription of the provider's published HTTP API Reference at https://docs.kurrent.io/server/v26.1/http-api/api.html — Kurrent does not publish an OpenAPI document of its own. Paths, methods, custom headers, media types and status codes are taken from that reference; nothing has been invented. The base URL is the address of your own KurrentDB node or Kurrent Cloud cluster (the same URL you use for the admin UI), which listens on port 2113 by default.
  contact:
    name: Kurrent
    url: https://www.kurrent.io/
  license:
    name: Kurrent License
    url: https://www.kurrent.io/terms-of-use
  x-apievangelist-provenance:
    generated: '2026-07-19'
    method: generated
    source: https://docs.kurrent.io/server/v26.1/http-api/api.html
    note: Faithful transcription of the provider's published HTTP API reference table. Operation summaries mirror the reference; request/response schemas are intentionally left open where the provider does not publish them.
servers:
- url: https://{host}:{port}
  description: Your KurrentDB node or Kurrent Cloud cluster
  variables:
    host:
      default: localhost
      description: Hostname of the KurrentDB node (the same host you use for the admin UI)
    port:
      default: '2113'
      description: KurrentDB HTTP port
security:
- basicAuth: []
tags:
- name: Projections
  description: Create, manage and query projections
paths:
  /projections/any:
    get:
      tags:
      - Projections
      operationId: listAllProjections
      summary: List all projections
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projections/all-non-transient:
    get:
      tags:
      - Projections
      operationId: listNonTransientProjections
      summary: List all non-transient projections
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projections/transient:
    get:
      tags:
      - Projections
      operationId: listTransientProjections
      summary: List all transient projections
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      tags:
      - Projections
      operationId: createTransientProjection
      summary: Create a transient projection
      parameters:
      - $ref: '#/components/parameters/ProjectionName'
      requestBody:
        $ref: '#/components/requestBodies/ProjectionQuery'
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projections/onetime:
    get:
      tags:
      - Projections
      operationId: listOneTimeProjections
      summary: List all one-time projections (queries)
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      tags:
      - Projections
      operationId: createOneTimeProjection
      summary: Create a one-time projection
      requestBody:
        $ref: '#/components/requestBodies/ProjectionQuery'
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projections/continuous:
    get:
      tags:
      - Projections
      operationId: listContinuousProjections
      summary: List all continuous projections
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      tags:
      - Projections
      operationId: createContinuousProjection
      summary: Create a continuous projection
      parameters:
      - $ref: '#/components/parameters/ProjectionName'
      - name: emit
        in: query
        description: Whether the projection is allowed to emit events
        schema:
          type: boolean
      requestBody:
        $ref: '#/components/requestBodies/ProjectionQuery'
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projections/read-events:
    post:
      tags:
      - Projections
      operationId: readProjectionEvents
      summary: Query the events of a projection
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projection/{name}:
    parameters:
    - $ref: '#/components/parameters/Name'
    get:
      tags:
      - Projections
      operationId: getProjection
      summary: Get the details of a projection
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      tags:
      - Projections
      operationId: deleteProjection
      summary: Delete a projection
      responses:
        '204':
          description: No Content — the projection was deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /projection/{name}/query:
    parameters:
    - $ref: '#/components/parameters/Name'
    get:
      tags:
      - Projections
      operationId: getProjectionQuery
      summary: Get the definition of a projection
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Projections
      operationId: updateProjectionQuery
      summary: Update the definition of a projection
      requestBody:
        $ref: '#/components/requestBodies/ProjectionQuery'
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projection/{name}/state:
    parameters:
    - $ref: '#/components/parameters/Name'
    get:
      tags:
      - Projections
      operationId: getProjectionState
      summary: Get the state of a projection
      parameters:
      - $ref: '#/components/parameters/Partition'
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /projection/{name}/result:
    parameters:
    - $ref: '#/components/parameters/Name'
    get:
      tags:
      - Projections
      operationId: getProjectionResult
      summary: Get the result of a projection
      parameters:
      - $ref: '#/components/parameters/Partition'
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /projection/{name}/statistics:
    parameters:
    - $ref: '#/components/parameters/Name'
    get:
      tags:
      - Projections
      operationId: getProjectionStatistics
      summary: Get the statistics of a projection
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /projection/{name}/config:
    parameters:
    - $ref: '#/components/parameters/Name'
    get:
      tags:
      - Projections
      operationId: getProjectionConfig
      summary: Get the configuration of a projection
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Projections
      operationId: updateProjectionConfig
      summary: Update the configuration of a projection
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectionConfig'
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projection/{name}/command/enable:
    parameters:
    - $ref: '#/components/parameters/Name'
    post:
      tags:
      - Projections
      operationId: enableProjection
      summary: Enable a projection
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /projection/{name}/command/disable:
    parameters:
    - $ref: '#/components/parameters/Name'
    post:
      tags:
      - Projections
      operationId: disableProjection
      summary: Disable a projection
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /projection/{name}/command/reset:
    parameters:
    - $ref: '#/components/parameters/Name'
    post:
      tags:
      - Projections
      operationId: resetProjection
      summary: Reset a projection
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /projection/{name}/command/abort:
    parameters:
    - $ref: '#/components/parameters/Name'
    post:
      tags:
      - Projections
      operationId: abortProjection
      summary: Abort a projection
      responses:
        '200':
          $ref: '#/components/responses/JsonOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  responses:
    Created:
      description: Created
      headers:
        Location:
          description: URI of the created resource
          schema:
            type: string
    NotFound:
      description: Not Found — the stream, event, projection, subscription or user does not exist
      content:
        text/plain:
          schema:
            type: string
    BadRequest:
      description: Bad Request — the request was malformed or violated an expected version
      content:
        text/plain:
          schema:
            type: string
    Unauthorized:
      description: Unauthorized — credentials were missing, invalid, or lacked ACL permission
      content:
        text/plain:
          schema:
            type: string
    JsonOk:
      description: OK
      content:
        application/json:
          schema:
            type: object
  parameters:
    Name:
      name: name
      in: path
      required: true
      description: Name of the projection
      schema:
        type: string
    ProjectionName:
      name: name
      in: query
      description: Name to give the projection
      schema:
        type: string
    Partition:
      name: partition
      in: query
      description: Partition of a partitioned projection to read
      schema:
        type: string
  schemas:
    ProjectionConfig:
      type: object
      description: Runtime configuration of a projection
      properties:
        emitEnabled:
          type: boolean
        trackEmittedStreams:
          type: boolean
        checkpointAfterMs:
          type: integer
        checkpointHandledThreshold:
          type: integer
        checkpointUnhandledBytesThreshold:
          type: integer
        pendingEventsThreshold:
          type: integer
        maxWriteBatchLength:
          type: integer
  requestBodies:
    ProjectionQuery:
      required: true
      description: The projection definition, as JavaScript
      content:
        application/json:
          schema:
            type: string
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: KurrentDB supports HTTP Basic authentication for the HTTP API, with access control lists (ACLs) applied per stream. See https://docs.kurrent.io/server/v26.1/http-api/security.html
externalDocs:
  description: KurrentDB HTTP API documentation
  url: https://docs.kurrent.io/server/v26.1/http-api/introduction.html