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:
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}:
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
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.