Databases

Data lives in documents inside collections inside a database. Documents are JSON. Schema (collections, attributes, indexes) is managed with an API key; document reads and writes go through the permission matrix.

Collections

Create a collection with a permission list and optional per-document security:

Create collection
curl -X POST "https://base.finiteskills.com/v1/databases/main/collections" \
  -H "X-Appwrite-Project: <YOUR_PROJECT_ID>" -H "X-Appwrite-Key: <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"collectionId":"notes","name":"Notes","documentSecurity":true,
       "permissions":["read(\"any\")","create(\"users\")"]}'

With documentSecurity on, each document can carry its own permissions in addition to the collection's.

Attributes (typed schema)

Attributes are optional — undeclared keys are stored as-is — but declaring them enables validation and defaults. Create them with POST .../attributes/{type}:

Attribute types
string   { key, size, required, default }        // + formats: email, url, ip, enum
integer  { key, min, max, required, default }
float    { key, min, max, required, default }
boolean  { key, required, default }
datetime { key, required, default }
email | url | ip | enum(elements)                // string sub-formats
vector   { key, dimensions }                     // for similarity search
relationship { key, relatedCollection, type }    // see Relationships

Add "array": true to store a list of that type. Validation runs on create and update; violations return 400 general_argument_invalid.

Documents

Create / read / update / delete
POST   /databases/main/collections/notes/documents        { documentId, data, permissions }
GET    /databases/main/collections/notes/documents        (list; supports queries[]=…)
GET    /databases/main/collections/notes/documents/{id}
PATCH  /databases/main/collections/notes/documents/{id}   { data }  (partial merge)
DELETE /databases/main/collections/notes/documents/{id}

Every document carries metadata: $id, $collectionId, $databaseId, $createdAt, $updatedAt, $permissions, $sequence.

Indexes

Create key, unique or fulltext indexes with POST .../indexes. Unique indexes are enforced on every write; fulltext indexes power the search operator.