Kurrent Projections API

Create, manage and query projections

Operations 22

GET /projections/any List all projections #
GET /projections/all-non-transient List all non-transient projections #
GET /projections/transient List all transient projections #
POST /projections/transient Create a transient projection #
GET /projections/onetime List all one-time projections (queries) #
POST /projections/onetime Create a one-time projection #
GET /projections/continuous List all continuous projections #
POST /projections/continuous Create a continuous projection #
POST /projections/read-events Query the events of a projection #
GET /projection/{name} Get the details of a projection #
DELETE /projection/{name} Delete a projection #
GET /projection/{name}/query Get the definition of a projection #
PUT /projection/{name}/query Update the definition of a projection #
GET /projection/{name}/state Get the state of a projection #
GET /projection/{name}/result Get the result of a projection #
GET /projection/{name}/statistics Get the statistics of a projection #
GET /projection/{name}/config Get the configuration of a projection #
PUT /projection/{name}/config Update the configuration of a projection #
POST /projection/{name}/command/enable Enable a projection #
POST /projection/{name}/command/disable Disable a projection #
POST /projection/{name}/command/reset Reset a projection #
POST /projection/{name}/command/abort Abort a projection #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/kurrent-projections-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

kurrent-projections-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: KurrentDB HTTP 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.
  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:
    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
    NotFound:
      description: Not Found — the stream, event, projection, subscription or user does not exist
      content:
        text/plain:
          schema:
            type: string
    Created:
      description: Created
      headers:
        Location:
          description: URI of the created resource
          schema:
            type: string
  parameters:
    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
    Name:
      name: name
      in: path
      required: true
      description: Name of the projection
      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