s3jsonapi

I’ve been running s3jsonapi quietly for a few years now on top of Minio for some of my home projects. It’s a small HTTP server that exposes an S3-compatible bucket as a simple JSON key/value API (PUT, GET, DELETE, and list). No database, no schema, just JSON blobs stored by key.

I decided to open source it recently after finding a new use for it: giving AI agents a simple persistence layer. When building agentic workflows, you often need somewhere to store state, memory, or intermediate results without standing up a full database. If S3 is already in the stack (or you’re running Minio locally), this gives agents a clean HTTP interface they can read and write with no extra infrastructure.

How it works

Keys map directly to S3 object paths. A PUT to /prefix/key stores the JSON body at s3://bucket/prefix/key. A GET to /prefix/ lists all keys under that prefix, with an optional ?expand=1 to eagerly fetch and return the full contents of all keys as a JSON array.

# write
curl -X PUT http://localhost:8080/session/abc123 -d '{"step":"research","status":"complete"}'

# read
curl http://localhost:8080/session/abc123
# {"step":"research","status":"complete"}

# list
curl http://localhost:8080/session/
# {"keys":["abc123"]}

It works with AWS S3 and any S3-compatible API including Minio, Backblaze B2, Cloudflare R2, and others.

There’s no authentication, so it’s best suited for local development, internal tooling, or private network deployments. Check out the repository for configuration and usage details.