This SDK targets Appwrite server version 2.5.x as shipped on Appwrite Cloud. Self-hosted releases can lag behind Cloud — if you run an older self-hosted build, use a matching older SDK from previous releases when APIs differ.
Appwrite is an open-source backend as a service server that abstracts and simplifies complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way. Use the Python SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools. For full API documentation and tutorials go to https://appwrite.io/docs
Requires Python 3.9 or later. Install the appwrite package from PyPI:
pip install appwriteOr with uv:
uv add appwriteCreate a client with your Appwrite endpoint, project ID and an API key. Find the endpoint and project ID in your project's Settings page, and create an API key with only the scopes you need under API keys in the project sidebar.
from appwrite.client import Client
client = Client()
client.set_endpoint('https://<REGION>.cloud.appwrite.io/v1')
client.set_project('<PROJECT_ID>')
client.set_key('<API_KEY>')API keys grant server-level access to your project. Keep them out of client-side code and version control.
Create a service object with the client and call any of its methods. Every method returns a typed Pydantic model, so response fields are available as attributes.
from appwrite.id import ID
from appwrite.services.users import Users
users = Users(client)
user = users.create(
user_id=ID.unique(),
email='email@example.com',
password='password',
name="Walter O'Brien",
)
print(user.id)
print(user.name)
print(user.to_dict())See the API reference for every service and method.
Use TablesDB to read and write rows. Pass a Pydantic model as model_type to get typed row data back; without it, row.data is a dict.
from typing import Optional
from pydantic import BaseModel
from appwrite.id import ID
from appwrite.query import Query
from appwrite.services.tables_db import TablesDB
class Post(BaseModel):
title: str
published: bool
excerpt: Optional[str] = None
tables_db = TablesDB(client)
row = tables_db.create_row(
database_id='<DATABASE_ID>',
table_id='<TABLE_ID>',
row_id=ID.unique(),
data={'title': 'Hello, world', 'published': True},
model_type=Post,
)
print(row.id)
print(row.data.title)
result = tables_db.list_rows(
database_id='<DATABASE_ID>',
table_id='<TABLE_ID>',
queries=[Query.equal('published', True), Query.limit(25)],
model_type=Post,
)
for row in result.rows:
print(row.data.title)Failed requests raise AppwriteException, which carries message, code, type and response.
from appwrite.exception import AppwriteException
try:
user = users.get(user_id='<USER_ID>')
except AppwriteException as error:
print(error.code, error.type, error.message)Point the client at your own instance instead of Appwrite Cloud. Call set_self_signed() only in development, when the server uses a self-signed TLS certificate.
client.set_endpoint('https://appwrite.example.com/v1')
client.set_self_signed()This library is auto-generated by Appwrite custom SDK Generator. To learn more about how you can help us improve this SDK, please check the contribution guide before sending a pull-request.
Please see the BSD-3-Clause license file for more information.
