/ds/{bucket}/{stream} route family, which maps cleanly to buckets and stream IDs.
Bucket operations
| Method | Path | Description |
|---|---|---|
PUT | /ds/{bucket} | Create a bucket |
GET | /ds/{bucket} | Get bucket metadata |
DELETE | /ds/{bucket} | Delete a bucket |
GET | /ds/{bucket}/streams | List streams in a bucket |
Stream operations
| Method | Path | Description |
|---|---|---|
PUT | /ds/{bucket}/{stream} | Create a stream |
POST | /ds/{bucket}/{stream} | Append data or close |
GET | /ds/{bucket}/{stream} | Read (catch-up, long-poll, SSE) |
HEAD | /ds/{bucket}/{stream} | Get stream metadata |
DELETE | /ds/{bucket}/{stream} | Delete a stream |
Bootstrap and snapshots
| Method | Path | Description |
|---|---|---|
GET | /ds/{bucket}/{stream}/bootstrap | Snapshot + tail replay |
GET | /ds/{bucket}/{stream}/snapshot | Read latest snapshot |
GET | /ds/{bucket}/{stream}/snapshot/{offset} | Read snapshot at offset |
PUT | /ds/{bucket}/{stream}/snapshot/{offset} | Publish a snapshot |
v1 compatibility
A flat v1 compatibility layer is also available under/v1/stream/{path} for simpler integrations that don’t need explicit bucket management.
Common request patterns
Create a bucket and stream
Append data
Read from the beginning
Subscribe with SSE
Related concepts
- Read modes — catch-up vs long-poll vs SSE
- Bootstrap — snapshot + tail recovery
- Snapshots — snapshot lifecycle
- Exactly-once writes — producer deduplication
- Conditional writes — ETag and sequence-based writes

