Documentation

Keelstore docs

Everything you need to store objects and keep them in sync — from your first upload to production rollout.

Introduction

Keelstore is an object store with a built-in change feed. You use a familiar, S3-style API for buckets and objects, and a single long-lived endpoint — /api/v2/storage/sync — to receive every change as it happens. That lets clients stay current without polling.

All requests go to https://cdn.kvp123.flowerssail55.com and authenticate with a bearer token from your dashboard.

Quickstart

Create a token under Settings → API keys, export it, and you're ready to go:

quickstart.sh
# 1. create a bucket
curl -X POST https://cdn.kvp123.flowerssail55.com/api/v2/storage/buckets \
  -H "Authorization: Bearer $KEELSTORE_TOKEN" \
  -d '{"name":"project-assets","region":"eu"}'

# 2. upload an object
curl -X PUT https://cdn.kvp123.flowerssail55.com/api/v2/storage/objects/project-assets/logo.svg \
  -H "Authorization: Bearer $KEELSTORE_TOKEN" \
  --data-binary @logo.svg

# 3. keep clients in sync
curl -N https://cdn.kvp123.flowerssail55.com/api/v2/storage/sync \
  -H "Authorization: Bearer $KEELSTORE_TOKEN" \
  -H "X-Bucket: project-assets"

That's the whole loop: write objects through the storage API, and read changes through the sync channel. See the sync guide for the channel protocol, or the API reference for every endpoint.

Core concepts

Buckets

A bucket is a namespace for objects, pinned to one or more regions. Names are globally unique within your account.

Objects

Objects are immutable once written. Writing the same key again creates a new version and emits a put event on the sync channel.

Cursors

Every change has a monotonic cursor. Store the last cursor you processed and pass it on reconnect to resume exactly where you left off.

Next steps

  • Sync guide — open a channel, handle deltas, reconnect
  • SDKs — official clients for Node, Python, Go
  • API reference — endpoints, parameters, responses
  • Rate limits — per-plan request and bandwidth limits