API Reference
Complete reference for DeltaBase APIs
API Reference
Section titled “API Reference”Complete reference for all DeltaBase APIs. These are the actual HTTP endpoints - most developers will use the SDK instead.
Authentication
Section titled “Authentication”All API requests require authentication via Bearer token:
Authorization: Bearer your-api-key
Management API
Section titled “Management API”Administrative operations for event stores.
Create Event Store
Section titled “Create Event Store”POST /event-stores
Request Body:
{ "name": "my-event-store", "description": "Event store for my application", "region": "us-west-1", "settings": { "retentionPeriodDays": 365, "maxStreamSizeBytes": 104857600 }}
Response:
{ "id": "es_abc123", "name": "my-event-store", "description": "Event store for my application", "region": "us-west-1", "status": "active", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"}
List Event Stores
Section titled “List Event Stores”GET /event-stores?limit=50&offset=0&filter=my-app
Query Parameters:
limit
(number, optional): Maximum number of results (default: 50)offset
(number, optional): Number of results to skip (default: 0)filter
(string, optional): Filter by name
Get Event Store
Section titled “Get Event Store”GET /event-stores/{eventStoreId}
Response:
{ "id": "es_abc123", "name": "my-event-store", "description": "Event store for my application", "region": "us-west-1", "status": "active", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z", "statistics": { "totalStreams": 1250, "totalEvents": 45000, "databaseSizeBytes": 2048576, "oldestEventTimestamp": "2024-01-01T00:00:00.000Z", "newestEventTimestamp": "2024-01-15T12:30:00.000Z" }, "settings": { "retentionPeriodDays": 365, "maxStreamSizeBytes": 104857600 }}
Delete Event Store
Section titled “Delete Event Store”DELETE /event-stores/{eventStoreId}
Response: 204 No Content
Event Store API
Section titled “Event Store API”Core event streaming operations.
Append Events to Stream
Section titled “Append Events to Stream”POST /event-stores/{eventStoreId}/streams/{streamId}
Request Body:
{ "events": [ { "type": "user.created", "data": { "id": "user-123", "email": "john@example.com", "name": "John Doe" }, "metadata": { "userId": "admin-456", "ip": "192.168.1.1" } } ], "expectedStreamVersion": 5}
Headers:
Idempotency-Key
(optional): Ensures request is processed only once
Response:
{ "streamId": "user-123", "eventsAppended": 1, "currentStreamVersion": 6, "globalPosition": 12345}
Status Codes:
200
- Success409
- Version conflict (wrong expectedStreamVersion)
Read Stream Events
Section titled “Read Stream Events”GET /event-stores/{eventStoreId}/streams/{streamId}?direction=forward&limit=100&fromStreamPosition=0
Query Parameters:
direction
(string):forward
orbackward
(default: forward)limit
(number): Maximum events to return (default: 100, max: 1000)fromStreamPosition
(number): Start position in streamtoStreamPosition
(number): End position in stream
Response:
{ "streamId": "user-123", "events": [ { "streamId": "user-123", "streamPosition": 0, "globalPosition": 12345, "eventId": "evt_abc123", "type": "user.created", "data": { "id": "user-123", "email": "john@example.com", "name": "John Doe" }, "metadata": { "userId": "admin-456", "ip": "192.168.1.1" }, "schemaVersion": "1.0", "transactionId": "txn_def456", "createdAt": "2024-01-01T12:00:00.000Z" } ], "hasMore": false, "streamVersion": 5}
Query Events
Section titled “Query Events”GET /event-stores/{eventStoreId}/events?types=user.created,user.updated&limit=50&after=2024-01-01T00:00:00Z
Query Parameters:
types
(string): Comma-separated event typesstreams
(string): Comma-separated stream IDslimit
(number): Maximum events (default: 100, max: 1000)offset
(number): Skip events (default: 0)after
(string): Events after timestamp (ISO 8601)before
(string): Events before timestamp (ISO 8601)fromGlobalPosition
(number): Start from global positiondirection
(string):forward
orbackward
List Streams
Section titled “List Streams”GET /event-stores/{eventStoreId}/streams?limit=100&offset=0&streamType=user
Query Parameters:
limit
,offset
: PaginationstreamType
(string): Filter by stream type (derived from stream ID prefix)hasEvents
(boolean): Only streams with events
Event Bus API
Section titled “Event Bus API”Real-time event subscriptions.
Create Subscription
Section titled “Create Subscription”POST /event-stores/{eventStoreId}/subscribe
Request Body:
{ "eventFilter": "user.*", "subscriberType": "webhook", "subscriberConfig": { "url": "https://myapp.com/webhooks/deltabase", "headers": { "Authorization": "Bearer webhook-secret" } }, "retryPolicy": { "maxRetries": 3, "backoffMultiplier": 2, "initialBackoffMs": 1000 }, "position": "latest"}
Subscription Types:
webhook
: HTTP POST to URLwebsocket
: Real-time WebSocket deliveryqueue
: Cloudflare Queue (coming soon)durable_object
: Durable Object (coming soon)
Event Filter Patterns:
*
: All eventsuser.*
: All events starting with “user.”*.created
: All events ending with “.created”user.created
: Exact match
Response:
{ "subscriptionId": "sub_abc123", "eventFilter": "user.*", "subscriberType": "webhook", "status": "active", "createdAt": "2024-01-01T12:00:00.000Z", "lastDeliveryAttempt": null, "failedDeliveries": 0}
List Subscriptions
Section titled “List Subscriptions”GET /event-stores/{eventStoreId}/subscriptions
Get Subscription
Section titled “Get Subscription”GET /event-stores/{eventStoreId}/subscriptions/{subscriptionId}
Delete Subscription
Section titled “Delete Subscription”DELETE /event-stores/{eventStoreId}/subscriptions/{subscriptionId}
WebSocket API
Section titled “WebSocket API”Real-time event streaming via WebSocket.
Connect
Section titled “Connect”const ws = new WebSocket( 'wss://api.delta-base.com/event-stores/{eventStoreId}/events/ws?apiKey=your-key');
Subscribe to Events
Section titled “Subscribe to Events”ws.send(JSON.stringify({ action: 'subscribe', eventFilter: 'user.*', position: 'latest'}));
Received Event Format
Section titled “Received Event Format”{ "type": "event", "event": { "streamId": "user-123", "streamPosition": 0, "globalPosition": 12345, "eventId": "evt_abc123", "type": "user.created", "data": { "id": "user-123", "email": "john@example.com" }, "createdAt": "2024-01-01T12:00:00.000Z" }}
List WebSocket Connections
Section titled “List WebSocket Connections”GET /event-stores/{eventStoreId}/websocket-connections
Close Connection
Section titled “Close Connection”DELETE /event-stores/{eventStoreId}/websocket-connections/{clientId}
Error Responses
Section titled “Error Responses”All errors follow this format:
{ "error": { "code": "STREAM_NOT_FOUND", "message": "Stream 'user-999' not found", "details": { "streamId": "user-999", "eventStoreId": "es_abc123" } }}
Common Error Codes:
UNAUTHORIZED
(401): Invalid or missing API keyFORBIDDEN
(403): Insufficient permissionsNOT_FOUND
(404): Resource doesn’t existVERSION_CONFLICT
(409): Stream version mismatchRATE_LIMITED
(429): Too many requestsINTERNAL_ERROR
(500): Server error
Rate Limits
Section titled “Rate Limits”- API requests: 1000 requests per minute per API key
- Event appends: 10,000 events per minute per event store
- WebSocket connections: 100 concurrent connections per API key
Headers included in responses:
X-RateLimit-Limit
: Requests allowed per windowX-RateLimit-Remaining
: Requests remaining in windowX-RateLimit-Reset
: When the window resets
When rate limited, retry with exponential backoff.