Collections are the backbone of every Silo project. A collection pairs a name with a JSON Schema draft 2020-12 document that describes exactly what your content looks like. Every write is validated against that schema in full — there is no way to turn that off. Reads are never validated, so a schema change can never make already-stored data unreadable.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/org-quicko/silo/llms.txt
Use this file to discover all available pages before exploring further.
Creating a collection
To create a collection, POST its name and schema to the collections endpoint for a project/environment pair.title and status are required; body and tags are optional. Silo validates every entry write against this shape.
Managing collections
Beyond creating a collection, Silo provides endpoints to list, rename, and delete collections within a project/environment.| Method | Path | Description |
|---|---|---|
GET | /api/projects/{project}/envs/{env}/collections | List all collections |
POST | /api/projects/{project}/envs/{env}/collections | Create a collection with {name, schema} |
PATCH | /api/projects/{project}/envs/{env}/collections/{name} | Rename a collection (?dry_run=true available) |
DELETE | /api/projects/{project}/envs/{env}/collections/{name} | Delete a collection and all its entries (?force=true) |
Managing a collection’s schema
After a collection is created, you can read, replace, or delete its schema through the schema sub-resource.| Method | Path | Description |
|---|---|---|
GET | /api/projects/{project}/envs/{env}/collections/{name}/schema | Fetch the current schema |
PUT | /api/projects/{project}/envs/{env}/collections/{name}/schema | Replace the schema |
DELETE | /api/projects/{project}/envs/{env}/collections/{name}/schema | Remove the schema |
PUT returns 409 if the collection holds entries and the new schema changes which entries are valid. See Schema validation for the full rules on what can and cannot change.Entry CRUD operations
Every entry gets a ULIDid assigned at creation time. Use that id — along with the rev — for all subsequent reads, updates, and deletes.
List entries
filter, sort, limit, and offset query parameters. See List queries for the full filter grammar.Create an entry
400 validation_failed with JSON Pointer paths in details.Update an entry (PUT)
PUT replaces the whole entry. Supply every field, not just the ones that changed.Entry response format
Silo returns entries as flat objects. The envelope fields (id, rev, created_at, updated_at) appear alongside your own fields — there is no nested data key in the response body.
The
id, rev, created_at, and updated_at fields are reserved envelope keys. Silo refuses a schema that declares any of them, and refuses an entry body that includes one. The seq counter is an internal field used by Silo for ordering; it is never included in the API response.Optimistic concurrency
EveryPUT and DELETE requires you to send back the revision you last read. This stops two browser tabs (or two processes) from silently overwriting each other.
Pass the revision as an If-Match header or a ?rev= query parameter:
Schema validation
Every write — create and update alike — is validated against the collection’s schema. Reads are never validated, so stored data that pre-dates a schema change is always readable. The schema itself is frozen while entries exist. Attempting toPUT a new schema that changes which entries are valid returns 409. The error message names the collection and the entry count.
The following schema keywords are always editable, even while entries exist, because they do not affect entry validity:
x-silo-auth, x-silo-search, title, description, $comment, and $schema.x-silo-* schema keywords
Silo extends JSON Schema with vendor keywords that control access and indexing. They live at the top level of your schema object.Set to
true to require authentication to read this collection. Anonymous callers receive 401 instead of entry data.An array of JSONPath expressions identifying which fields Silo indexes for full-text search. Paths are scoped to the internal entry document (Omitting this keyword means the collection is not searchable. See Search for details.
$.data.*).Collection references
A$ref can point at another collection in the same project and environment using the silo://collections/<name> URI scheme:
author field holds a reference to an entry in the authors collection of the same project/environment.
Public access
Collections that do not includex-silo-auth: true in their schema are readable by unauthenticated callers. No API key is required to list or read entries from those collections — useful for public content like blog posts or product catalogs.
Writes always require an authenticated key with the appropriate
entries:create or entries:update claim, regardless of x-silo-auth.