# AYNIL — All You Need Is a Log > A personal data store API: one Cloudflare Worker, one Durable Object per PDS, append-only events, content-addressed blobs in R2, and scoped bearer tokens. Layers appends form submissions here; DESH consumes with cursor-owned ranged pulls. AYNIL is the log substrate in the sudo science stack demo (Layers → AYNIL → DESH → EZAF). This host is API-first; human-readable docs live in this file. ## Model - **Events** — append-only log entries with server-assigned `seq`, optional idempotency keys, and typed payloads. - **Blobs** — raw bytes in a CAS (`b:sha256:`); hash verified on every put. - **Tokens** — scoped bearer secrets (`admin` / `append` / `read`); append can write and never read. - **Consumers own their cursor** — `GET /v1/pds/:id/events?since=&limit=` is truth; `GET /tail` is an optional content-free SSE poke. ## API (summary) | Method | Path | Auth | |---|---|---| | POST | `/v1/pds` | provision key | | GET | `/v1/pds/:id` | any token | | POST | `/v1/pds/:id/events` | append/admin | | GET | `/v1/pds/:id/events?since=&limit=` | read/admin | | GET | `/v1/pds/:id/tail` | read/admin | | POST | `/v1/pds/:id/blobs` | append/admin | | GET/HEAD | `/v1/pds/:id/blobs/:hash` | read/admin | | PUT/GET | `/v1/pds/:id/layer-manifest` | admin / public | | GET | `/healthz` | none | ## Links - Stack demo video: https://youtu.be/674ZAy8FoeU - Layers embed host: https://layers.sudoscience.dev - DESH demo: https://desh.sudoscience.dev/demo - Parent lab: https://sudoscience.dev (machine-readable: https://sudoscience.dev/llms.txt) - Terms: https://sudoscience.dev/terms - Privacy: https://sudoscience.dev/privacy - Contact: company@sudoscience.dev