Kurrent Streams API
Append to, read from and manage event streams
Append to, read from and manage event streams
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/kurrent-streams-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: KurrentDB HTTP Streams 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: Streams
description: Append to, read from and manage event streams
paths:
/streams/{stream}:
parameters:
- $ref: '#/components/parameters/Stream'
get:
tags:
- Streams
operationId: readStream
summary: Read events from a stream
parameters:
- $ref: '#/components/parameters/RequireLeader'
responses:
'200':
$ref: '#/components/responses/StreamFeed'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Streams
operationId: appendToStream
summary: Append one or more events to a stream
parameters:
- $ref: '#/components/parameters/ExpectedVersion'
- $ref: '#/components/parameters/EventType'
- $ref: '#/components/parameters/EventId'
- $ref: '#/components/parameters/RequireLeader'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventBatch'
application/vnd.kurrent.events+json:
schema:
$ref: '#/components/schemas/EventBatch'
responses:
'201':
$ref: '#/components/responses/Created'
'307':
description: Temporary Redirect — the request must be forwarded to the leader node
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
delete:
tags:
- Streams
operationId: deleteStream
summary: Delete a stream
parameters:
- $ref: '#/components/parameters/ExpectedVersion'
- $ref: '#/components/parameters/RequireLeader'
responses:
'204':
description: No Content — the stream was deleted
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/streams/{stream}/incoming/{guid}:
parameters:
- $ref: '#/components/parameters/Stream'
- name: guid
in: path
required: true
description: Client-generated event id, used as the idempotency key for this append
schema:
type: string
format: uuid
post:
tags:
- Streams
operationId: appendEventToStreamIdempotent
summary: Append a single event using a client-supplied event id (idempotent append URL)
parameters:
- $ref: '#/components/parameters/ExpectedVersion'
- $ref: '#/components/parameters/EventType'
requestBody:
required: true
content:
application/json:
schema:
type: object
description: The event body
responses:
'201':
$ref: '#/components/responses/Created'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/streams/{stream}/metadata:
parameters:
- $ref: '#/components/parameters/Stream'
get:
tags:
- Streams
operationId: readStreamMetadata
summary: Read the metadata of a stream
responses:
'200':
$ref: '#/components/responses/JsonOk'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Streams
operationId: updateStreamMetadata
summary: Update the metadata of a stream
parameters:
- $ref: '#/components/parameters/ExpectedVersion'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/StreamMetadata'
responses:
'201':
$ref: '#/components/responses/Created'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/streams/{stream}/{event}:
parameters:
- $ref: '#/components/parameters/Stream'
- $ref: '#/components/parameters/EventNumber'
get:
tags:
- Streams
operationId: readEvent
summary: Read a single event from a stream
responses:
'200':
$ref: '#/components/responses/JsonOk'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/streams/{stream}/{event}/{count}:
parameters:
- $ref: '#/components/parameters/Stream'
- $ref: '#/components/parameters/EventNumber'
- $ref: '#/components/parameters/Count'
get:
tags:
- Streams
operationId: readEvents
summary: Read a page of events from a stream starting at an event number
responses:
'200':
$ref: '#/components/responses/StreamFeed'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/streams/{stream}/{event}/backward/{count}:
parameters:
- $ref: '#/components/parameters/Stream'
- $ref: '#/components/parameters/EventNumber'
- $ref: '#/components/parameters/Count'
get:
tags:
- Streams
operationId: readEventsBackward
summary: Page backward through a stream from an event number
responses:
'200':
$ref: '#/components/responses/StreamFeed'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/streams/{stream}/{event}/forward/{count}:
parameters:
- $ref: '#/components/parameters/Stream'
- $ref: '#/components/parameters/EventNumber'
- $ref: '#/components/parameters/Count'
get:
tags:
- Streams
operationId: readEventsForward
summary: Page forward through a stream from an event number
responses:
'200':
$ref: '#/components/responses/StreamFeed'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/streams/$all:
get:
tags:
- Streams
operationId: readAllStream
summary: Read events from the $all stream
parameters:
- $ref: '#/components/parameters/RequireLeader'
responses:
'200':
$ref: '#/components/responses/StreamFeed'
'401':
$ref: '#/components/responses/Unauthorized'
components:
responses:
BadRequest:
description: Bad Request — the request was malformed or violated an expected version
content:
text/plain:
schema:
type: string
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
Unauthorized:
description: Unauthorized — credentials were missing, invalid, or lacked ACL permission
content:
text/plain:
schema:
type: string
StreamFeed:
description: OK — an AtomPub feed of events
content:
application/json:
schema:
$ref: '#/components/schemas/AtomFeed'
application/atom+xml:
schema:
type: string
application/xml:
schema:
type: string
JsonOk:
description: OK
content:
application/json:
schema:
type: object
parameters:
EventNumber:
name: event
in: path
required: true
description: Event number within the stream, or "head" for the latest event
schema:
type: string
EventType:
name: Kurrent-EventType
in: header
description: The event type of the posted body
schema:
type: string
RequireLeader:
name: Kurrent-RequireLeader
in: header
description: Require that the request is served by the leader node rather than a follower
schema:
type: boolean
Stream:
name: stream
in: path
required: true
description: Name of the event stream
schema:
type: string
ExpectedVersion:
name: Kurrent-ExpectedVersion
in: header
description: The version the stream is expected to be at, used for optimistic concurrency control
schema:
type: integer
Count:
name: count
in: path
required: true
description: Number of events to return
schema:
type: integer
EventId:
name: Kurrent-EventId
in: header
description: The unique identifier of the posted event. Supplying it makes the append idempotent — a repeated append with the same id is not written twice.
schema:
type: string
format: uuid
schemas:
AtomLink:
type: object
description: A navigation link in an AtomPub feed (first, last, previous, next, metadata)
properties:
uri:
type: string
relation:
type: string
AtomEntry:
type: object
description: A single event entry in an AtomPub feed
properties:
eventId:
type: string
format: uuid
eventType:
type: string
eventNumber:
type: integer
streamId:
type: string
isJson:
type: boolean
isMetaData:
type: boolean
isLinkMetaData:
type: boolean
positionEventNumber:
type: integer
positionStreamId:
type: string
title:
type: string
id:
type: string
updated:
type: string
format: date-time
data:
description: The event payload
metaData:
description: The event metadata
links:
type: array
items:
$ref: '#/components/schemas/AtomLink'
Event:
type: object
description: A single event written to a KurrentDB stream
properties:
eventId:
type: string
format: uuid
description: Client-generated unique identifier for the event; makes the append idempotent
eventType:
type: string
description: The type name of the event
data:
description: The event payload
metadata:
description: Optional event metadata
required:
- eventId
- eventType
- data
EventBatch:
type: array
description: One or more events to append to a stream
items:
$ref: '#/components/schemas/Event'
AtomFeed:
type: object
description: An AtomPub feed of events from a stream
properties:
title:
type: string
id:
type: string
updated:
type: string
format: date-time
streamId:
type: string
author:
type: object
properties:
name:
type: string
headOfStream:
type: boolean
links:
type: array
items:
$ref: '#/components/schemas/AtomLink'
entries:
type: array
items:
$ref: '#/components/schemas/AtomEntry'
StreamAcl:
type: object
description: Access control list applied to a stream
properties:
$r:
description: Users or groups allowed to read
$w:
description: Users or groups allowed to write
$d:
description: Users or groups allowed to delete
$mr:
description: Users or groups allowed to read metadata
$mw:
description: Users or groups allowed to write metadata
StreamMetadata:
type: object
description: Metadata controlling the retention and access of a stream
properties:
$maxCount:
type: integer
description: Maximum number of events retained in the stream
$maxAge:
type: integer
description: Maximum age in seconds of events retained in the stream
$cacheControl:
type: integer
description: Cache control in seconds for the stream head
$tb:
type: integer
description: Truncate-before event number
$acl:
$ref: '#/components/schemas/StreamAcl'
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